package org.docear.plugin.services.features.user.view;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;
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 LoginPagePanel extends AWizardPage {
private static final long serialVersionUID = 1L;
private LabeledTextField txtUsername;
private LabeledPasswordField pwdPasswd;
private WizardSession context;
/***********************************************************************************
* CONSTRUCTORS
**********************************************************************************/
public LoginPagePanel() {
this(null);
}
public LoginPagePanel(String message) {
this(null, message);
}
public LoginPagePanel(DocearUser startSettings, String message) {
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.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,}));
JLabel lblLogin = new JLabel(TextUtils.getText("docear.setup.wizard.option.login"));
lblLogin.setFont(lblLogin.getFont().deriveFont(Font.BOLD, 14));
add(lblLogin, "2, 3, 9, 1");
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(context);
}
}
public void keyPressed(KeyEvent e) {
}
});
add(txtUsername, "4, 5, 5, 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(context);
}
}
public void keyPressed(KeyEvent e) {
}
});
if (startSettings != null && startSettings.getAccessToken() != null) {
pwdPasswd.setEnabled(false);
}
add(pwdPasswd, "4, 7, 5, 1, fill, default");
JHyperlink lblForgotPasswd = new JHyperlink(TextUtils.getText("docear.setup.wizard.login.forgot.passwd"), "https://www.docear.org/my-docear/change-password/");
lblForgotPasswd.setHorizontalAlignment(SwingConstants.RIGHT);
lblForgotPasswd.setUnderlinedWhenHovered(false);
add(lblForgotPasswd, "8, 9");
if(message != null) {
JLabel lblMessage = new JLabel(message);
add(lblMessage, "2, 11, 9, 1");
}
prepareFields(startSettings);
}
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) {
txtUsername.setText(user.getName() == null ? "" : user.getName());
pwdPasswd.setText(user.getPassword() == null ? "" : user.getPassword());
}
}
private void enableButtons(WizardSession ctxt) {
DocearUser settings = context.get(DocearUser.class);
if((getUsername() == null || (getPassword() == null && (settings == null || settings.getAccessToken() == null))) ) {
ctxt.getNextButton().setEnabled(false);
getRootPane().setDefaultButton((JButton) ctxt.getBackButton());
}
else {
ctxt.getNextButton().setEnabled(true);
getRootPane().setDefaultButton((JButton) ctxt.getNextButton());
}
}
@Override
public String getTitle() {
return TextUtils.getText("docear.setup.wizard.login.title");
}
@Override
public void preparePage(WizardSession context) {
this.context = context;
context.getBackButton().setText(TextUtils.getText("docear.setup.wizard.controls.skip2local"));
context.getBackButton().setEnabled(false);
context.getNextButton().setText(TextUtils.getText("docear.setup.wizard.login.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);
enableButtons(context);
}
}