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