From c75304637f5535e634e57d4ed933c0fdb594d890 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 28 Oct 2011 08:08:00 -0400 Subject: [PATCH] Added a list branches rpc --- src/com/gitblit/client/GitblitPanel.java | 197 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 178 insertions(+), 19 deletions(-) diff --git a/src/com/gitblit/client/GitblitPanel.java b/src/com/gitblit/client/GitblitPanel.java index 5737c15..23aadb8 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; @@ -107,6 +112,14 @@ private JButton editRepository; + private HeaderPanel repositoriesHeader; + + private HeaderPanel usersHeader; + + private HeaderPanel settingsHeader; + + private StatusPanel statusPanel; + public GitblitPanel(GitblitRegistration reg) { this(reg.url, reg.account, reg.password); } @@ -118,6 +131,7 @@ tabs.addTab(Translation.get("gb.repositories"), createRepositoriesPanel()); tabs.addTab(Translation.get("gb.users"), createUsersPanel()); tabs.addTab(Translation.get("gb.settings"), createSettingsPanel()); + tabs.addTab(Translation.get("gb.status"), createStatusPanel()); setLayout(new BorderLayout()); add(tabs, BorderLayout.CENTER); @@ -185,7 +199,8 @@ repositoriesTable = Utils.newTable(repositoriesModel); repositoriesTable.setRowHeight(nameRenderer.getFont().getSize() + 8); repositoriesTable.setRowSorter(defaultRepositoriesSorter); - repositoriesTable.getRowSorter().toggleSortOrder(RepositoriesTableModel.Columns.Name.ordinal()); + repositoriesTable.getRowSorter().toggleSortOrder( + RepositoriesTableModel.Columns.Name.ordinal()); setRepositoryRenderer(RepositoriesTableModel.Columns.Name, nameRenderer, -1); setRepositoryRenderer(RepositoriesTableModel.Columns.Indicators, typeRenderer, 100); @@ -208,7 +223,7 @@ RepositoryModel model = ((RepositoriesTableModel) repositoriesTable.getModel()).list .get(modelRow); editRepository.setEnabled(singleSelection - && (gitblit.allowAdmin() || gitblit.isOwner(model))); + && (gitblit.allowManagement() || gitblit.isOwner(model))); } else { editRepository.setEnabled(false); } @@ -217,7 +232,7 @@ repositoriesTable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2 && gitblit.allowAdmin()) { + if (e.getClickCount() == 2 && gitblit.allowManagement()) { editRepository(getSelectedRepositories().get(0)); } } @@ -258,16 +273,17 @@ 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); return repositoriesPanel; } - private void setRepositoryRenderer(RepositoriesTableModel.Columns col, TableCellRenderer renderer, - int maxWidth) { + private void setRepositoryRenderer(RepositoriesTableModel.Columns col, + TableCellRenderer renderer, int maxWidth) { String name = repositoriesTable.getColumnName(col.ordinal()); repositoriesTable.getColumn(name).setCellRenderer(renderer); if (maxWidth > 0) { @@ -371,8 +387,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); @@ -380,6 +396,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); @@ -397,9 +431,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); @@ -433,7 +466,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)) { @@ -443,23 +477,40 @@ 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); return settingsPanel; } + private JPanel createStatusPanel() { + JButton refreshStatus = new JButton(Translation.get("gb.refresh")); + refreshStatus.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + refreshStatus(); + } + }); + + JPanel controls = new JPanel(); + controls.add(refreshStatus); + + JPanel panel = new JPanel(new BorderLayout()); + statusPanel = new StatusPanel(); + panel.add(statusPanel, BorderLayout.CENTER); + panel.add(controls, BorderLayout.SOUTH); + return panel; + } + public void login() throws IOException { gitblit.login(); updateRepositoriesTable(); - Utils.packColumns(repositoriesTable, 2); + Utils.packColumns(repositoriesTable, 5); - if (gitblit.allowAdmin()) { + if (gitblit.allowManagement()) { updateUsersTable(); - updateSettingsTable(); } else { // user does not have administrator privileges // hide admin repository buttons @@ -468,8 +519,25 @@ delRepository.setVisible(false); while (tabs.getTabCount() > 1) { - // remove admin tabs + // remove all management/administration tabs tabs.removeTabAt(1); + } + } + + if (gitblit.allowAdministration()) { + updateSettingsTable(); + updateStatusPanel(); + Utils.packColumns(settingsTable, 5); + } else { + // remove the settings tab + String[] titles = { Translation.get("gb.settings"), Translation.get("gb.status") }; + for (String title : titles) { + for (int i = 0; i < tabs.getTabCount(); i++) { + if (tabs.getTitleAt(i).equals(title)) { + tabs.removeTabAt(i); + break; + } + } } } } @@ -478,17 +546,25 @@ 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 updateStatusPanel() { + statusPanel.setStatus(gitblit.getStatus()); } private void filterRepositories(final String fragment) { @@ -547,7 +623,8 @@ return false; } }; - TableRowSorter<SettingsTableModel> sorter = new TableRowSorter<SettingsTableModel>(settingsModel); + TableRowSorter<SettingsTableModel> sorter = new TableRowSorter<SettingsTableModel>( + settingsModel); sorter.setRowFilter(containsFilter); settingsTable.setRowSorter(sorter); } @@ -608,6 +685,7 @@ dialog.setLocationRelativeTo(GitblitPanel.this); dialog.setUsers(null, gitblit.getUsernames(), null); dialog.setRepositories(gitblit.getRepositories()); + dialog.setFederationSets(gitblit.getFederationSets(), null); dialog.setVisible(true); final RepositoryModel newRepository = dialog.getRepository(); final List<String> permittedUsers = dialog.getPermittedUsers(); @@ -868,4 +946,85 @@ 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 refreshStatus() { + GitblitWorker worker = new GitblitWorker(GitblitPanel.this, RpcRequest.LIST_STATUS) { + @Override + protected Boolean doRequest() throws IOException { + gitblit.refreshStatus(); + return true; + } + + @Override + protected void onSuccess() { + updateStatusPanel(); + } + }; + 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