From fe326255202dcfac8b0991ca9d28e3cf4bcc4fe6 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sun, 23 Oct 2011 12:28:48 -0400 Subject: [PATCH] Per-repository setting to skip summary metrics --- src/com/gitblit/client/GitblitClient.java | 307 ++++++++++++++++++++++++++------------------------ 1 files changed, 161 insertions(+), 146 deletions(-) diff --git a/src/com/gitblit/client/GitblitClient.java b/src/com/gitblit/client/GitblitClient.java index 65a8c36..66675b1 100644 --- a/src/com/gitblit/client/GitblitClient.java +++ b/src/com/gitblit/client/GitblitClient.java @@ -15,186 +15,201 @@ */ package com.gitblit.client; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.EventQueue; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyEvent; import java.io.IOException; +import java.io.Serializable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; -import javax.swing.ImageIcon; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JPasswordField; -import javax.swing.JTabbedPane; -import javax.swing.JTextField; -import javax.swing.KeyStroke; -import javax.swing.UIManager; - -import com.gitblit.Constants; -import com.gitblit.utils.StringUtils; +import com.gitblit.GitBlitException.ForbiddenException; +import com.gitblit.GitBlitException.UnauthorizedException; +import com.gitblit.Keys; +import com.gitblit.models.FederationModel; +import com.gitblit.models.RepositoryModel; +import com.gitblit.models.ServerSettings; +import com.gitblit.models.ServerStatus; +import com.gitblit.models.UserModel; +import com.gitblit.utils.RpcUtils; /** - * Sample RPC application. + * GitblitClient is a object that retrieves data from a Gitblit server, caches + * it for local operations, and allows updating or creating Gitblit objects. * * @author James Moger * */ -public class GitblitClient extends JFrame { +public class GitblitClient implements Serializable { private static final long serialVersionUID = 1L; - private JTabbedPane serverTabs; - private GitblitRegistration localhost = new GitblitRegistration("default", - "https://localhost:8443", "admin", "admin".toCharArray()); - private List<GitblitRegistration> registrations = new ArrayList<GitblitRegistration>(); - private JMenu recentMenu; + public final String url; - private GitblitClient() { - super(); + public final String account; + + private final char[] password; + + private volatile boolean allowManagement; + + private volatile boolean allowAdministration; + + private volatile ServerSettings settings; + + private final List<RepositoryModel> allRepositories; + + private final List<UserModel> allUsers; + + private final List<FederationModel> federationRegistrations; + + private ServerStatus status; + + public GitblitClient(String url, String account, char[] password) { + this.url = url; + this.account = account; + this.password = password; + + this.allUsers = new ArrayList<UserModel>(); + this.allRepositories = new ArrayList<RepositoryModel>(); + this.federationRegistrations = new ArrayList<FederationModel>(); } - private void initialize() { - setContentPane(getCenterPanel()); - setIconImage(new ImageIcon(getClass().getResource("/gitblt-favicon.png")).getImage()); + public void login() throws IOException { + refreshRepositories(); - setTitle("Gitblit RPC Client v" + Constants.VERSION + " (" + Constants.VERSION_DATE + ")"); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setSize(950, 600); + try { + refreshUsers(); + allowManagement = true; + } catch (UnauthorizedException e) { + } catch (ForbiddenException e) { + } catch (IOException e) { + System.err.println(e.getMessage()); + } + + try { + settings = RpcUtils.getSettings(url, account, password); + status = RpcUtils.getStatus(url, account, password); + allowAdministration = true; + } catch (UnauthorizedException e) { + } catch (ForbiddenException e) { + } catch (IOException e) { + System.err.println(e.getMessage()); + } + } - public void setVisible(boolean value) { - if (value) { - if (registrations.size() == 0) { - // default prompt - if (loginPrompt(localhost)) { - pack(); - } - } else if (registrations.size() == 1) { - // single registration prompt - if (loginPrompt(registrations.get(0))) { - pack(); - } + public boolean allowManagement() { + return allowManagement; + } + + public boolean allowAdministration() { + return allowAdministration; + } + + public boolean isOwner(RepositoryModel model) { + return account != null && account.equalsIgnoreCase(model.owner); + } + + public ServerSettings getSettings() { + return settings; + } + + public ServerStatus getStatus() { + return status; + } + + public String getSettingDescription(String key) { + return settings.get(key).description; + } + + public List<RepositoryModel> refreshRepositories() throws IOException { + Map<String, RepositoryModel> repositories = RpcUtils + .getRepositories(url, account, password); + allRepositories.clear(); + allRepositories.addAll(repositories.values()); + Collections.sort(allRepositories); + return allRepositories; + } + + public List<UserModel> refreshUsers() throws IOException { + List<UserModel> users = RpcUtils.getUsers(url, account, password); + allUsers.clear(); + allUsers.addAll(users); + return allUsers; + } + + public List<FederationModel> refreshFederationRegistrations() throws IOException { + List<FederationModel> list = RpcUtils.getFederationRegistrations(url, account, password); + federationRegistrations.clear(); + federationRegistrations.addAll(list); + return federationRegistrations; + } + + public List<UserModel> getUsers() { + return allUsers; + } + + public List<String> getUsernames() { + List<String> usernames = new ArrayList<String>(); + for (UserModel user : this.allUsers) { + usernames.add(user.username); + } + Collections.sort(usernames); + return usernames; + } + + public List<String> getPermittedUsernames(RepositoryModel repository) { + List<String> usernames = new ArrayList<String>(); + for (UserModel user : this.allUsers) { + if (user.repositories.contains(repository.name)) { + usernames.add(user.username); } - super.setVisible(value); - setLocationRelativeTo(null); } + return usernames; } - private JMenuBar setupMenu() { - JMenuBar menuBar = new JMenuBar(); - JMenu serversMenu = new JMenu("Servers"); - menuBar.add(serversMenu); - recentMenu = new JMenu("Recent"); - serversMenu.add(recentMenu); - JMenuItem login = new JMenuItem("Login..."); - login.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, KeyEvent.CTRL_DOWN_MASK, false)); - login.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - loginPrompt(localhost); - } - }); - serversMenu.add(login); - return menuBar; + public List<String> getFederationSets() { + return settings.get(Keys.federation.sets).getStrings(); } - private JPanel newLabelPanel(String text, JTextField field) { - JLabel label = new JLabel(text); - label.setPreferredSize(new Dimension(75, 10)); - JPanel jpanel = new JPanel(new BorderLayout()); - jpanel.add(label, BorderLayout.WEST); - jpanel.add(field, BorderLayout.CENTER); - return jpanel; + public List<RepositoryModel> getRepositories() { + return allRepositories; } - private JPanel getCenterPanel() { - serverTabs = new JTabbedPane(JTabbedPane.TOP); - JMenuBar menubar = setupMenu(); - JPanel panel = new JPanel(new BorderLayout()); - panel.add(menubar, BorderLayout.NORTH); - panel.add(serverTabs, BorderLayout.CENTER); - return panel; - } - - private boolean loginPrompt(GitblitRegistration reg) { - JTextField urlField = new JTextField(reg.url, 30); - JTextField nameField = new JTextField(reg.name); - JTextField accountField = new JTextField(reg.account); - JPasswordField passwordField = new JPasswordField(new String(reg.password)); - - JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5)); - panel.add(newLabelPanel("name", nameField)); - panel.add(newLabelPanel("url", urlField)); - panel.add(newLabelPanel("account", accountField)); - panel.add(newLabelPanel("password", passwordField)); - - int result = JOptionPane.showConfirmDialog(GitblitClient.this, panel, "Login", - JOptionPane.OK_CANCEL_OPTION); - if (result != JOptionPane.OK_OPTION) { - return false; + public boolean createRepository(RepositoryModel repository, List<String> permittedUsers) + throws IOException { + boolean success = true; + success &= RpcUtils.createRepository(repository, url, account, password); + if (permittedUsers.size() > 0) { + // if new repository has named members, set them + success &= RpcUtils.setRepositoryMembers(repository, permittedUsers, url, account, + password); } - String url = urlField.getText(); - if (StringUtils.isEmpty(url)) { - return false; - } - reg = new GitblitRegistration(nameField.getText(), url, accountField.getText(), - passwordField.getPassword()); - boolean success = login(reg); - registrations.add(0, reg); - rebuildRecentMenu(); return success; } - private boolean login(GitblitRegistration reg) { - try { - GitblitPanel panel = new GitblitPanel(reg); - panel.login(); - serverTabs.addTab(reg.name, panel); - int idx = serverTabs.getTabCount() - 1; - serverTabs.setSelectedIndex(idx); - serverTabs.setTabComponentAt(idx, new ClosableTabComponent(reg.name, null, serverTabs, - panel)); - return true; - } catch (IOException e) { - JOptionPane.showMessageDialog(GitblitClient.this, e.getMessage(), "Error", - JOptionPane.ERROR_MESSAGE); - } - return false; + public boolean updateRepository(String name, RepositoryModel repository, + List<String> permittedUsers) throws IOException { + boolean success = true; + success &= RpcUtils.updateRepository(name, repository, url, account, password); + // always set the repository members + success &= RpcUtils + .setRepositoryMembers(repository, permittedUsers, url, account, password); + return success; } - private void rebuildRecentMenu() { - recentMenu.removeAll(); - for (final GitblitRegistration reg : registrations) { - JMenuItem item = new JMenuItem(reg.name); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - login(reg); - } - }); - recentMenu.add(item); - } + public boolean deleteRepository(RepositoryModel repository) throws IOException { + return RpcUtils.deleteRepository(repository, url, account, password); } - public static void main(String[] args) { - EventQueue.invokeLater(new Runnable() { - public void run() { - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (Exception e) { - } - GitblitClient frame = new GitblitClient(); - frame.initialize(); - frame.setVisible(true); - } - }); + public boolean createUser(UserModel user) throws IOException { + return RpcUtils.createUser(user, url, account, password); + } + + public boolean updateUser(String name, UserModel user) throws IOException { + return RpcUtils.updateUser(name, user, url, account, password); + } + + public boolean deleteUser(UserModel user) throws IOException { + return RpcUtils.deleteUser(user, url, account, password); } } -- Gitblit v1.9.1