From 2a99c31201b7002e4dd827b226cf2112d17ca1e1 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 24 Oct 2011 22:45:37 -0400 Subject: [PATCH] Functional edit setting feature for Manager. Wrote stacktrace viewer. --- src/com/gitblit/client/GitblitPanel.java | 121 ++++++++++++++++++++++++++++++++++++--- 1 files changed, 110 insertions(+), 11 deletions(-) diff --git a/src/com/gitblit/client/GitblitPanel.java b/src/com/gitblit/client/GitblitPanel.java index 31de44e..6772c3d 100644 --- a/src/com/gitblit/client/GitblitPanel.java +++ b/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; @@ -106,6 +111,12 @@ private TableRowSorter<SettingsTableModel> defaultSettingsSorter; private JButton editRepository; + + private HeaderPanel repositoriesHeader; + + private HeaderPanel usersHeader; + + private HeaderPanel settingsHeader; public GitblitPanel(GitblitRegistration reg) { this(reg.url, reg.account, reg.password); @@ -259,8 +270,9 @@ return insets; } }; - repositoriesPanel.add(new HeaderPanel(Translation.get("gb.repositories"), - "gitweb-favicon.png"), BorderLayout.NORTH); + repositoriesHeader = new HeaderPanel(Translation.get("gb.repositories"), + "gitweb-favicon.png"); + repositoriesPanel.add(repositoriesHeader, BorderLayout.NORTH); repositoriesPanel.add(repositoryTablePanel, BorderLayout.CENTER); repositoriesPanel.add(repositoryControls, BorderLayout.SOUTH); @@ -372,8 +384,8 @@ return insets; } }; - usersPanel.add(new HeaderPanel(Translation.get("gb.users"), "user_16x16.png"), - BorderLayout.NORTH); + usersHeader = new HeaderPanel(Translation.get("gb.users"), "user_16x16.png"); + usersPanel.add(usersHeader, BorderLayout.NORTH); usersPanel.add(userTablePanel, BorderLayout.CENTER); usersPanel.add(userControls, BorderLayout.SOUTH); @@ -381,6 +393,24 @@ } private JPanel createSettingsPanel() { + JButton refreshSettings = new JButton(Translation.get("gb.refresh")); + refreshSettings.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + refreshSettings(); + } + }); + + 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); @@ -398,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); @@ -434,7 +463,8 @@ settingsTablePanel.add(settingPanel, BorderLayout.SOUTH); JPanel settingsControls = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 0)); - // TODO update setting? + settingsControls.add(refreshSettings); + settingsControls.add(editSetting); JPanel settingsPanel = new JPanel(new BorderLayout(margin, margin)) { @@ -444,8 +474,8 @@ return insets; } }; - settingsPanel.add(new HeaderPanel(Translation.get("gb.settings"), "settings_16x16.png"), - BorderLayout.NORTH); + settingsHeader = new HeaderPanel(Translation.get("gb.settings"), "settings_16x16.png"); + settingsPanel.add(settingsHeader, BorderLayout.NORTH); settingsPanel.add(settingsTablePanel, BorderLayout.CENTER); settingsPanel.add(settingsControls, BorderLayout.SOUTH); @@ -478,11 +508,11 @@ } else { // remove the settings tab String settingsTitle = Translation.get("gb.settings"); - for (int i= 0; i < tabs.getTabCount(); i++) { + for (int i = 0; i < tabs.getTabCount(); i++) { if (tabs.getTitleAt(i).equals(settingsTitle)) { tabs.removeTabAt(i); break; - } + } } } } @@ -491,17 +521,21 @@ repositoriesModel.list.clear(); repositoriesModel.list.addAll(gitblit.getRepositories()); repositoriesModel.fireTableDataChanged(); + repositoriesHeader.setText(Translation.get("gb.repositories") + " (" + + gitblit.getRepositories().size() + ")"); } private void updateUsersTable() { usersModel.list.clear(); usersModel.list.addAll(gitblit.getUsers()); usersModel.fireTableDataChanged(); + usersHeader.setText(Translation.get("gb.users") + " (" + gitblit.getUsers().size() + ")"); } private void updateSettingsTable() { settingsModel.setSettings(gitblit.getSettings()); settingsModel.fireTableDataChanged(); + settingsHeader.setText(Translation.get("gb.settings")); } private void filterRepositories(final String fragment) { @@ -882,4 +916,69 @@ worker.execute(); } } + + protected void refreshSettings() { + GitblitWorker worker = new GitblitWorker(GitblitPanel.this, RpcRequest.LIST_SETTINGS) { + @Override + protected Boolean doRequest() throws IOException { + gitblit.refreshSettings(); + return true; + } + + @Override + protected void onSuccess() { + updateSettingsTable(); + } + }; + 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(); + } } \ No newline at end of file -- Gitblit v1.9.1