/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2011 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2011 Gephi Consortium.
*/
package org.gephi.ui.importer.plugin;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
import org.gephi.io.database.drivers.SQLDriver;
import org.gephi.io.database.drivers.SQLUtils;
import org.gephi.io.importer.api.Database;
import org.gephi.io.importer.plugin.database.EdgeListDatabaseImpl;
import org.gephi.ui.utils.DialogFileFilter;
import org.netbeans.validation.api.Problems;
import org.netbeans.validation.api.Validator;
import org.netbeans.validation.api.builtin.Validators;
import org.netbeans.validation.api.ui.ValidationGroup;
import org.netbeans.validation.api.ui.ValidationPanel;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
/**
*
* @author Mathieu Bastian
*/
public class EdgeListPanel extends javax.swing.JPanel {
private EdgeListDatabaseManager databaseManager;
private final String LAST_PATH = "EdgeListPanel_Sqlite_Last_Path";
private static String NEW_CONFIGURATION_NAME =
NbBundle.getMessage(EdgeListPanel.class,
"EdgeListPanel.template.name");
/** Creates new form EdgeListPanel */
public EdgeListPanel() {
databaseManager = new EdgeListDatabaseManager();
initComponents();
driverComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent ie) {
initDriverType((SQLDriver) ie.getItem());
}
});
browseButton.setVisible(false);
browseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String lastPath = NbPreferences.forModule(EdgeListPanel.class).get(LAST_PATH, "");
final JFileChooser chooser = new JFileChooser(lastPath);
chooser.setAcceptAllFileFilterUsed(false);
chooser.setDialogTitle(NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.sqliteFileChooser.title"));
DialogFileFilter dialogFileFilter = new DialogFileFilter(NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.sqliteFileChooser.filefilter"));
dialogFileFilter.addExtension("sqlite");
dialogFileFilter.addExtension("db");
chooser.addChoosableFileFilter(dialogFileFilter);
int returnFile = chooser.showSaveDialog(null);
if (returnFile != JFileChooser.APPROVE_OPTION) {
return;
}
File file = chooser.getSelectedFile();
hostTextField.setText(file.getAbsolutePath());
//Save last path
NbPreferences.forModule(EdgeListPanel.class).put(LAST_PATH, file.getParentFile().getAbsolutePath());
}
});
}
static ValidationGroup group;
public static ValidationPanel createValidationPanel(EdgeListPanel innerPanel) {
ValidationPanel validationPanel = new ValidationPanel();
if (innerPanel == null) {
throw new NullPointerException();
}
validationPanel.setInnerComponent(innerPanel);
group = validationPanel.getValidationGroup();
//Validators
group.add(innerPanel.configNameTextField, Validators.REQUIRE_NON_EMPTY_STRING);
group.add(innerPanel.hostTextField, new HostOrFileValidator(innerPanel));
group.add(innerPanel.dbTextField, new NotEmptyValidator(innerPanel));
group.add(innerPanel.portTextField, new PortValidator(innerPanel));
group.add(innerPanel.userTextField, new NotEmptyValidator(innerPanel));
return validationPanel;
}
private void initDriverType(final SQLDriver driver) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (driver != null && driver.getPrefix().equals("sqlite")) {
hostLabel.setText(NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.fileLabel.text"));
portTextField.setEnabled(false);
portLabel.setEnabled(false);
dbLabel.setEnabled(false);
dbTextField.setEnabled(false);
userLabel.setEnabled(false);
userTextField.setEnabled(false);
pwdLabel.setEnabled(false);
pwdTextField.setEnabled(false);
pwdTextField.setText("");
userTextField.setText("");
dbTextField.setText("");
portTextField.setText("");
browseButton.setVisible(true);
} else {
hostLabel.setText(NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.hostLabel.text"));
portTextField.setEnabled(true);
portLabel.setEnabled(true);
dbLabel.setEnabled(true);
dbTextField.setEnabled(true);
userLabel.setEnabled(true);
userTextField.setEnabled(true);
pwdLabel.setEnabled(true);
pwdTextField.setEnabled(true);
browseButton.setVisible(false);
}
group.validateAll();
}
});
}
public Database getSelectedDatabase() {
ConfigurationComboModel model =
(ConfigurationComboModel) configurationCombo.getModel();
ConfigurationComboItem item = (ConfigurationComboItem) model.getSelectedItem();
populateEdgeListDatabase(item.db);
// add configuration if user changed the template configuration
if (item.equals(model.templateConfiguration)) {
databaseManager.addDatabase(item.db);
}
databaseManager.persist();
return item.db;
}
public SQLDriver getSelectedSQLDriver() {
return (SQLDriver) driverComboBox.getSelectedItem();
}
public void setSQLDrivers(SQLDriver[] drivers) {
DefaultComboBoxModel driverModel = new DefaultComboBoxModel(drivers);
driverComboBox.setModel(driverModel);
}
public void setup() {
configurationCombo.setModel(new EdgeListPanel.ConfigurationComboModel());
ConfigurationComboModel model =
(ConfigurationComboModel) configurationCombo.getModel();
if (model.getSelectedItem().equals(model.templateConfiguration)) {
this.removeConfigurationButton.setEnabled(false);
} else {
this.removeConfigurationButton.setEnabled(true);
}
}
private void populateForm(EdgeListDatabaseImpl db) {
configNameTextField.setText(db.getName());
dbTextField.setText(db.getDBName());
hostTextField.setText(db.getHost());
portTextField.setText(db.getPort() == 0 ? "" : "" + db.getPort());
userTextField.setText(db.getUsername());
pwdTextField.setText(db.getPasswd());
driverComboBox.getModel().setSelectedItem(db.getSQLDriver());
nodeQueryTextField.setText(db.getNodeQuery());
edgeQueryTextField.setText(db.getEdgeQuery());
initDriverType(db.getSQLDriver());
}
private void populateEdgeListDatabase(EdgeListDatabaseImpl db) {
db.setName(this.configNameTextField.getText());
db.setDBName(this.dbTextField.getText());
db.setHost(this.hostTextField.getText());
db.setPasswd(new String(this.pwdTextField.getPassword()));
db.setPort(!portTextField.getText().isEmpty()
? Integer.parseInt(portTextField.getText()) : 0);
db.setUsername(this.userTextField.getText());
db.setSQLDriver(this.getSelectedSQLDriver());
db.setNodeQuery(this.nodeQueryTextField.getText());
db.setEdgeQuery(this.edgeQueryTextField.getText());
db.setNodeAttributesQuery("");
db.setEdgeAttributesQuery("");
}
/** 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() {
configurationCombo = new javax.swing.JComboBox();
configurationLabel = new javax.swing.JLabel();
hostLabel = new javax.swing.JLabel();
portLabel = new javax.swing.JLabel();
hostTextField = new javax.swing.JTextField();
portTextField = new javax.swing.JTextField();
userLabel = new javax.swing.JLabel();
dbLabel = new javax.swing.JLabel();
pwdLabel = new javax.swing.JLabel();
dbTextField = new javax.swing.JTextField();
userTextField = new javax.swing.JTextField();
driverLabel = new javax.swing.JLabel();
driverComboBox = new javax.swing.JComboBox();
nodeQueryLabel = new javax.swing.JLabel();
nodeQueryTextField = new javax.swing.JTextField();
edgeQueryLabel = new javax.swing.JLabel();
edgeQueryTextField = new javax.swing.JTextField();
testConnection = new javax.swing.JButton();
pwdTextField = new javax.swing.JPasswordField();
configNameTextField = new javax.swing.JTextField();
configNameLabel = new javax.swing.JLabel();
removeConfigurationButton = new javax.swing.JButton();
jXHeader1 = new org.jdesktop.swingx.JXHeader();
browseButton = new javax.swing.JButton();
configurationCombo.setModel(new EdgeListPanel.ConfigurationComboModel());
configurationCombo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
configurationComboActionPerformed(evt);
}
});
configurationLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.configurationLabel.text")); // NOI18N
hostLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.hostLabel.text")); // NOI18N
portLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.portLabel.text")); // NOI18N
hostTextField.setName("host"); // NOI18N
portTextField.setName("port"); // NOI18N
userLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.userLabel.text")); // NOI18N
dbLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.dbLabel.text")); // NOI18N
pwdLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.pwdLabel.text")); // NOI18N
dbTextField.setName("database"); // NOI18N
userTextField.setName("user name"); // NOI18N
driverLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.driverLabel.text")); // NOI18N
nodeQueryLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.nodeQueryLabel.text")); // NOI18N
nodeQueryTextField.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.nodeQueryTextField.text")); // NOI18N
edgeQueryLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.edgeQueryLabel.text")); // NOI18N
edgeQueryTextField.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.edgeQueryTextField.text")); // NOI18N
testConnection.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/importer/plugin/resources/test_connection.png"))); // NOI18N
testConnection.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.testConnection.text")); // NOI18N
testConnection.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
testConnectionActionPerformed(evt);
}
});
pwdTextField.setName("password"); // NOI18N
configNameTextField.setName("configName"); // NOI18N
configNameLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.configNameLabel.text")); // NOI18N
removeConfigurationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/importer/plugin/resources/remove_config.png"))); // NOI18N
removeConfigurationButton.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.removeConfigurationButton.toolTipText")); // NOI18N
removeConfigurationButton.setMargin(new java.awt.Insets(0, 4, 0, 2));
removeConfigurationButton.setPreferredSize(new java.awt.Dimension(65, 29));
removeConfigurationButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeConfigurationButtonActionPerformed(evt);
}
});
jXHeader1.setDescription(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.header")); // NOI18N
jXHeader1.setTitle(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.jXHeader1.title")); // NOI18N
browseButton.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.browseButton.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 655, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(testConnection)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(userLabel)
.addComponent(pwdLabel)
.addComponent(driverLabel)
.addComponent(hostLabel)
.addComponent(portLabel)
.addComponent(dbLabel)
.addComponent(nodeQueryLabel)
.addComponent(edgeQueryLabel)
.addComponent(configNameLabel)
.addComponent(configurationLabel))
.addGap(36, 36, 36)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(configurationCombo, 0, 423, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(removeConfigurationButton, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(configNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE)
.addComponent(edgeQueryTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE)
.addComponent(nodeQueryTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE)
.addComponent(portTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE)
.addComponent(dbTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE)
.addComponent(userTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE)
.addComponent(driverComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(pwdTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(hostTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 351, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(browseButton)))))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(19, 19, 19)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(removeConfigurationButton, 0, 0, Short.MAX_VALUE)
.addComponent(configurationCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 24, Short.MAX_VALUE)
.addComponent(configurationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(19, 19, 19)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(configNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(configNameLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(driverLabel)
.addComponent(driverComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(9, 9, 9)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(hostLabel)
.addComponent(hostTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(browseButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(portLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(dbLabel)
.addComponent(dbTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(userLabel)
.addComponent(userTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(pwdLabel)
.addComponent(pwdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(nodeQueryLabel)
.addComponent(nodeQueryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(edgeQueryLabel)
.addComponent(edgeQueryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(testConnection)
.addContainerGap(53, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void testConnectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_testConnectionActionPerformed
if (!portTextField.getText().isEmpty()) {
try {
Integer.parseInt(portTextField.getText());
} catch (Exception e) {
return;
}
}
Connection conn = null;
try {
conn = getSelectedSQLDriver().getConnection(SQLUtils.getUrl(getSelectedSQLDriver(), hostTextField.getText(), (portTextField.getText().isEmpty() ? 0 : Integer.parseInt(portTextField.getText())), dbTextField.getText()), userTextField.getText(), new String(pwdTextField.getPassword()));
String message = NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.alert.connection_successful");
NotifyDescriptor.Message e = new NotifyDescriptor.Message(message, NotifyDescriptor.INFORMATION_MESSAGE);
DialogDisplayer.getDefault().notifyLater(e);
} catch (SQLException ex) {
NotifyDescriptor.Exception e = new NotifyDescriptor.Exception(ex);
DialogDisplayer.getDefault().notifyLater(e);
} finally {
if (conn != null) {
try {
conn.close();
System.out.println("Database connection terminated");
} catch (Exception e) { /* ignore close errors */ }
}
}
}//GEN-LAST:event_testConnectionActionPerformed
private void removeConfigurationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeConfigurationButtonActionPerformed
ConfigurationComboModel model =
(ConfigurationComboModel) configurationCombo.getModel();
ConfigurationComboItem item = (ConfigurationComboItem) model.getSelectedItem();
if (databaseManager.removeDatabase(item.db)) {
model.removeElement(item);
databaseManager.persist();
String message = NbBundle.getMessage(EdgeListPanel.class,
"EdgeListPanel.alert.configuration_removed", item.toString());
NotifyDescriptor.Message e = new NotifyDescriptor.Message(
message, NotifyDescriptor.INFORMATION_MESSAGE);
DialogDisplayer.getDefault().notifyLater(e);
model.setSelectedItem(model.getElementAt(0));
} else {
String message = NbBundle.getMessage(EdgeListPanel.class,
"EdgeListPanel.alert.configuration_unsaved");
NotifyDescriptor.Message e = new NotifyDescriptor.Message(
message, NotifyDescriptor.ERROR_MESSAGE);
DialogDisplayer.getDefault().notifyLater(e);
}
}//GEN-LAST:event_removeConfigurationButtonActionPerformed
private void configurationComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configurationComboActionPerformed
ConfigurationComboModel model =
(ConfigurationComboModel) configurationCombo.getModel();
ConfigurationComboItem item = (ConfigurationComboItem) model.getSelectedItem();
if (item.equals(model.templateConfiguration)) {
this.removeConfigurationButton.setEnabled(false);
} else {
this.removeConfigurationButton.setEnabled(true);
}
}//GEN-LAST:event_configurationComboActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton browseButton;
private javax.swing.JLabel configNameLabel;
private javax.swing.JTextField configNameTextField;
private javax.swing.JComboBox configurationCombo;
private javax.swing.JLabel configurationLabel;
private javax.swing.JLabel dbLabel;
protected javax.swing.JTextField dbTextField;
private javax.swing.JComboBox driverComboBox;
private javax.swing.JLabel driverLabel;
private javax.swing.JLabel edgeQueryLabel;
protected javax.swing.JTextField edgeQueryTextField;
private javax.swing.JLabel hostLabel;
protected javax.swing.JTextField hostTextField;
private org.jdesktop.swingx.JXHeader jXHeader1;
private javax.swing.JLabel nodeQueryLabel;
protected javax.swing.JTextField nodeQueryTextField;
private javax.swing.JLabel portLabel;
protected javax.swing.JTextField portTextField;
private javax.swing.JLabel pwdLabel;
protected javax.swing.JPasswordField pwdTextField;
private javax.swing.JButton removeConfigurationButton;
private javax.swing.JButton testConnection;
private javax.swing.JLabel userLabel;
protected javax.swing.JTextField userTextField;
// End of variables declaration//GEN-END:variables
public void initEvents() {
}
private class ConfigurationComboModel extends DefaultComboBoxModel {
/**
* The template configuration (will appear as "New Configuration")
*/
ConfigurationComboItem templateConfiguration;
public ConfigurationComboModel() {
super();
Collection<Database> configs = databaseManager.getEdgeListDatabases();
for (Database db : configs) {
EdgeListDatabaseImpl dbe = (EdgeListDatabaseImpl) db;
ConfigurationComboItem item = new ConfigurationComboItem(dbe);
this.insertElementAt(item, this.getSize());
}
// add template configuration option at end
EdgeListDatabaseImpl db = new EdgeListDatabaseImpl();
populateEdgeListDatabase(db);
templateConfiguration = new ConfigurationComboItem(db);
templateConfiguration.setConfigurationName(NEW_CONFIGURATION_NAME);
this.insertElementAt(templateConfiguration, this.getSize());
ConfigurationComboItem selected = (ConfigurationComboItem) this.getElementAt(0);
this.setSelectedItem(selected);
driverComboBox.setSelectedItem(selected.db.getSQLDriver());
}
@Override
public void setSelectedItem(Object anItem) {
ConfigurationComboItem item = (ConfigurationComboItem) anItem;
populateForm(item.db);
super.setSelectedItem(anItem);
}
}
private class ConfigurationComboItem {
private final EdgeListDatabaseImpl db;
private String configurationName;
public ConfigurationComboItem(EdgeListDatabaseImpl db) {
this.db = db;
this.configurationName = db.getName();
}
public EdgeListDatabaseImpl getDb() {
return db;
}
public void setConfigurationName(String configurationName) {
this.configurationName = configurationName;
}
@Override
public String toString() {
String name = configurationName;
if (name == null || name.isEmpty()) {
name = SQLUtils.getUrl(db.getSQLDriver(), db.getHost(), db.getPort(), db.getDBName());
}
return name;
}
}
private static class HostOrFileValidator implements Validator<String> {
private EdgeListPanel panel;
public HostOrFileValidator(EdgeListPanel panel) {
this.panel = panel;
}
@Override
public boolean validate(Problems problems, String compName, String model) {
if (isSqlite(panel)) {
return Validators.FILE_MUST_BE_FILE.validate(problems, compName, model);
} else {
return Validators.REQUIRE_NON_EMPTY_STRING.validate(problems, compName, model);
}
}
}
private static boolean isSqlite(EdgeListPanel panel) {
if (panel.databaseManager.getEdgeListDatabases().size() > 0) {
if (panel.databaseManager.getEdgeListDatabases().get(0).getSQLDriver().getPrefix().equals("sqlite")) {
return true;
}
return false;
} else if (panel.getSelectedSQLDriver().getPrefix().equals("sqlite")) {
return true;
}
return false;
}
private static class NotEmptyValidator implements Validator<String> {
private EdgeListPanel panel;
public NotEmptyValidator(EdgeListPanel panel) {
this.panel = panel;
}
@Override
public boolean validate(Problems problems, String compName, String model) {
if (isSqlite(panel)) {
return true;
} else {
return Validators.REQUIRE_NON_EMPTY_STRING.validate(problems, compName, model);
}
}
}
private static class PortValidator implements Validator<String> {
private EdgeListPanel panel;
public PortValidator(EdgeListPanel panel) {
this.panel = panel;
}
@Override
public boolean validate(Problems problems, String compName, String model) {
if (isSqlite(panel)) {
return true;
} else {
return Validators.REQUIRE_NON_EMPTY_STRING.validate(problems, compName, model)
&& Validators.REQUIRE_VALID_INTEGER.validate(problems, compName, model)
&& Validators.numberRange(1, 65535).validate(problems, compName, model);
}
}
}
}