corpus-services  1.0
CorpusServicesGUI.java
Go to the documentation of this file.
1 /*
2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6 package de.uni_hamburg.corpora.swing;
7 
15 import java.awt.BorderLayout;
16 import java.awt.Color;
17 import java.awt.Desktop;
18 import java.io.File;
19 import java.io.FileFilter;
20 import java.io.FileOutputStream;
21 import java.io.FilenameFilter;
22 import java.io.IOException;
23 import java.net.MalformedURLException;
24 import java.net.URI;
25 import java.net.URISyntaxException;
26 import java.net.URL;
27 import java.nio.file.Paths;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.Collection;
31 import java.util.List;
32 import java.util.Vector;
33 import java.util.logging.Level;
34 import java.util.logging.Logger;
35 import javax.swing.DefaultListModel;
36 import javax.swing.ImageIcon;
37 import javax.swing.JDialog;
38 import javax.swing.JFileChooser;
39 import javax.swing.JOptionPane;
40 import javax.swing.JScrollPane;
41 import javax.swing.JTextPane;
42 import javax.swing.SwingUtilities;
43 import javax.swing.WindowConstants;
44 import javax.swing.border.LineBorder;
45 import javax.swing.text.BadLocationException;
46 import javax.swing.text.Style;
47 import javax.swing.text.StyleConstants;
48 import javax.swing.text.StyledDocument;
49 import org.exmaralda.folker.utilities.HTMLDisplayDialog;
50 import org.exmaralda.partitureditor.jexmaralda.JexmaraldaException;
51 //import org.exmaralda.common.jdomutilities.IOUtilities;
52 //import org.exmaralda.folker.utilities.HTMLDisplayDialog;
53 //import org.exmaralda.partitureditor.fsm.FSMException;
54 //import org.exmaralda.partitureditor.jexmaralda.BasicTranscription;
55 //import org.exmaralda.partitureditor.jexmaralda.convert.CHATConverter;
56 //import org.exmaralda.partitureditor.jexmaralda.convert.ELANConverter;
57 //import org.exmaralda.partitureditor.jexmaralda.convert.StylesheetFactory;
58 //import org.exmaralda.partitureditor.jexmaralda.convert.TEIConverter;
59 //import org.exmaralda.partitureditor.jexmaralda.convert.TranscriberConverter;
60 //import org.exmaralda.partitureditor.partiture.BrowserLauncher;
61 import org.jdom.Document;
62 import org.jdom.JDOMException;
63 import org.jdom.output.Format;
64 import org.jdom.output.XMLOutputter;
65 import org.xml.sax.SAXException;
66 
71 public class CorpusServicesGUI extends javax.swing.JFrame {
72  DropPanel dropPanel = new DropPanel();
73  FileDrop fileDrop;
74  DefaultListModel listModel = new DefaultListModel();
75  int done = 0;
76  int all = 0;
77  LineBorder dragBorder = new LineBorder(Color.BLUE, 3, true);
78 
79  ImageIcon inactiveIcon;
80  ImageIcon activeIcon;
81 
82  CorpusIO cio = new CorpusIO();
83  CorpusMagician corpuma = new CorpusMagician();
84  Collection<CorpusData> allFiles = new ArrayList();
85  Report report = new Report();
86  ArrayList<String> functions = (ArrayList<String>) corpuma.getAllExistingCFs();
90  public CorpusServicesGUI() {
91  initComponents();
92  inactiveIcon = new javax.swing.ImageIcon(getClass().getResource("/images/droptarget.png"));
93  activeIcon = new javax.swing.ImageIcon(getClass().getResource("/images/droptarget_active.png"));
94  mainPanel.add(dropPanel, java.awt.BorderLayout.NORTH);
95  teiFilesList.setModel(listModel);
96  pack();
97  fileDrop = new FileDrop(dropPanel,
98  dragBorder,
99  new FileDrop.Listener() {
100  @Override
101  public void filesDropped(java.io.File[] files) {
102  // handle file drop
103  handleFileDrop(files);
104  } // end filesDropped
105  }); // end FileDrop.Listener
106  }
107 
113  @SuppressWarnings("unchecked")
114  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
115  private void initComponents() {
116 
117  panel1 = new java.awt.Panel();
118  backGroundPanel = new java.awt.Panel();
119  mainPanel = new javax.swing.JPanel();
120  jPanel1 = new javax.swing.JPanel();
121  messageAndProgressPanel = new javax.swing.JPanel();
122  messageScrollPane = new javax.swing.JScrollPane();
123  messagesTextArea = new javax.swing.JTextArea();
124  listScrollPane = new javax.swing.JScrollPane();
125  teiFilesList = new javax.swing.JList();
126  operationsPanel = new javax.swing.JPanel();
127  showXMLButton = new javax.swing.JButton();
128  showHTMLButton = new javax.swing.JButton();
129  lowerPanel = new javax.swing.JPanel();
130  jPanel7 = new javax.swing.JPanel();
131  sidePanel = new javax.swing.JPanel();
132  corpusServices = new javax.swing.JPanel();
133  jLabel3 = new javax.swing.JLabel();
134  settingsPanel = new javax.swing.JPanel();
135  corpusFunction = new javax.swing.JPanel();
136  jLabel1 = new javax.swing.JLabel();
137  parseMethodComboBox = new javax.swing.JComboBox();
138  jLabel2 = new javax.swing.JLabel();
139  outputPanel = new javax.swing.JPanel();
140  output = new javax.swing.JLabel();
141  sameDirectory = new javax.swing.JRadioButton();
142  otherDirectory = new javax.swing.JRadioButton();
143  otherDirectoryTextField = new javax.swing.JTextField();
144  browseButton = new javax.swing.JButton();
145  jLabel4 = new javax.swing.JLabel();
146  jLabel5 = new javax.swing.JLabel();
147  jTextField2 = new javax.swing.JTextField();
148  jLabel6 = new javax.swing.JLabel();
149  jTextField3 = new javax.swing.JTextField();
150  jComboBox1 = new javax.swing.JComboBox<>();
151  helpButton = new javax.swing.JButton();
152  progressBar = new javax.swing.JProgressBar();
153  dropletToggleButton = new javax.swing.JToggleButton();
154 
155  javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(panel1);
156  panel1.setLayout(panel1Layout);
157  panel1Layout.setHorizontalGroup(
158  panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
159  .addGap(0, 100, Short.MAX_VALUE)
160  );
161  panel1Layout.setVerticalGroup(
162  panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
163  .addGap(0, 100, Short.MAX_VALUE)
164  );
165 
166  setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
167  setBackground(new java.awt.Color(15, 155, 155));
168 
169  backGroundPanel.setBackground(new java.awt.Color(15, 155, 155));
170 
171  mainPanel.setBackground(new java.awt.Color(15, 155, 155));
172  mainPanel.setLayout(new java.awt.BorderLayout());
173 
174  jPanel1.setBackground(new java.awt.Color(15, 155, 155));
175 
176  messageAndProgressPanel.setBackground(new java.awt.Color(15, 155, 155));
177  messageAndProgressPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createCompoundBorder(), " Messages", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 1, 14))); // NOI18N
178  messageAndProgressPanel.setForeground(new java.awt.Color(255, 255, 255));
179  messageAndProgressPanel.setToolTipText("");
180  messageAndProgressPanel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
181 
182  messageScrollPane.setBackground(new java.awt.Color(15, 155, 155));
183  messageScrollPane.setBorder(null);
184  messageScrollPane.setViewportBorder(null);
185 
186  messagesTextArea.setBackground(new java.awt.Color(172, 221, 221));
187  messagesTextArea.setColumns(20);
188  messagesTextArea.setFont(new java.awt.Font("Monospaced", 0, 12)); // NOI18N
189  messagesTextArea.setForeground(new java.awt.Color(255, 255, 255));
190  messagesTextArea.setRows(5);
191  messagesTextArea.setBorder(null);
192  messagesTextArea.setPreferredSize(new java.awt.Dimension(140, 75));
193  messagesTextArea.setRequestFocusEnabled(false);
194  messageScrollPane.setViewportView(messagesTextArea);
195 
196  javax.swing.GroupLayout messageAndProgressPanelLayout = new javax.swing.GroupLayout(messageAndProgressPanel);
197  messageAndProgressPanel.setLayout(messageAndProgressPanelLayout);
198  messageAndProgressPanelLayout.setHorizontalGroup(
199  messageAndProgressPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
200  .addGroup(messageAndProgressPanelLayout.createSequentialGroup()
201  .addContainerGap()
202  .addComponent(messageScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 299, javax.swing.GroupLayout.PREFERRED_SIZE)
203  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
204  );
205  messageAndProgressPanelLayout.setVerticalGroup(
206  messageAndProgressPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
207  .addComponent(messageScrollPane, javax.swing.GroupLayout.Alignment.TRAILING)
208  );
209 
210  listScrollPane.setBackground(new java.awt.Color(15, 155, 155));
211  listScrollPane.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createCompoundBorder(), "Converted files", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 1, 14))); // NOI18N
212  listScrollPane.setForeground(new java.awt.Color(255, 255, 255));
213 
214  teiFilesList.setBackground(new java.awt.Color(172, 221, 221));
215  teiFilesList.setForeground(new java.awt.Color(255, 255, 255));
216  teiFilesList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
217  public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
218  teiFilesListValueChanged(evt);
219  }
220  });
221  listScrollPane.setViewportView(teiFilesList);
222 
223  operationsPanel.setBackground(new java.awt.Color(15, 155, 155));
224  operationsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createCompoundBorder(), "Operations", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 1, 14))); // NOI18N
225  operationsPanel.setForeground(new java.awt.Color(255, 255, 255));
226 
227  showXMLButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/code.png")));
228  showXMLButton.setToolTipText("Show XML");
229  showXMLButton.setEnabled(false);
230  showXMLButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
231  showXMLButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
232  showXMLButton.addActionListener(new java.awt.event.ActionListener() {
233  public void actionPerformed(java.awt.event.ActionEvent evt) {
234  showXMLButtonActionPerformed(evt);
235  }
236  });
237  operationsPanel.add(showXMLButton);
238 
239  showHTMLButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/earth.png")));
240  showHTMLButton.setToolTipText("Show HTML in Browser");
241  showHTMLButton.setEnabled(false);
242  showHTMLButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
243  showHTMLButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
244  showHTMLButton.addActionListener(new java.awt.event.ActionListener() {
245  public void actionPerformed(java.awt.event.ActionEvent evt) {
246  showHTMLButtonActionPerformed(evt);
247  }
248  });
249  operationsPanel.add(showHTMLButton);
250 
251  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
252  jPanel1.setLayout(jPanel1Layout);
253  jPanel1Layout.setHorizontalGroup(
254  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
255  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
256  .addGap(5, 5, 5)
257  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
258  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
259  .addComponent(messageAndProgressPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
260  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
261  .addComponent(listScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 316, javax.swing.GroupLayout.PREFERRED_SIZE)
262  .addGap(8, 8, 8))
263  .addComponent(operationsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 643, javax.swing.GroupLayout.PREFERRED_SIZE))
264  .addContainerGap())
265  );
266  jPanel1Layout.setVerticalGroup(
267  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
268  .addGroup(jPanel1Layout.createSequentialGroup()
269  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
270  .addComponent(messageAndProgressPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
271  .addComponent(listScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 232, javax.swing.GroupLayout.PREFERRED_SIZE))
272  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
273  .addComponent(operationsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
274  .addContainerGap())
275  );
276 
277  mainPanel.add(jPanel1, java.awt.BorderLayout.CENTER);
278 
279  lowerPanel.setBackground(new java.awt.Color(15, 155, 155));
280  lowerPanel.setLayout(new java.awt.BorderLayout());
281 
282  jPanel7.setBackground(new java.awt.Color(15, 155, 155));
283  jPanel7.setLayout(new java.awt.BorderLayout());
284  lowerPanel.add(jPanel7, java.awt.BorderLayout.SOUTH);
285 
286  sidePanel.setBackground(new java.awt.Color(15, 155, 155));
287  sidePanel.setBorder(null);
288 
289  corpusServices.setBackground(new java.awt.Color(15, 155, 155));
290 
291  jLabel3.setBackground(new java.awt.Color(15, 155, 155));
292  jLabel3.setFont(new java.awt.Font("Segoe UI", 1, 18)); // NOI18N
293  jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/chart-bars.png")));
294  jLabel3.setText("corpus services");
295 
296  javax.swing.GroupLayout corpusServicesLayout = new javax.swing.GroupLayout(corpusServices);
297  corpusServices.setLayout(corpusServicesLayout);
298  corpusServicesLayout.setHorizontalGroup(
299  corpusServicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
300  .addGroup(corpusServicesLayout.createSequentialGroup()
301  .addContainerGap()
302  .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)
303  .addContainerGap())
304  );
305  corpusServicesLayout.setVerticalGroup(
306  corpusServicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
307  .addGroup(corpusServicesLayout.createSequentialGroup()
308  .addContainerGap()
309  .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
310  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
311  );
312 
313  javax.swing.GroupLayout sidePanelLayout = new javax.swing.GroupLayout(sidePanel);
314  sidePanel.setLayout(sidePanelLayout);
315  sidePanelLayout.setHorizontalGroup(
316  sidePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
317  .addGroup(sidePanelLayout.createSequentialGroup()
318  .addContainerGap()
319  .addComponent(corpusServices, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
320  );
321  sidePanelLayout.setVerticalGroup(
322  sidePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
323  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, sidePanelLayout.createSequentialGroup()
324  .addContainerGap()
325  .addComponent(corpusServices, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
326  .addGap(420, 420, 420))
327  );
328 
329  settingsPanel.setBackground(new java.awt.Color(15, 155, 155));
330  settingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createCompoundBorder(), "Settings", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 1, 14))); // NOI18N
331  settingsPanel.setForeground(new java.awt.Color(255, 255, 255));
332  settingsPanel.setToolTipText("");
333  settingsPanel.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
334  settingsPanel.setFocusable(false);
335  settingsPanel.setFont(new java.awt.Font("sansserif", 0, 18)); // NOI18N
336  settingsPanel.setMaximumSize(new java.awt.Dimension(150, 300));
337  settingsPanel.setMinimumSize(new java.awt.Dimension(120, 200));
338  settingsPanel.setName(""); // NOI18N
339 
340  corpusFunction.setBackground(new java.awt.Color(15, 155, 155));
341  corpusFunction.setAlignmentX(0.0F);
342 
343  jLabel1.setBackground(new java.awt.Color(15, 155, 155));
344  jLabel1.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
345  jLabel1.setForeground(new java.awt.Color(255, 255, 255));
346  jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/magic-wand.png")));
347  jLabel1.setText("Corpus function(s)");
348  jLabel1.setToolTipText("Choose the corpus function(s) you want to use.");
349 
350  parseMethodComboBox.setBackground(new java.awt.Color(15, 155, 155));
351  parseMethodComboBox.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
352  parseMethodComboBox.setForeground(new java.awt.Color(255, 255, 255));
353  parseMethodComboBox.setModel(new javax.swing.DefaultComboBoxModel(functions.toArray()));
354  parseMethodComboBox.setOpaque(true);
355  parseMethodComboBox.addActionListener(new java.awt.event.ActionListener() {
356  public void actionPerformed(java.awt.event.ActionEvent evt) {
357  parseMethodComboBoxActionPerformed(evt);
358  }
359  });
360 
361  jLabel2.setBackground(new java.awt.Color(15, 155, 155));
362  jLabel2.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
363  jLabel2.setForeground(new java.awt.Color(255, 255, 255));
364  jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/cog.png")));
365  jLabel2.setText("Parameters");
366  jLabel2.setToolTipText("Choose the parameters you want to use.");
367 
368  javax.swing.GroupLayout corpusFunctionLayout = new javax.swing.GroupLayout(corpusFunction);
369  corpusFunction.setLayout(corpusFunctionLayout);
370  corpusFunctionLayout.setHorizontalGroup(
371  corpusFunctionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
372  .addGroup(corpusFunctionLayout.createSequentialGroup()
373  .addContainerGap()
374  .addGroup(corpusFunctionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
375  .addComponent(jLabel1)
376  .addComponent(parseMethodComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
377  .addComponent(jLabel2))
378  .addContainerGap(12, Short.MAX_VALUE))
379  );
380  corpusFunctionLayout.setVerticalGroup(
381  corpusFunctionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
382  .addGroup(corpusFunctionLayout.createSequentialGroup()
383  .addContainerGap()
384  .addComponent(jLabel1)
385  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
386  .addComponent(parseMethodComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
387  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
388  .addComponent(jLabel2)
389  .addContainerGap(17, Short.MAX_VALUE))
390  );
391 
392  outputPanel.setBackground(new java.awt.Color(15, 155, 155));
393 
394  output.setBackground(new java.awt.Color(15, 155, 155));
395  output.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
396  output.setForeground(new java.awt.Color(255, 255, 255));
397  output.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/enter.png")));
398  output.setText("Write output to");
399 
400  sameDirectory.setBackground(new java.awt.Color(15, 155, 155));
401  sameDirectory.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
402  sameDirectory.setForeground(new java.awt.Color(255, 255, 255));
403  sameDirectory.setSelected(true);
404  sameDirectory.setText("the same directory");
405  sameDirectory.setOpaque(true);
406  sameDirectory.addActionListener(new java.awt.event.ActionListener() {
407  public void actionPerformed(java.awt.event.ActionEvent evt) {
408  sameDirectoryActionPerformed(evt);
409  }
410  });
411 
412  otherDirectory.setBackground(new java.awt.Color(15, 155, 155));
413  otherDirectory.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
414  otherDirectory.setForeground(new java.awt.Color(255, 255, 255));
415  otherDirectory.setText("a separate directory: ");
416  otherDirectory.setOpaque(true);
417  otherDirectory.addActionListener(new java.awt.event.ActionListener() {
418  public void actionPerformed(java.awt.event.ActionEvent evt) {
419  otherDirectoryActionPerformed(evt);
420  }
421  });
422 
423  otherDirectoryTextField.setBackground(new java.awt.Color(15, 155, 155));
424  otherDirectoryTextField.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
425  otherDirectoryTextField.setAlignmentX(1.0F);
426  otherDirectoryTextField.setOpaque(true);
427 
428  browseButton.setBackground(new java.awt.Color(15, 155, 155));
429  browseButton.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
430  browseButton.setForeground(new java.awt.Color(255, 255, 255));
431  browseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/file-empty.png")));
432  browseButton.setText("Browse...");
433  browseButton.setAlignmentX(0.5F);
434  browseButton.setOpaque(true);
435  browseButton.addActionListener(new java.awt.event.ActionListener() {
436  public void actionPerformed(java.awt.event.ActionEvent evt) {
437  browseButtonActionPerformed(evt);
438  }
439  });
440 
441  javax.swing.GroupLayout outputPanelLayout = new javax.swing.GroupLayout(outputPanel);
442  outputPanel.setLayout(outputPanelLayout);
443  outputPanelLayout.setHorizontalGroup(
444  outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
445  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, outputPanelLayout.createSequentialGroup()
446  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
447  .addComponent(otherDirectoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 153, javax.swing.GroupLayout.PREFERRED_SIZE)
448  .addGap(68, 68, 68))
449  .addGroup(outputPanelLayout.createSequentialGroup()
450  .addContainerGap()
451  .addGroup(outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
452  .addGroup(outputPanelLayout.createSequentialGroup()
453  .addComponent(output, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
454  .addGap(36, 36, 36))
455  .addGroup(outputPanelLayout.createSequentialGroup()
456  .addGroup(outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
457  .addComponent(sameDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
458  .addComponent(otherDirectory)
459  .addComponent(browseButton))
460  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
461  );
462  outputPanelLayout.setVerticalGroup(
463  outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
464  .addGroup(outputPanelLayout.createSequentialGroup()
465  .addContainerGap()
466  .addComponent(output, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
467  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
468  .addComponent(sameDirectory)
469  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
470  .addComponent(otherDirectory)
471  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
472  .addComponent(otherDirectoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
473  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
474  .addComponent(browseButton)
475  .addContainerGap())
476  );
477 
478  jLabel4.setBackground(new java.awt.Color(15, 155, 155));
479  jLabel4.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
480  jLabel4.setForeground(new java.awt.Color(255, 255, 255));
481  jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/cog.png")));
482  jLabel4.setText("SEGMENTATION");
483  jLabel4.setToolTipText("Choose the parameters you want to use.");
484 
485  jLabel5.setBackground(new java.awt.Color(15, 155, 155));
486  jLabel5.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
487  jLabel5.setForeground(new java.awt.Color(255, 255, 255));
488  jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/cog.png")));
489  jLabel5.setText("CORPUSNAME");
490  jLabel5.setToolTipText("Choose the parameters you want to use.");
491 
492  jTextField2.setBackground(new java.awt.Color(172, 221, 221));
493  jTextField2.addActionListener(new java.awt.event.ActionListener() {
494  public void actionPerformed(java.awt.event.ActionEvent evt) {
495  jTextField2ActionPerformed(evt);
496  }
497  });
498 
499  jLabel6.setBackground(new java.awt.Color(15, 155, 155));
500  jLabel6.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
501  jLabel6.setForeground(new java.awt.Color(255, 255, 255));
502  jLabel6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/cog.png")));
503  jLabel6.setText("FSM");
504  jLabel6.setToolTipText("Choose the parameters you want to use.");
505 
506  jTextField3.setBackground(new java.awt.Color(172, 221, 221));
507  jTextField3.addActionListener(new java.awt.event.ActionListener() {
508  public void actionPerformed(java.awt.event.ActionEvent evt) {
509  jTextField3ActionPerformed(evt);
510  }
511  });
512 
513  jComboBox1.setBackground(new java.awt.Color(15, 155, 155));
514  jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "GENERIC", "HIAT", "HIATINEL", "GAT", "CHAT" }));
515 
516  javax.swing.GroupLayout settingsPanelLayout = new javax.swing.GroupLayout(settingsPanel);
517  settingsPanel.setLayout(settingsPanelLayout);
518  settingsPanelLayout.setHorizontalGroup(
519  settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
520  .addGroup(settingsPanelLayout.createSequentialGroup()
521  .addGroup(settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
522  .addComponent(outputPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE)
523  .addComponent(corpusFunction, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
524  .addGroup(settingsPanelLayout.createSequentialGroup()
525  .addContainerGap()
526  .addGroup(settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
527  .addGroup(settingsPanelLayout.createSequentialGroup()
528  .addComponent(jLabel4)
529  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
530  .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
531  .addGroup(settingsPanelLayout.createSequentialGroup()
532  .addGroup(settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
533  .addComponent(jLabel5)
534  .addComponent(jLabel6))
535  .addGap(24, 24, 24)
536  .addGroup(settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
537  .addComponent(jTextField3)
538  .addComponent(jTextField2))))))
539  .addGap(13, 13, 13))
540  );
541  settingsPanelLayout.setVerticalGroup(
542  settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
543  .addGroup(settingsPanelLayout.createSequentialGroup()
544  .addContainerGap()
545  .addComponent(corpusFunction, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
546  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
547  .addGroup(settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
548  .addComponent(jLabel4)
549  .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
550  .addGap(12, 12, 12)
551  .addGroup(settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
552  .addComponent(jLabel5)
553  .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
554  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
555  .addGroup(settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
556  .addComponent(jLabel6)
557  .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
558  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
559  .addComponent(outputPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
560  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
561  );
562 
563  helpButton.setBackground(new java.awt.Color(15, 155, 155));
564  helpButton.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
565  helpButton.setForeground(new java.awt.Color(255, 255, 255));
566  helpButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/question-circle.png")));
567  helpButton.setText("Help");
568  helpButton.addActionListener(new java.awt.event.ActionListener() {
569  public void actionPerformed(java.awt.event.ActionEvent evt) {
570  helpButtonActionPerformed(evt);
571  }
572  });
573 
574  progressBar.setBackground(new java.awt.Color(15, 155, 155));
575  progressBar.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
576  progressBar.setForeground(new java.awt.Color(255, 255, 255));
577  progressBar.setMaximumSize(new java.awt.Dimension(300, 19));
578  progressBar.setString("Waiting for input...");
579  progressBar.setStringPainted(true);
580 
581  dropletToggleButton.setBackground(new java.awt.Color(15, 155, 155));
582  dropletToggleButton.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
583  dropletToggleButton.setForeground(new java.awt.Color(255, 255, 255));
584  dropletToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/icons/chevron-left-circle.png")));
585  dropletToggleButton.setText("Reduce to droplet");
586  dropletToggleButton.addActionListener(new java.awt.event.ActionListener() {
587  public void actionPerformed(java.awt.event.ActionEvent evt) {
588  dropletToggleButtonActionPerformed(evt);
589  }
590  });
591 
592  javax.swing.GroupLayout backGroundPanelLayout = new javax.swing.GroupLayout(backGroundPanel);
593  backGroundPanel.setLayout(backGroundPanelLayout);
594  backGroundPanelLayout.setHorizontalGroup(
595  backGroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
596  .addGroup(backGroundPanelLayout.createSequentialGroup()
597  .addContainerGap()
598  .addGroup(backGroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
599  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, backGroundPanelLayout.createSequentialGroup()
600  .addComponent(settingsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
601  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
602  .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 653, javax.swing.GroupLayout.PREFERRED_SIZE))
603  .addGroup(backGroundPanelLayout.createSequentialGroup()
604  .addComponent(lowerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 851, javax.swing.GroupLayout.PREFERRED_SIZE)
605  .addGap(0, 0, Short.MAX_VALUE))
606  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, backGroundPanelLayout.createSequentialGroup()
607  .addGap(0, 0, Short.MAX_VALUE)
608  .addComponent(helpButton)
609  .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 676, javax.swing.GroupLayout.PREFERRED_SIZE)
610  .addComponent(dropletToggleButton)))
611  .addContainerGap())
612  .addGroup(backGroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
613  .addGroup(backGroundPanelLayout.createSequentialGroup()
614  .addContainerGap()
615  .addComponent(sidePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
616  .addContainerGap(659, Short.MAX_VALUE)))
617  );
618  backGroundPanelLayout.setVerticalGroup(
619  backGroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
620  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, backGroundPanelLayout.createSequentialGroup()
621  .addGroup(backGroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
622  .addGroup(backGroundPanelLayout.createSequentialGroup()
623  .addContainerGap()
624  .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
625  .addGap(18, 18, Short.MAX_VALUE))
626  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, backGroundPanelLayout.createSequentialGroup()
627  .addContainerGap(54, Short.MAX_VALUE)
628  .addComponent(settingsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
629  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
630  .addComponent(lowerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
631  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
632  .addGroup(backGroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
633  .addComponent(helpButton)
634  .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
635  .addComponent(dropletToggleButton)))
636  .addGroup(backGroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
637  .addGroup(backGroundPanelLayout.createSequentialGroup()
638  .addContainerGap()
639  .addComponent(sidePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
640  .addContainerGap(15, Short.MAX_VALUE)))
641  );
642 
643  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
644  getContentPane().setLayout(layout);
645  layout.setHorizontalGroup(
646  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
647  .addGroup(layout.createSequentialGroup()
648  .addComponent(backGroundPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
649  .addGap(0, 6, Short.MAX_VALUE))
650  );
651  layout.setVerticalGroup(
652  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
653  .addGroup(layout.createSequentialGroup()
654  .addComponent(backGroundPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
655  .addGap(0, 0, Short.MAX_VALUE))
656  );
657 
658  pack();
659  }// </editor-fold>//GEN-END:initComponents
660 
661  private void teiFilesListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_teiFilesListValueChanged
662  enableOperations(teiFilesList.getSelectedIndex() >= 0);
663  }//GEN-LAST:event_teiFilesListValueChanged
664  void enableOperations(boolean enable) {
665  showXMLButton.setEnabled(enable);
666  showHTMLButton.setEnabled(enable);
667  }
668  private void showXMLButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showXMLButtonActionPerformed
669  File f = (File) (teiFilesList.getSelectedValue());
670  Document teidoc;
671  try {
672  //teidoc = IOUtilities.readDocumentFromLocalFile(f.getAbsolutePath());
673  } catch (Exception ex) {
674  ex.printStackTrace();
675  JOptionPane.showMessageDialog(rootPane, ex.getLocalizedMessage());
676  return;
677  }
678  Format format = Format.getPrettyFormat();
679  XMLOutputter outputter = new XMLOutputter(format);
680  // Get the text pane's document
681  JTextPane textPane = new JTextPane();
682  StyledDocument doc = (StyledDocument) textPane.getDocument();
683  // Create a style object and then set the style attributes
684  Style style = doc.addStyle("StyleName", null);
685  // Font family
686  StyleConstants.setFontFamily(style, "Courier");
687  // Font size
688  StyleConstants.setFontSize(style, 12);
689  // Foreground color
690  StyleConstants.setForeground(style, Color.black);
691  /* try {
692  doc.insertString(doc.getLength(), outputter.outputString(teidoc), style);
693  } catch (BadLocationException ex) {
694  ex.printStackTrace();
695  } */
696  JDialog dialog = new JDialog(this, true);
697  dialog.setTitle(f.getName());
698  dialog.getContentPane().setLayout(new BorderLayout());
699  dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
700  dialog.getContentPane().add(new JScrollPane(textPane), BorderLayout.CENTER);
701  dialog.pack();
702  dialog.setLocationRelativeTo(this);
703  textPane.setCaretPosition(0);
704  dialog.setVisible(true);
705  }//GEN-LAST:event_showXMLButtonActionPerformed
706 
707  private void showHTMLButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showHTMLButtonActionPerformed
708  try {
709  File f = (File) (teiFilesList.getSelectedValue());
710  File tempHTML = File.createTempFile("teidrophtml", ".html");
711  tempHTML.deleteOnExit();
712  //String htmlString = new StylesheetFactory(true).applyInternalStylesheetToExternalXMLFile("/org/exmaralda/tei/xml/tei2html.xsl", f.getAbsolutePath());
713  FileOutputStream fos = new FileOutputStream(tempHTML);
714  //fos.write(htmlString.getBytes("UTF-8"));
715  fos.close();
716  System.out.println("document written.");
717  //BrowserLauncher.openURL(tempHTML.toURI().toURL().toString());
718  } catch (Exception ex) {
719  ex.printStackTrace();
720  JOptionPane.showMessageDialog(rootPane, ex.getLocalizedMessage());
721  }
722  }//GEN-LAST:event_showHTMLButtonActionPerformed
723 
724  private void dropletToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dropletToggleButtonActionPerformed
725  boolean hide = !(dropletToggleButton.isSelected());
726  if (!hide) {
727  dropletToggleButton.setText("Expand");
728  } else {
729  dropletToggleButton.setText("Reduce to droplet");
730  }
731  messageAndProgressPanel.setVisible(hide);
732  settingsPanel.setVisible(hide);
733  operationsPanel.setVisible(hide);
734  listScrollPane.setVisible(hide);
735  pack();
736  }//GEN-LAST:event_dropletToggleButtonActionPerformed
737 
738  private void helpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_helpButtonActionPerformed
739  this.displayHelp();
740  }//GEN-LAST:event_helpButtonActionPerformed
741 
742  private void jTextField3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField3ActionPerformed
743  // TODO add your handling code here:
744  }//GEN-LAST:event_jTextField3ActionPerformed
745 
746  private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField2ActionPerformed
747  // TODO add your handling code here:
748  }//GEN-LAST:event_jTextField2ActionPerformed
749 
750  private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed
751  JFileChooser jfc = new JFileChooser();
752  jfc.setDialogTitle("Choose directory");
753  jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
754  int ret = jfc.showOpenDialog(this);
755  if (ret == JFileChooser.APPROVE_OPTION) {
756  otherDirectoryTextField.setText(jfc.getSelectedFile().getAbsolutePath());
757  otherDirectory.setSelected(true);
758  }
759  }//GEN-LAST:event_browseButtonActionPerformed
760 
761  private void otherDirectoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_otherDirectoryActionPerformed
762  // TODO add your handling code here:
763  }//GEN-LAST:event_otherDirectoryActionPerformed
764 
765  private void sameDirectoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sameDirectoryActionPerformed
766  // TODO add your handling code here:
767  }//GEN-LAST:event_sameDirectoryActionPerformed
768 
769  private void parseMethodComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parseMethodComboBoxActionPerformed
770  // TODO add your handling code here:
771  }//GEN-LAST:event_parseMethodComboBoxActionPerformed
772  void displayHelp() {
773  try {
774  //TO DO better website
775  Desktop.getDesktop().browse(new URI("https://lab.multilingua.uni-hamburg.de/redmine/projects/redmine/wiki/How_to_use_the_Corpus_Validator"));
776  } catch (IOException ex) {
777  ex.printStackTrace();
778  } catch (URISyntaxException ex) {
779  Logger.getLogger(ApplicationFrame.class.getName()).log(Level.SEVERE, null, ex);
780  }
781 
782  }
783 
784  void message(final String s) {
785  int index = 0;
786  while (index < s.length()) {
787  String schnippel = s.substring(index, Math.min(index + 75, s.length()));
788  messagesTextArea.append(schnippel + "\n");
789  index += 75;
790  }
791  messagesTextArea.setCaretPosition(messagesTextArea.getText().length() - 1);
792  }
793 
794  void updateProgress(String s) {
795  done++;
796  progressBar.setValue((int) Math.round(((double) done / all) * 100));
797  progressBar.setString(s);
798  if (done == all) {
799  progressBar.setString("Done.");
800  dropPanel.setIcon(inactiveIcon);
801  message("***** DONE *****");
802  }
803  if ((teiFilesList.getModel().getSize() > 0) || (teiFilesList.isVisible())) {
804  final int lastIndex = teiFilesList.getModel().getSize() - 1;
805  try {
806  SwingUtilities.invokeAndWait(new Runnable() {
807  public void run() {
808  teiFilesList.getSelectionModel().setSelectionInterval(lastIndex, lastIndex);
809  }
810  });
811  teiFilesList.scrollRectToVisible(teiFilesList.getCellBounds(lastIndex, lastIndex));
812  } catch (Exception ex) {
813  ex.printStackTrace();
814  }
815  }
816  }
817 
818  void handleFileDrop(final File[] files) {
819  for (File f : files) {
820  try {
821  URL url = f.toURI().toURL();
822  if (f.isDirectory()) {
823  message("[Directory " + f.getName() + "]");
824  System.out.println("[Directory " + f.getName() + "]");
825  //need to use CorpusIO read(URL) method here
826  //that gives back a Colelction of CorpusData Objects
827  ArrayList<CorpusData> allcd = (ArrayList<CorpusData>) cio.read(url);
828  for (CorpusData cd: allcd){
829  message(cd.getFilename() + " added to list.");
830  }
831  } else {
832  CorpusData cd = cio.readFileURL(url);
833  if (cd != null) {
834  allFiles.add(cd);
835  message(cd.getFilename() + " added to list.");
836  } else {
837  message(f.getName() + " not added to list (data suffix not recognized).");
838  }
839  }
840  } catch (MalformedURLException ex) {
841  message(f.getName() + " not added to list (file could not be read).");
842  } catch (URISyntaxException ex) {
843  message(f.getName() + " not added to list (file could not be read).");
844  } catch (IOException ex) {
845  message(f.getName() + " not added to list (file could not be read).");
846  } catch (SAXException ex) {
847  message(f.getName() + " not added to list (file could not be read).");
848  } catch (JexmaraldaException ex) {
849  message(f.getName() + " not added to list (file could not be read).");
850  } catch (ClassNotFoundException ex) {
851  message(f.getName() + " not added to list (file could not be read).");
852  }
853  }
854  done = 0;
855  all = allFiles.size();
856  dropPanel.setIcon(activeIcon);
857 
858  for (final CorpusData cd : allFiles) {
859  Thread t = new Thread() {
860 
861  @Override
862  public void run() {
863  try {
864  //now we need to run the correct functions on the correct data
865  //where do we display which functions are possible on the data?
866  // Determine input type
867 
868 // ex.printStackTrace();
869 // message("["+ f.getName() + "] " + ex.getLocalizedMessage());
870 // updateProgress(f.getName());
871 // return;
872 
873  // Determine errorlist saveing location
874  URL reportlocation;
875  if (sameDirectory.isSelected()){
876  reportlocation = cd.getParentURL();
877  } else {
878  reportlocation = Paths.get(otherDirectoryTextField.getText()).toUri().toURL();
879  }
880  URI uri = reportlocation.toURI();
881  URI parentURI = uri.getPath().endsWith("/") ? uri.resolve("..") : uri.resolve(".");
882  String errorlistlocstring = Paths.get(parentURI).toString() + File.separator + "report_output.html";
883  URL errorlistlocation = Paths.get(errorlistlocstring).toUri().toURL();
884 
885 // run corpusfunctions
886 //find out which function to run
887  List<String> s = Arrays.asList(String.valueOf(parseMethodComboBox.getSelectedItem()));
888  corpuma.setChosencorpusfunctions(s);
889  for (String str : s) {
890  message("Added function " + str + " to list");
891  }
892 
893  Collection<CorpusFunction> cfs = corpusFunctionStrings2Classes(corpuma.getChosencorpusfunctions());
894  for (CorpusFunction cf : cfs) {
895  //make sure to run it only on the data the check is allowed for
896  report.merge(corpuma.runCorpusFunction(cd, cf));
897  }
898 //TO DO
899  URL basedirectory = cd.getParentURL();
900  String reportOutput = ReportItem.generateDataTableHTML(report.getRawStatistics(), report.getSummaryLines());
901  String absoluteReport = reportOutput.replaceAll(basedirectory.toString(), "");
902  cio.write(absoluteReport, errorlistlocation);
903  message("Wrote ErrorList at " + errorlistlocation);
904  listModel.addElement(new File(cd.getFilename()));
905  updateProgress(cd.getFilename());
906  } catch (MalformedURLException ex) {
907  message("Couldn't write error list - location is incorrect");
908  } catch (IOException ex) {
909  message("Couldn't write error list - location is incorrect");
910  } catch (URISyntaxException ex) {
911  message("Couldn't write error list - location is incorrect");
912  }
913  }
914 
915  };
916  t.start();
917  }
918  }
919 
923  public static void main(String args[]) {
924  /* Set the Nimbus look and feel */
925  //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
926  /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
927  * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
928  */
929  try {
930  for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
931  if ("Nimbus".equals(info.getName())) {
932  javax.swing.UIManager.setLookAndFeel(info.getClassName());
933  break;
934  }
935  }
936  } catch (ClassNotFoundException ex) {
937  java.util.logging.Logger.getLogger(CorpusServicesGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
938  } catch (InstantiationException ex) {
939  java.util.logging.Logger.getLogger(CorpusServicesGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
940  } catch (IllegalAccessException ex) {
941  java.util.logging.Logger.getLogger(CorpusServicesGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
942  } catch (javax.swing.UnsupportedLookAndFeelException ex) {
943  java.util.logging.Logger.getLogger(CorpusServicesGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
944  }
945  //</editor-fold>
946 
947  /* Create and display the form */
948  java.awt.EventQueue.invokeLater(new Runnable() {
949  public void run() {
950  new CorpusServicesGUI().setVisible(true);
951  }
952  });
953  }
954 
955  // Variables declaration - do not modify//GEN-BEGIN:variables
956  private java.awt.Panel backGroundPanel;
957  private javax.swing.JButton browseButton;
958  private javax.swing.JPanel corpusFunction;
959  private javax.swing.JPanel corpusServices;
960  private javax.swing.JToggleButton dropletToggleButton;
961  private javax.swing.JButton helpButton;
962  private javax.swing.JComboBox<String> jComboBox1;
963  private javax.swing.JLabel jLabel1;
964  private javax.swing.JLabel jLabel2;
965  private javax.swing.JLabel jLabel3;
966  private javax.swing.JLabel jLabel4;
967  private javax.swing.JLabel jLabel5;
968  private javax.swing.JLabel jLabel6;
969  private javax.swing.JPanel jPanel1;
970  private javax.swing.JPanel jPanel7;
971  private javax.swing.JTextField jTextField2;
972  private javax.swing.JTextField jTextField3;
973  private javax.swing.JScrollPane listScrollPane;
974  private javax.swing.JPanel lowerPanel;
975  private javax.swing.JPanel mainPanel;
976  private javax.swing.JPanel messageAndProgressPanel;
977  private javax.swing.JScrollPane messageScrollPane;
978  private javax.swing.JTextArea messagesTextArea;
979  private javax.swing.JPanel operationsPanel;
980  private javax.swing.JRadioButton otherDirectory;
981  private javax.swing.JTextField otherDirectoryTextField;
982  private javax.swing.JLabel output;
983  private javax.swing.JPanel outputPanel;
984  private java.awt.Panel panel1;
985  private javax.swing.JComboBox parseMethodComboBox;
986  private javax.swing.JProgressBar progressBar;
987  private javax.swing.JRadioButton sameDirectory;
988  private javax.swing.JPanel settingsPanel;
989  private javax.swing.JButton showHTMLButton;
990  private javax.swing.JButton showXMLButton;
991  private javax.swing.JPanel sidePanel;
992  private javax.swing.JList teiFilesList;
993  // End of variables declaration//GEN-END:variables
994 }
static Collection< String > getAllExistingCFs()
void merge(Report sr)
Definition: Report.java:73
Report runCorpusFunction(Corpus c, CorpusFunction cf)
static String generateDataTableHTML(Collection< ReportItem > errors, String summarylines)
CorpusData readFileURL(URL url, Collection< Class<?extends CorpusData >> clcds)
Definition: CorpusIO.java:125
Collection< ReportItem > getRawStatistics()
Definition: Report.java:499
Collection< CorpusData > read(URL url)
Definition: CorpusIO.java:168
static Collection< CorpusFunction > corpusFunctionStrings2Classes(Collection< String > corpusfunctionstrings)
void setChosencorpusfunctions(Collection< String > chosencorpusfunctions)
Collection< String > getChosencorpusfunctions()
void write(CorpusData cd, URL url)
Definition: CorpusIO.java:66