/* // This software is subject to the terms of the Eclipse Public License v1.0 // Agreement, available at the following URL: // http://www.eclipse.org/legal/epl-v10.html. // You must accept the terms of that agreement to use this software. // // Copyright (C) 2002-2005 Julian Hyde // Copyright (C) 2005-2009 Pentaho and others // Copyright (C) 2006-2007 Cincom Systems, Inc. // Copyright (C) 2006-2007 JasperSoft // All Rights Reserved. */ package mondrian.gui; import java.awt.event.*; import java.util.*; import javax.swing.*; /** * @author sean */ public class PreferencesDialog extends javax.swing.JDialog { boolean accepted = false; /** * Creates new form PreferencesDialog */ public PreferencesDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); pack(); setLocationRelativeTo(parent); } public boolean accepted() { return accepted; } public void setJDBCConnectionUrl(String s) { this.urlTextField.setText(s); } public String getJdbcConnectionUrl() { return urlTextField.getText(); } public void setJDBCUsername(String s) { this.usernameTextField.setText(s); } public String getJdbcUsername() { return usernameTextField.getText(); } public void setJDBCPassword(String s) { this.passwordTextField.setText(s); } public String getJdbcPassword() { return passwordTextField.getText(); } public void setJDBCDriverClassName(String s) { this.driverClassTextField.setText(s); } public String getJdbcDriverClassName() { return driverClassTextField.getText(); } public void setDatabaseSchema(String schema) { this.schemaTextField.setText(schema); } public String getDatabaseSchema() { return schemaTextField.getText(); } public void setRequireSchema(boolean requireSchema) { requireSchemaButton.setSelected(requireSchema); } public boolean getRequireSchema() { return requireSchemaButton.isSelected(); } /** * @return the workbench i18n converter */ public I18n getResourceConverter() { if (getParent() == null && getParent().getClass() != Workbench.class) { return Workbench.getGlobalResourceConverter(); } return ((Workbench) getParent()).getResourceConverter(); } /** * 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. */ private void initComponents() {//GEN-BEGIN:initComponents java.awt.GridBagConstraints gridBagConstraints; jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); // Set the url text field to 50 to drive the width of the dialog urlTextField = new javax.swing.JTextField(50); usernameTextField = new javax.swing.JTextField(); passwordTextField = new javax.swing.JTextField(); driverClassTextField = new javax.swing.JTextField(); schemaTextField = new javax.swing.JTextField(); requireSchemaButton = new javax.swing.JCheckBox(); testButton = new javax.swing.JButton(); acceptButton = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); selectSchemasButton = new javax.swing.JButton(); getContentPane().setLayout(new java.awt.GridBagLayout()); setTitle( getResourceConverter().getString( "preferences.pane.title", "Database Connection")); addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent evt) { closeDialog(evt); } }); jPanel1.setLayout(new java.awt.GridBagLayout()); jLabel1.setText( getResourceConverter().getString( "preferences.driverClassName.title", "Driver Class Name")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(jLabel1, gridBagConstraints); jLabel2.setText( getResourceConverter().getString( "preferences.connectionURL.title", "Connection URL")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(jLabel2, gridBagConstraints); jLabel3.setText( getResourceConverter().getString( "preferences.userName.title", "User name")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(jLabel3, gridBagConstraints); jLabel4.setText( getResourceConverter().getString( "preferences.password.title", "Password")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(jLabel4, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(urlTextField, gridBagConstraints); jLabel5.setText( getResourceConverter().getString( "preferences.schema.title", "Schemas (Optional, comma separated)")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(jLabel5, gridBagConstraints); jLabel6.setText( getResourceConverter().getString( "preferences.requireschema.title", "Require Schema Attributes")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(jLabel6, gridBagConstraints); usernameTextField.setText(""); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(usernameTextField, gridBagConstraints); passwordTextField.setText(""); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(passwordTextField, gridBagConstraints); schemaTextField.setText(""); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(schemaTextField, gridBagConstraints); selectSchemasButton.setText( getResourceConverter().getString( "preferences.selectSchemasButton.title", "Select Schemas")); selectSchemasButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { selectSchemasButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 4; gridBagConstraints.weightx = 1.0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 180); jPanel1.add(selectSchemasButton, gridBagConstraints); // Disable the select schemas button for now selectSchemasButton.setVisible(false); requireSchemaButton.setSelected(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(requireSchemaButton, gridBagConstraints); driverClassTextField.setText("org.gjt.mm.mysql.Driver"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); jPanel1.add(driverClassTextField, gridBagConstraints); jTabbedPane1.addTab( getResourceConverter().getString( "preferences.jdbcPanel.title", "JDBC"), jPanel1); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; getContentPane().add(jTabbedPane1, gridBagConstraints); testButton.setText( getResourceConverter().getString( "preferences.testButton.title", "Test Connection")); testButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { testButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.weightx = 1.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 180); getContentPane().add(testButton, gridBagConstraints); cancelButton.setText( getResourceConverter().getString( "preferences.cancelButton.title", "Cancel")); cancelButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { cancelButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(cancelButton, gridBagConstraints); acceptButton.setText( getResourceConverter().getString( "preferences.acceptButton.title", "Accept")); acceptButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { acceptButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.weightx = 1.0; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 80); getContentPane().add(acceptButton, gridBagConstraints); pack(); } //GEN-END:initComponents private void selectSchemasButtonActionPerformed( ActionEvent evt) { JdbcMetaData jdbcMetaData = getTestingJdbcMetadata(); if (jdbcMetaData.getErrMsg() != null) { JOptionPane.showMessageDialog( this, getResourceConverter().getFormattedString( "preferences.unsuccessfulTestConnection.alert", "Database connection could not be done.\n{0}", jdbcMetaData.getErrMsg()), "", JOptionPane.WARNING_MESSAGE); return; } List<String> allSchemaNames = jdbcMetaData.listAllSchemas(); if (allSchemaNames == null || allSchemaNames.size() == 0) { JOptionPane.showMessageDialog( this, getResourceConverter().getString( "preferences.noSchemas.cantSetSchemas.alert", "No schemas available for this database connection"), "", JOptionPane.WARNING_MESSAGE); return; } PreferencesSchemasDialog psd = new PreferencesSchemasDialog( this, jdbcMetaData); setVisible(false); setModal(false); psd.setVisible(true); if (psd.isAccepted()) { // update list of schemas } setModal(true); setVisible(true); } public JdbcMetaData getTestingJdbcMetadata() { return new JdbcMetaData( getJdbcDriverClassName(), getJdbcConnectionUrl(), getJdbcUsername(), getJdbcPassword()); } private void testButtonActionPerformed(ActionEvent evt) { //GEN-FIRST:event_testButtonActionPerformed JdbcMetaData jdbcMetaData = getTestingJdbcMetadata(); if (jdbcMetaData.getErrMsg() != null) { JOptionPane.showMessageDialog( this, getResourceConverter().getFormattedString( "preferences.unsuccessfulTestConnection.alert", "Database connection could not be done.\n{0}", jdbcMetaData.getErrMsg()), "", JOptionPane.WARNING_MESSAGE); accepted = false; return; } List<String> allSchemaNames = jdbcMetaData.listAllSchemas(); String currentSchemas = schemaTextField.getText(); // If (schemas entered or schemas required) and // DB does not support schemas // -> error if (allSchemaNames == null || allSchemaNames.size() == 0) { if (currentSchemas != null && currentSchemas.trim().length() > 0) { JOptionPane.showMessageDialog( this, getResourceConverter().getString( "preferences.noSchemas.butSchemasEntered.alert", "No schemas available for this database connection, but schemas entered"), "", JOptionPane.WARNING_MESSAGE); accepted = false; return; } if (requireSchemaButton.isSelected()) { JOptionPane.showMessageDialog( this, getResourceConverter().getString( "preferences.noSchemas.butSchemasRequired.alert", "No schemas available for this database connection, but schemas are required"), "", JOptionPane.WARNING_MESSAGE); accepted = false; return; } } // Validate entered schemas if (currentSchemas != null && currentSchemas.trim().length() > 0) { String schemasArray[] = currentSchemas.trim().split("[,;]"); Set<String> validSchemas = new TreeSet<String>(); StringBuffer schemasInError = new StringBuffer(); for (int i = 0; i < schemasArray.length; i++) { // trim the names, removing empties String enteredSchemaName = schemasArray[i].trim(); if (enteredSchemaName.length() > 0) { for (String actualSchemaName : allSchemaNames) { if (actualSchemaName .equalsIgnoreCase(enteredSchemaName)) { validSchemas.add(enteredSchemaName); break; } } } if (!validSchemas.contains(enteredSchemaName)) { schemasInError.append(" ").append(enteredSchemaName); } } if (schemasInError.length() > 0) { JOptionPane.showMessageDialog( this, getResourceConverter().getFormattedString( "preferences.invalidSchemas.alert", "The following entered schemas are invalid.\n{0}", schemasInError.toString()), "", JOptionPane.WARNING_MESSAGE); accepted = false; return; } } JOptionPane.showMessageDialog( this, getResourceConverter().getString( "preferences.successfulTestConnection.alert", "Database connection successful"), "", JOptionPane.INFORMATION_MESSAGE); accepted = true; } //GEN-LAST:event_testButtonActionPerformed private void acceptButtonActionPerformed(ActionEvent evt) { //GEN-FIRST:event_acceptButtonActionPerformed accepted = true; setVisible(false); } //GEN-LAST:event_acceptButtonActionPerformed private void cancelButtonActionPerformed(ActionEvent evt) { //GEN-FIRST:event_cancelButtonActionPerformed accepted = false; setVisible(false); } //GEN-LAST:event_cancelButtonActionPerformed /** * Closes the dialog */ private void closeDialog(WindowEvent evt) { //GEN-FIRST:event_closeDialog setVisible(false); dispose(); } //GEN-LAST:event_closeDialog // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField driverClassTextField; private javax.swing.JPanel jPanel1; private javax.swing.JTextField urlTextField; private javax.swing.JTextField usernameTextField; private javax.swing.JTextField passwordTextField; private javax.swing.JTextField schemaTextField; private javax.swing.JCheckBox requireSchemaButton; private javax.swing.JButton acceptButton; private javax.swing.JButton testButton; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JButton cancelButton; private javax.swing.JButton selectSchemasButton; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel1; // End of variables declaration//GEN-END:variables } // End PreferencesDialog.java