blob: df258530bfd145a25092e5c4b2d8a3ed61ddc5a9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 clienteditor;
/**
* Form that allows editing of information about one client.
*
* @author Jiri Vagner, Jan Stola
*/
public class ClientEditor extends javax.swing.JPanel {
private Client client = Client.createTestClient();
public ClientEditor() {
initComponents();
bindingGroup.addBindingListener(new LoggingBindingListener(validationMsgLabel));
}
/**
* Returns <code>Client</code> being edited.
*
* @return <code>Client</code> being edited.
*/
public Client getClient() {
return client;
}
/**
* Sets client to edit.
*
* @param client client to edit.
*/
public void setClient(Client client) {
Client oldClient = this.client;
this.client = client;
firePropertyChange("client", oldClient, client);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
sexButtonGroup = new javax.swing.ButtonGroup();
ageConverter = new clienteditor.AgeConverter();
ageValidator = new clienteditor.AgeValidator();
maritalStatusConverter = new clienteditor.MaritalStatusConverter();
requiredStringValidator = new clienteditor.RequiredStringValidator();
emailValidator = new clienteditor.EmailValidator();
clientInfoPane = new javax.swing.JTabbedPane();
personalPanel = new javax.swing.JPanel();
firstNameLabel = new javax.swing.JLabel();
firstNameTextField = new javax.swing.JTextField();
surnameLabel = new javax.swing.JLabel();
surnameTextField = new javax.swing.JTextField();
maritalComboBox = new javax.swing.JComboBox();
sexLabel = new javax.swing.JLabel();
maritalStatusLabel = new javax.swing.JLabel();
maleRadioButton = new javax.swing.JRadioButton();
femaleRadioButton = new javax.swing.JRadioButton();
ageLabel = new javax.swing.JLabel();
ageTextField = new javax.swing.JTextField();
contactPanel = new javax.swing.JPanel();
nicknameLabel = new javax.swing.JLabel();
emailLabel = new javax.swing.JLabel();
webLabel = new javax.swing.JLabel();
imLabel = new javax.swing.JLabel();
nicknameTextField = new javax.swing.JTextField();
emailTextField = new javax.swing.JTextField();
webTextField = new javax.swing.JTextField();
imTextField = new javax.swing.JTextField();
usernameLabel = new javax.swing.JLabel();
clientInfoLabel = new javax.swing.JLabel();
validationMsgLabel = new javax.swing.JLabel();
personalPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
firstNameLabel.setText("First Name:"); // NOI18N
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.firstName}"), firstNameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "firstName"); // NOI18N
bindingGroup.addBinding(binding);
surnameLabel.setText("Surname:"); // NOI18N
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.surname}"), surnameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "surname"); // NOI18N
binding.setValidator(requiredStringValidator);
bindingGroup.addBinding(binding);
maritalComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Single", "Married", "Separated", "Divorced" }));
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.maritalStatus}"), maritalComboBox, org.jdesktop.beansbinding.BeanProperty.create("selectedItem"), "maritalStatus"); // NOI18N
binding.setConverter(maritalStatusConverter);
bindingGroup.addBinding(binding);
sexLabel.setText("Sex:"); // NOI18N
maritalStatusLabel.setText("Marital status:"); // NOI18N
sexButtonGroup.add(maleRadioButton);
maleRadioButton.setText("male"); // NOI18N
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.sex}"), maleRadioButton, org.jdesktop.beansbinding.BeanProperty.create("selected"), "sex"); // NOI18N
bindingGroup.addBinding(binding);
sexButtonGroup.add(femaleRadioButton);
femaleRadioButton.setText("female"); // NOI18N
ageLabel.setText("Age:"); // NOI18N
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.age}"), ageTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "age");
binding.setConverter(ageConverter);
binding.setValidator(ageValidator);
bindingGroup.addBinding(binding);
javax.swing.GroupLayout personalPanelLayout = new javax.swing.GroupLayout(personalPanel);
personalPanel.setLayout(personalPanelLayout);
personalPanelLayout.setHorizontalGroup(
personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(personalPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(sexLabel)
.addGroup(personalPanelLayout.createSequentialGroup()
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(firstNameLabel)
.addComponent(surnameLabel)
.addComponent(maritalStatusLabel)
.addComponent(ageLabel))
.addGap(7, 7, 7)
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(personalPanelLayout.createSequentialGroup()
.addComponent(maleRadioButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(femaleRadioButton))
.addComponent(firstNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 265, Short.MAX_VALUE)
.addComponent(surnameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 265, Short.MAX_VALUE)
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(ageTextField, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(maritalComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
.addContainerGap())
);
personalPanelLayout.setVerticalGroup(
personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(personalPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(firstNameLabel)
.addComponent(firstNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(surnameLabel)
.addComponent(surnameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(maritalStatusLabel)
.addComponent(maritalComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(ageLabel)
.addComponent(ageTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(sexLabel)
.addComponent(femaleRadioButton)
.addComponent(maleRadioButton))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
clientInfoPane.addTab("Personal", personalPanel);
contactPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
nicknameLabel.setText("Nickname:"); // NOI18N
emailLabel.setText("E-mail:"); // NOI18N
webLabel.setText("Web:"); // NOI18N
imLabel.setText("IM:"); // NOI18N
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.nickname}"), nicknameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "nickname"); // NOI18N
bindingGroup.addBinding(binding);
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.email}"), emailTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "email");
binding.setValidator(emailValidator);
bindingGroup.addBinding(binding);
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.web}"), webTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "web");
bindingGroup.addBinding(binding);
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.im}"), imTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "im");
bindingGroup.addBinding(binding);
javax.swing.GroupLayout contactPanelLayout = new javax.swing.GroupLayout(contactPanel);
contactPanel.setLayout(contactPanelLayout);
contactPanelLayout.setHorizontalGroup(
contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(contactPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(nicknameLabel)
.addComponent(emailLabel)
.addComponent(webLabel)
.addComponent(imLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(nicknameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
.addComponent(emailTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
.addComponent(webTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
.addComponent(imTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE))
.addContainerGap())
);
contactPanelLayout.setVerticalGroup(
contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(contactPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(nicknameLabel)
.addComponent(nicknameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(emailLabel)
.addComponent(emailTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(webLabel)
.addComponent(webTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(imLabel)
.addComponent(imTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(34, Short.MAX_VALUE))
);
clientInfoPane.addTab("Contact", contactPanel);
usernameLabel.setFont(new java.awt.Font("Dialog", 1, 24)); // NOI18N
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.firstName} ${client.surname}"), usernameLabel, org.jdesktop.beansbinding.BeanProperty.create("text"), "displayNameTitle");
bindingGroup.addBinding(binding);
clientInfoLabel.setFont(new java.awt.Font("Dialog", 0, 24)); // NOI18N
clientInfoLabel.setText("Client Info:"); // NOI18N
validationMsgLabel.setFont(new java.awt.Font("Dialog", 1, 11)); // NOI18N
validationMsgLabel.setForeground(new java.awt.Color(255, 0, 0));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(clientInfoPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(clientInfoLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(usernameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 248, Short.MAX_VALUE))
.addComponent(validationMsgLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(clientInfoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(usernameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(clientInfoPane)
.addGap(5, 5, 5)
.addComponent(validationMsgLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
bindingGroup.bind();
}// </editor-fold>//GEN-END:initComponents
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
javax.swing.UIManager.LookAndFeelInfo[] installedLookAndFeels=javax.swing.UIManager.getInstalledLookAndFeels();
for (int idx=0; idx<installedLookAndFeels.length; idx++)
if ("Nimbus".equals(installedLookAndFeels[idx].getName())) {
javax.swing.UIManager.setLookAndFeel(installedLookAndFeels[idx].getClassName());
break;
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ClientEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ClientEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ClientEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ClientEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
javax.swing.JFrame frame = new javax.swing.JFrame("Client Editor");
frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(new ClientEditor());
frame.pack();
frame.setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private clienteditor.AgeConverter ageConverter;
private javax.swing.JLabel ageLabel;
private javax.swing.JTextField ageTextField;
private clienteditor.AgeValidator ageValidator;
private javax.swing.JLabel clientInfoLabel;
private javax.swing.JTabbedPane clientInfoPane;
private javax.swing.JPanel contactPanel;
private javax.swing.JLabel emailLabel;
private javax.swing.JTextField emailTextField;
private clienteditor.EmailValidator emailValidator;
private javax.swing.JRadioButton femaleRadioButton;
private javax.swing.JLabel firstNameLabel;
private javax.swing.JTextField firstNameTextField;
private javax.swing.JLabel imLabel;
private javax.swing.JTextField imTextField;
private javax.swing.JRadioButton maleRadioButton;
private javax.swing.JComboBox maritalComboBox;
private clienteditor.MaritalStatusConverter maritalStatusConverter;
private javax.swing.JLabel maritalStatusLabel;
private javax.swing.JLabel nicknameLabel;
private javax.swing.JTextField nicknameTextField;
private javax.swing.JPanel personalPanel;
private clienteditor.RequiredStringValidator requiredStringValidator;
private javax.swing.ButtonGroup sexButtonGroup;
private javax.swing.JLabel sexLabel;
private javax.swing.JLabel surnameLabel;
private javax.swing.JTextField surnameTextField;
private javax.swing.JLabel usernameLabel;
private javax.swing.JLabel validationMsgLabel;
private javax.swing.JLabel webLabel;
private javax.swing.JTextField webTextField;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration//GEN-END:variables
}