package ir.ac.iust.nlp.dependencyparser.projection;
import edu.stanford.nlp.parser.ensemble.utils.DeprojectivizeCorpus;
import ir.ac.iust.nlp.dependencyparser.BasePanel;
import ir.ac.iust.nlp.dependencyparser.utility.ExampleFileFilter;
import ir.ac.iust.nlp.dependencyparser.utility.enumeration.TransformType;
import java.awt.Color;
import java.awt.GridLayout;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Calendar;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.JOptionPane;
import javax.swing.JSplitPane;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.apache.commons.io.FileUtils;
import org.maltparser.core.exception.MaltChainedException;
import se.vxu.msi.malteval.treeviewer.MaltTreeViewerGui;
import se.vxu.msi.malteval.treeviewer.gui.TreeViewer;
/**
*
* @author Mojtaba Khallash
*/
public class DeprojectivizePanel extends BasePanel {
boolean isInit = false;
String inputFile;
String outputFile;
String currentTempFolder;
/**
* Creates new form DeprojectivizePanel
*/
public DeprojectivizePanel(String dir) {
super(dir);
initComponents();
setDrop();
txtInputFile.setText(dir + File.separator +
"Treebank" + File.separator +
"non-projective" + File.separator +
"projective_head_head_shortest.conll");
txtModelFile.setText(dir + File.separator +
"Treebank" + File.separator +
"non-projective" + File.separator +
"projective_head_head_shortest.mco");
txtOutputPath.setText(dir + File.separator +
"Output" + File.separator +
"deprojectivize" + File.separator);
lblVertical.setVisible(false);
AdjustDividerLocation();
}
private void setDrop() {
initDrop(txtInputFile, false);
initDrop(txtModelFile, false);
initDrop(txtOutputPath, true);
}
@Override
public boolean canSave() {
return true;
}
@Override
public void save() {
switch (tabDependencyInfo.getSelectedIndex()) {
case 0:
// Output
ExampleFileFilter filter = new ExampleFileFilter("txt", "Text Files");
saveText(filter, "Deprojectivizing_log.txt", txtLog.getText());
break;
case 1:
// Tree
saveTree(1);
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() {
pnlParameter = new javax.swing.JPanel();
lblInputFile = new javax.swing.JLabel();
txtInputFile = new javax.swing.JTextField();
btnBrowseInputFile = new javax.swing.JButton();
lblOutputPath = new javax.swing.JLabel();
txtOutputPath = new javax.swing.JTextField();
btnBrowseOutputPath = new javax.swing.JButton();
lblModelFile = new javax.swing.JLabel();
txtModelFile = new javax.swing.JTextField();
btnBrowseModelFile = new javax.swing.JButton();
btnReadNext = new javax.swing.JButton();
pnlNavigation = new javax.swing.JPanel();
btnPrev = new javax.swing.JButton();
sliderSentences = new javax.swing.JSlider();
btnNext = new javax.swing.JButton();
lblCurrentTotal = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
jPanel1 = new javax.swing.JPanel();
tabDependencyInfo = new javax.swing.JTabbedPane();
pnlLog = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
txtLog = new javax.swing.JTextArea();
pnlTrees = new javax.swing.JPanel();
splitTrees = new javax.swing.JSplitPane();
pnlLeft = new javax.swing.JPanel();
lblInputTree = new javax.swing.JLabel();
pnlFirstDT = new javax.swing.JPanel();
pnlRight = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
pnlDeprojectivizeDT = new javax.swing.JPanel();
lblViewMode = new javax.swing.JLabel();
cboViewMode = new javax.swing.JComboBox();
pnlDirection = new javax.swing.JPanel();
lblVertical = new javax.swing.JLabel();
lblHorizontal = new javax.swing.JLabel();
btnPrevChange = new javax.swing.JButton();
btnNextChange = new javax.swing.JButton();
addHierarchyBoundsListener(new java.awt.event.HierarchyBoundsListener() {
public void ancestorMoved(java.awt.event.HierarchyEvent evt) {
}
public void ancestorResized(java.awt.event.HierarchyEvent evt) {
DeprojectivizePanel_Resized(evt);
}
});
pnlParameter.setBorder(javax.swing.BorderFactory.createTitledBorder("Settings"));
lblInputFile.setText("Input File:");
txtInputFile.setEditable(false);
btnBrowseInputFile.setText("...");
btnBrowseInputFile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBrowseInputFile_Click(evt);
}
});
lblOutputPath.setText("Output Path:");
txtOutputPath.setEditable(false);
btnBrowseOutputPath.setText("...");
btnBrowseOutputPath.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBrowseOutputPath_Click(evt);
}
});
lblModelFile.setText("Model File:");
txtModelFile.setEditable(false);
btnBrowseModelFile.setText("...");
btnBrowseModelFile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBrowseModelFile_Click(evt);
}
});
btnReadNext.setText("Start");
btnReadNext.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnReadNext_Click(evt);
}
});
javax.swing.GroupLayout pnlParameterLayout = new javax.swing.GroupLayout(pnlParameter);
pnlParameter.setLayout(pnlParameterLayout);
pnlParameterLayout.setHorizontalGroup(
pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlParameterLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlParameterLayout.createSequentialGroup()
.addGroup(pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblOutputPath)
.addComponent(lblModelFile)
.addComponent(lblInputFile))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlParameterLayout.createSequentialGroup()
.addComponent(txtInputFile)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnBrowseInputFile, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlParameterLayout.createSequentialGroup()
.addGroup(pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtModelFile)
.addComponent(txtOutputPath))
.addGap(8, 8, 8)
.addGroup(pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(btnBrowseModelFile, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE)
.addComponent(btnBrowseOutputPath, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlParameterLayout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(btnReadNext)))
.addContainerGap())
);
pnlParameterLayout.setVerticalGroup(
pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlParameterLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblInputFile)
.addComponent(txtInputFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBrowseInputFile))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblModelFile)
.addComponent(txtModelFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBrowseModelFile))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(pnlParameterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblOutputPath)
.addComponent(txtOutputPath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBrowseOutputPath))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(btnReadNext)
.addGap(23, 23, 23))
);
btnPrev.setText("Prev");
btnPrev.setEnabled(false);
btnPrev.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPrev_Click(evt);
}
});
sliderSentences.setMaximum(0);
sliderSentences.setEnabled(false);
sliderSentences.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
sliderSentences_StateChanged(evt);
}
});
btnNext.setText("Next");
btnNext.setEnabled(false);
btnNext.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnNext_Click(evt);
}
});
lblCurrentTotal.setText("-/-");
javax.swing.GroupLayout pnlNavigationLayout = new javax.swing.GroupLayout(pnlNavigation);
pnlNavigation.setLayout(pnlNavigationLayout);
pnlNavigationLayout.setHorizontalGroup(
pnlNavigationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlNavigationLayout.createSequentialGroup()
.addContainerGap()
.addComponent(btnPrev)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sliderSentences, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnNext)
.addGap(76, 76, 76)
.addComponent(lblCurrentTotal)
.addContainerGap())
);
pnlNavigationLayout.setVerticalGroup(
pnlNavigationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlNavigationLayout.createSequentialGroup()
.addGap(0, 2, Short.MAX_VALUE)
.addGroup(pnlNavigationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(sliderSentences, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnPrev, javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(pnlNavigationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblCurrentTotal)
.addComponent(btnNext))))
);
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel1.setText("Deprojectivizing");
jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jPanel1.setPreferredSize(new java.awt.Dimension(380, 2));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
txtLog.setColumns(20);
txtLog.setEditable(false);
txtLog.setRows(5);
jScrollPane1.setViewportView(txtLog);
javax.swing.GroupLayout pnlLogLayout = new javax.swing.GroupLayout(pnlLog);
pnlLog.setLayout(pnlLogLayout);
pnlLogLayout.setHorizontalGroup(
pnlLogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 679, Short.MAX_VALUE)
);
pnlLogLayout.setVerticalGroup(
pnlLogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE)
);
tabDependencyInfo.addTab("Log", pnlLog);
pnlTrees.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentShown(java.awt.event.ComponentEvent evt) {
pnlTrees_Shown(evt);
}
});
splitTrees.setDividerLocation(300);
pnlLeft.setBackground(new java.awt.Color(255, 255, 255));
lblInputTree.setBackground(new java.awt.Color(255, 255, 255));
lblInputTree.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblInputTree.setText("Input Tree");
lblInputTree.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
pnlFirstDT.setBackground(new java.awt.Color(255, 255, 255));
javax.swing.GroupLayout pnlFirstDTLayout = new javax.swing.GroupLayout(pnlFirstDT);
pnlFirstDT.setLayout(pnlFirstDTLayout);
pnlFirstDTLayout.setHorizontalGroup(
pnlFirstDTLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
pnlFirstDTLayout.setVerticalGroup(
pnlFirstDTLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 94, Short.MAX_VALUE)
);
javax.swing.GroupLayout pnlLeftLayout = new javax.swing.GroupLayout(pnlLeft);
pnlLeft.setLayout(pnlLeftLayout);
pnlLeftLayout.setHorizontalGroup(
pnlLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblInputTree, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
.addComponent(pnlFirstDT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pnlLeftLayout.setVerticalGroup(
pnlLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlLeftLayout.createSequentialGroup()
.addComponent(lblInputTree, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnlFirstDT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
splitTrees.setLeftComponent(pnlLeft);
pnlRight.setBackground(new java.awt.Color(255, 255, 255));
jLabel3.setBackground(new java.awt.Color(255, 255, 255));
jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel3.setText("Deprojectivize Tree");
jLabel3.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
pnlDeprojectivizeDT.setBackground(new java.awt.Color(255, 255, 255));
javax.swing.GroupLayout pnlDeprojectivizeDTLayout = new javax.swing.GroupLayout(pnlDeprojectivizeDT);
pnlDeprojectivizeDT.setLayout(pnlDeprojectivizeDTLayout);
pnlDeprojectivizeDTLayout.setHorizontalGroup(
pnlDeprojectivizeDTLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
pnlDeprojectivizeDTLayout.setVerticalGroup(
pnlDeprojectivizeDTLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 94, Short.MAX_VALUE)
);
javax.swing.GroupLayout pnlRightLayout = new javax.swing.GroupLayout(pnlRight);
pnlRight.setLayout(pnlRightLayout);
pnlRightLayout.setHorizontalGroup(
pnlRightLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 373, Short.MAX_VALUE)
.addComponent(pnlDeprojectivizeDT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pnlRightLayout.setVerticalGroup(
pnlRightLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlRightLayout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnlDeprojectivizeDT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
splitTrees.setRightComponent(pnlRight);
lblViewMode.setText("View Mode ");
cboViewMode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Inline Zoom", "Hierarchical Zoom", "NetGraph Zoom", "Inline Scroll" }));
cboViewMode.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
cboViewMode_ValueChanged(evt);
}
});
pnlDirection.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(240, 240, 240)));
lblVertical.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblVertical.setForeground(new java.awt.Color(153, 153, 153));
lblVertical.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ir/ac/iust/nlp/dependencyparser/evaluation/vertical.png"))); // NOI18N
lblVertical.setText("Vertical ");
lblVertical.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
lblVertical_mouseClick(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
lblVerticalpnlMore_mouseEnter(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
lblVerticalpnlMore_mouseExit(evt);
}
});
lblHorizontal.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
lblHorizontal.setForeground(new java.awt.Color(153, 153, 153));
lblHorizontal.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ir/ac/iust/nlp/dependencyparser/evaluation/horizontal.png"))); // NOI18N
lblHorizontal.setText("Horizontal");
lblHorizontal.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
lblHorizontal_mouseClick(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
lblHorizontalpnlMore_mouseEnter(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
lblHorizontalpnlMore_mouseExit(evt);
}
});
javax.swing.GroupLayout pnlDirectionLayout = new javax.swing.GroupLayout(pnlDirection);
pnlDirection.setLayout(pnlDirectionLayout);
pnlDirectionLayout.setHorizontalGroup(
pnlDirectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlDirectionLayout.createSequentialGroup()
.addGap(8, 8, 8)
.addComponent(lblVertical, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblHorizontal)
.addContainerGap())
);
pnlDirectionLayout.setVerticalGroup(
pnlDirectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlDirectionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblHorizontal, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblVertical, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
);
btnPrevChange.setText("<< Prev Change");
btnPrevChange.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPrevChangeActionPerformed(evt);
}
});
btnNextChange.setText("Next Change >>");
btnNextChange.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnNextChangeActionPerformed(evt);
}
});
javax.swing.GroupLayout pnlTreesLayout = new javax.swing.GroupLayout(pnlTrees);
pnlTrees.setLayout(pnlTreesLayout);
pnlTreesLayout.setHorizontalGroup(
pnlTreesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(splitTrees)
.addGroup(pnlTreesLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lblViewMode)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cboViewMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(48, 48, 48)
.addComponent(btnPrevChange)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnNextChange)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnlDirection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pnlTreesLayout.setVerticalGroup(
pnlTreesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlTreesLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnlTreesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(pnlTreesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblViewMode)
.addComponent(cboViewMode, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnPrevChange)
.addComponent(btnNextChange))
.addComponent(pnlDirection, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(splitTrees))
);
tabDependencyInfo.addTab("Tree", pnlTrees);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pnlNavigation, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pnlParameter, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 684, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(tabDependencyInfo, javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnlParameter, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabDependencyInfo)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnlNavigation, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
}// </editor-fold>//GEN-END:initComponents
private void btnBrowseInputFile_Click(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBrowseInputFile_Click
txtInputFile.setText(showFileDialog(txtInputFile.getText(), false));
}//GEN-LAST:event_btnBrowseInputFile_Click
private void makeFormReady() {
if (currentTempFolder != null) {
File dir = new File(workingDir + File.separator + currentTempFolder);
deleteDirectory(dir);
}
pnlFirstDT.removeAll();
pnlFirstDT.revalidate();
pnlDeprojectivizeDT.removeAll();
pnlDeprojectivizeDT.revalidate();
tabDependencyInfo.setEnabledAt(1, false);
tabDependencyInfo.setSelectedIndex(0);
btnReadNext.setEnabled(false);
}
File to;
File dest_from;
File dest_to;
private void btnReadNext_Click(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnReadNext_Click
gui = null;
makeFormReady();
currentTempFolder = String.valueOf(Calendar.getInstance().getTimeInMillis());
String wd = "tmp" + File.separator + currentTempFolder;
try {
if (isInit == false) {
isInit = true;
inputFile = txtInputFile.getText();
// Ensure have an absolute path
File from = new File(inputFile).getAbsoluteFile();
String input = from.getName();
to = new File(wd + File.separator + input);
inputFile = to.getAbsolutePath();
String modelFile = txtModelFile.getText();
// Ensure have an absolute path
File model_from = new File(modelFile).getAbsoluteFile();
String modelName = model_from.getName();
File model_to = new File(wd + File.separator + modelName);
// Copy input file to working directory
if (!from.equals(to))
FileUtils.copyFile(from, to);
// Copy input file to working directory
if (!model_from.equals(model_to))
FileUtils.copyFile(model_from, model_to);
String extension = input.substring(input.lastIndexOf(".") + 1, input.length());
outputFile = txtOutputPath.getText() +
"deprojective" + "." + extension;
// Ensure have an absolute path
dest_to = new File(outputFile).getAbsoluteFile();
String output = dest_to.getName();
dest_from = new File(wd + File.separator + output);
outputFile = dest_from.getAbsolutePath();
PrintStream out = new PrintStream(new OutputStream() {
private StringBuffer buffer = new StringBuffer();
@Override
public void write(int b)
throws IOException {
this.buffer.append((char) b);
txtLog.setText(buffer.toString());
txtLog.setCaretPosition(txtLog.getDocument().getLength() - 1);
}
});
DeprojectivizeCorpus.out = out;
// Run in a new thread
Runnable job = new RunnableProjectivize(this, TransformType.Deprojectivize, wd, input, output, modelName, null, null, null);
ExecutorService threadPool = Executors.newFixedThreadPool(1);
threadPool.execute(job);
threadPool.shutdown();
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(
null,
ex.getMessage(),
"Reading Error",
JOptionPane.ERROR_MESSAGE);
try
{
File dir = new File(wd + File.separator);
dir.deleteOnExit();
}
catch (Exception e) {}
isInit = false;
}
}//GEN-LAST:event_btnReadNext_Click
@Override
public void threadFinished() {
try {
tabDependencyInfo.setEnabledAt(1, true);
btnReadNext.setEnabled(true);
// Copy result to destination file
if (!dest_from.equals(dest_to))
FileUtils.copyFile(dest_from, dest_to);
} catch (Exception e) {
}
finally {
isInit = false;
}
}
private void btnBrowseOutputPath_Click(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBrowseOutputPath_Click
txtOutputPath.setText(showFileDialog(txtOutputPath.getText(), true));
}//GEN-LAST:event_btnBrowseOutputPath_Click
private void DeprojectivizePanel_Resized(java.awt.event.HierarchyEvent evt) {//GEN-FIRST:event_DeprojectivizePanel_Resized
AdjustDividerLocation();
ChangeViewMode();
}//GEN-LAST:event_DeprojectivizePanel_Resized
private void btnBrowseModelFile_Click(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBrowseModelFile_Click
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"Malt Configuration File", "mco");
txtModelFile.setText(showFileDialog(txtModelFile.getText(), false, filter));
}//GEN-LAST:event_btnBrowseModelFile_Click
private void btnPrev_Click(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPrev_Click
int val = sliderSentences.getValue();
int min = sliderSentences.getMinimum();
if (val > min) {
sliderSentences.setValue(val - 1);
}
}//GEN-LAST:event_btnPrev_Click
private void sliderSentences_StateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_sliderSentences_StateChanged
try {
UpdateTree(sliderSentences.getValue());
} catch (Exception ex) {
}
}//GEN-LAST:event_sliderSentences_StateChanged
private void btnNext_Click(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNext_Click
int val = sliderSentences.getValue();
int max = sliderSentences.getMaximum();
if (val < max) {
sliderSentences.setValue(val + 1);
}
}//GEN-LAST:event_btnNext_Click
private void cboViewMode_ValueChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboViewMode_ValueChanged
ChangeViewMode();
}//GEN-LAST:event_cboViewMode_ValueChanged
private void lblVertical_mouseClick(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblVertical_mouseClick
lblVertical.setVisible(false);
lblHorizontal.setVisible(true);
splitTrees.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
AdjustDividerLocation();
ChangeViewMode();
}//GEN-LAST:event_lblVertical_mouseClick
private void lblVerticalpnlMore_mouseEnter(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblVerticalpnlMore_mouseEnter
pnlDirection.setBackground(new Color(235, 232, 232));
pnlDirection.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(102, 102, 102), 1, false));
}//GEN-LAST:event_lblVerticalpnlMore_mouseEnter
private void lblVerticalpnlMore_mouseExit(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblVerticalpnlMore_mouseExit
pnlDirection.setBackground(new Color(240, 240, 240));
pnlDirection.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(240, 240, 240), 1, false));
}//GEN-LAST:event_lblVerticalpnlMore_mouseExit
private void lblHorizontal_mouseClick(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblHorizontal_mouseClick
lblHorizontal.setVisible(false);
lblVertical.setVisible(true);
splitTrees.setOrientation(JSplitPane.VERTICAL_SPLIT);
AdjustDividerLocation();
ChangeViewMode();
}//GEN-LAST:event_lblHorizontal_mouseClick
private void AdjustDividerLocation() {
int area;
if (lblHorizontal.isVisible() == false)
area = splitTrees.getSize().height;
else
area = splitTrees.getSize().width;
int loc = area / 2;
splitTrees.setDividerLocation(loc);
}
private void lblHorizontalpnlMore_mouseEnter(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblHorizontalpnlMore_mouseEnter
pnlDirection.setBackground(new Color(235, 232, 232));
pnlDirection.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(102, 102, 102), 1, false));
}//GEN-LAST:event_lblHorizontalpnlMore_mouseEnter
private void lblHorizontalpnlMore_mouseExit(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblHorizontalpnlMore_mouseExit
pnlDirection.setBackground(new Color(240, 240, 240));
pnlDirection.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(240, 240, 240), 1, false));
}//GEN-LAST:event_lblHorizontalpnlMore_mouseExit
private void btnPrevChangeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPrevChangeActionPerformed
if (sliderSentences.getValue() > 0) {
this.prevError.doClick();
lblCurrentTotal.setText(gui.getCurrentSentence() + " / " + gui.getSentenceCount());
sliderSentences.setValue(gui.getCurrentSentence());
}
}//GEN-LAST:event_btnPrevChangeActionPerformed
private void btnNextChangeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNextChangeActionPerformed
if (sliderSentences.getValue() < sliderSentences.getMaximum()) {
this.nextError.doClick();
lblCurrentTotal.setText(gui.getCurrentSentence() + " / " + gui.getSentenceCount());
sliderSentences.setValue(gui.getCurrentSentence());
}
}//GEN-LAST:event_btnNextChangeActionPerformed
private void pnlTrees_Shown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_pnlTrees_Shown
if (splitTrees.getDividerLocation() == 0) {
AdjustDividerLocation();
}
try {
if (gui == null && outputFile != null && outputFile.length() != 0) {
startGUI();
}
} catch (Exception ex) {
}
}//GEN-LAST:event_pnlTrees_Shown
private void startGUI() throws Exception {
String extension = inputFile.substring(inputFile.lastIndexOf(".") + 1, inputFile.length());
gui = new MaltTreeViewerGui(
new String[]{outputFile}, extension,
new String[]{inputFile}, extension);
gui.setVisible(false);
btnPrev.setEnabled(false);
int size = gui.getSentenceCount();
if (size > 1) {
btnNext.setEnabled(true);
btnNextChange.setEnabled(true);
btnPrevChange.setEnabled(true);
}
else {
btnNext.setEnabled(false);
btnNextChange.setEnabled(false);
btnPrevChange.setEnabled(false);
}
lblCurrentTotal.setText("1 / " + size);
sliderSentences.setMinimum(0);
sliderSentences.setMaximum(size - 1);
sliderSentences.setValue(0);
sliderSentences.setEnabled(true);
initTreeGui();
if (size == 1)
UpdateTree(0);
}
private void ChangeViewMode() {
if (gui != null) {
gui.changeViewMode(cboViewMode.getSelectedIndex() + 1);
}
}
private void UpdateTree(int index) throws MaltChainedException {
gui.getCurrentSentenceListComponent().setSelectedSentence(index);
gui.changeViewMode(cboViewMode.getSelectedIndex() + 1);
TreeViewer tv = gui.getMediators().get(0);
javax.swing.JPanel pnl = tv.getSplitPane();
pnlFirstDT.removeAll();
pnlFirstDT.setLayout(new GridLayout());
pnlFirstDT.add(pnl);
pnlFirstDT.revalidate();
tv = gui.getMediators().get(1);
pnl = tv.getSplitPane();
pnlDeprojectivizeDT.removeAll();
pnlDeprojectivizeDT.setLayout(new GridLayout());
pnlDeprojectivizeDT.add(pnl);
pnlDeprojectivizeDT.revalidate();
lblCurrentTotal.setText((index + 1) + " / " + gui.getSentenceCount());
if (index == sliderSentences.getMaximum())
btnNext.setEnabled(false);
else
btnNext.setEnabled(true);
if (index == sliderSentences.getMinimum())
btnPrev.setEnabled(false);
else
btnPrev.setEnabled(true);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnBrowseInputFile;
private javax.swing.JButton btnBrowseModelFile;
private javax.swing.JButton btnBrowseOutputPath;
private javax.swing.JButton btnNext;
private javax.swing.JButton btnNextChange;
private javax.swing.JButton btnPrev;
private javax.swing.JButton btnPrevChange;
private javax.swing.JButton btnReadNext;
private javax.swing.JComboBox cboViewMode;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblCurrentTotal;
private javax.swing.JLabel lblHorizontal;
private javax.swing.JLabel lblInputFile;
private javax.swing.JLabel lblInputTree;
private javax.swing.JLabel lblModelFile;
private javax.swing.JLabel lblOutputPath;
private javax.swing.JLabel lblVertical;
private javax.swing.JLabel lblViewMode;
private javax.swing.JPanel pnlDeprojectivizeDT;
private javax.swing.JPanel pnlDirection;
private javax.swing.JPanel pnlFirstDT;
private javax.swing.JPanel pnlLeft;
private javax.swing.JPanel pnlLog;
private javax.swing.JPanel pnlNavigation;
private javax.swing.JPanel pnlParameter;
private javax.swing.JPanel pnlRight;
private javax.swing.JPanel pnlTrees;
private javax.swing.JSlider sliderSentences;
private javax.swing.JSplitPane splitTrees;
private javax.swing.JTabbedPane tabDependencyInfo;
private javax.swing.JTextField txtInputFile;
private javax.swing.JTextArea txtLog;
private javax.swing.JTextField txtModelFile;
private javax.swing.JTextField txtOutputPath;
// End of variables declaration//GEN-END:variables
}