/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.dlect.ui.login; import java.awt.GridBagConstraints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.SwingUtilities; import org.dlect.controller.MainController; import org.dlect.controller.event.ControllerEvent; import org.dlect.controller.event.ControllerState; import org.dlect.controller.event.ControllerType; import org.dlect.controller.helper.Controller; import org.dlect.controller.worker.ErrorDisplayable; import org.dlect.controller.worker.LoginWorker; import org.dlect.events.Event; import org.dlect.events.EventListener; import org.dlect.events.wrapper.Wrappers; import org.dlect.exception.DLectExceptionCause; import org.dlect.provider.loader.ProviderDetail; import org.dlect.ui.helper.ControllerErrorBoxHelper; /** * * @author Lee Symes */ public abstract class LoginPanel extends javax.swing.JPanel implements EventListener, ErrorDisplayable { private static final long serialVersionUID = 1L; private final MainController controller; /** * Creates new form LoginPanel * * @param controller */ public LoginPanel(MainController controller) { this.controller = controller; initComponents(); Wrappers.addSwingListenerTo(this, controller, Controller.class); } /** * 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { GridBagConstraints gridBagConstraints; buttonPanel = new javax.swing.JPanel(); loginButton = new javax.swing.JButton(); clearButton = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); loginInputPanel = new LoginInputPanel(controller.getProviderHelper()); setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED), javax.swing.BorderFactory.createEmptyBorder(4, 4, 4, 4))); setLayout(new java.awt.GridBagLayout()); loginInputPanel.setListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { doUpdate(); } }); buttonPanel.setPreferredSize(new java.awt.Dimension(200, 29)); buttonPanel.setLayout(new java.awt.GridBagLayout()); loginButton.setMnemonic('l'); loginButton.setText("Login"); loginButton.setToolTipText("Login using the information provided."); loginButton.setEnabled(false); loginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { loginButtonActionPerformed(evt); } }); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = GridBagConstraints.EAST; gridBagConstraints.weightx = 1.0; buttonPanel.add(loginButton, gridBagConstraints); clearButton.setMnemonic('c'); clearButton.setText("Clear"); clearButton.setToolTipText("Clear the form"); clearButton.setEnabled(false); clearButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { clearButtonActionPerformed(evt); } }); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.weightx = 1.0; buttonPanel.add(clearButton, gridBagConstraints); cancelButton.setMnemonic('e'); cancelButton.setText("Cancel"); cancelButton.setToolTipText("Cancel login and exit the application."); cancelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { cancelButtonActionPerformed(evt); } }); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; buttonPanel.add(cancelButton, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = GridBagConstraints.BOTH; add(buttonPanel, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = GridBagConstraints.BOTH; add(loginInputPanel, gridBagConstraints); }// </editor-fold> private void clearButtonActionPerformed(ActionEvent evt) { loginInputPanel.setUsername(""); loginInputPanel.setPassword(""); loginInputPanel.setProvider(null); } private void loginButtonActionPerformed(ActionEvent evt) { doLogin(); } private void cancelButtonActionPerformed(ActionEvent evt) { setAllEnabled(false); cancel(); } // Variables declaration - do not modify private JButton cancelButton; private JButton clearButton; private JPanel buttonPanel; private LoginInputPanel loginInputPanel; private JButton loginButton; // End of variables declaration public abstract void cancel(); public abstract void complete(); private void doUpdate() { if (SwingUtilities.getRootPane(this) != null) { SwingUtilities.getRootPane(this).setDefaultButton(loginButton); } boolean provExist = loginInputPanel.hasProviderSelected(); clearButton.setEnabled(provExist); loginButton.setEnabled(loginInputPanel.hasValidCredentials()); } private void setAllEnabled(boolean en) { loginButton.setEnabled(en); cancelButton.setEnabled(en); clearButton.setEnabled(en); loginInputPanel.setAllEnabled(en); } public void setUsername(String username) { loginInputPanel.setUsername(username); } public void setPassword(String password) { loginInputPanel.setPassword(password); } public void setProvider(ProviderDetail provider) { loginInputPanel.setProvider(provider); } public void doLogin() { if (loginInputPanel.saveCredentialsTo(controller.getLoginController())) { setAllEnabled(false); new LoginWorker(this, controller).execute(); } } @Override public void processEvent(Event e) { if (e instanceof ControllerEvent) { ControllerEvent ce = (ControllerEvent) e; if (ce.getEventID() == ControllerType.LOGIN) { ControllerState state = ce.getAfter(); switch (state) { case STARTED: setAllEnabled(false); break; case FAILED: loginInputPanel.putFocus(); setAllEnabled(true); break; case COMPLETED: setAllEnabled(true); complete(); break; } } } } @Override public void showErrorBox(ControllerType type, Object parameter, DLectExceptionCause get) { if (type != ControllerType.LOGIN) { return; // We don't handle anything other than login events. } ControllerErrorBoxHelper.showErrorBox(this, type, parameter, get); } }