James Moger
2011-10-24 2a99c31201b7002e4dd827b226cf2112d17ca1e1
Functional edit setting feature for Manager. Wrote stacktrace viewer.

Trap connect exceptions.
6 files modified
112 ■■■■■ changed files
src/com/gitblit/client/GitblitClient.java 4 ●●●● patch | view | raw | blame | history
src/com/gitblit/client/GitblitManager.java 7 ●●●●● patch | view | raw | blame | history
src/com/gitblit/client/GitblitPanel.java 70 ●●●●● patch | view | raw | blame | history
src/com/gitblit/client/SettingPanel.java 8 ●●●● patch | view | raw | blame | history
src/com/gitblit/client/Utils.java 21 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/GitBlitWebApp.properties 2 ●●●●● patch | view | raw | blame | history
src/com/gitblit/client/GitblitClient.java
@@ -216,5 +216,9 @@
    public boolean deleteUser(UserModel user) throws IOException {
        return RpcUtils.deleteUser(user, url, account, password);
    }
    public boolean updateSettings(Map<String, String> newSettings) throws IOException {
        return RpcUtils.updateSettings(newSettings, url, account, password);
    }
}
src/com/gitblit/client/GitblitManager.java
@@ -29,6 +29,7 @@
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.net.ConnectException;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -272,7 +273,13 @@
                    registrations.put(reg.name, reg);
                    rebuildRecentMenu();
                } catch (Throwable t) {
                    Throwable cause = t.getCause();
                    if (cause instanceof ConnectException) {
                        JOptionPane.showMessageDialog(GitblitManager.this, cause.getMessage(),
                                Translation.get("gb.error"), JOptionPane.ERROR_MESSAGE);
                    } else {
                    Utils.showException(GitblitManager.this, t);
                    }
                } finally {
                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                }
src/com/gitblit/client/GitblitPanel.java
@@ -19,7 +19,9 @@
import java.awt.Color;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -31,8 +33,11 @@
import java.net.URI;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
@@ -395,6 +400,17 @@
            }
        });
        final JButton editSetting = new JButton(Translation.get("gb.edit"));
        editSetting.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int viewRow = settingsTable.getSelectedRow();
                int modelRow = settingsTable.convertRowIndexToModel(viewRow);
                String key = settingsModel.keys.get(modelRow);
                SettingModel setting = settingsModel.settings.get(key);
                editSetting(setting);
            }
        });
        final SettingPanel settingPanel = new SettingPanel();
        settingsModel = new SettingsTableModel();
        defaultSettingsSorter = new TableRowSorter<SettingsTableModel>(settingsModel);
@@ -412,9 +428,8 @@
                if (e.getValueIsAdjusting()) {
                    return;
                }
                boolean selected = settingsTable.getSelectedRow() > -1;
                boolean singleSelection = settingsTable.getSelectedRows().length == 1;
                // TODO enable/disable setting buttons
                editSetting.setEnabled(singleSelection);
                if (singleSelection) {
                    int viewRow = settingsTable.getSelectedRow();
                    int modelRow = settingsTable.convertRowIndexToModel(viewRow);
@@ -449,7 +464,7 @@
        JPanel settingsControls = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 0));
        settingsControls.add(refreshSettings);
        // TODO update setting?
        settingsControls.add(editSetting);
        JPanel settingsPanel = new JPanel(new BorderLayout(margin, margin)) {
@@ -917,4 +932,53 @@
        };
        worker.execute();
    }
    protected void editSetting(final SettingModel settingModel) {
        final JTextField textField = new JTextField(settingModel.currentValue);
        JPanel editPanel = new JPanel(new GridLayout(0, 1));
        editPanel.add(new JLabel("New Value"));
        editPanel.add(textField);
        JPanel settingPanel = new JPanel(new BorderLayout());
        settingPanel.add(new SettingPanel(settingModel), BorderLayout.CENTER);
        settingPanel.add(editPanel, BorderLayout.SOUTH);
        settingPanel.setPreferredSize(new Dimension(800, 200));
        String[] options;
        if (settingModel.currentValue.equals(settingModel.defaultValue)) {
            options = new String[] { Translation.get("gb.cancel"), Translation.get("gb.save") };
        } else {
            options = new String[] { Translation.get("gb.cancel"), Translation.get("gb.setDefault"),
                    Translation.get("gb.save") };
        }
        String defaultOption = options[0];
        int selection = JOptionPane.showOptionDialog(GitblitPanel.this, settingPanel,
                settingModel.name, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
                new ImageIcon(getClass().getResource("/settings_16x16.png")), options,
                defaultOption);
        if (selection <= 0) {
            return;
        }
        if (options[selection].equals(Translation.get("gb.setDefault"))) {
            textField.setText(settingModel.defaultValue);
        }
        final Map<String, String> newSettings = new HashMap<String, String>();
        newSettings.put(settingModel.name, textField.getText().trim());
        GitblitWorker worker = new GitblitWorker(GitblitPanel.this, RpcRequest.EDIT_SETTINGS) {
            @Override
            protected Boolean doRequest() throws IOException {
                boolean success = gitblit.updateSettings(newSettings);
                if (success) {
                    gitblit.refreshSettings();
                }
                return success;
            }
            @Override
            protected void onSuccess() {
                updateSettingsTable();
            }
        };
        worker.execute();
    }
}
src/com/gitblit/client/SettingPanel.java
@@ -50,10 +50,16 @@
        initialize();
    }
    public SettingPanel(SettingModel setting) {
        this();
        setSetting(setting);
    }
    private void initialize() {
        descriptionArea = new JTextArea();
        descriptionArea.setRows(6);
        descriptionArea.setFont(new Font("monospaced", Font.PLAIN, 11));
        descriptionArea.setEditable(false);
        settingName = new JLabel(" ");
        settingName.setFont(settingName.getFont().deriveFont(Font.BOLD));
@@ -86,7 +92,7 @@
        } else {            
            sinceVersion.setText("since " + setting.since);
        }
        settingDefault.setText("default: " + setting.defaultValue);
        settingDefault.setText(Translation.get("gb.default") + ": " + setting.defaultValue);
        List<String> values = new ArrayList<String>();
        if (setting.caseSensitive) {
src/com/gitblit/client/Utils.java
@@ -17,11 +17,17 @@
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.MessageFormat;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
@@ -55,8 +61,19 @@
    }
    public static void showException(Component c, Throwable t) {
        // TODO show the unexpected exception
        t.printStackTrace();
        StringWriter writer = new StringWriter();
        t.printStackTrace(new PrintWriter(writer));
        String stacktrace = writer.toString();
        try {
            writer.close();
        } catch (Throwable x) {
        }
        JTextArea textArea = new JTextArea(stacktrace);
        textArea.setFont(new Font("monospaced", Font.PLAIN, 11));
        JScrollPane jsp = new JScrollPane(textArea);
        jsp.setPreferredSize(new Dimension(800, 400));
        JOptionPane.showMessageDialog(c, jsp, Translation.get("gb.error"),
                JOptionPane.ERROR_MESSAGE);
    }
    public static void packColumns(JTable table, int margin) {
src/com/gitblit/wicket/GitBlitWebApp.properties
@@ -164,3 +164,5 @@
gb.skipSummaryMetrics = skip summary metrics
gb.skipSummaryMetricsDescription = do not calculate metrics on the summary page (reduces page load time)
gb.accessLevel = access level
gb.default = default
gb.setDefault = set default