From 841651baee2181c1543555d1eabcd0e4fee48827 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 05 Oct 2011 22:22:43 -0400 Subject: [PATCH] New setting to disable RPC administration. Advancing the RPC client. --- src/com/gitblit/client/GitblitClient.java | 141 +++++++++++++++++++++++++++++++++++++++------- 1 files changed, 118 insertions(+), 23 deletions(-) diff --git a/src/com/gitblit/client/GitblitClient.java b/src/com/gitblit/client/GitblitClient.java index d10cede..51d8e7e 100644 --- a/src/com/gitblit/client/GitblitClient.java +++ b/src/com/gitblit/client/GitblitClient.java @@ -16,84 +16,179 @@ package com.gitblit.client; import java.awt.BorderLayout; +import java.awt.Dimension; import java.awt.EventQueue; -import java.awt.Menu; -import java.awt.MenuBar; -import java.awt.MenuItem; -import java.awt.MenuShortcut; +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.util.ArrayList; +import java.util.List; +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; +/** + * Sample RPC application. + * + * @author James Moger + * + */ public class GitblitClient extends JFrame { 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; private GitblitClient() { super(); } private void initialize() { - setupMenu(); setContentPane(getCenterPanel()); + setIconImage(new ImageIcon(getClass().getResource("/gitblt-favicon.png")).getImage()); - setTitle("Gitblit Client v" + Constants.VERSION + " (" + Constants.VERSION_DATE + ")"); + setTitle("Gitblit RPC Client v" + Constants.VERSION + " (" + Constants.VERSION_DATE + ")"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setSize(800, 600); - setLocationRelativeTo(null); + setSize(950, 600); } - private void setupMenu() { - MenuBar menuBar = new MenuBar(); - setMenuBar(menuBar); - Menu serversMenu = new Menu("Servers"); + 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(); + } + } + super.setVisible(value); + setLocationRelativeTo(null); + } + } + + private JMenuBar setupMenu() { + JMenuBar menuBar = new JMenuBar(); + JMenu serversMenu = new JMenu("Servers"); menuBar.add(serversMenu); - MenuItem login = new MenuItem("Login...", new MenuShortcut(KeyEvent.VK_L, false)); + 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) { - String url = JOptionPane.showInputDialog(GitblitClient.this, - "Please enter Gitblit server URL", "https://localhost:8443"); - if (StringUtils.isEmpty(url)) { - return; - } - login(url, "admin", "admin".toCharArray()); + loginPrompt(localhost); } }); serversMenu.add(login); + return menuBar; + } + + 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; } 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 void login(String url, String account, char[] password) { + 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; + } + String url = urlField.getText(); + if (StringUtils.isEmpty(url)) { + return false; + } + reg = new GitblitRegistration(nameField.getText(), url, accountField.getText(), + passwordField.getPassword()); + login(reg); + registrations.add(0, reg); + rebuildRecentMenu(); + return true; + } + + private void login(GitblitRegistration reg) { try { - GitblitPanel panel = new GitblitPanel(url, account, password); + GitblitPanel panel = new GitblitPanel(reg); panel.login(); - serverTabs.addTab(url.substring(url.indexOf("//") + 2), panel); - serverTabs.setSelectedIndex(serverTabs.getTabCount() - 1); + serverTabs.addTab(reg.name, panel); + int idx = serverTabs.getTabCount() - 1; + serverTabs.setSelectedIndex(idx); + serverTabs.setTabComponentAt(idx, new ClosableTabComponent(reg.name, null, serverTabs, + panel)); } catch (IOException e) { JOptionPane.showMessageDialog(GitblitClient.this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } + 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 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); -- Gitblit v1.9.1