/*
Copyright 2011 Museum of Natural History Vienna
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 at.nhmwien.schema_mapping_tool;
import javax.swing.*;
import java.util.*;
import java.nio.charset.*;
import at.nhmwien.schema_mapping_tool.fileProcessors.*;
import at.nhmwien.schema_mapping_tool.mappingProcess.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.apache.commons.configuration.XMLConfiguration;
/**
*
* @author wkoller
*/
public class ProcessMappingWindow extends javax.swing.JFrame {
MappingTask task;
MappingProcess mp;
DataSourceOptionsPanel inputOptionsPanel = null;
DataSourceOptionsPanel outputOptionsPanel = null;
private XMLConfiguration settings = new XMLConfiguration();
// TODO: Improve mappingTask
class MappingTask extends SwingWorker<Void, Void> {
public Void doInBackground() {
try {
// Reset progress-Bar
progressBar.setValue(0);
progressBarLabel.setText("Creating File Processors");
// Get the file-processors from the according options panels
FileProcessor ifp = inputOptionsPanel.getProcessor();
FileProcessor ofp = outputOptionsPanel.getProcessor();
progressBar.setValue(10);
progressBarLabel.setText("Preparing & Initializing File Processors");
mp.setProcessor( ifp , ofp );
mp.setInputFile( inputOptionsPanel.getFileName() , (Charset) ifEncodingComboBox.getSelectedItem() );
mp.setOutputFile( outputOptionsPanel.getFileName() , (Charset) ofEncodingComboBox.getSelectedItem() );
/* if( ifp.getClass().getName().contains( "JDBCProcessor" ) ) {
// mp.setInputFile( jdbcURLTextField.getText() + dbnameTextField.getText() + "?user=" + usernameTextField.getText() + "&password=" + String.copyValueOf(passwordField.getPassword()) + "&" + tableField.getText() , (Charset) ifEncodingComboBox.getSelectedItem() );
}
else {
// mp.setInputFile( inputFileName.getText() , (Charset) ifEncodingComboBox.getSelectedItem() );
}
if( ofp.getClass().getName().contains( "JDBCProcessor" ) ) {
// mp.setOutputFile( jdbcURLTextField.getText() + dbnameTextField.getText() + "?user=" + usernameTextField.getText() + "&password=" + String.copyValueOf(passwordField.getPassword()) + "&" + tableField.getText() , (Charset) ifEncodingComboBox.getSelectedItem() );
}
else {
// mp.setOutputFile( outputFileName.getText() , (Charset) ofEncodingComboBox.getSelectedItem() );
}*/
/*try {
ifp.setFile(new File(inputFileName.getText()));
ifp.setEncoding( (Charset) ifEncodingComboBox.getSelectedItem());
ifp.prepareFileRead();
ofp.setFile(new File(outputFileName.getText()));
ofp.setEncoding( (Charset) ofEncodingComboBox.getSelectedItem());
ofp.prepareFileWrite();
} catch (Exception e) {
e.printStackTrace();
//JOptionPane.showMessageDialog(this, "An error occured while trying to process the files:\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}*/
mp.setInputIDPrefix( inputIDPrefixTextField.getText() );
mp.setCountThreshold( Integer.valueOf( countThresholdTextField.getText() ) );
progressBar.setValue(15);
progressBarLabel.setText("Converting Mappings-Hash & Preparing Processors");
try {
mp.prepare();
}
catch( Exception e ) {
JOptionPane.showMessageDialog(null, "Error Preparing mapping process: " + e.getLocalizedMessage(), "Error", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
progressBarLabel.setText("Error - Error while preparing mapping process");
return null;
}
progressBarLabel.setText("Done - Starting with mapping process");
// Re-structure the mappings set
// Note we convert the mappings into an input to output HashMap here
// because then we do not have to perform a search on each mapping
/*HashMap<String, ArrayList<String>> tempMappings = new HashMap<String, ArrayList<String>>();
while (MappingsHandler.self().hasNext()) {
// Map.Entry<String, ArrayList> entry = (Map.Entry<String, ArrayList>) mapsIt.next();
Map.Entry<String, HashMap<String,MappingRecord>> entry = MappingsHandler.self().next();
HashMap<String,MappingRecord> mappingsList = entry.getValue();
String outputFieldID = entry.getKey();
Iterator<String> mplIt = mappingsList.keySet().iterator();
while (mplIt.hasNext()) {
String inputFieldID = mplIt.next();
ArrayList<String> toMaps = null;
if (tempMappings.containsKey(inputFieldID)) {
toMaps = tempMappings.get(inputFieldID);
} else {
toMaps = new ArrayList<String>(0);
}
toMaps.add(outputFieldID);
tempMappings.put(inputFieldID, toMaps);
}
}*/
progressBar.setValue(25);
//MappingsHandler.self().printMappings();
while( mp.processMapping() ) {
if( Thread.interrupted() ) {
progressBarLabel.setText( "Aborted" );
break;
}
progressBarLabel.setText("Processing Entries - " + mp.getEntriesDone() + " Done.");
}
}
catch( Exception e ) {
JOptionPane.showMessageDialog( null, "Error Occured during processing: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE );
e.printStackTrace();
progressBarLabel.setText( "Error Occured! Processed entries: " + mp.getEntriesDone() );
}
abortButton.setEnabled(false);
processButton.setEnabled(true);
/*boolean bDataMapped = false;
int entriesDone = 0;
HashMap<String,String> persistentMappings = new HashMap<String,String>();
while (ifp.hasNext()) {
// Check if thread got aborted
if( Thread.interrupted() ) {
progressBarLabel.setText( "Aborted" );
progressBar.setValue(100);
return null;
}
DataRecord fr = ifp.next();
if (fr == null) {
ifp.nextEntry();
if (bDataMapped) {
ofp.nextEntry();
bDataMapped = false;
}
fr = ifp.next();
entriesDone++;
progressBarLabel.setText("Processing Entries - " + entriesDone + " Done.");
persistentMappings = new HashMap<String,String>();
}
//System.out.println( "Processing Input: " + fr.getIDRecord() );
//System.out.println( "InputID: " + fr.getIDRecord() + " Content: " + fr.getRecordContent() );
// Check if the input ID is mapped
if (tempMappings.containsKey(fr.getIDRecord())) {
ArrayList<String> targets = tempMappings.get(fr.getIDRecord());
Iterator<String> tIt = targets.iterator();
while (tIt.hasNext()) {
boolean bAddNew = false;
String currTarget = tIt.next();
//System.out.println( "InputID: " + fr.getIDRecord() + " mapped to: " + currTarget );
// Get Mapping record for our current mapping
MappingRecord cMR = MappingsHandler.self().getMapping(fr.getIDRecord(), currTarget);
// Get current datarecord
DataRecord cDR = ofp.getDataRecord(currTarget);
String recordContent = fr.getRecordContent();
// Manipulate record content
recordContent = ManipulationsHandler.self().manipulateValue(fr.getIDRecord(), currTarget, recordContent);
// Check if existing record is non-empty
if( !cDR.getRecordContent().isEmpty() ) {
// Now check the action
switch (cMR.existsAction) {
// Concatenate the contents
case CONCATENATE:
recordContent = cDR.getRecordContent() + " " + recordContent;
break;
// TODO: Implement COPY action
case COPY:
break;
// Add a new entry
case NEW:
bAddNew = true;
break;
// Keep old content
case KEEP:
recordContent = cDR.getRecordContent();
break;
// Only replace content if the new value is not empty
// Which means: keep old content if value is empty
case REPLACEIFNOTEMPTY:
if (recordContent.isEmpty()) {
recordContent = cDR.getRecordContent();
}
break;
// No additional action required
default:
break;
}
}
// Check if this is a persistant mapping
if( cMR.persistentMapping ) {
persistentMappings.put( currTarget , recordContent );
}
// Set record content
DataRecord ofr = new DataRecord();
ofr.setRecordContent(recordContent);
ofr.setIDRecord(currTarget);
//fr.setRecordContent(recordContent);
// Update ID of record
//fr.setIDRecord(currTarget);
// Write the data record
ofp.addDataRecord(ofr, bAddNew, cMR.persistentMapping );
// Check if we added a new entry, if yes we have to re-run all persistent mappings
if( bAddNew ) {
Iterator<String> pmIt = persistentMappings.keySet().iterator();
while( pmIt.hasNext() ) {
String target = pmIt.next();
ofr.setRecordContent( persistentMappings.get( target ) );
ofr.setIDRecord(target);
ofp.addDataRecord(ofr, false, true);
}
}
bDataMapped = true;
}
}
}
progressBar.setValue(90);
// Finalize the mapping process
ifp.done();
ofp.done();*/
mp.done();
progressBar.setValue(100);
return null;
}
}
/** Creates new form ProcessMappingWindow */
public ProcessMappingWindow() {
initComponents();
// Disable the abort button by default
this.abortButton.setEnabled(false);
// Add the available file types to the dropdown
String[] fpTypes = ProcessorHandler.self().getProcessors();
DefaultComboBoxModel iffCbModel = new DefaultComboBoxModel();
DefaultComboBoxModel offCbModel = new DefaultComboBoxModel();
for( int i = 0; i < fpTypes.length; i++ ) {
iffCbModel.addElement(fpTypes[i]);
offCbModel.addElement(fpTypes[i]);
// Get all valid file-types for this handler and add a filenameextensionfilter for it
/*String[] fpFileTypes = ProcessorHandler.self().getSupportedFilesForType(fpTypes[i]);
if( fpFileTypes != null ) {
String fpFTDescription = fpTypes[i] + " (*." + fpFileTypes[0];
for( int j = 1; j < fpFileTypes.length; j++ ) {
fpFTDescription += ", *." + fpFileTypes[j];
}
fpFTDescription += ")";
//FileNameExtensionFilter filter = new FileNameExtensionFilter( fpFTDescription, fpFileTypes );
//fc.addChoosableFileFilter(filter);
}*/
}
this.inputFileFormatComboBox.setModel(iffCbModel);
this.outputFileFormatComboBox.setModel(offCbModel);
// Add all available character encodings to the drop-down
DefaultComboBoxModel ifECbModel = new DefaultComboBoxModel();
DefaultComboBoxModel ofECbModel = new DefaultComboBoxModel();
SortedMap<String,Charset> availChars = Charset.availableCharsets();
Iterator<Map.Entry<String,Charset>> acIt = availChars.entrySet().iterator();
while( acIt.hasNext() ) {
Map.Entry<String,Charset> currEntry = acIt.next();
ifECbModel.addElement(currEntry.getValue());
ofECbModel.addElement(currEntry.getValue());
}
this.ifEncodingComboBox.setModel(ifECbModel);
this.ofEncodingComboBox.setModel(ofECbModel);
this.mp = new MappingProcess();
// Create our initial settings windows
inputFileFormatComboBoxActionPerformed( null );
outputFileFormatComboBoxActionPerformed( null );
}
/** 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() {
progressPanel = new javax.swing.JPanel();
progressBar = new javax.swing.JProgressBar();
progressBarLabel = new javax.swing.JLabel();
abortButton = new javax.swing.JButton();
processButton = new javax.swing.JButton();
typeSelectTabbedPanel = new javax.swing.JTabbedPane();
optionsPanel = new javax.swing.JPanel();
inputFileFormatLabel = new javax.swing.JLabel();
outputFileFormatLabel = new javax.swing.JLabel();
inputFileFormatComboBox = new javax.swing.JComboBox();
outputFileFormatComboBox = new javax.swing.JComboBox();
ifEncodingLabel = new javax.swing.JLabel();
ifEncodingComboBox = new javax.swing.JComboBox();
ofEncodingLabel = new javax.swing.JLabel();
ofEncodingComboBox = new javax.swing.JComboBox();
cooButton = new javax.swing.JButton();
cioButton = new javax.swing.JButton();
inputIDPrefixLabel = new javax.swing.JLabel();
inputIDPrefixTextField = new javax.swing.JTextField();
countThresholdLabel = new javax.swing.JLabel();
countThresholdTextField = new javax.swing.JFormattedTextField();
menuToolBar = new javax.swing.JToolBar();
loadSettingsButton = new javax.swing.JButton();
saveSettingsButton = new javax.swing.JButton();
setTitle("Process Mapping");
setResizable(false);
progressPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Mapping Progress", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 1, 12), new java.awt.Color(1, 1, 1))); // NOI18N
progressBarLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
progressBarLabel.setText("Progress");
javax.swing.GroupLayout progressPanelLayout = new javax.swing.GroupLayout(progressPanel);
progressPanel.setLayout(progressPanelLayout);
progressPanelLayout.setHorizontalGroup(
progressPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, progressPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(progressPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(progressBarLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 657, Short.MAX_VALUE)
.addComponent(progressBar, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 657, Short.MAX_VALUE))
.addContainerGap())
);
progressPanelLayout.setVerticalGroup(
progressPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, progressPanelLayout.createSequentialGroup()
.addComponent(progressBarLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
abortButton.setText("Abort");
abortButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
abortButtonActionPerformed(evt);
}
});
processButton.setText("Process");
processButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
processButtonActionPerformed(evt);
}
});
optionsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Process Options", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 1, 12), new java.awt.Color(1, 1, 1))); // NOI18N
inputFileFormatLabel.setText("Input Format:");
outputFileFormatLabel.setText("Output Format:");
inputFileFormatComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
inputFileFormatComboBoxActionPerformed(evt);
}
});
outputFileFormatComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
outputFileFormatComboBoxActionPerformed(evt);
}
});
ifEncodingLabel.setText("Encoding:");
ofEncodingLabel.setText("Encoding:");
cooButton.setText("Output Order");
cooButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cooButtonActionPerformed(evt);
}
});
cioButton.setText("Input Order");
cioButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cioButtonActionPerformed(evt);
}
});
inputIDPrefixLabel.setText("Input ID Prefix:");
countThresholdLabel.setText("New File every X entries:");
countThresholdTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));
countThresholdTextField.setText("0");
javax.swing.GroupLayout optionsPanelLayout = new javax.swing.GroupLayout(optionsPanel);
optionsPanel.setLayout(optionsPanelLayout);
optionsPanelLayout.setHorizontalGroup(
optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsPanelLayout.createSequentialGroup()
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(inputFileFormatLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(outputFileFormatLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(18, 18, 18)
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsPanelLayout.createSequentialGroup()
.addComponent(inputFileFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(ifEncodingLabel))
.addGroup(optionsPanelLayout.createSequentialGroup()
.addComponent(outputFileFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(ofEncodingLabel)))
.addGap(18, 18, 18)
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ofEncodingComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(ifEncodingComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(optionsPanelLayout.createSequentialGroup()
.addComponent(cioButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 434, Short.MAX_VALUE)
.addComponent(cooButton))
.addGroup(optionsPanelLayout.createSequentialGroup()
.addComponent(inputIDPrefixLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(inputIDPrefixTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 552, Short.MAX_VALUE))
.addGroup(optionsPanelLayout.createSequentialGroup()
.addComponent(countThresholdLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(countThresholdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
optionsPanelLayout.setVerticalGroup(
optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(optionsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(inputFileFormatLabel)
.addComponent(inputFileFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(ifEncodingLabel)
.addComponent(ifEncodingComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(outputFileFormatLabel)
.addComponent(outputFileFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(ofEncodingLabel)
.addComponent(ofEncodingComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(inputIDPrefixLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(inputIDPrefixTextField))
.addGap(18, 18, 18)
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(countThresholdLabel)
.addComponent(countThresholdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(optionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cioButton)
.addComponent(cooButton))
.addContainerGap())
);
menuToolBar.setRollover(true);
loadSettingsButton.setText("Load");
loadSettingsButton.setFocusable(false);
loadSettingsButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
loadSettingsButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
loadSettingsButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
loadSettingsButtonActionPerformed(evt);
}
});
menuToolBar.add(loadSettingsButton);
saveSettingsButton.setText("Save");
saveSettingsButton.setFocusable(false);
saveSettingsButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
saveSettingsButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
saveSettingsButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveSettingsButtonActionPerformed(evt);
}
});
menuToolBar.add(saveSettingsButton);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(menuToolBar, javax.swing.GroupLayout.DEFAULT_SIZE, 715, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(optionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(typeSelectTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 703, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(progressPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(abortButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 541, Short.MAX_VALUE)
.addComponent(processButton)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(menuToolBar, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(optionsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(typeSelectTabbedPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(progressPanel, 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(abortButton)
.addComponent(processButton))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void processButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_processButtonActionPerformed
task = new MappingTask();
task.execute();
this.processButton.setEnabled(false);
this.abortButton.setEnabled(true);
}//GEN-LAST:event_processButtonActionPerformed
private void abortButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_abortButtonActionPerformed
//this.setVisible(false);
if( task != null ) task.cancel(true);
task = null;
this.processButton.setEnabled(true);
this.abortButton.setEnabled(false);
}//GEN-LAST:event_abortButtonActionPerformed
private void inputFileFormatComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_inputFileFormatComboBoxActionPerformed
if( this.inputOptionsPanel != null ) this.typeSelectTabbedPanel.remove( this.inputOptionsPanel );
// TODO: Replace check with something less static
if( ((String) this.inputFileFormatComboBox.getSelectedItem()).contains( "JDBC" ) ) {
this.inputOptionsPanel = new JDBCConnectPanel();
}
else {
this.inputOptionsPanel = new FileSelectPanel();
}
this.inputOptionsPanel.setType(true);
this.inputOptionsPanel.setSourceName((String) this.inputFileFormatComboBox.getSelectedItem());
this.typeSelectTabbedPanel.insertTab( "Input", null, this.inputOptionsPanel, null, 0 );
this.typeSelectTabbedPanel.setSelectedIndex( 0 );
//this.inputTabPanel.add( this.inputOptionsPanel );
//this.inputTabPanel.validate();
}//GEN-LAST:event_inputFileFormatComboBoxActionPerformed
private void outputFileFormatComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_outputFileFormatComboBoxActionPerformed
if( this.outputOptionsPanel != null ) this.typeSelectTabbedPanel.remove( this.outputOptionsPanel );
// TODO: Replace check with something less static
if( ((String) this.outputFileFormatComboBox.getSelectedItem()).contains( "JDBC" ) ) {
this.outputOptionsPanel = new JDBCConnectPanel();
}
else {
this.outputOptionsPanel = new FileSelectPanel();
}
this.outputOptionsPanel.setType(false);
this.outputOptionsPanel.setSourceName((String) this.outputFileFormatComboBox.getSelectedItem());
this.typeSelectTabbedPanel.insertTab( "Output", null, this.outputOptionsPanel, null, 1 );
this.typeSelectTabbedPanel.setSelectedIndex( 1 );
//this.outputTabPanel.add( this.outputOptionsPanel );
//this.outputTabPanel.validate();
}//GEN-LAST:event_outputFileFormatComboBoxActionPerformed
private void cooButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cooButtonActionPerformed
ChangeFieldOrderWindow.Self().setVisible(true, MainWindow.FIELD_OUTPUT);
}//GEN-LAST:event_cooButtonActionPerformed
private void cioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cioButtonActionPerformed
ChangeFieldOrderWindow.Self().setVisible(true, MainWindow.FIELD_INPUT);
}//GEN-LAST:event_cioButtonActionPerformed
private void loadSettingsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadSettingsButtonActionPerformed
JFileChooser fc = new JFileChooser();
fc.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter fnef = new FileNameExtensionFilter("SMT Processing Settings (*.sps)", "sps");
fc.addChoosableFileFilter(fnef);
// Let the user chose a settings file
if( fc.showDialog(this, "Load Processing Settings") == JFileChooser.APPROVE_OPTION ) {
try {
this.settings = new XMLConfiguration(fc.getSelectedFile());
// Update the interface to show all saved settings
this.inputFileFormatComboBox.setSelectedItem(this.settings.getProperty("config.input-file-processor"));
this.outputFileFormatComboBox.setSelectedItem(this.settings.getProperty("config.output-file-processor"));
this.ifEncodingComboBox.setSelectedItem(Charset.forName( (String) this.settings.getProperty("config.input-file-encoding") ));
this.ofEncodingComboBox.setSelectedItem(Charset.forName( (String) this.settings.getProperty("config.output-file-encoding") ));
this.inputIDPrefixTextField.setText( (String) this.settings.getProperty("config.input-id-prefix" ) );
this.countThresholdTextField.setText( (String) this.settings.getProperty("config.count-threshold") );
MappingsHandler.Self().setInputOrder( (ArrayList<String>) this.settings.getProperty( "config.input-field-order") );
MappingsHandler.Self().setOutputOrder( (ArrayList<String>) this.settings.getProperty( "config.output-field-order") );
// Now load the processor specific settings
FileProcessor fp = this.inputOptionsPanel.getProcessor();
String options[] = fp.getAvailableOptions();
for( String option : options ) {
if( this.settings.containsKey("config.inputProcessor.options." + option) ) fp.setOption(option, this.settings.getProperty("config.inputProcessor.options." + option) );
}
fp = this.outputOptionsPanel.getProcessor();
options = fp.getAvailableOptions();
for( String option : options ) {
if( this.settings.containsKey("config.outputProcessor.options." + option) ) fp.setOption(option, this.settings.getProperty("config.outputProcessor.options." + option) );
}
// Update options from processor for display
this.inputOptionsPanel.loadOptions();
this.outputOptionsPanel.loadOptions();
/*Iterator it = this.settings.getKeys("config.inputProcessor.options");
while( it.hasNext() ) {
System.out.println( it.next().toString() );
}*/
//this.settings.get
} catch( Exception e ) {
e.printStackTrace();
}
}
}//GEN-LAST:event_loadSettingsButtonActionPerformed
/**
* Save all settings to a given file
* @param evt
*/
private void saveSettingsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveSettingsButtonActionPerformed
// Save all configuration properties
this.settings.setProperty("config.input-file-processor", this.inputFileFormatComboBox.getSelectedItem());
this.settings.setProperty("config.output-file-processor", this.outputFileFormatComboBox.getSelectedItem());
this.settings.setProperty("config.input-file-encoding", this.ifEncodingComboBox.getSelectedItem().toString());
this.settings.setProperty("config.output-file-encoding", this.ofEncodingComboBox.getSelectedItem().toString());
this.settings.setProperty("config.input-id-prefix", this.inputIDPrefixTextField.getText());
this.settings.setProperty("config.count-threshold", this.countThresholdTextField.getText());
this.settings.setProperty("config.input-field-order", MappingsHandler.Self().getInputOrder());
this.settings.setProperty("config.output-field-order", MappingsHandler.Self().getOutputOrder());
// Save File-Processor specific options
FileProcessor fp = this.inputOptionsPanel.getProcessor();
String fpOptions[] = fp.getAvailableOptions();
for( String fpOption : fpOptions ) {
this.settings.setProperty( "config.inputProcessor.options." + fpOption, fp.getOption(fpOption));
}
fp = this.outputOptionsPanel.getProcessor();
fpOptions = fp.getAvailableOptions();
for( String fpOption : fpOptions ) {
this.settings.setProperty( "config.outputProcessor.options." + fpOption, fp.getOption(fpOption));
}
JFileChooser fc = new JFileChooser();
fc.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter fnef = new FileNameExtensionFilter("SMT Processing Settings (*.sps)", "sps");
fc.addChoosableFileFilter(fnef);
// Let the user chose a settings file
if( fc.showDialog(this, "Save Processing Settings") == JFileChooser.APPROVE_OPTION ) {
try {
this.settings.save(fc.getSelectedFile());
} catch( Exception e ) {
e.printStackTrace();
}
}
}//GEN-LAST:event_saveSettingsButtonActionPerformed
/**
* Load all processing settings from a given file
* @param evt
*/
/**
* Save all settings to a given configuration file
* @param evt
*/
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton abortButton;
private javax.swing.JButton cioButton;
private javax.swing.JButton cooButton;
private javax.swing.JLabel countThresholdLabel;
private javax.swing.JFormattedTextField countThresholdTextField;
private javax.swing.JComboBox ifEncodingComboBox;
private javax.swing.JLabel ifEncodingLabel;
private javax.swing.JComboBox inputFileFormatComboBox;
private javax.swing.JLabel inputFileFormatLabel;
private javax.swing.JLabel inputIDPrefixLabel;
private javax.swing.JTextField inputIDPrefixTextField;
private javax.swing.JButton loadSettingsButton;
private javax.swing.JToolBar menuToolBar;
private javax.swing.JComboBox ofEncodingComboBox;
private javax.swing.JLabel ofEncodingLabel;
private javax.swing.JPanel optionsPanel;
private javax.swing.JComboBox outputFileFormatComboBox;
private javax.swing.JLabel outputFileFormatLabel;
private javax.swing.JButton processButton;
private javax.swing.JProgressBar progressBar;
private javax.swing.JLabel progressBarLabel;
private javax.swing.JPanel progressPanel;
private javax.swing.JButton saveSettingsButton;
private javax.swing.JTabbedPane typeSelectTabbedPanel;
// End of variables declaration//GEN-END:variables
}