/*
* 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.awt.event.ActionListener;
import java.util.Collections;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import net.sf.jailer.datamodel.DataModel;
import net.sf.jailer.datamodel.Table;
import net.sf.jailer.xml.XmlUtil;
import org.w3c.dom.Document;
/**
* XML Column Mapping Dialog.
*
* @author Ralf Wisser
*/
public class ColumnMapperDialog extends javax.swing.JDialog {
private final java.awt.Frame parent;
private Table table;
private DataModel dataModel;
private boolean ok;
private ParameterSelector parameterSelector;
/** Creates new form ColumnMapperDialog */
public ColumnMapperDialog(java.awt.Frame parent, ParameterSelector.ParametersGetter parametersGetter) {
super(parent, true);
this.parent = parent;
initComponents();
paramPanel.add(parameterSelector = new ParameterSelector(this, mappingField, parametersGetter));
tableCombobox.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
try {
if (table != null) {
table = dataModel.getTableByDisplayName((String) tableCombobox.getSelectedItem());
mappingField.setText(XmlUtil.build(table.getXmlTemplateAsDocument(null)));
}
} catch (Exception ex) {
UIUtil.showException(ColumnMapperDialog.this.parent, "Error", ex);
}
}
});
mappingField.setContentType("text/xml");
UIUtil.initPeer();
}
/**
* Edits column mapping for a given table.
*
* @param dataModel the data model
* @param table the table
*/
public boolean edit(DataModel dataModel, Table table) {
parameterSelector.updateParameters();
this.table = null;
Vector<String> tableNames = new Vector<String>();
for (Table t: dataModel.getTables()) {
tableNames.add(dataModel.getDisplayName(t));
}
Collections.sort(tableNames);
tableCombobox.setModel(new DefaultComboBoxModel(tableNames));
tableCombobox.setMaximumRowCount(40);
tableCombobox.setSelectedItem(dataModel.getDisplayName(table));
int w = 600, h = 600;
setSize(w, h);
setLocation(Math.max(0, parent.getX() + parent.getWidth() / 2 - w / 2),
Math.max(0, parent.getY() + parent.getHeight() / 2 - h / 2));
invalidate();
try {
mappingField.setText(XmlUtil.build(table.getXmlTemplateAsDocument(null)));
} catch (Exception e) {
try {
// try again with default template,
// there was a bug in Jailer 3.0 which causes corruption of XML templates
// on windows platform
mappingField.setText(XmlUtil.build(table.getDefaultXmlTemplate(null)));
} catch (Exception e2) {
UIUtil.showException(parent, "Error", e);
return false;
}
}
ok = false;
this.table = table;
this.dataModel = dataModel;
setVisible(true);
return ok;
}
/** 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;
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
tableCombobox = new net.sf.jailer.ui.JComboBox();
jLabel2 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
formatButton = new javax.swing.JButton();
resetButton = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
paramPanel = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
mappingField = new javax.swing.JEditorPane();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("XML Column Mapping");
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.LINE_AXIS));
jPanel1.setLayout(new java.awt.GridBagLayout());
jLabel1.setText(" Table ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel1.add(jLabel1, gridBagConstraints);
tableCombobox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Eintrag 1", "Eintrag 2", "Eintrag 3", "Eintrag 4" }));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel1.add(tableCombobox, gridBagConstraints);
jLabel2.setText(" Mapping ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 10;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 0);
jPanel1.add(jLabel2, gridBagConstraints);
formatButton.setText("Format");
formatButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
formatButtonActionPerformed(evt);
}
});
jPanel2.add(formatButton);
resetButton.setText("Reset");
resetButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
resetButtonActionPerformed(evt);
}
});
jPanel2.add(resetButton);
jLabel3.setText(" ");
jPanel2.add(jLabel3);
okButton.setText("Ok");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
jPanel2.add(okButton);
cancelButton.setText("Cancel");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
jPanel2.add(cancelButton);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 30;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
jPanel1.add(jPanel2, gridBagConstraints);
paramPanel.setMinimumSize(new java.awt.Dimension(150, 0));
paramPanel.setLayout(new javax.swing.BoxLayout(paramPanel, javax.swing.BoxLayout.LINE_AXIS));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 20;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
jPanel1.add(paramPanel, gridBagConstraints);
jScrollPane2.setViewportView(mappingField);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 20;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 4);
jPanel1.add(jScrollPane2, gridBagConstraints);
getContentPane().add(jPanel1);
pack();
}// </editor-fold>//GEN-END:initComponents
private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed
try {
Document doc = table.getDefaultXmlTemplate(null);
mappingField.setText(XmlUtil.build(doc));
} catch (Exception e) {
UIUtil.showException(parent, "Syntax Error", e);
}
}//GEN-LAST:event_resetButtonActionPerformed
private void formatButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_formatButtonActionPerformed
try {
Document doc = XmlUtil.parse(mappingField.getText());
mappingField.setText(XmlUtil.build(doc));
} catch (Exception e) {
UIUtil.showException(parent, "Syntax Error", e, UIUtil.EXCEPTION_CONTEXT_USER_ERROR);
}
}//GEN-LAST:event_formatButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
ok = false;
setVisible(false);
}//GEN-LAST:event_cancelButtonActionPerformed
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
try {
Document doc = XmlUtil.parse(mappingField.getText());
mappingField.setText(XmlUtil.build(doc));
table.setXmlTemplate(mappingField.getText());
ok = true;
setVisible(false);
} catch (Exception e) {
UIUtil.showException(parent, "Syntax Error", e, UIUtil.EXCEPTION_CONTEXT_USER_ERROR);
}
}//GEN-LAST:event_okButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cancelButton;
private javax.swing.JButton formatButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JEditorPane mappingField;
private javax.swing.JButton okButton;
private javax.swing.JPanel paramPanel;
private javax.swing.JButton resetButton;
private net.sf.jailer.ui.JComboBox tableCombobox;
// End of variables declaration//GEN-END:variables
private static final long serialVersionUID = -5437578641818236294L;
}