/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
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.ui.filters.plugin.attribute;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Pattern;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.filters.plugin.attribute.AttributeEqualBuilder;
import org.gephi.filters.spi.FilterProperty;
import org.netbeans.validation.api.Problems;
import org.netbeans.validation.api.Validator;
import org.netbeans.validation.api.ui.ValidationGroup;
import org.netbeans.validation.api.ui.ValidationPanel;
/**
*
* @author Mathieu Bastian
*/
public class EqualStringPanel extends javax.swing.JPanel implements ActionListener {
private AttributeEqualBuilder.EqualStringFilter filter;
public EqualStringPanel() {
initComponents();
okButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt) {
FilterProperty pattern = filter.getProperties()[1];
FilterProperty useRegex = filter.getProperties()[2];
try {
if (pattern.getValue() == null || !pattern.getValue().equals(textField.getText())) {
pattern.setValue(textField.getText());
}
if (useRegex.getValue() == null || !useRegex.getValue().equals(regexCheckbox.isSelected())) {
useRegex.setValue(regexCheckbox.isSelected());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void setup(AttributeEqualBuilder.EqualStringFilter filter) {
this.filter = filter;
this.setToolTipText(filter.getName() + " '" + filter.getColumn().getTitle() + "'");
FilterProperty pattern = filter.getProperties()[1];
FilterProperty useRegex = filter.getProperties()[2];
try {
textField.setText((String) pattern.getValue());
regexCheckbox.setSelected((Boolean) useRegex.getValue());
} catch (Exception e) {
e.printStackTrace();
}
}
public static ValidationPanel createValidationPanel(final EqualStringPanel innerPanel) {
final ValidationPanel validationPanel = new ValidationPanel();
validationPanel.setInnerComponent(innerPanel);
ValidationGroup group = validationPanel.getValidationGroup();
validationPanel.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
innerPanel.okButton.setEnabled(!validationPanel.isProblem());
}
});
//Node field
group.add(innerPanel.textField, new RegexValidator(innerPanel));
return validationPanel;
}
/** 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() {
java.awt.GridBagConstraints gridBagConstraints;
labelPattern = new javax.swing.JLabel();
textField = new javax.swing.JTextField();
regexCheckbox = new javax.swing.JCheckBox();
okButton = new javax.swing.JButton();
setLayout(new java.awt.GridBagLayout());
labelPattern.setText(org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.labelPattern.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(labelPattern, gridBagConstraints);
textField.setText(org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.textField.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
add(textField, gridBagConstraints);
regexCheckbox.setText(org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.regexCheckbox.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
add(regexCheckbox, gridBagConstraints);
okButton.setText(org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.okButton.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(okButton, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel labelPattern;
private javax.swing.JButton okButton;
private javax.swing.JCheckBox regexCheckbox;
private javax.swing.JTextField textField;
// End of variables declaration//GEN-END:variables
private static class RegexValidator implements Validator<String> {
private EqualStringPanel panel;
public RegexValidator(EqualStringPanel panel) {
this.panel = panel;
}
@Override
public boolean validate(Problems problems, String compName, String model) {
boolean result = true;
if (panel.regexCheckbox.isSelected()) {
try {
Pattern p = Pattern.compile(model);
} catch (Exception e) {
result = false;
}
if (!result) {
String message = "Invalid regex";
problems.add(message);
}
}
return result;
}
}
}