/*
Copyright 2008-2010 Gephi
Authors : Martin Škurla
Website : http://www.gephi.org
This file is part of Gephi.
Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
Gephi is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Gephi. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.desktop.neo4j.ui;
import java.awt.Component;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import org.gephi.desktop.neo4j.ui.util.GephiUtils;
import org.netbeans.validation.api.builtin.Validators;
import org.netbeans.validation.api.ui.ValidationGroup;
import org.netbeans.validation.api.ui.ValidationPanel;
/**
*
* @author Martin Škurla
*/
public class ExportOptionsPanel extends javax.swing.JPanel {
private static final int PANEL_CHECKBOX_COLUMN_COUNT = 1;
public ExportOptionsPanel() {
initComponents();
fillPanelWithCheckBoxes(exportEdgeColumnsContentPanel, GephiUtils.edgeColumnNames());
fillPanelWithCheckBoxes(exportNodeColumnsContentPanel, GephiUtils.nodeColumnNames());
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
exportPanel = new javax.swing.JPanel();
exportNodeColumnsPanel = new javax.swing.JPanel();
exportNodeColumnsScrollPane = new javax.swing.JScrollPane();
exportNodeColumnsContentPanel = new javax.swing.JPanel();
relationshipTypeNamePanel = new javax.swing.JPanel();
defaultValueLabel = new javax.swing.JLabel();
defaultValueTextField = new javax.swing.JTextField();
fromColumnLabel = new javax.swing.JLabel();
fromColumnComboBox = new javax.swing.JComboBox();
exportEdgeColumnsPanel = new javax.swing.JPanel();
exportEdgeColumnsScrollPane = new javax.swing.JScrollPane();
exportEdgeColumnsContentPanel = new javax.swing.JPanel();
exportPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ExportOptionsPanel.class, "ExportOptionsPanel.exportPanel.border.title"))); // NOI18N
exportNodeColumnsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ExportOptionsPanel.class, "ExportOptionsPanel.exportNodeColumnsPanel.border.title"))); // NOI18N
javax.swing.GroupLayout exportNodeColumnsContentPanelLayout = new javax.swing.GroupLayout(exportNodeColumnsContentPanel);
exportNodeColumnsContentPanel.setLayout(exportNodeColumnsContentPanelLayout);
exportNodeColumnsContentPanelLayout.setHorizontalGroup(
exportNodeColumnsContentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 150, Short.MAX_VALUE)
);
exportNodeColumnsContentPanelLayout.setVerticalGroup(
exportNodeColumnsContentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 157, Short.MAX_VALUE)
);
exportNodeColumnsScrollPane.setViewportView(exportNodeColumnsContentPanel);
javax.swing.GroupLayout exportNodeColumnsPanelLayout = new javax.swing.GroupLayout(exportNodeColumnsPanel);
exportNodeColumnsPanel.setLayout(exportNodeColumnsPanelLayout);
exportNodeColumnsPanelLayout.setHorizontalGroup(
exportNodeColumnsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(exportNodeColumnsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
);
exportNodeColumnsPanelLayout.setVerticalGroup(
exportNodeColumnsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(exportNodeColumnsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
);
relationshipTypeNamePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ExportOptionsPanel.class, "ExportOptionsPanel.relationshipTypeNamePanel.border.title"))); // NOI18N
defaultValueLabel.setText(org.openide.util.NbBundle.getMessage(ExportOptionsPanel.class, "ExportOptionsPanel.defaultValueLabel.text")); // NOI18N
defaultValueTextField.setText(org.openide.util.NbBundle.getMessage(ExportOptionsPanel.class, "ExportOptionsPanel.default value.text")); // NOI18N
defaultValueTextField.setName("default value"); // NOI18N
fromColumnLabel.setText(org.openide.util.NbBundle.getMessage(ExportOptionsPanel.class, "ExportOptionsPanel.fromColumnLabel.text")); // NOI18N
fromColumnComboBox.setModel(new DefaultComboBoxModel(GephiUtils.edgeColumnNames()));
javax.swing.GroupLayout relationshipTypeNamePanelLayout = new javax.swing.GroupLayout(relationshipTypeNamePanel);
relationshipTypeNamePanel.setLayout(relationshipTypeNamePanelLayout);
relationshipTypeNamePanelLayout.setHorizontalGroup(
relationshipTypeNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(relationshipTypeNamePanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(relationshipTypeNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(fromColumnLabel)
.addComponent(defaultValueLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(relationshipTypeNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(defaultValueTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
.addComponent(fromColumnComboBox, 0, 230, Short.MAX_VALUE))
.addContainerGap())
);
relationshipTypeNamePanelLayout.setVerticalGroup(
relationshipTypeNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(relationshipTypeNamePanelLayout.createSequentialGroup()
.addGroup(relationshipTypeNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(fromColumnComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(fromColumnLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(relationshipTypeNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(defaultValueTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(defaultValueLabel))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
exportEdgeColumnsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ExportOptionsPanel.class, "ExportOptionsPanel.exportEdgeColumnsPanel.border.title"))); // NOI18N
javax.swing.GroupLayout exportEdgeColumnsContentPanelLayout = new javax.swing.GroupLayout(exportEdgeColumnsContentPanel);
exportEdgeColumnsContentPanel.setLayout(exportEdgeColumnsContentPanelLayout);
exportEdgeColumnsContentPanelLayout.setHorizontalGroup(
exportEdgeColumnsContentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 150, Short.MAX_VALUE)
);
exportEdgeColumnsContentPanelLayout.setVerticalGroup(
exportEdgeColumnsContentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 157, Short.MAX_VALUE)
);
exportEdgeColumnsScrollPane.setViewportView(exportEdgeColumnsContentPanel);
javax.swing.GroupLayout exportEdgeColumnsPanelLayout = new javax.swing.GroupLayout(exportEdgeColumnsPanel);
exportEdgeColumnsPanel.setLayout(exportEdgeColumnsPanelLayout);
exportEdgeColumnsPanelLayout.setHorizontalGroup(
exportEdgeColumnsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(exportEdgeColumnsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
);
exportEdgeColumnsPanelLayout.setVerticalGroup(
exportEdgeColumnsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(exportEdgeColumnsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
);
javax.swing.GroupLayout exportPanelLayout = new javax.swing.GroupLayout(exportPanel);
exportPanel.setLayout(exportPanelLayout);
exportPanelLayout.setHorizontalGroup(
exportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(relationshipTypeNamePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(exportPanelLayout.createSequentialGroup()
.addComponent(exportNodeColumnsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(exportEdgeColumnsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
exportPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {exportEdgeColumnsPanel, exportNodeColumnsPanel});
exportPanelLayout.setVerticalGroup(
exportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(exportPanelLayout.createSequentialGroup()
.addComponent(relationshipTypeNamePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(exportPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(exportNodeColumnsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(exportEdgeColumnsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
);
exportPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {exportEdgeColumnsPanel, exportNodeColumnsPanel});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(exportPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(exportPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
}// </editor-fold>//GEN-END:initComponents
private void fillPanelWithCheckBoxes(JPanel panel, String[] checkBoxTexts) {
panel.setLayout(new MigLayout("wrap " + PANEL_CHECKBOX_COLUMN_COUNT));
for (String checkBoxText : checkBoxTexts) {
panel.add(new JCheckBox(checkBoxText, true));
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel defaultValueLabel;
private javax.swing.JTextField defaultValueTextField;
private javax.swing.JPanel exportEdgeColumnsContentPanel;
private javax.swing.JPanel exportEdgeColumnsPanel;
private javax.swing.JScrollPane exportEdgeColumnsScrollPane;
private javax.swing.JPanel exportNodeColumnsContentPanel;
private javax.swing.JPanel exportNodeColumnsPanel;
private javax.swing.JScrollPane exportNodeColumnsScrollPane;
private javax.swing.JPanel exportPanel;
private javax.swing.JComboBox fromColumnComboBox;
private javax.swing.JLabel fromColumnLabel;
private javax.swing.JPanel relationshipTypeNamePanel;
// End of variables declaration//GEN-END:variables
public String getDefaultValue() {
return defaultValueTextField.getText().trim();
}
public String getFromColumn() {
return (String) fromColumnComboBox.getSelectedItem();
}
public Collection<String> getExportNodeColumnNames() {
return getSelectedComboBoxNames(exportNodeColumnsContentPanel);
}
public Collection<String> getExportEdgeColumnNames() {
return getSelectedComboBoxNames(exportEdgeColumnsContentPanel);
}
private Collection<String> getSelectedComboBoxNames(JPanel sourcePanel) {
List<String> columnNames = new LinkedList<String>();
for (Component component : sourcePanel.getComponents()) {
if (component instanceof JCheckBox) {
JCheckBox checkBox = (JCheckBox) component;
if (checkBox.isSelected()) {
columnNames.add(checkBox.getText());
}
}
}
return columnNames;
}
@SuppressWarnings("unchecked")
public ValidationPanel createValidationPanel() {
ValidationPanel validationPanel = new ValidationPanel();
validationPanel.setInnerComponent(this);
ValidationGroup group = validationPanel.getValidationGroup();
group.add(defaultValueTextField, Validators.REQUIRE_NON_EMPTY_STRING);
return validationPanel;
}
}