package ir.ac.iust.nlp.dependencyparser.optomization;
import ir.ac.iust.nlp.dependencyparser.BasePanel;
import ir.ac.iust.nlp.dependencyparser.utility.ExampleFileFilter;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.JOptionPane;
import org.apache.commons.io.FileUtils;
/**
*
* @author Mojtaba Khallash
*/
public class OptimizerPanel extends BasePanel {
boolean isInit = false;
/**
* Creates new form OptimizerPanel
*/
public OptimizerPanel(String dir) {
super(dir);
initComponents();
setDrop();
txtTrainCorpusFile.setText(dir + File.separator
+ "Treebank" + File.separator
+ "Swedish" + File.separator
+ "talbanken05_train.conll");
}
private void setDrop() {
initDrop(txtTrainCorpusFile, false);
}
@Override
public boolean canSave() {
return true;
}
@Override
public void save() {
ExampleFileFilter filter = new ExampleFileFilter("txt", "Text Files");
switch (tabOptimizerPhase.getSelectedIndex()) {
case 0:
// Output Phase 1
saveText(filter, "Phase1_log.txt", txtPhase1.getText());
break;
case 1:
// Output Phase 2
saveText(filter, "Phase2_log.txt", txtPhase2.getText());
break;
case 2:
// Output Phase 3
saveText(filter, "Phase3_log.txt", txtPhase3.getText());
break;
}
}
@Override
public void saveAs() {
save();
}
/**
* 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() {
buttonGroup1 = new javax.swing.ButtonGroup();
jPanel2 = new javax.swing.JPanel();
lblTrainCorpusFile = new javax.swing.JLabel();
txtTrainCorpusFile = new javax.swing.JTextField();
btnBrowseTrainCorpusFile = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
rdbPhase1 = new javax.swing.JRadioButton();
rdbPhase2 = new javax.swing.JRadioButton();
jRadioButton3 = new javax.swing.JRadioButton();
btnRunOptimizer = new javax.swing.JButton();
lblParser = new javax.swing.JLabel();
cboParser = new javax.swing.JComboBox();
chkCrossVal = new javax.swing.JCheckBox();
tabOptimizerPhase = new javax.swing.JTabbedPane();
pnlPhase1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
txtPhase1 = new javax.swing.JTextArea();
pnlPhase2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
txtPhase2 = new javax.swing.JTextArea();
pnlPhase3 = new javax.swing.JPanel();
jScrollPane3 = new javax.swing.JScrollPane();
txtPhase3 = new javax.swing.JTextArea();
jLabel2 = new javax.swing.JLabel();
jPanel8 = new javax.swing.JPanel();
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Settings"));
lblTrainCorpusFile.setText("Training Corpus File:");
txtTrainCorpusFile.setEditable(false);
btnBrowseTrainCorpusFile.setText("...");
btnBrowseTrainCorpusFile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBrowseTrainCorpusFile_Click(evt);
}
});
buttonGroup1.add(rdbPhase1);
rdbPhase1.setSelected(true);
rdbPhase1.setText("Phase 1");
buttonGroup1.add(rdbPhase2);
rdbPhase2.setText("Phase 2");
buttonGroup1.add(jRadioButton3);
jRadioButton3.setText("Phase 3");
btnRunOptimizer.setText("Run");
btnRunOptimizer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnRunOptimizerActionPerformed(evt);
}
});
lblParser.setText("Parser:");
cboParser.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "MaltParser" }));
chkCrossVal.setText("5-Fold Cross Validation");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblParser)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cboParser, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(rdbPhase1)
.addGap(18, 18, 18)
.addComponent(rdbPhase2)
.addGap(18, 18, 18)
.addComponent(jRadioButton3)
.addGap(18, 18, 18)
.addComponent(chkCrossVal)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btnRunOptimizer)
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(rdbPhase1)
.addComponent(rdbPhase2)
.addComponent(jRadioButton3)
.addComponent(btnRunOptimizer)
.addComponent(lblParser)
.addComponent(cboParser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(chkCrossVal))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblTrainCorpusFile)
.addGap(18, 18, 18)
.addComponent(txtTrainCorpusFile)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnBrowseTrainCorpusFile, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblTrainCorpusFile)
.addComponent(txtTrainCorpusFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBrowseTrainCorpusFile))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
txtPhase1.setColumns(20);
txtPhase1.setEditable(false);
txtPhase1.setRows(5);
jScrollPane1.setViewportView(txtPhase1);
javax.swing.GroupLayout pnlPhase1Layout = new javax.swing.GroupLayout(pnlPhase1);
pnlPhase1.setLayout(pnlPhase1Layout);
pnlPhase1Layout.setHorizontalGroup(
pnlPhase1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 632, Short.MAX_VALUE)
);
pnlPhase1Layout.setVerticalGroup(
pnlPhase1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE)
);
tabOptimizerPhase.addTab("Phase 1 Log", pnlPhase1);
txtPhase2.setColumns(20);
txtPhase2.setEditable(false);
txtPhase2.setRows(5);
jScrollPane2.setViewportView(txtPhase2);
javax.swing.GroupLayout pnlPhase2Layout = new javax.swing.GroupLayout(pnlPhase2);
pnlPhase2.setLayout(pnlPhase2Layout);
pnlPhase2Layout.setHorizontalGroup(
pnlPhase2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 632, Short.MAX_VALUE)
);
pnlPhase2Layout.setVerticalGroup(
pnlPhase2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE)
);
tabOptimizerPhase.addTab("Phase 2 Log", pnlPhase2);
txtPhase3.setColumns(20);
txtPhase3.setEditable(false);
txtPhase3.setRows(5);
jScrollPane3.setViewportView(txtPhase3);
javax.swing.GroupLayout pnlPhase3Layout = new javax.swing.GroupLayout(pnlPhase3);
pnlPhase3.setLayout(pnlPhase3Layout);
pnlPhase3Layout.setHorizontalGroup(
pnlPhase3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 632, Short.MAX_VALUE)
);
pnlPhase3Layout.setVerticalGroup(
pnlPhase3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlPhase3Layout.createSequentialGroup()
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 146, Short.MAX_VALUE)
.addContainerGap())
);
tabOptimizerPhase.addTab("Phase3 Log", pnlPhase3);
jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel2.setText("Optimization");
jPanel8.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jPanel8.setPreferredSize(new java.awt.Dimension(380, 2));
javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
jPanel8.setLayout(jPanel8Layout);
jPanel8Layout.setHorizontalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
jPanel8Layout.setVerticalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tabOptimizerPhase, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, 637, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabOptimizerPhase)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
private void btnBrowseTrainCorpusFile_Click(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBrowseTrainCorpusFile_Click
txtTrainCorpusFile.setText(showFileDialog(txtTrainCorpusFile.getText(), false));
}//GEN-LAST:event_btnBrowseTrainCorpusFile_Click
File to = null;
private void btnRunOptimizerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRunOptimizerActionPerformed
btnRunOptimizer.setEnabled(false);
if (isInit == false) {
isInit = true;
int phase;
if (rdbPhase1.isSelected() == true) {
tabOptimizerPhase.setSelectedIndex(0);
phase = 1;
} else if (rdbPhase2.isSelected() == true) {
tabOptimizerPhase.setSelectedIndex(1);
phase = 2;
} else {
tabOptimizerPhase.setSelectedIndex(2);
phase = 3;
}
String inputFile = txtTrainCorpusFile.getText();
// Ensure have an absolute path
File from = new File(inputFile).getAbsoluteFile();
String input = from.getName();
to = new File(new File(workingDir).getParent() + File.separator + input);
try {
// Copy input file to working directory
if (!from.equals(to)) {
FileUtils.copyFile(from, to);
}
else {
to = null;
}
PrintStream out = new PrintStream(new OutputStream() {
private StringBuffer buffer = new StringBuffer();
@Override
public void write(int b)
throws IOException {
this.buffer.append((char) b);
if (rdbPhase1.isSelected() == true) {
txtPhase1.setText(buffer.toString());
txtPhase1.setCaretPosition(txtPhase1.getDocument().getLength() - 1);
} else if (rdbPhase2.isSelected() == true) {
txtPhase2.setText(buffer.toString());
txtPhase2.setCaretPosition(txtPhase2.getDocument().getLength() - 1);
} else {
txtPhase3.setText(buffer.toString());
txtPhase3.setCaretPosition(txtPhase3.getDocument().getLength() - 1);
}
}
});
optimizer.Optimizer.out = out;
// Run in a new thread
Runnable job = new RunnableOptimizer(this, phase, input, chkCrossVal.isSelected());
ExecutorService threadPool = Executors.newFixedThreadPool(1);
threadPool.execute(job);
threadPool.shutdown();
} catch (Exception ex) {
JOptionPane.showMessageDialog(
null,
ex.getMessage(),
"Reading Error",
JOptionPane.ERROR_MESSAGE);
}
}
}//GEN-LAST:event_btnRunOptimizerActionPerformed
@Override
public void threadFinished() {
try {
if (to != null) {
FileUtils.forceDelete(to);
}
} catch (Exception e) {
}
to = null;
isInit = false;
btnRunOptimizer.setEnabled(true);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnBrowseTrainCorpusFile;
private javax.swing.JButton btnRunOptimizer;
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JComboBox cboParser;
private javax.swing.JCheckBox chkCrossVal;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel8;
private javax.swing.JRadioButton jRadioButton3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JLabel lblParser;
private javax.swing.JLabel lblTrainCorpusFile;
private javax.swing.JPanel pnlPhase1;
private javax.swing.JPanel pnlPhase2;
private javax.swing.JPanel pnlPhase3;
private javax.swing.JRadioButton rdbPhase1;
private javax.swing.JRadioButton rdbPhase2;
private javax.swing.JTabbedPane tabOptimizerPhase;
private javax.swing.JTextArea txtPhase1;
private javax.swing.JTextArea txtPhase2;
private javax.swing.JTextArea txtPhase3;
private javax.swing.JTextField txtTrainCorpusFile;
// End of variables declaration//GEN-END:variables
}