/* * Copyright (c) 2012, Codename One. All rights reserved. */ package com.codename1.designer; import java.awt.Desktop; import java.io.InputStream; import java.net.URI; import java.net.URL; import java.net.URLEncoder; import java.util.prefs.Preferences; import javax.swing.JOptionPane; import javax.swing.ProgressMonitor; import javax.swing.SwingUtilities; /** * * @author Shai Almog */ public class LoginDialog extends javax.swing.JDialog { private boolean initialized; private static String globalUser; private static String globalPassword; /** Creates new form LoginDialog */ public LoginDialog(java.awt.Component parent) { super((java.awt.Frame)SwingUtilities.getWindowAncestor(parent), true); initComponents(); ModifiableJOptionPane.reverseOKCancel(loginButton, cancelButton); Preferences p = Preferences.userNodeForPackage(getClass()); remember.setSelected(p.getBoolean("remeber", false)); if(remember.isSelected()) { user.setText(p.get("user", "")); password.setText(p.get("pass", "")); globalUser = user.getText(); globalPassword = user.getText(); } initialized = true; setLocationByPlatform(true); pack(); setVisible(true); } public static String getUser(java.awt.Component parent) { initUserPassword(parent); return globalUser; } public static String getPassword(java.awt.Component parent) { initUserPassword(parent); return globalPassword; } private static void initUserPassword(java.awt.Component parent) { if(globalUser == null) { Preferences p = Preferences.userNodeForPackage(LoginDialog.class); if(p.getBoolean("remeber", false)) { globalUser = p.get("user", ""); globalPassword = p.get("pass", ""); } else { new LoginDialog(parent); } } } /** 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">//GEN-BEGIN:initComponents private void initComponents() { jPanel3 = new javax.swing.JPanel(); signup = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); user = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); password = new javax.swing.JPasswordField(); jLabel5 = new javax.swing.JLabel(); remember = new javax.swing.JCheckBox(); jPanel1 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); loginButton = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); FormListener formListener = new FormListener(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Login To Codename One"); setModal(true); jPanel3.setName("jPanel3"); // NOI18N signup.setText("Signup for a full account at codenameone.com"); signup.setName("signup"); // NOI18N signup.addActionListener(formListener); jPanel3.add(signup); jLabel3.setText("Username"); jLabel3.setName("jLabel3"); // NOI18N user.setName("user"); // NOI18N jLabel4.setText("Password"); jLabel4.setName("jLabel4"); // NOI18N password.setName("password"); // NOI18N jLabel5.setText("Remember Password"); jLabel5.setName("jLabel5"); // NOI18N remember.setName("remember"); // NOI18N remember.addActionListener(formListener); jPanel1.setName("jPanel1"); // NOI18N jPanel2.setName("jPanel2"); // NOI18N jPanel2.setLayout(new java.awt.GridLayout()); loginButton.setText("Login"); loginButton.setName("loginButton"); // NOI18N loginButton.addActionListener(formListener); jPanel2.add(loginButton); cancelButton.setText("Cancel"); cancelButton.setName("cancelButton"); // NOI18N cancelButton.addActionListener(formListener); jPanel2.add(cancelButton); jPanel1.add(jPanel2); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 411, Short.MAX_VALUE) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jLabel4) .add(jLabel3) .add(jLabel5)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(remember) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 224, Short.MAX_VALUE)) .add(user, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE) .add(password, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE)))) .add(3, 3, 3)) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(jPanel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel3) .add(user, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel4) .add(password, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel5) .add(remember)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); } // Code for dispatching events from components to event handlers. private class FormListener implements java.awt.event.ActionListener { FormListener() {} public void actionPerformed(java.awt.event.ActionEvent evt) { if (evt.getSource() == signup) { LoginDialog.this.signupActionPerformed(evt); } else if (evt.getSource() == remember) { LoginDialog.this.rememberActionPerformed(evt); } else if (evt.getSource() == loginButton) { LoginDialog.this.loginButtonActionPerformed(evt); } else if (evt.getSource() == cancelButton) { LoginDialog.this.cancelButtonActionPerformed(evt); } } }// </editor-fold>//GEN-END:initComponents private void signupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_signupActionPerformed try { Desktop.getDesktop().browse(new URI("http://www.codenameone.com/gui")); } catch (Exception ex) { ex.printStackTrace(); } }//GEN-LAST:event_signupActionPerformed private void rememberActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rememberActionPerformed if(initialized) { Preferences p = Preferences.userNodeForPackage(getClass()); p.putBoolean("remeber", remember.isSelected()); } }//GEN-LAST:event_rememberActionPerformed private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loginButtonActionPerformed signup.setEnabled(false); loginButton.setEnabled(false); user.setEnabled(false); password.setEnabled(false); final ProgressMonitor mon = new ProgressMonitor(this, "Logging In", "Connecting To Server", 0, 100); mon.setMillisToDecideToPopup(0); mon.setProgress(1); new Thread() { public void run() { try { mon.setProgress(40); URL u = new URL("https://codename-one.appspot.com/getData?m=login&u=" + URLEncoder.encode(user.getText(), "UTF-8") + "&p=" + URLEncoder.encode(password.getText(), "UTF-8")); InputStream i = u.openStream(); byte[] b = new byte[4]; i.read(b); i.close(); mon.setProgress(90); // success if(b[0] == 'O') { Preferences p = Preferences.userNodeForPackage(getClass()); if(remember.isSelected()) { p.put("user", user.getText()); p.put("pass", password.getText()); } else { p.remove("user"); p.remove("pass"); } globalPassword = password.getText(); globalUser = user.getText(); dispose(); } else { signup.setEnabled(true); loginButton.setEnabled(true); user.setEnabled(true); password.setEnabled(true); // fail if(b[0] == 'F') { signup.setText("Login Failed, check user/password"); } else { // unknown error maybe proxy JOptionPane.showMessageDialog(LoginDialog.this, "Login Failed", "Unable to connect, check proxy settings", JOptionPane.ERROR_MESSAGE); } } mon.close(); } catch (Exception ex) { ex.printStackTrace(); signup.setEnabled(true); loginButton.setEnabled(true); user.setEnabled(true); password.setEnabled(true); JOptionPane.showMessageDialog(LoginDialog.this, "Login Failed", "Internal Error:\n" + ex, JOptionPane.ERROR_MESSAGE); } } }.start(); }//GEN-LAST:event_loginButtonActionPerformed private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed dispose(); }//GEN-LAST:event_cancelButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelButton; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JButton loginButton; private javax.swing.JPasswordField password; private javax.swing.JCheckBox remember; private javax.swing.JButton signup; private javax.swing.JTextField user; // End of variables declaration//GEN-END:variables }