/*
* Copyright 2007 - 2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sf.jailer.ui;
import java.io.File;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import net.sf.jailer.datamodel.DataModel;
import net.sf.jailer.util.CsvFile;
import net.sf.jailer.util.CsvFile.Line;
import net.sf.jailer.util.CsvFile.LineFilter;
/**
* Dialog for setting database analysing options.
*
* @author Ralf Wisser
*/
public class AnalyseOptionsDialog extends javax.swing.JDialog {
/**
* The selected schema;
*/
private String selectedSchema;
// number of current model elements
private int numTables = 0;
private int numAssociations = 0;
private int numManTables = 0;
private int numManAssociations = 0;
/**
* true if user clicks OK button.
*/
private boolean ok;
/** Creates new form AnalyseOptionsDialog */
public AnalyseOptionsDialog(java.awt.Frame parent, DataModel dataModel) throws Exception {
super(parent, true);
initComponents();
List<Line> tables = new CsvFile(new File(DataModel.getTablesFile(CommandLineInstance.getExecutionContext()))).getLines();
for (Line table: tables) {
++numTables;
if (isManuallyEditedTable(table)) {
++numManTables;
}
}
List<Line> assocs = new CsvFile(new File(DataModel.getAssociationsFile(CommandLineInstance.getExecutionContext()))).getLines();
for (Line assoc: assocs) {
++numAssociations;
if (isManuallyEditedAssoc(assoc)) {
++numManAssociations;
}
}
removeCurrentAssociationsCheckBox.setText(removeCurrentAssociationsCheckBox.getText().replace("0", Integer.toString(numAssociations)));
removeCurrentTablesCheckBox.setText(removeCurrentTablesCheckBox.getText().replace("0", Integer.toString(numTables)));
keepManAssociationsCheckBox.setText(keepManAssociationsCheckBox.getText().replace("0", Integer.toString(numManAssociations)));
keepManTablesCheckBox.setText(keepManTablesCheckBox.getText().replace("0", Integer.toString(numManTables)));
removeCurrentAssociationsCheckBox.setEnabled(numAssociations > 0);
removeCurrentTablesCheckBox.setEnabled(numTables > 0);
pack();
setLocation(parent.getLocation().x + parent.getSize().width/2 - getPreferredSize().width/2,
parent.getLocation().y + parent.getSize().height/2 - getPreferredSize().height/2);
UIUtil.initPeer();
}
public boolean isRemoving() {
return removeCurrentAssociationsCheckBox.isSelected() || removeCurrentTablesCheckBox.isSelected();
}
public LineFilter getAssociationLineFilter() {
final boolean remove = removeCurrentAssociationsCheckBox.isSelected();
final boolean keep = keepManAssociationsCheckBox.isSelected();
return new LineFilter() {
@Override
public boolean accept(Line line) {
if (!remove) {
return true;
}
if (keep && isManuallyEditedAssoc(line)) {
return true;
}
return false;
}
};
}
public LineFilter getTableLineFilter() {
final boolean remove = removeCurrentTablesCheckBox.isSelected();
final boolean keep = keepManTablesCheckBox.isSelected();
return new LineFilter() {
@Override
public boolean accept(Line line) {
if (!remove) {
return true;
}
if (keep && isManuallyEditedTable(line)) {
return true;
}
return false;
}
};
}
private static boolean isManuallyEditedAssoc(Line assoc) {
return DataModelEditor.DATA_MODEL_EDITOR_AUTHOR.equals(assoc.cells.get(6));
}
private static boolean isManuallyEditedTable(Line table) {
int size = table.cells.size();
for (int i = 0; i < size; ++i) {
if ("".equals(table.cells.get(i))) {
return DataModelEditor.DATA_MODEL_EDITOR_AUTHOR.equals(table.cells.get(i+1));
}
}
return false;
}
public boolean edit(List<String> schemas, String defaultSchema, boolean[] isDefaultSchema, String currentUser) {
isDefaultSchema[0] = false;
if (schemas.size() == 1) {
if (schemas.get(0).equalsIgnoreCase(currentUser)) {
isDefaultSchema[0] = true;
}
}
if (schemas.isEmpty()) {
isDefaultSchema[0] = true;
schemaLabel.setVisible(false);
schemaComboBox.setVisible(false);
} else {
DefaultComboBoxModel model = new DefaultComboBoxModel(schemas.toArray());
schemaComboBox.setModel(model);
if (defaultSchema != null) {
schemaComboBox.setSelectedItem(defaultSchema);
}
}
ok = false;
okButton.grabFocus();
setVisible(true);
if (ok) {
selectedSchema = null;
if (!schemas.isEmpty()) {
if (schemaComboBox.getSelectedItem() instanceof String) {
selectedSchema = (String) schemaComboBox.getSelectedItem();
}
}
if (selectedSchema != null && selectedSchema.equalsIgnoreCase(defaultSchema)) {
isDefaultSchema[0] = true;
}
}
return ok;
}
public String getSelectedSchema() {
return selectedSchema;
}
public void appendAnalyseCLIOptions(List<String> args) {
if (analyseAlias.isSelected()) {
args.add("-analyse-alias");
}
if (analyseSynonyms.isSelected()) {
args.add("-analyse-synonym");
}
if (analyseViews.isSelected()) {
args.add("-analyse-view");
}
}
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jPanel2 = new javax.swing.JPanel();
removeCurrentTablesCheckBox = new javax.swing.JCheckBox();
jLabel1 = new javax.swing.JLabel();
keepManTablesCheckBox = new javax.swing.JCheckBox();
removeCurrentAssociationsCheckBox = new javax.swing.JCheckBox();
keepManAssociationsCheckBox = new javax.swing.JCheckBox();
jPanel1 = new javax.swing.JPanel();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
schemaLabel = new javax.swing.JLabel();
schemaComboBox = new net.sf.jailer.ui.JComboBox();
jPanel3 = new javax.swing.JPanel();
analyseAlias = new javax.swing.JCheckBox();
analyseSynonyms = new javax.swing.JCheckBox();
jLabel2 = new javax.swing.JLabel();
analyseViews = new javax.swing.JCheckBox();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Analyze Database");
getContentPane().setLayout(new java.awt.GridBagLayout());
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED), "Preparation"));
jPanel2.setLayout(new java.awt.GridBagLayout());
removeCurrentTablesCheckBox.setText("Remove current tables (0)");
removeCurrentTablesCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeCurrentTablesCheckBoxActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(8, 8, 0, 8);
jPanel2.add(removeCurrentTablesCheckBox, gridBagConstraints);
jLabel1.setText(" ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 8;
jPanel2.add(jLabel1, gridBagConstraints);
keepManTablesCheckBox.setSelected(true);
keepManTablesCheckBox.setText("Keep manually entered tables (0)");
keepManTablesCheckBox.setEnabled(false);
keepManTablesCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
keepManTablesCheckBoxActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(0, 24, 0, 8);
jPanel2.add(keepManTablesCheckBox, gridBagConstraints);
removeCurrentAssociationsCheckBox.setText("Remove current associations (0)");
removeCurrentAssociationsCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeCurrentAssociationsCheckBoxActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(8, 8, 0, 8);
jPanel2.add(removeCurrentAssociationsCheckBox, gridBagConstraints);
keepManAssociationsCheckBox.setSelected(true);
keepManAssociationsCheckBox.setText("Keep manually entered associations (0)");
keepManAssociationsCheckBox.setEnabled(false);
keepManAssociationsCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
keepManAssociationsCheckBoxActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(0, 24, 0, 8);
jPanel2.add(keepManAssociationsCheckBox, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(8, 0, 8, 0);
getContentPane().add(jPanel2, gridBagConstraints);
jPanel1.setLayout(new java.awt.GridBagLayout());
okButton.setText(" Ok ");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 4);
jPanel1.add(okButton, gridBagConstraints);
cancelButton.setText(" Cancel ");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
jPanel1.add(cancelButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 10;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(8, 0, 4, 0);
getContentPane().add(jPanel1, gridBagConstraints);
schemaLabel.setText(" Analyze schema ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 9;
getContentPane().add(schemaLabel, gridBagConstraints);
schemaComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 9;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
getContentPane().add(schemaComboBox, gridBagConstraints);
jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED), "Analyse tables and ..."));
jPanel3.setLayout(new java.awt.GridBagLayout());
analyseAlias.setText("Aliases");
analyseAlias.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
analyseAliasActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(8, 8, 0, 8);
jPanel3.add(analyseAlias, gridBagConstraints);
analyseSynonyms.setText("Synonyms");
analyseSynonyms.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
analyseSynonymsActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(8, 8, 0, 8);
jPanel3.add(analyseSynonyms, gridBagConstraints);
jLabel2.setText(" ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 8;
jPanel3.add(jLabel2, gridBagConstraints);
analyseViews.setText("Views");
analyseViews.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
analyseViewsActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(8, 8, 0, 8);
jPanel3.add(analyseViews, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 8, 0);
getContentPane().add(jPanel3, gridBagConstraints);
pack();
}// </editor-fold>//GEN-END:initComponents
private void removeCurrentTablesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeCurrentTablesCheckBoxActionPerformed
keepManTablesCheckBox.setEnabled(removeCurrentTablesCheckBox.isSelected());
}//GEN-LAST:event_removeCurrentTablesCheckBoxActionPerformed
private void keepManTablesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_keepManTablesCheckBoxActionPerformed
}//GEN-LAST:event_keepManTablesCheckBoxActionPerformed
private void removeCurrentAssociationsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeCurrentAssociationsCheckBoxActionPerformed
keepManAssociationsCheckBox.setEnabled(removeCurrentAssociationsCheckBox.isSelected());
}//GEN-LAST:event_removeCurrentAssociationsCheckBoxActionPerformed
private void keepManAssociationsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_keepManAssociationsCheckBoxActionPerformed
}//GEN-LAST:event_keepManAssociationsCheckBoxActionPerformed
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
ok = true;
setVisible(false);
}//GEN-LAST:event_okButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
ok = false;
setVisible(false);
}//GEN-LAST:event_cancelButtonActionPerformed
private void analyseAliasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_analyseAliasActionPerformed
}//GEN-LAST:event_analyseAliasActionPerformed
private void analyseViewsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_analyseViewsActionPerformed
}//GEN-LAST:event_analyseViewsActionPerformed
private void analyseSynonymsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_analyseSynonymsActionPerformed
}//GEN-LAST:event_analyseSynonymsActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox analyseAlias;
private javax.swing.JCheckBox analyseSynonyms;
private javax.swing.JCheckBox analyseViews;
private javax.swing.JButton cancelButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JCheckBox keepManAssociationsCheckBox;
private javax.swing.JCheckBox keepManTablesCheckBox;
private javax.swing.JButton okButton;
private javax.swing.JCheckBox removeCurrentAssociationsCheckBox;
private javax.swing.JCheckBox removeCurrentTablesCheckBox;
private javax.swing.JComboBox schemaComboBox;
private javax.swing.JLabel schemaLabel;
// End of variables declaration//GEN-END:variables
private static final long serialVersionUID = 7293743969854047598L;
}