11 package de.uni_hamburg.corpora.swing;
20 import java.awt.BorderLayout;
21 import java.awt.Color;
22 import java.awt.Desktop;
24 import java.io.FileFilter;
25 import java.io.FileOutputStream;
26 import java.io.FilenameFilter;
27 import java.io.IOException;
28 import java.net.MalformedURLException;
30 import java.net.URISyntaxException;
32 import java.nio.file.Paths;
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.Collection;
36 import java.util.List;
37 import java.util.Vector;
38 import java.util.logging.Level;
39 import java.util.logging.Logger;
40 import javax.swing.DefaultListModel;
41 import javax.swing.ImageIcon;
42 import javax.swing.JDialog;
43 import javax.swing.JFileChooser;
44 import javax.swing.JOptionPane;
45 import javax.swing.JScrollPane;
46 import javax.swing.JTextPane;
47 import javax.swing.SwingUtilities;
48 import javax.swing.WindowConstants;
49 import javax.swing.border.LineBorder;
50 import javax.swing.text.BadLocationException;
51 import javax.swing.text.Style;
52 import javax.swing.text.StyleConstants;
53 import javax.swing.text.StyledDocument;
54 import org.exmaralda.folker.utilities.HTMLDisplayDialog;
55 import org.exmaralda.partitureditor.jexmaralda.JexmaraldaException;
66 import org.jdom.Document;
67 import org.jdom.JDOMException;
68 import org.jdom.output.Format;
69 import org.jdom.output.XMLOutputter;
70 import org.xml.sax.SAXException;
81 DefaultListModel listModel =
new DefaultListModel();
84 LineBorder dragBorder =
new LineBorder(Color.BLUE, 3,
true);
86 ImageIcon inactiveIcon;
91 Collection<CorpusData> allFiles =
new ArrayList();
99 inactiveIcon =
new javax.swing.ImageIcon(getClass().getResource(
"/images/droptarget.png"));
100 activeIcon =
new javax.swing.ImageIcon(getClass().getResource(
"/images/droptarget_active.png"));
101 mainPanel.add(dropPanel, java.awt.BorderLayout.NORTH);
102 teiFilesList.setModel(listModel);
108 public void filesDropped(java.io.File[] files) {
110 handleFileDrop(files);
115 void message(
final String s) {
117 while (index < s.length()) {
118 String schnippel = s.substring(index, Math.min(index + 75, s.length()));
119 messagesTextArea.append(schnippel +
"\n");
122 messagesTextArea.setCaretPosition(messagesTextArea.getText().length() - 1);
125 void updateProgress(String s) {
127 progressBar.setValue((
int) Math.round(((
double) done / all) * 100));
128 progressBar.setString(s);
130 progressBar.setString(
"Done.");
131 dropPanel.
setIcon(inactiveIcon);
132 message(
"***** DONE *****");
134 if ((teiFilesList.getModel().getSize() > 0) || (teiFilesList.isVisible())) {
135 final int lastIndex = teiFilesList.getModel().getSize() - 1;
137 SwingUtilities.invokeAndWait(
new Runnable() {
139 teiFilesList.getSelectionModel().setSelectionInterval(lastIndex, lastIndex);
142 teiFilesList.scrollRectToVisible(teiFilesList.getCellBounds(lastIndex, lastIndex));
143 }
catch (Exception ex) {
144 ex.printStackTrace();
149 void handleFileDrop(
final File[] files) {
150 for (File f : files) {
152 URL url = f.toURI().toURL();
153 if (f.isDirectory()) {
154 message(
"[Directory " + f.getName() +
"]");
155 System.out.println(
"[Directory " + f.getName() +
"]");
158 ArrayList<CorpusData> allcd = (ArrayList<CorpusData>) cio.
read(url);
160 message(cd.getFilename() +
" added to list.");
168 message(f.getName() +
" not added to list (data suffix not recognized).");
171 }
catch (MalformedURLException ex) {
172 message(f.getName() +
" not added to list (file could not be read).");
173 }
catch (URISyntaxException ex) {
174 message(f.getName() +
" not added to list (file could not be read).");
175 }
catch (IOException ex) {
176 Logger.getLogger(
ApplicationFrame.class.getName()).log(Level.SEVERE, null, ex);
177 }
catch (SAXException ex) {
178 Logger.getLogger(
ApplicationFrame.class.getName()).log(Level.SEVERE, null, ex);
179 }
catch (JexmaraldaException ex) {
180 Logger.getLogger(
ApplicationFrame.class.getName()).log(Level.SEVERE, null, ex);
181 }
catch (ClassNotFoundException ex) {
182 Logger.getLogger(
ApplicationFrame.class.getName()).log(Level.SEVERE, null, ex);
186 all = allFiles.size();
190 Thread t =
new Thread() {
206 if (sameDirectory.isSelected()){
207 reportlocation = cd.getParentURL();
209 reportlocation = Paths.get(otherDirectoryTextField.getText()).toUri().toURL();
211 URI uri = reportlocation.toURI();
212 URI parentURI = uri.getPath().endsWith(
"/") ? uri.resolve(
"..") : uri.resolve(
".");
213 String errorlistlocstring = Paths.get(parentURI).toString() + File.separator +
"report_output.html";
214 URL errorlistlocation = Paths.get(errorlistlocstring).toUri().toURL();
218 List<String> s = Arrays.asList(String.valueOf(parseMethodComboBox.getSelectedItem()));
220 for (String str : s) {
221 message(
"Added function " + str +
" to list");
230 URL basedirectory = cd.getParentURL();
232 String absoluteReport = reportOutput.replaceAll(basedirectory.toString(),
"");
233 cio.
write(absoluteReport, errorlistlocation);
234 message(
"Wrote ErrorList at " + errorlistlocation);
235 listModel.addElement(
new File(cd.getFilename()));
236 updateProgress(cd.getFilename());
237 }
catch (MalformedURLException ex) {
238 message(
"Couldn't write error list - location is incorrect");
239 }
catch (IOException ex) {
240 message(
"Couldn't write error list - location is incorrect");
241 }
catch (URISyntaxException ex) {
242 message(
"Couldn't write error list - location is incorrect");
254 Desktop.getDesktop().browse(
new URI(
"https://lab.multilingua.uni-hamburg.de/redmine/projects/redmine/wiki/How_to_use_the_Corpus_Validator"));
255 }
catch (IOException ex) {
256 ex.printStackTrace();
257 }
catch (URISyntaxException ex) {
258 Logger.getLogger(
ApplicationFrame.class.getName()).log(Level.SEVERE, null, ex);
268 @SuppressWarnings(
"unchecked")
270 private void initComponents() {
272 buttonGroup1 =
new javax.swing.ButtonGroup();
273 sidePanel =
new javax.swing.JPanel();
274 corpusServices =
new javax.swing.JPanel();
275 jLabel3 =
new javax.swing.JLabel();
276 settingsPanel =
new javax.swing.JPanel();
277 corpusFunction =
new javax.swing.JPanel();
278 jLabel1 =
new javax.swing.JLabel();
279 parseMethodComboBox =
new javax.swing.JComboBox();
280 outputPanel =
new javax.swing.JPanel();
281 output =
new javax.swing.JLabel();
282 sameDirectory =
new javax.swing.JRadioButton();
283 otherDirectory =
new javax.swing.JRadioButton();
284 otherDirectoryTextField =
new javax.swing.JTextField();
285 browseButton =
new javax.swing.JButton();
286 mainPanel =
new javax.swing.JPanel();
287 jPanel1 =
new javax.swing.JPanel();
288 messageAndProgressPanel =
new javax.swing.JPanel();
289 messageScrollPane =
new javax.swing.JScrollPane();
290 messagesTextArea =
new javax.swing.JTextArea();
291 listScrollPane =
new javax.swing.JScrollPane();
292 teiFilesList =
new javax.swing.JList();
293 operationsPanel =
new javax.swing.JPanel();
294 showXMLButton =
new javax.swing.JButton();
295 showHTMLButton =
new javax.swing.JButton();
296 lowerPanel =
new javax.swing.JPanel();
297 jPanel7 =
new javax.swing.JPanel();
298 progressBar =
new javax.swing.JProgressBar();
299 dropletToggleButton =
new javax.swing.JToggleButton();
300 helpButton =
new javax.swing.JButton();
302 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
303 setTitle(
"Corpus Services");
304 getContentPane().setBackground(
new java.awt.Color(15, 155, 155));
306 sidePanel.setBackground(
new java.awt.Color(15, 155, 155));
307 sidePanel.setBorder(null);
308 sidePanel.setPreferredSize(
new java.awt.Dimension(150, 70));
310 corpusServices.setBackground(
new java.awt.Color(15, 155, 155));
312 jLabel3.setBackground(
new java.awt.Color(15, 155, 155));
313 jLabel3.setForeground(
new java.awt.Color(255, 255, 255));
314 jLabel3.setFont(
new java.awt.Font(
"Segoe UI", 1, 18));
315 jLabel3.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/images/icons/chart-bars.png")));
316 jLabel3.setText(
"corpus services");
318 javax.swing.GroupLayout corpusServicesLayout =
new javax.swing.GroupLayout(corpusServices);
319 corpusServices.setLayout(corpusServicesLayout);
320 corpusServicesLayout.setHorizontalGroup(
321 corpusServicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
322 .addGroup(corpusServicesLayout.createSequentialGroup()
324 .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
327 corpusServicesLayout.setVerticalGroup(
328 corpusServicesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
329 .addGroup(corpusServicesLayout.createSequentialGroup()
331 .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
332 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
335 settingsPanel.setBackground(
new java.awt.Color(15, 155, 155));
336 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),
new java.awt.Color(255, 255, 255)));
337 settingsPanel.setForeground(
new java.awt.Color(255, 255, 255));
338 settingsPanel.setToolTipText(
"");
339 settingsPanel.setCursor(
new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
340 settingsPanel.setMaximumSize(
new java.awt.Dimension(150, 300));
341 settingsPanel.setMinimumSize(
new java.awt.Dimension(120, 200));
342 settingsPanel.setPreferredSize(
new java.awt.Dimension(120, 200));
344 corpusFunction.setBackground(
new java.awt.Color(15, 155, 155));
345 corpusFunction.setAlignmentX(0.0F);
346 corpusFunction.setPreferredSize(
new java.awt.Dimension(178, 20));
348 jLabel1.setBackground(
new java.awt.Color(15, 155, 155));
349 jLabel1.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
350 jLabel1.setForeground(
new java.awt.Color(255, 255, 255));
351 jLabel1.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/images/icons/magic-wand.png")));
352 jLabel1.setText(
"Corpus function(s)");
353 jLabel1.setToolTipText(
"Choose the corpus function(s) you want to use.");
354 jLabel1.setMaximumSize(
new java.awt.Dimension(150, 20));
355 jLabel1.setMinimumSize(
new java.awt.Dimension(150, 20));
356 jLabel1.setPreferredSize(
new java.awt.Dimension(150, 20));
358 parseMethodComboBox.setBackground(
new java.awt.Color(15, 155, 155));
359 parseMethodComboBox.setFont(
new java.awt.Font(
"Segoe UI", 0, 10));
360 parseMethodComboBox.setForeground(
new java.awt.Color(15, 155, 155));
363 parseMethodComboBox.setModel(
new javax.swing.DefaultComboBoxModel(functions.toArray()));
364 parseMethodComboBox.setMaximumSize(
new java.awt.Dimension(150, 24));
365 parseMethodComboBox.setMinimumSize(
new java.awt.Dimension(150, 24));
366 parseMethodComboBox.setOpaque(
true);
367 parseMethodComboBox.setPreferredSize(
new java.awt.Dimension(150, 24));
368 parseMethodComboBox.addActionListener(
new java.awt.event.ActionListener() {
369 public void actionPerformed(java.awt.event.ActionEvent evt) {
370 parseMethodComboBoxActionPerformed(evt);
374 javax.swing.GroupLayout corpusFunctionLayout =
new javax.swing.GroupLayout(corpusFunction);
375 corpusFunction.setLayout(corpusFunctionLayout);
376 corpusFunctionLayout.setHorizontalGroup(
377 corpusFunctionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
378 .addGroup(corpusFunctionLayout.createSequentialGroup()
380 .addGroup(corpusFunctionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
381 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
382 .addComponent(parseMethodComboBox, 0, 200, Short.MAX_VALUE))
383 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
385 corpusFunctionLayout.setVerticalGroup(
386 corpusFunctionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
387 .addGroup(corpusFunctionLayout.createSequentialGroup()
389 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
390 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
391 .addComponent(parseMethodComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
392 .addContainerGap(43, Short.MAX_VALUE))
395 outputPanel.setBackground(
new java.awt.Color(15, 155, 155));
397 output.setBackground(
new java.awt.Color(15, 155, 155));
398 output.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
399 output.setForeground(
new java.awt.Color(255, 255, 255));
400 output.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/images/icons/enter.png")));
401 output.setText(
"Write error report to");
402 output.setMaximumSize(
new java.awt.Dimension(150, 20));
403 output.setMinimumSize(
new java.awt.Dimension(150, 20));
404 output.setPreferredSize(
new java.awt.Dimension(150, 20));
406 sameDirectory.setBackground(
new java.awt.Color(15, 155, 155));
407 buttonGroup1.add(sameDirectory);
408 sameDirectory.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
409 sameDirectory.setForeground(
new java.awt.Color(255, 255, 255));
410 sameDirectory.setSelected(
true);
411 sameDirectory.setText(
"the same directory");
412 sameDirectory.setOpaque(
true);
413 sameDirectory.addActionListener(
new java.awt.event.ActionListener() {
414 public void actionPerformed(java.awt.event.ActionEvent evt) {
415 sameDirectoryActionPerformed(evt);
419 otherDirectory.setBackground(
new java.awt.Color(15, 155, 155));
420 buttonGroup1.add(otherDirectory);
421 otherDirectory.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
422 otherDirectory.setForeground(
new java.awt.Color(255, 255, 255));
423 otherDirectory.setText(
"a separate directory: ");
424 otherDirectory.setOpaque(
true);
425 otherDirectory.addActionListener(
new java.awt.event.ActionListener() {
426 public void actionPerformed(java.awt.event.ActionEvent evt) {
427 otherDirectoryActionPerformed(evt);
431 otherDirectoryTextField.setBackground(
new java.awt.Color(15, 155, 155));
432 otherDirectoryTextField.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
433 otherDirectoryTextField.setAlignmentX(1.0F);
434 otherDirectoryTextField.setMaximumSize(
new java.awt.Dimension(300, 20));
435 otherDirectoryTextField.setMinimumSize(
new java.awt.Dimension(200, 20));
436 otherDirectoryTextField.setOpaque(
true);
437 otherDirectoryTextField.setPreferredSize(
new java.awt.Dimension(250, 20));
439 browseButton.setBackground(
new java.awt.Color(15, 155, 155));
440 browseButton.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
441 browseButton.setForeground(
new java.awt.Color(15, 155, 155));
442 browseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/images/icons/file-empty.png")));
443 browseButton.setText(
"Browse...");
444 browseButton.setAlignmentX(0.5F);
445 browseButton.setOpaque(
true);
446 browseButton.addActionListener(
new java.awt.event.ActionListener() {
447 public void actionPerformed(java.awt.event.ActionEvent evt) {
448 browseButtonActionPerformed(evt);
452 javax.swing.GroupLayout outputPanelLayout =
new javax.swing.GroupLayout(outputPanel);
453 outputPanel.setLayout(outputPanelLayout);
454 outputPanelLayout.setHorizontalGroup(
455 outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
456 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, outputPanelLayout.createSequentialGroup()
457 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
458 .addComponent(otherDirectoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 153, javax.swing.GroupLayout.PREFERRED_SIZE)
460 .addGroup(outputPanelLayout.createSequentialGroup()
462 .addGroup(outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
463 .addGroup(outputPanelLayout.createSequentialGroup()
464 .addComponent(output, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
466 .addGroup(outputPanelLayout.createSequentialGroup()
467 .addGroup(outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
468 .addComponent(sameDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
469 .addComponent(otherDirectory)
470 .addComponent(browseButton))
471 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
473 outputPanelLayout.setVerticalGroup(
474 outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
475 .addGroup(outputPanelLayout.createSequentialGroup()
477 .addComponent(output, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
478 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
479 .addComponent(sameDirectory)
480 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
481 .addComponent(otherDirectory)
482 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
483 .addComponent(otherDirectoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
484 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
485 .addComponent(browseButton)
489 javax.swing.GroupLayout settingsPanelLayout =
new javax.swing.GroupLayout(settingsPanel);
490 settingsPanel.setLayout(settingsPanelLayout);
491 settingsPanelLayout.setHorizontalGroup(
492 settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
493 .addGroup(settingsPanelLayout.createSequentialGroup()
494 .addGroup(settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
495 .addComponent(corpusFunction, 0, 178, Short.MAX_VALUE)
496 .addComponent(outputPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE))
497 .addContainerGap(19, Short.MAX_VALUE))
499 settingsPanelLayout.setVerticalGroup(
500 settingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
501 .addGroup(settingsPanelLayout.createSequentialGroup()
503 .addComponent(corpusFunction, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
504 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
505 .addComponent(outputPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
509 javax.swing.GroupLayout sidePanelLayout =
new javax.swing.GroupLayout(sidePanel);
510 sidePanel.setLayout(sidePanelLayout);
511 sidePanelLayout.setHorizontalGroup(
512 sidePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
513 .addGroup(sidePanelLayout.createSequentialGroup()
515 .addComponent(corpusServices, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
516 .addComponent(settingsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)
518 sidePanelLayout.setVerticalGroup(
519 sidePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
520 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, sidePanelLayout.createSequentialGroup()
522 .addComponent(corpusServices, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
523 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
524 .addComponent(settingsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE)
528 mainPanel.setBackground(
new java.awt.Color(15, 155, 155));
529 mainPanel.setLayout(
new java.awt.BorderLayout());
531 jPanel1.setBackground(
new java.awt.Color(15, 155, 155));
533 messageAndProgressPanel.setBackground(
new java.awt.Color(15, 155, 155));
534 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),
new java.awt.Color(255, 255, 255)));
535 messageAndProgressPanel.setForeground(
new java.awt.Color(255, 255, 255));
536 messageAndProgressPanel.setToolTipText(
"");
537 messageAndProgressPanel.setFont(
new java.awt.Font(
"Arial", 0, 12));
539 messageScrollPane.setBackground(
new java.awt.Color(15, 155, 155));
540 messageScrollPane.setBorder(null);
541 messageScrollPane.setViewportBorder(null);
542 messageScrollPane.setPreferredSize(
new java.awt.Dimension(400, 120));
544 messagesTextArea.setBackground(
new java.awt.Color(172, 221, 221));
545 messagesTextArea.setColumns(20);
546 messagesTextArea.setFont(
new java.awt.Font(
"Monospaced", 0, 12));
547 messagesTextArea.setForeground(
new java.awt.Color(255, 255, 255));
548 messagesTextArea.setRows(5);
549 messagesTextArea.setBorder(null);
550 messagesTextArea.setPreferredSize(
new java.awt.Dimension(140, 75));
551 messagesTextArea.setRequestFocusEnabled(
false);
552 messagesTextArea.setLineWrap(
true);
553 messageScrollPane.setViewportView(messagesTextArea);
554 messageAndProgressPanel.add(messageScrollPane, java.awt.BorderLayout.CENTER);
555 javax.swing.GroupLayout messageAndProgressPanelLayout =
new javax.swing.GroupLayout(messageAndProgressPanel);
556 messageAndProgressPanel.setLayout(messageAndProgressPanelLayout);
557 messageAndProgressPanelLayout.setHorizontalGroup(
558 messageAndProgressPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
559 .addGroup(messageAndProgressPanelLayout.createSequentialGroup()
561 .addComponent(messageScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 299, javax.swing.GroupLayout.PREFERRED_SIZE)
562 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
564 messageAndProgressPanelLayout.setVerticalGroup(
565 messageAndProgressPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
566 .addComponent(messageScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
569 listScrollPane.setBackground(
new java.awt.Color(15, 155, 155));
570 listScrollPane.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createCompoundBorder(),
"Processed files", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
new java.awt.Font(
"Segoe UI", 1, 14),
new java.awt.Color(255, 255, 255)));
571 listScrollPane.setForeground(
new java.awt.Color(255, 255, 255));
573 teiFilesList.setBackground(
new java.awt.Color(172, 221, 221));
574 teiFilesList.setForeground(
new java.awt.Color(255, 255, 255));
575 teiFilesList.addListSelectionListener(
new javax.swing.event.ListSelectionListener() {
576 public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
577 teiFilesListValueChanged(evt);
580 listScrollPane.setViewportView(teiFilesList);
582 operationsPanel.setBackground(
new java.awt.Color(15, 155, 155));
583 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),
new java.awt.Color(255, 255, 255)));
584 operationsPanel.setForeground(
new java.awt.Color(255, 255, 255));
585 operationsPanel.setMinimumSize(
new java.awt.Dimension(70, 96));
586 operationsPanel.setPreferredSize(
new java.awt.Dimension(70, 96));
588 showXMLButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/exmaralda/tei/swing/xmldoc.gif")));
589 showXMLButton.setToolTipText(
"Show XML");
590 showXMLButton.setEnabled(
false);
591 showXMLButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
592 showXMLButton.setMaximumSize(
new java.awt.Dimension(60, 60));
593 showXMLButton.setMinimumSize(
new java.awt.Dimension(60, 60));
594 showXMLButton.setPreferredSize(
new java.awt.Dimension(60, 60));
595 showXMLButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
596 showXMLButton.addActionListener(
new java.awt.event.ActionListener() {
597 public void actionPerformed(java.awt.event.ActionEvent evt) {
598 showXMLButtonActionPerformed(evt);
601 operationsPanel.add(showXMLButton);
603 showHTMLButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/exmaralda/folker/tangoicons/tango-icon-theme-0.8.1/32x32/mimetypes/text-html.png")));
604 showHTMLButton.setToolTipText(
"Show HTML in Browser");
605 showHTMLButton.setEnabled(
false);
606 showHTMLButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
607 showHTMLButton.setMaximumSize(
new java.awt.Dimension(60, 60));
608 showHTMLButton.setMinimumSize(
new java.awt.Dimension(60, 60));
609 showHTMLButton.setPreferredSize(
new java.awt.Dimension(60, 60));
610 showHTMLButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
611 showHTMLButton.addActionListener(
new java.awt.event.ActionListener() {
612 public void actionPerformed(java.awt.event.ActionEvent evt) {
613 showHTMLButtonActionPerformed(evt);
616 operationsPanel.add(showHTMLButton);
618 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
619 jPanel1.setLayout(jPanel1Layout);
620 jPanel1Layout.setHorizontalGroup(
621 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
622 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
624 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
625 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
626 .addComponent(messageAndProgressPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
627 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
628 .addComponent(listScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 316, javax.swing.GroupLayout.PREFERRED_SIZE)
630 .addGroup(jPanel1Layout.createSequentialGroup()
631 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
632 .addComponent(operationsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 643, javax.swing.GroupLayout.PREFERRED_SIZE)))
635 jPanel1Layout.setVerticalGroup(
636 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
637 .addGroup(jPanel1Layout.createSequentialGroup()
638 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
639 .addComponent(messageAndProgressPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
640 .addComponent(listScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 232, javax.swing.GroupLayout.PREFERRED_SIZE))
641 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
642 .addComponent(operationsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
643 .addGap(0, 55, Short.MAX_VALUE))
646 mainPanel.add(jPanel1, java.awt.BorderLayout.CENTER);
648 lowerPanel.setBackground(
new java.awt.Color(15, 155, 155));
649 lowerPanel.setLayout(
new java.awt.BorderLayout());
651 jPanel7.setBackground(
new java.awt.Color(15, 155, 155));
652 jPanel7.setLayout(
new java.awt.BorderLayout());
654 progressBar.setBackground(
new java.awt.Color(15, 155, 155));
655 progressBar.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
656 progressBar.setForeground(
new java.awt.Color(255, 255, 255));
657 progressBar.setMaximumSize(
new java.awt.Dimension(300, 19));
658 progressBar.setString(
"Waiting for input...");
659 progressBar.setStringPainted(
true);
660 jPanel7.add(progressBar, java.awt.BorderLayout.CENTER);
662 dropletToggleButton.setBackground(
new java.awt.Color(15, 155, 155));
663 dropletToggleButton.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
664 dropletToggleButton.setForeground(
new java.awt.Color(15, 155, 155));
665 dropletToggleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/images/icons/chevron-left-circle.png")));
666 dropletToggleButton.setText(
"Reduce to droplet");
667 dropletToggleButton.addActionListener(
new java.awt.event.ActionListener() {
668 public void actionPerformed(java.awt.event.ActionEvent evt) {
669 dropletToggleButtonActionPerformed(evt);
672 jPanel7.add(dropletToggleButton, java.awt.BorderLayout.EAST);
674 helpButton.setBackground(
new java.awt.Color(15, 155, 155));
675 helpButton.setFont(
new java.awt.Font(
"Segoe UI", 0, 12));
676 helpButton.setForeground(
new java.awt.Color(15, 155, 155));
677 helpButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/images/icons/question-circle.png")));
678 helpButton.setText(
"Help");
679 helpButton.addActionListener(
new java.awt.event.ActionListener() {
680 public void actionPerformed(java.awt.event.ActionEvent evt) {
681 helpButtonActionPerformed(evt);
684 jPanel7.add(helpButton, java.awt.BorderLayout.WEST);
686 lowerPanel.add(jPanel7, java.awt.BorderLayout.SOUTH);
688 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
689 getContentPane().setLayout(layout);
690 layout.setHorizontalGroup(
691 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
692 .addGroup(layout.createSequentialGroup()
693 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
694 .addComponent(lowerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 851, javax.swing.GroupLayout.PREFERRED_SIZE)
695 .addGroup(layout.createSequentialGroup()
696 .addComponent(sidePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 192, javax.swing.GroupLayout.PREFERRED_SIZE)
697 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
698 .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 653, javax.swing.GroupLayout.PREFERRED_SIZE)))
699 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
701 layout.setVerticalGroup(
702 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
703 .addGroup(layout.createSequentialGroup()
704 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
705 .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
706 .addComponent(sidePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 390, javax.swing.GroupLayout.PREFERRED_SIZE))
707 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
708 .addComponent(lowerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
714 private void dropletToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {
715 boolean hide = !(dropletToggleButton.isSelected());
717 dropletToggleButton.setText(
"Expand");
719 dropletToggleButton.setText(
"Reduce to droplet");
721 messageAndProgressPanel.setVisible(hide);
722 settingsPanel.setVisible(hide);
723 operationsPanel.setVisible(hide);
724 listScrollPane.setVisible(hide);
728 private void helpButtonActionPerformed(java.awt.event.ActionEvent evt) {
732 private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {
733 JFileChooser jfc =
new JFileChooser();
734 jfc.setDialogTitle(
"Choose directory");
735 jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
736 int ret = jfc.showOpenDialog(
this);
737 if (ret == JFileChooser.APPROVE_OPTION) {
738 otherDirectoryTextField.setText(jfc.getSelectedFile().getAbsolutePath());
739 otherDirectory.setSelected(
true);
743 private void otherDirectoryActionPerformed(java.awt.event.ActionEvent evt) {
747 private void sameDirectoryActionPerformed(java.awt.event.ActionEvent evt) {
751 private void parseMethodComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
755 private void showHTMLButtonActionPerformed(java.awt.event.ActionEvent evt) {
757 File f = (File) (teiFilesList.getSelectedValue());
758 File tempHTML = File.createTempFile(
"teidrophtml",
".html");
759 tempHTML.deleteOnExit();
761 FileOutputStream fos =
new FileOutputStream(tempHTML);
764 System.out.println(
"document written.");
766 }
catch (Exception ex) {
767 ex.printStackTrace();
768 JOptionPane.showMessageDialog(rootPane, ex.getLocalizedMessage());
772 private void showXMLButtonActionPerformed(java.awt.event.ActionEvent evt) {
773 File f = (File) (teiFilesList.getSelectedValue());
777 }
catch (Exception ex) {
778 ex.printStackTrace();
779 JOptionPane.showMessageDialog(rootPane, ex.getLocalizedMessage());
782 Format format = Format.getPrettyFormat();
783 XMLOutputter outputter =
new XMLOutputter(format);
785 JTextPane textPane =
new JTextPane();
786 StyledDocument doc = (StyledDocument) textPane.getDocument();
788 Style style = doc.addStyle(
"StyleName", null);
790 StyleConstants.setFontFamily(style,
"Courier");
792 StyleConstants.setFontSize(style, 12);
794 StyleConstants.setForeground(style, Color.black);
800 JDialog dialog =
new JDialog(
this,
true);
801 dialog.setTitle(f.getName());
802 dialog.getContentPane().setLayout(
new BorderLayout());
803 dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
804 dialog.getContentPane().add(
new JScrollPane(textPane), BorderLayout.CENTER);
806 dialog.setLocationRelativeTo(
this);
807 textPane.setCaretPosition(0);
808 dialog.setVisible(
true);
811 private void teiFilesListValueChanged(javax.swing.event.ListSelectionEvent evt) {
812 enableOperations(teiFilesList.getSelectedIndex() >= 0);
815 void enableOperations(
boolean enable) {
816 showXMLButton.setEnabled(enable);
817 showHTMLButton.setEnabled(enable);
823 public static void main(String args[]) {
826 System.out.println(
"Setting system L&F : " + javax.swing.UIManager.getSystemLookAndFeelClassName());
827 javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
828 }
catch (Exception e) {
834 java.awt.EventQueue.invokeLater(
new Runnable() {
842 private javax.swing.JButton browseButton;
843 private javax.swing.ButtonGroup buttonGroup1;
844 private javax.swing.JPanel corpusFunction;
845 private javax.swing.JPanel corpusServices;
846 private javax.swing.JToggleButton dropletToggleButton;
847 private javax.swing.JButton helpButton;
848 private javax.swing.JLabel jLabel1;
849 private javax.swing.JLabel jLabel3;
850 private javax.swing.JPanel jPanel1;
851 private javax.swing.JPanel jPanel7;
852 private javax.swing.JScrollPane listScrollPane;
853 private javax.swing.JPanel lowerPanel;
854 private javax.swing.JPanel mainPanel;
855 private javax.swing.JPanel messageAndProgressPanel;
856 private javax.swing.JScrollPane messageScrollPane;
857 private javax.swing.JTextArea messagesTextArea;
858 private javax.swing.JPanel operationsPanel;
859 private javax.swing.JRadioButton otherDirectory;
860 private javax.swing.JTextField otherDirectoryTextField;
861 private javax.swing.JLabel output;
862 private javax.swing.JPanel outputPanel;
863 private javax.swing.JComboBox parseMethodComboBox;
864 private javax.swing.JProgressBar progressBar;
865 private javax.swing.JRadioButton sameDirectory;
866 private javax.swing.JPanel settingsPanel;
867 private javax.swing.JButton showHTMLButton;
868 private javax.swing.JButton showXMLButton;
869 private javax.swing.JPanel sidePanel;
870 private javax.swing.JList teiFilesList;
static Collection< String > getAllExistingCFs()
static void main(String args[])
Report runCorpusFunction(Corpus c, CorpusFunction cf)
static String generateDataTableHTML(Collection< ReportItem > errors, String summarylines)
CorpusData readFileURL(URL url, Collection< Class<?extends CorpusData >> clcds)
Collection< ReportItem > getRawStatistics()
Collection< CorpusData > read(URL url)
static Collection< CorpusFunction > corpusFunctionStrings2Classes(Collection< String > corpusfunctionstrings)
void setChosencorpusfunctions(Collection< String > chosencorpusfunctions)
Collection< String > getChosencorpusfunctions()
void setIcon(ImageIcon icon)
void write(CorpusData cd, URL url)