package devopsdistilled.operp.client.commons.panes; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import net.miginfocom.swing.MigLayout; import devopsdistilled.operp.client.abstracts.EntityOperation; import devopsdistilled.operp.client.abstracts.EntityPane; import devopsdistilled.operp.client.commons.controllers.ContactInfoController; import devopsdistilled.operp.client.commons.panes.controllers.ContactInfoPaneController; import devopsdistilled.operp.client.commons.panes.models.observers.ContactInfoPaneModelObserver; import devopsdistilled.operp.server.data.entity.commons.ContactInfo; import devopsdistilled.operp.server.data.entity.commons.PhoneType; public class ContactInfoPane extends EntityPane<ContactInfo, ContactInfoController, ContactInfoPaneController> implements ContactInfoPaneModelObserver { private ContactInfoPaneController controller; private final JPanel pane; private final JTextField emailField; private final JTextField workNumField; private final JTextField mobileNumField; private final JTextField homeNumField; private JPanel addressPanel; public ContactInfoPane() { pane = new JPanel(); pane.setLayout(new MigLayout("", "[][grow]", "[][][][][][][][][]")); JLabel lblAddress = new JLabel("Address"); pane.add(lblAddress, "flowx,cell 0 0"); addressPanel = new JPanel(); pane.add(addressPanel, "cell 0 1,grow,span"); JLabel lblEmail = new JLabel("Email"); pane.add(lblEmail, "cell 0 3"); emailField = new JTextField(); emailField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { String email = emailField.getText().trim(); if (!email.equalsIgnoreCase("")) { try { InternetAddress emailAddr = new InternetAddress(email); emailAddr.validate(); controller.getModel().getEntity().setEmail(email); } catch (AddressException e1) { JOptionPane.showMessageDialog(getPane(), "Not a valid email address"); e.getComponent().requestFocus(); } } } }); pane.add(emailField, "cell 1 3,growx"); emailField.setColumns(10); JLabel lblPhone = new JLabel("Phone"); pane.add(lblPhone, "cell 0 5"); JLabel lblWork = new JLabel("Work"); pane.add(lblWork, "cell 0 6,alignx trailing"); workNumField = new JTextField(); workNumField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { if (!workNumField.getText().trim().equalsIgnoreCase("")) controller.getModel().getEntity().getPhoneNumbers() .put(PhoneType.Work, workNumField.getText().trim()); } }); pane.add(workNumField, "cell 1 6,growx"); workNumField.setColumns(10); JLabel lblMobile = new JLabel("Mobile"); pane.add(lblMobile, "cell 0 7,alignx trailing"); mobileNumField = new JTextField(); mobileNumField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { if (!mobileNumField.getText().trim().equalsIgnoreCase("")) controller .getModel() .getEntity() .getPhoneNumbers() .put(PhoneType.Mobile, mobileNumField.getText().trim()); } }); pane.add(mobileNumField, "cell 1 7,growx"); mobileNumField.setColumns(10); JLabel lblHome = new JLabel("Home"); pane.add(lblHome, "cell 0 8,alignx trailing"); homeNumField = new JTextField(); homeNumField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { if (!homeNumField.getText().trim().equalsIgnoreCase("")) controller.getModel().getEntity().getPhoneNumbers() .put(PhoneType.Home, homeNumField.getText().trim()); } }); pane.add(homeNumField, "cell 1 8,growx"); homeNumField.setColumns(10); } @Override public JComponent getPane() { return pane; } @Override public void setController(ContactInfoPaneController controller) { this.controller = controller; } public void setAddressPanel(JPanel addressPanel) { MigLayout layout = (MigLayout) pane.getLayout(); Object constraints = layout.getComponentConstraints(this.addressPanel); pane.remove(this.addressPanel); pane.add(addressPanel, constraints); this.addressPanel = addressPanel; pane.validate(); } @Override public void updateEntity(ContactInfo contactInfo, EntityOperation entityOperation) { emailField.setText(contactInfo.getEmail()); workNumField.setText(contactInfo.getPhoneNumbers().get(PhoneType.Work)); mobileNumField.setText(contactInfo.getPhoneNumbers().get( PhoneType.Mobile)); homeNumField.setText(contactInfo.getPhoneNumbers().get(PhoneType.Home)); if (EntityOperation.Details == entityOperation) { emailField.setEditable(false); workNumField.setEditable(false); mobileNumField.setEditable(false); homeNumField.setEditable(false); } } @Override public void resetComponents() { emailField.setEditable(true); workNumField.setEditable(true); mobileNumField.setEditable(true); homeNumField.setEditable(true); } @Override public ContactInfoController getEntityController() { // TODO Auto-generated method stub return null; } }