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 | 250 ++++++++++++++++++++++++++++++++++++------------- 1 files changed, 181 insertions(+), 69 deletions(-) diff --git a/src/com/gitblit/client/GitblitClient.java b/src/com/gitblit/client/GitblitClient.java index d10cede..66675b1 100644 --- a/src/com/gitblit/client/GitblitClient.java +++ b/src/com/gitblit/client/GitblitClient.java @@ -15,89 +15,201 @@ */ package com.gitblit.client; -import java.awt.BorderLayout; -import java.awt.EventQueue; -import java.awt.Menu; -import java.awt.MenuBar; -import java.awt.MenuItem; -import java.awt.MenuShortcut; -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.JFrame; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; +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; -import com.gitblit.Constants; -import com.gitblit.utils.StringUtils; - -public class GitblitClient extends JFrame { +/** + * 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 implements Serializable { private static final long serialVersionUID = 1L; - private JTabbedPane serverTabs; - private GitblitClient() { - super(); + public final String url; + + 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() { - setupMenu(); - setContentPane(getCenterPanel()); + public void login() throws IOException { + refreshRepositories(); - setTitle("Gitblit Client v" + Constants.VERSION + " (" + Constants.VERSION_DATE + ")"); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setSize(800, 600); - setLocationRelativeTo(null); - } - - private void setupMenu() { - MenuBar menuBar = new MenuBar(); - setMenuBar(menuBar); - Menu serversMenu = new Menu("Servers"); - menuBar.add(serversMenu); - MenuItem login = new MenuItem("Login...", new MenuShortcut(KeyEvent.VK_L, false)); - login.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - String url = JOptionPane.showInputDialog(GitblitClient.this, - "Please enter Gitblit server URL", "https://localhost:8443"); - if (StringUtils.isEmpty(url)) { - return; - } - login(url, "admin", "admin".toCharArray()); - } - }); - serversMenu.add(login); - } - - private JPanel getCenterPanel() { - serverTabs = new JTabbedPane(JTabbedPane.TOP); - JPanel panel = new JPanel(new BorderLayout()); - panel.add(serverTabs, BorderLayout.CENTER); - return panel; - } - - private void login(String url, String account, char[] password) { try { - GitblitPanel panel = new GitblitPanel(url, account, password); - panel.login(); - serverTabs.addTab(url.substring(url.indexOf("//") + 2), panel); - serverTabs.setSelectedIndex(serverTabs.getTabCount() - 1); + refreshUsers(); + allowManagement = true; + } catch (UnauthorizedException e) { + } catch (ForbiddenException e) { } catch (IOException e) { - JOptionPane.showMessageDialog(GitblitClient.this, e.getMessage(), "Error", - JOptionPane.ERROR_MESSAGE); + 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 static void main(String[] args) { - EventQueue.invokeLater(new Runnable() { - public void run() { - GitblitClient frame = new GitblitClient(); - frame.initialize(); - frame.setVisible(true); + 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); } - }); + } + return usernames; + } + + public List<String> getFederationSets() { + return settings.get(Keys.federation.sets).getStrings(); + } + + public List<RepositoryModel> getRepositories() { + return allRepositories; + } + + 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); + } + return success; + } + + 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; + } + + public boolean deleteRepository(RepositoryModel repository) throws IOException { + return RpcUtils.deleteRepository(repository, url, account, password); + } + + 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