/* | |
* 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; | |
} | |
} |