| /* | |
| * Copyright 2011 gitblit.com. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package com.gitblit.client; | |
| import java.awt.BorderLayout; | |
| import java.awt.Dimension; | |
| import java.awt.Font; | |
| import java.awt.GridLayout; | |
| import java.awt.Insets; | |
| import java.awt.Window; | |
| import java.awt.event.ActionEvent; | |
| import java.awt.event.ActionListener; | |
| import java.awt.event.KeyEvent; | |
| import javax.swing.ImageIcon; | |
| import javax.swing.JButton; | |
| import javax.swing.JCheckBox; | |
| import javax.swing.JComponent; | |
| import javax.swing.JDialog; | |
| import javax.swing.JLabel; | |
| import javax.swing.JOptionPane; | |
| import javax.swing.JPanel; | |
| import javax.swing.JPasswordField; | |
| import javax.swing.JRootPane; | |
| import javax.swing.JTextField; | |
| import javax.swing.KeyStroke; | |
| import com.gitblit.utils.StringUtils; | |
| /** | |
| * Dialog to create or edit a Gitblit registration. | |
| * | |
| * @author James Moger | |
| * | |
| */ | |
| public class EditRegistrationDialog extends JDialog { | |
| private static final long serialVersionUID = 1L; | |
| private JTextField urlField; | |
| private JTextField nameField; | |
| private JTextField accountField; | |
| private JPasswordField passwordField; | |
| private JCheckBox savePassword; | |
| private boolean canceled; | |
| private HeaderPanel headerPanel; | |
| public EditRegistrationDialog(Window owner) { | |
| this(owner, null, false); | |
| } | |
| public EditRegistrationDialog(Window owner, GitblitRegistration reg, boolean isLogin) { | |
| super(owner); | |
| initialize(reg, isLogin); | |
| } | |
| @Override | |
| protected JRootPane createRootPane() { | |
| KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); | |
| JRootPane rootPane = new JRootPane(); | |
| rootPane.registerKeyboardAction(new ActionListener() { | |
| @Override | |
| public void actionPerformed(ActionEvent actionEvent) { | |
| setVisible(false); | |
| } | |
| }, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW); | |
| return rootPane; | |
| } | |
| private void initialize(GitblitRegistration reg, boolean isLogin) { | |
| setIconImage(new ImageIcon(getClass().getResource("/gitblt-favicon.png")).getImage()); | |
| canceled = true; | |
| urlField = new JTextField(reg == null ? "" : reg.url, 30); | |
| nameField = new JTextField(reg == null ? "" : reg.name); | |
| accountField = new JTextField(reg == null ? "" : reg.account); | |
| passwordField = new JPasswordField(reg == null ? "" : new String(reg.password)); | |
| savePassword = new JCheckBox("save password (passwords are NOT encrypted!)"); | |
| savePassword.setSelected(reg == null ? false | |
| : (reg.password != null && reg.password.length > 0)); | |
| JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5)); | |
| panel.add(newLabelPanel(Translation.get("gb.name"), nameField)); | |
| panel.add(newLabelPanel(Translation.get("gb.url"), urlField)); | |
| panel.add(newLabelPanel(Translation.get("gb.username"), accountField)); | |
| panel.add(newLabelPanel(Translation.get("gb.password"), passwordField)); | |
| panel.add(newLabelPanel("", savePassword)); | |
| JButton cancel = new JButton(Translation.get("gb.cancel")); | |
| cancel.addActionListener(new ActionListener() { | |
| @Override | |
| public void actionPerformed(ActionEvent event) { | |
| setVisible(false); | |
| } | |
| }); | |
| final JButton save = new JButton(Translation.get(isLogin ? "gb.login" : "gb.save")); | |
| save.addActionListener(new ActionListener() { | |
| @Override | |
| public void actionPerformed(ActionEvent event) { | |
| if (validateFields()) { | |
| canceled = false; | |
| setVisible(false); | |
| } | |
| } | |
| }); | |
| // on enter in password field, save or login | |
| passwordField.addActionListener(new ActionListener() { | |
| @Override | |
| public void actionPerformed(ActionEvent event) { | |
| save.doClick(); | |
| } | |
| }); | |
| JPanel controls = new JPanel(); | |
| controls.add(cancel); | |
| controls.add(save); | |
| if (reg == null) { | |
| this.setTitle(Translation.get("gb.create")); | |
| headerPanel = new HeaderPanel(Translation.get("gb.create"), null); | |
| } else { | |
| this.setTitle(Translation.get(isLogin ? "gb.login" : "gb.edit")); | |
| headerPanel = new HeaderPanel(reg.name, null); | |
| } | |
| final Insets insets = new Insets(5, 5, 5, 5); | |
| JPanel centerPanel = new JPanel(new BorderLayout(5, 5)) { | |
| private static final long serialVersionUID = 1L; | |
| @Override | |
| public Insets getInsets() { | |
| return insets; | |
| } | |
| }; | |
| centerPanel.add(headerPanel, BorderLayout.NORTH); | |
| centerPanel.add(panel, BorderLayout.CENTER); | |
| centerPanel.add(controls, BorderLayout.SOUTH); | |
| getContentPane().setLayout(new BorderLayout()); | |
| getContentPane().add(centerPanel, BorderLayout.CENTER); | |
| pack(); | |
| setModal(true); | |
| if (isLogin) { | |
| passwordField.requestFocus(); | |
| } | |
| } | |
| private JPanel newLabelPanel(String text, JComponent field) { | |
| JLabel label = new JLabel(text); | |
| label.setFont(label.getFont().deriveFont(Font.BOLD)); | |
| 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 boolean validateFields() { | |
| String name = nameField.getText(); | |
| if (StringUtils.isEmpty(name)) { | |
| error("Please enter a name for this registration!"); | |
| return false; | |
| } | |
| String url = urlField.getText(); | |
| if (StringUtils.isEmpty(url)) { | |
| error("Please enter a url for this registration!"); | |
| return false; | |
| } | |
| return true; | |
| } | |
| private void error(String message) { | |
| JOptionPane.showMessageDialog(EditRegistrationDialog.this, message, | |
| Translation.get("gb.error"), JOptionPane.ERROR_MESSAGE); | |
| } | |
| public GitblitRegistration getRegistration() { | |
| if (canceled) { | |
| return null; | |
| } | |
| GitblitRegistration reg = new GitblitRegistration(nameField.getText(), urlField.getText(), | |
| accountField.getText(), passwordField.getPassword()); | |
| reg.savePassword = savePassword.isSelected(); | |
| return reg; | |
| } | |
| } |