/* * Created on Jul 25, 2005 */ package atujplag.view; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyEvent; import java.io.File; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JRootPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import jplagWsClient.jplagClient.UpdateUserInfoParams; import jplagWsClient.jplagClient.UserInfo; import atujplag.ATUJPLAG; import atujplag.client.SimpleClient; import atujplag.util.Messages; import atujplag.util.TagParser; /** * @author Emeric Kwemou */ public class Preferences extends JDialog { private static final long serialVersionUID = -5133488603587416876L; private View view = null; private ATUJPLAG atujplag = null; private JPanel jContentPane = null; private JTabbedPane jTabbedPane = null; private JPanel jButtonPanel = null; private JButton jOK = null; private JButton jApply = null; private JButton jCancel = null; private JPanel emailPanel = null; private JTextField emailField = null; private JTextField homepageField = null; private JComboBox<String> jLanguageCB = null; private JPanel reportLocPanel = null; private JTextField resultDirField = null; private JButton jResultDirButton = null; private JPanel passwordPanel = null; private JPasswordField jPasswordField = null; private JPasswordField jPasswordField1 = null; private JPasswordField jPasswordField2 = null; private JCheckBox jSavePassCB = null; private boolean languageChanged = false; private boolean resultLocationChanged = false; private boolean secondEmailChanged = false; private boolean homepageChanged = false; private boolean passwordChanged = false; private boolean savePassChanged = false; /** * This is the default constructor */ public Preferences(View view) { super(view, true); this.view = view; atujplag = view.getATUJPLAG(); this.setFont(JPlagCreator.SYSTEM_FONT); this.setTitle(Messages.getString("Preferences.JPlag_Preferences")); //$NON-NLS-1$ initialize(); } /** * Make dialog close on ESCAPE */ protected JRootPane createRootPane() { KeyStroke stroke=KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); JRootPane rootPane=new JRootPane(); rootPane.registerKeyboardAction(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { setVisible(false); dispose(); } }, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW); return rootPane; } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(300, 200); this.setResizable(false); this.setContentPane(getJContentPane()); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private javax.swing.JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new javax.swing.JPanel(); jContentPane.setLayout(new BoxLayout(jContentPane,BoxLayout.PAGE_AXIS)); jContentPane.add(getJTabbedPane(), null); jContentPane.add(getJButtonPanel(), null); jContentPane.setBackground(JPlagCreator.SYSTEMCOLOR); } return jContentPane; } /** * This method initializes jButtonPanel * * @return javax.swing.JPanel */ private JPanel getJButtonPanel() { if (jButtonPanel == null) { jButtonPanel = new JPanel(); jButtonPanel.setBackground(JPlagCreator.SYSTEMCOLOR); jButtonPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); jButtonPanel.add(getJOK(), null); jButtonPanel.add(getJCancel(), null); jButtonPanel.add(getJApply(), null); } return jButtonPanel; } /** * Creates a new View object and destroys the old one because of * a language change */ private View createNewLangView() { JPlagCreator.showMessageDialog( Messages.getString("Preferences.New_language_setting"), //$NON-NLS-1$ Messages.getString("Preferences.New_language_setting_DESC")); //$NON-NLS-1$ view.dispose(); view.destroy(); view=null; System.gc(); atujplag.updateServerInfo(this); // TODO: is this needed? View mainWindow = new View(atujplag); mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainWindow.pack(); mainWindow.setLocationRelativeTo(null); mainWindow.setVisible(true); return mainWindow; } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJOK() { if (jOK == null) { jOK = JPlagCreator.createButton( Messages.getString("Preferences.OK"), //$NON-NLS-1$ Messages.getString("Preferences.OK_TIP"), //$NON-NLS-1$ 150, 20); jOK.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if(applyChanges()) { if (languageChanged) createNewLangView(); else Preferences.this.dispose(); } } }); } return jOK; } /** * This method initializes jApply * * @return javax.swing.JButton */ private JButton getJApply() { if (jApply == null) { jApply = JPlagCreator.createButton( Messages.getString("Preferences.Apply"), //$NON-NLS-1$ Messages.getString("Preferences.Apply_TIP"), //$NON-NLS-1$ 150, 20); jApply.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { applyChanges(); if (languageChanged) createNewLangView().openPreferences(); } }); jApply.setEnabled(false); } return jApply; } private void updateApplyButton() { jApply.setEnabled(languageChanged || resultLocationChanged || secondEmailChanged || homepageChanged || passwordChanged || savePassChanged); } private JButton getResultDirButton() { if(jResultDirButton == null) { jResultDirButton = JPlagCreator.createOpenFileButton( Messages.getString("Preferences.Select_report_location")); //$NON-NLS-1$ jResultDirButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setDialogTitle( Messages.getString("Preferences.Select_report_location")); //$NON-NLS-1$ int retval = chooser.showOpenDialog(null); if (retval == JFileChooser.APPROVE_OPTION) resultDirField.setText(chooser.getSelectedFile().getPath()); } }); } return jResultDirButton; } /** * This method initializes jCancel * * @return javax.swing.JButton */ private JButton getJCancel() { if (jCancel == null) { jCancel = JPlagCreator.createButton( Messages.getString("Preferences.Cancel"), //$NON-NLS-1$ Messages.getString("Preferences.Cancel_TIP"), //$NON-NLS-1$ 150, 20); jCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { Preferences.this.dispose(); } }); } return jCancel; } /** * This method initializes jTabbedPane * * @return javax.swing.JTabbedPane */ private JTabbedPane getJTabbedPane() { if (jTabbedPane == null) { jTabbedPane = new JTabbedPane(); jTabbedPane.setFont(JPlagCreator.SYSTEM_FONT); jTabbedPane.add(Messages.getString( "Preferences.Basic_settings"), //$NON-NLS-1$ getReportLocPanel()); jTabbedPane.add(Messages.getString( "Preferences.Change_password"), //$NON-NLS-1$ getPasswordPanel()); jTabbedPane.add(Messages.getString( "Preferences.User_information"), //$NON-NLS-1$ getEmailPanel()); jTabbedPane.setBackground(JPlagCreator.SYSTEMCOLOR); } return jTabbedPane; } /** * This method initializes jPanel2 * * @return javax.swing.JPanel */ private JPanel getReportLocPanel() { if(reportLocPanel == null) { reportLocPanel = JPlagCreator.createPanelWithoutBorder(500, 136, 10, 10, FlowLayout.CENTER); JLabel reportLocLabel = new JLabel(Messages.getString( "Preferences.Report_location_DESC") + ":"); //$NON-NLS-1$ //$NON-NLS-2$ reportLocLabel.setPreferredSize(new Dimension(440 + 10 + 24,20)); reportLocPanel.add(reportLocLabel); resultDirField = JPlagCreator.createTextField(440, 20, null); resultDirField.setText(atujplag.getResultLocation()); resultDirField.getDocument().addDocumentListener( new DocumentListener() { public void changedUpdate(DocumentEvent arg0) { resultLocationChanged = !atujplag.getResultLocation().equals( resultDirField.getText()); updateApplyButton(); } public void insertUpdate(DocumentEvent arg0) { changedUpdate(arg0); } public void removeUpdate(DocumentEvent arg0) { changedUpdate(arg0); } }); reportLocPanel.add(resultDirField); reportLocPanel.add(getResultDirButton()); JLabel jLanguageLabel = new JLabel(Messages.getString( "Preferences.Language") + ":"); //$NON-NLS-1$ //$NON-NLS-2$ jLanguageLabel.setPreferredSize(new Dimension(90 + 150 + 24,20)); reportLocPanel.add(jLanguageLabel, null); jLanguageCB = JPlagCreator.createJComboBox( ATUJPLAG.COUNTRY_LANGUAGES, 200, 20, Messages.getString("Preferences.Language_TIP")); //$NON-NLS-1$ jLanguageCB.setSelectedIndex(atujplag.getCountryLanguageIndex()); jLanguageCB.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent arg0) { languageChanged = !atujplag.getCountryLanguage().equals( jLanguageCB.getSelectedItem().toString()); updateApplyButton(); } }); reportLocPanel.add(jLanguageCB); } return reportLocPanel; } private JPanel getEmailPanel() { if (this.emailPanel == null) { this.emailPanel = JPlagCreator.createPanelWithoutBorder(500, 100, 10, 10, FlowLayout.CENTER); this.emailPanel.add(JPlagCreator.createLabel( Messages.getString("Preferences.Email") + ":", //$NON-NLS-1$ //$NON-NLS-2$ 214, 20)); this.emailPanel.add(JPlagCreator.createLabel( view.getServerInfos().getUserInfo().getEmail(), 250, 20)); this.emailPanel.add(JPlagCreator.createLabel( Messages.getString("Preferences.Second_email") + ":", //$NON-NLS-1$ //$NON-NLS-2$ 214, 20)); this.emailField = JPlagCreator.createTextField(250, 20, Messages.getString("Preferences.Second_email_TIP")); //$NON-NLS-1$ this.emailField.setText( view.getServerInfos().getUserInfo().getEmailSecond()); this.emailField.getDocument().addDocumentListener( new DocumentListener() { public void changedUpdate(DocumentEvent arg0) { String oldemail = view.getServerInfos(). getUserInfo().getEmailSecond(); if(oldemail==null) oldemail = ""; //$NON-NLS-1$ secondEmailChanged = !emailField.getText().equals( oldemail); updateApplyButton(); } public void insertUpdate(DocumentEvent arg0) { changedUpdate(arg0); } public void removeUpdate(DocumentEvent arg0) { changedUpdate(arg0); } }); this.emailPanel.add(emailField); this.emailPanel.add(JPlagCreator.createLabel( Messages.getString("Preferences.Homepage") + ":", //$NON-NLS-1$ //$NON-NLS-2$ 214, 20)); this.homepageField = JPlagCreator.createTextField(250, 20, Messages.getString("Preferences.Homepage_TIP")); //$NON-NLS-1$ this.homepageField.setText( view.getServerInfos().getUserInfo().getHomepage()); this.homepageField.getDocument().addDocumentListener( new DocumentListener() { public void changedUpdate(DocumentEvent arg0) { String oldhome = view.getServerInfos().getUserInfo().getHomepage(); if(oldhome==null) oldhome = ""; //$NON-NLS-1$ homepageChanged = !homepageField.getText().equals( oldhome); updateApplyButton(); } public void insertUpdate(DocumentEvent arg0) { this.changedUpdate(arg0); } public void removeUpdate(DocumentEvent arg0) { this.changedUpdate(arg0); } }); this.emailPanel.add(homepageField); } return this.emailPanel; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getPasswordPanel() { if (passwordPanel == null) { passwordPanel = JPlagCreator.createPanelWithoutBorder(350, 100, 10, 10, FlowLayout.CENTER); passwordPanel.add(JPlagCreator.createLabel( Messages.getString("Preferences.Old_password") + ":", //$NON-NLS-1$ //$NON-NLS-2$ 264, 20)); passwordPanel.add(getOldJPasswordField()); getOldJPasswordField().setToolTipText( Messages.getString("Preferences.Old_password_TIP")); //$NON-NLS-1$ getOldJPasswordField().getDocument().addDocumentListener( new PasswordDocumentListener()); passwordPanel.add(JPlagCreator.createLabel( Messages.getString("Preferences.New_password") + ":", //$NON-NLS-1$ //$NON-NLS-2$ 264, 20)); passwordPanel.add(getJPasswordField1()); getJPasswordField1().setToolTipText( Messages.getString("Preferences.New_password_TIP")); //$NON-NLS-1$ getJPasswordField2().getDocument().addDocumentListener( new PasswordDocumentListener()); passwordPanel.add(JPlagCreator.createLabel( Messages.getString("Preferences.Reenter_password") + ":", //$NON-NLS-1$ //$NON-NLS-2$ 264, 20)); passwordPanel.add(getJPasswordField2(), null); getJPasswordField2().setToolTipText( Messages.getString("Preferences.Reenter_password_TIP")); //$NON-NLS-1$ getJPasswordField2().getDocument().addDocumentListener( new PasswordDocumentListener()); passwordPanel.add(getSavePassCB(), null); Dimension dim=getSavePassCB().getPreferredSize(); passwordPanel.add(javax.swing.Box.createHorizontalStrut(464-dim.width)); } return passwordPanel; } private class PasswordDocumentListener implements DocumentListener { public void changedUpdate(DocumentEvent arg0) { String newPass=new String( getJPasswordField1().getPassword()); passwordChanged = new String(getOldJPasswordField().getPassword()) .length()>0 && newPass.length()>0 && newPass.equals(new String( getJPasswordField2().getPassword())); updateApplyButton(); } public void insertUpdate(DocumentEvent arg0) { changedUpdate(arg0); } public void removeUpdate(DocumentEvent arg0) { changedUpdate(arg0); } } /** * This method initializes jPasswordField1 * * @return javax.swing.JPasswordField */ private JPasswordField getJPasswordField1() { if (jPasswordField1 == null) { jPasswordField1 = new JPasswordField(); jPasswordField1.setPreferredSize(new java.awt.Dimension(200, 20)); } return jPasswordField1; } /** * This method initializes jPasswordField2 * * @return javax.swing.JPasswordField */ private JPasswordField getJPasswordField2() { if (jPasswordField2 == null) { jPasswordField2 = new JPasswordField(); jPasswordField2.setPreferredSize(new java.awt.Dimension(200, 20)); } return jPasswordField2; } /** * This method initializes jPasswordField * * @return javax.swing.JPasswordField */ private JPasswordField getOldJPasswordField() { if (jPasswordField == null) { jPasswordField = new JPasswordField(); jPasswordField.setPreferredSize(new java.awt.Dimension(200, 20)); } return jPasswordField; } /** * This method initializes jSavePassCB * * @return javax.swing.JCheckBox */ private JCheckBox getSavePassCB() { if (jSavePassCB == null) { jSavePassCB = new JCheckBox(); jSavePassCB.setText(Messages.getString( "Preferences.Remember_password")); //$NON-NLS-1$ jSavePassCB.setToolTipText(Messages.getString( "Preferences.Remember_password_TIP")); //$NON-NLS-1$ jSavePassCB.setForeground(JPlagCreator.BUTTON_FOREGROUND); jSavePassCB.setFont(JPlagCreator.SYSTEM_FONT); jSavePassCB.setBackground(JPlagCreator.SYSTEMCOLOR); jSavePassCB.setSelected(atujplag.isSavePassword()); jSavePassCB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { savePassChanged = jSavePassCB.isSelected()!=atujplag.isSavePassword(); updateApplyButton(); } }); } return jSavePassCB; } /** * @return True, if the email address fits the pattern "*@*.*" */ private static boolean isValidEMailAddress(String email) { String tokens[]=email.split("@"); //$NON-NLS-1$ if(tokens.length==2) { String tokens2[]=tokens[1].split("\\."); //$NON-NLS-1$ if(tokens2.length>=2) return true; } return false; } private boolean applyChanges() { if (resultLocationChanged) { File f = new File(resultDirField.getText()); if (!f.exists()) { int rep = JPlagCreator.showConfirmDialog( Messages.getString("Preferences.Directory_does_not_exist"), //$NON-NLS-1$ TagParser.parse(Messages.getString( "Preferences.Directory_does_not_exist_DESC_{1_PATH}"), //$NON-NLS-1$ new String[] { f.getPath() })); if (rep == JOptionPane.YES_OPTION) f.mkdirs(); else return false; } else if(!f.isDirectory()) { JPlagCreator.showMessageDialog( Messages.getString( "Preferences.File_is_no_directory"), //$NON-NLS-1$ TagParser.parse(Messages.getString( "Preferences.File_is_no_directory_DESC_{1_PATH}"), //$NON-NLS-1$ new String[] { f.getPath() })); return false; } atujplag.setResultLocation(resultDirField.getText()); resultLocationChanged = false; view.updateTable(null); } if(languageChanged) atujplag.setCountryLanguage( jLanguageCB.getSelectedItem().toString(), true); UpdateUserInfoParams para = new UpdateUserInfoParams(null, null, null); boolean doUpdate = false; if (secondEmailChanged) { String newEmail=emailField.getText(); if (newEmail.length()>0 && !isValidEMailAddress(newEmail)) { JPlagCreator.showError(this, Messages.getString("Preferences.Invalid_email_address"), //$NON-NLS-1$ Messages.getString("Preferences.Invalid_email_address_DESC")); //$NON-NLS-1$ return false; } else { para.setNewEmailSecond(newEmail); doUpdate = true; } } if(homepageChanged) { para.setNewHomepage(homepageField.getText()); doUpdate = true; } if(passwordChanged){ if(!atujplag.getPassword().equals(new String( getOldJPasswordField().getPassword()))) { JPlagCreator.showError(this, Messages.getString("Preferences.Wrong_password"), //$NON-NLS-1$ Messages.getString("Preferences.Wrong_password_DESC")); //$NON-NLS-1$ return false; } String newPass = new String(getJPasswordField1().getPassword()); if (newPass.length() < 6) { JPlagCreator.showError(this, Messages.getString("Preferences.Password_too_short"), //$NON-NLS-1$ Messages.getString("Preferences.Password_too_short_DESC")); //$NON-NLS-1$ return false; } else if (!newPass.equals( new String(getJPasswordField2().getPassword()))) { JPlagCreator.showError(this, Messages.getString("Preferences.Passwords_not_identical"), //$NON-NLS-1$ Messages.getString("Preferences.Passwords_not_identical_DESC")); //$NON-NLS-1$ return false; } else { para.setNewPassword(newPass); doUpdate = true; } } if(doUpdate && !SimpleClient.updateUserInfo(atujplag, para, this)) return false; if(para.getNewPassword() != null) atujplag.setPassword(para.getNewPassword()); if(savePassChanged) atujplag.setRememberPassword(getSavePassCB().isSelected()); secondEmailChanged = false; homepageChanged = false; passwordChanged = false; savePassChanged = false; if(view.getServerInfos() != null) { UserInfo userInfo = view.getServerInfos().getUserInfo(); if(para.getNewEmailSecond() != null) userInfo.setEmailSecond(para.getNewEmailSecond()); if(para.getNewHomepage() != null) userInfo.setHomepage(para.getNewHomepage()); } getJApply().setEnabled(false); return true; } } // @jve:decl-index=0:visual-constraint="123,-7"