package org.docear.plugin.services.features.setup.view;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.docear.plugin.core.ui.components.LabeledPasswordField;
import org.docear.plugin.core.ui.components.LabeledTextField;
import org.docear.plugin.core.ui.wizard.AWizardPage;
import org.docear.plugin.core.ui.wizard.WizardSession;
import org.docear.plugin.services.features.user.DocearLocalUser;
import org.docear.plugin.services.features.user.DocearUser;
import org.freeplane.core.util.TextUtils;
import org.swingplus.JHyperlink;
import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
public class StartPagePanel extends AWizardPage {
public enum START_OPTION {
LOGIN, REGISTRATION
}
private static final long serialVersionUID = 1L;
private LabeledTextField txtUsername;
private LabeledPasswordField pwdPasswd;
private JRadioButton rdbtnLogin;
private JRadioButton rdbtnRegister;
private WizardSession context;
/***********************************************************************************
* CONSTRUCTORS
**********************************************************************************/
public StartPagePanel() {
this(null);
}
public StartPagePanel(DocearUser startSettings) {
setBackground(Color.WHITE);
setLayout(new FormLayout(new ColumnSpec[] {
FormFactory.RELATED_GAP_COLSPEC,
FormFactory.DEFAULT_COLSPEC,
FormFactory.RELATED_GAP_COLSPEC,
FormFactory.DEFAULT_COLSPEC,
FormFactory.RELATED_GAP_COLSPEC,
ColumnSpec.decode("default:grow"),
FormFactory.RELATED_GAP_COLSPEC,
ColumnSpec.decode("default:grow"),
FormFactory.RELATED_GAP_COLSPEC,
ColumnSpec.decode("default:grow"),},
new RowSpec[] {
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
RowSpec.decode("top:default"),
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,}));
JLabel lblRegister = new JLabel(TextUtils.getText("docear.setup.wizard.option.register"));
lblRegister.setFont(lblRegister.getFont().deriveFont(Font.BOLD, 14));
add(lblRegister, "2, 2, 9, 1");
rdbtnRegister = new JRadioButton(TextUtils.getText("docear.setup.wizard.info.register"));
rdbtnRegister.setBackground(Color.WHITE);
rdbtnRegister.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
updateOption();
enableButtons();
}
});
add(rdbtnRegister, "4, 4, 7, 1");
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
add(panel, "6, 5, 5, 1, fill, fill");
panel.setLayout(new FormLayout(new ColumnSpec[] {
FormFactory.RELATED_GAP_COLSPEC,
ColumnSpec.decode("default:grow"),},
new RowSpec[] {
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,}));
JLabel label = new JLabel(TextUtils.getText("docear.setup.wizard.feature.text.1"));
label.setIcon(new ImageIcon(StartPagePanel.class.getResource("/icons/emblem-default.png")));
panel.add(label, "2, 1");
JLabel lbl2 = new JLabel(TextUtils.getText("docear.setup.wizard.feature.text.2"));
lbl2.setIcon(new ImageIcon(StartPagePanel.class.getResource("/icons/emblem-default.png")));
panel.add(lbl2, "2, 3");
JLabel label_1 = new JLabel(TextUtils.getText("docear.setup.wizard.feature.text.3"));
label_1.setIcon(new ImageIcon(StartPagePanel.class.getResource("/icons/emblem-default.png")));
panel.add(label_1, "2, 5");
JLabel label_2 = new JLabel(TextUtils.getText("docear.setup.wizard.feature.text.4"));
label_2.setIcon(new ImageIcon(StartPagePanel.class.getResource("/icons/emblem-default.png")));
panel.add(label_2, "2, 7");
JLabel label_3 = new JLabel(TextUtils.getText("docear.setup.wizard.feature.text.5"));
label_3.setIcon(new ImageIcon(StartPagePanel.class.getResource("/icons/emblem-default.png")));
panel.add(label_3, "2, 9");
JLabel label_4 = new JLabel(TextUtils.getText("docear.setup.wizard.feature.text.6"));
label_4.setIcon(new ImageIcon(StartPagePanel.class.getResource("/icons/emblem-default.png")));
panel.add(label_4, "2, 11");
JLabel lblLogin = new JLabel(TextUtils.getText("docear.setup.wizard.option.login"));
lblLogin.setFont(lblLogin.getFont().deriveFont(Font.BOLD, 14));
add(lblLogin, "2, 7, 9, 1");
rdbtnLogin = new JRadioButton("");
rdbtnLogin.setBackground(Color.WHITE);
rdbtnLogin.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
updateOption();
enableButtons();
}
});
add(rdbtnLogin, "4, 9");
ButtonGroup group = new ButtonGroup();
group.add(rdbtnRegister);
group.add(rdbtnLogin);
txtUsername = new LabeledTextField(TextUtils.getText("docear.setup.wizard.login.input.label.user")); //new JTextField();
if (startSettings != null && startSettings.getName() != null) {
txtUsername.setText(startSettings.getName());
}
txtUsername.setBorder(new LineBorder(Color.DARK_GRAY, 1));
txtUsername.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {
if (context != null) {
DocearUser settings = context.get(DocearUser.class);
if (settings == null) {
settings = new DocearUser();
context.set(DocearUser.class, settings);
}
settings.setUsername(getUsername());
enableButtons();
}
}
public void keyPressed(KeyEvent e) {
rdbtnLogin.setSelected(true);
}
});
add(txtUsername, "6, 9, 3, 1, fill, default");
txtUsername.setColumns(10);
pwdPasswd = new LabeledPasswordField(TextUtils.getText("docear.setup.wizard.login.input.label.passwd"));
pwdPasswd.setBorder(new LineBorder(Color.DARK_GRAY, 1));
pwdPasswd.setText("");
pwdPasswd.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {
if (context != null) {
DocearUser settings = context.get(DocearUser.class);
if (settings == null) {
settings = new DocearUser();
context.set(DocearUser.class, settings);
}
settings.setPassword(getPassword());
enableButtons();
}
}
public void keyPressed(KeyEvent e) {
rdbtnLogin.setSelected(true);
}
});
if (startSettings != null && startSettings.getAccessToken() != null) {
pwdPasswd.setEnabled(false);
}
add(pwdPasswd, "6, 11, 3, 1, fill, default");
JHyperlink lblForgotPasswd = new JHyperlink(TextUtils.getText("docear.setup.wizard.login.forgot.passwd"), "http://www.docear.org/faqs/i-forgot-my-password-andor-username-what-can-i-do/");
lblForgotPasswd.setHorizontalAlignment(SwingConstants.RIGHT);
lblForgotPasswd.setUnderlinedWhenHovered(false);
add(lblForgotPasswd, "8, 13");
prepareFields(startSettings);
}
public boolean isRegistrationOption() {
return rdbtnRegister.isSelected();
}
public boolean isLoginOption() {
return rdbtnLogin.isSelected();
}
public String getUsername() {
String name = txtUsername.getText();
if (name.isEmpty()) {
return null;
}
return name;
}
public String getPassword() {
String pw = String.copyValueOf(pwdPasswd.getPassword());
if (pw.isEmpty()) {
return null;
}
return pw;
}
private void prepareFields(DocearUser user) {
txtUsername.setText("");
pwdPasswd.setText("");
if(user == null) {
rdbtnRegister.setSelected(true);
}
else if(user.isValid() || (user.isNew() && user.getPassword() != null)) {
txtUsername.setText(user.getName() == null ? "" : user.getName());
pwdPasswd.setText(user.getPassword() == null ? "" : user.getPassword());
rdbtnLogin.setSelected(user.getName() != null);
}
}
private void updateOption() {
if (context != null) {
if(isRegistrationOption()) {
context.set(START_OPTION.class, START_OPTION.REGISTRATION);
}
else if (isLoginOption()) {
context.set(START_OPTION.class, START_OPTION.LOGIN);
}
}
}
private void enableButtons() {
if(context != null) {
DocearUser settings = context.get(DocearUser.class);
if(isLoginOption() && (getUsername() == null || (getPassword() == null && (settings == null || settings.getAccessToken() == null))) ) {
context.getNextButton().setEnabled(false);
getRootPane().setDefaultButton((JButton) context.getBackButton());
}
else {
context.getNextButton().setEnabled(true);
getRootPane().setDefaultButton((JButton) context.getNextButton());
}
}
}
@Override
public String getTitle() {
return TextUtils.getText("docear.setup.wizard.start.title");
}
@Override
public void preparePage(WizardSession context) {
this.context = context;
context.getBackButton().setText(TextUtils.getText("docear.setup.wizard.controls.skip2local"));
context.getNextButton().setText(TextUtils.getText("docear.setup.wizard.controls.next"));
context.setWizardTitle(getTitle());
context.set(DocearLocalUser.class, null);
DocearUser user = context.get(DocearUser.class);
if(user instanceof DocearLocalUser) {
user = new DocearUser();
context.set(DocearUser.class, user);
}
// else {
// String token = user.getAccessToken();
// user = new DocearUser(user);
// context.set(DocearUser.class, user);
// user.setAccessToken(token);
// }
prepareFields(user);
updateOption();
enableButtons();
}
}