/** * Copyright (c) 2014, the Temporal Random Indexing AUTHORS. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the University of Bari nor the names of its contributors * may be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 * */ package di.uniba.it.tri.shell.gui; import di.uniba.it.tri.api.Tri; import di.uniba.it.tri.api.TriResultObject; import di.uniba.it.tri.ir.SearchResult; import di.uniba.it.tri.ir.Searcher; import di.uniba.it.tri.shell.gui.data.ChartUtils; import di.uniba.it.tri.shell.gui.data.Options; import di.uniba.it.tri.shell.gui.data.TimePeriod; import di.uniba.it.tri.shell.gui.data.WordEntry; import di.uniba.it.tri.vectors.ObjectVector; import di.uniba.it.tri.vectors.VectorReader; import java.awt.Cursor; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; import javax.swing.JOptionPane; import javax.swing.ListModel; import javax.swing.SwingWorker; import org.apache.lucene.queryparser.classic.ParseException; import org.jfree.chart.ChartPanel; /** * * @author pierpaolo */ public class TriShellGUI extends javax.swing.JFrame { /** * Creates new form TriShellGUI */ public TriShellGUI() { initComponents(); } /** * 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() { java.awt.GridBagConstraints gridBagConstraints; mainTabbedPanel = new javax.swing.JTabbedPane(); searchPanel = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); tfQuery = new javax.swing.JTextField(); searchButton = new javax.swing.JButton(); topnSpinner = new javax.swing.JSpinner(); jScrollPane1 = new javax.swing.JScrollPane(); resultsTable = new javax.swing.JTable(); tablePrev = new javax.swing.JButton(); tableNext = new javax.swing.JButton(); timeCheck = new javax.swing.JCheckBox(); timeComboBox = new javax.swing.JComboBox<>(); openb = new javax.swing.JButton(); semanticCheck = new javax.swing.JCheckBox(); triPanel = new javax.swing.JPanel(); triToolbar = new javax.swing.JToolBar(); getb = new javax.swing.JButton(); simb = new javax.swing.JButton(); nearb = new javax.swing.JButton(); jSeparator1 = new javax.swing.JToolBar.Separator(); simsb = new javax.swing.JButton(); jSeparator2 = new javax.swing.JToolBar.Separator(); plotb = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); wordJList = new javax.swing.JList<>(); mainMenubar = new javax.swing.JMenuBar(); menuFile = new javax.swing.JMenu(); menuItemClose = new javax.swing.JMenuItem(); menuClose = new javax.swing.JMenu(); menuitemOptions = new javax.swing.JMenuItem(); menuItemTimeSetting = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Temporal RI - (GUI ver. 0.10b)"); setPreferredSize(new java.awt.Dimension(800, 600)); mainTabbedPanel.setPreferredSize(new java.awt.Dimension(640, 480)); searchPanel.setLayout(new java.awt.GridBagLayout()); jLabel1.setText("Query"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4); searchPanel.add(jLabel1, gridBagConstraints); tfQuery.setColumns(25); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = 2; searchPanel.add(tfQuery, gridBagConstraints); searchButton.setText("Search..."); searchButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { searchButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4); searchPanel.add(searchButton, gridBagConstraints); topnSpinner.setModel(new javax.swing.SpinnerNumberModel(25, 1, 1000, 1)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 4; gridBagConstraints.gridy = 0; searchPanel.add(topnSpinner, gridBagConstraints); resultsTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null} }, new String [] { "Id", "Content", "Score" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class, java.lang.Float.class }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); resultsTable.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { resultsTableMouseClicked(evt); } }); jScrollPane1.setViewportView(resultsTable); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 5; gridBagConstraints.gridheight = 12; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; searchPanel.add(jScrollPane1, gridBagConstraints); tablePrev.setText("<-"); tablePrev.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { tablePrevActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 13; searchPanel.add(tablePrev, gridBagConstraints); tableNext.setText("->"); tableNext.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { tableNextActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 4; gridBagConstraints.gridy = 13; searchPanel.add(tableNext, gridBagConstraints); timeCheck.setText("Enable time search"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 13; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; searchPanel.add(timeCheck, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 13; searchPanel.add(timeComboBox, gridBagConstraints); openb.setText("Open doc..."); openb.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openbActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 5; gridBagConstraints.gridy = 1; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); searchPanel.add(openb, gridBagConstraints); semanticCheck.setText("Semantic Search"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 14; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; searchPanel.add(semanticCheck, gridBagConstraints); mainTabbedPanel.addTab("Search", searchPanel); triPanel.setLayout(new java.awt.BorderLayout()); triToolbar.setRollover(true); getb.setText("Get"); getb.setFocusable(false); getb.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); getb.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); getb.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { getbActionPerformed(evt); } }); triToolbar.add(getb); simb.setText("Sim"); simb.setFocusable(false); simb.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); simb.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); simb.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { simbActionPerformed(evt); } }); triToolbar.add(simb); nearb.setText("Near"); nearb.setFocusable(false); nearb.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); nearb.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); nearb.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nearbActionPerformed(evt); } }); triToolbar.add(nearb); triToolbar.add(jSeparator1); simsb.setText("Analyze"); simsb.setFocusable(false); simsb.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); simsb.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); simsb.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { simsbActionPerformed(evt); } }); triToolbar.add(simsb); triToolbar.add(jSeparator2); plotb.setText("Plot"); plotb.setFocusable(false); plotb.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); plotb.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); plotb.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { plotbActionPerformed(evt); } }); triToolbar.add(plotb); triPanel.add(triToolbar, java.awt.BorderLayout.NORTH); wordJList.setModel((ListModel) this.wordListModel); jScrollPane2.setViewportView(wordJList); triPanel.add(jScrollPane2, java.awt.BorderLayout.CENTER); mainTabbedPanel.addTab("Temporal RI", triPanel); getContentPane().add(mainTabbedPanel, java.awt.BorderLayout.CENTER); menuFile.setText("File"); menuItemClose.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK)); menuItemClose.setText("Close"); menuItemClose.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuItemCloseActionPerformed(evt); } }); menuFile.add(menuItemClose); mainMenubar.add(menuFile); menuClose.setText("Edit"); menuitemOptions.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK)); menuitemOptions.setText("Options..."); menuitemOptions.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuitemOptionsActionPerformed(evt); } }); menuClose.add(menuitemOptions); menuItemTimeSetting.setText("Time setting..."); menuItemTimeSetting.setEnabled(false); menuItemTimeSetting.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuItemTimeSettingActionPerformed(evt); } }); menuClose.add(menuItemTimeSetting); mainMenubar.add(menuClose); setJMenuBar(mainMenubar); pack(); setLocationRelativeTo(null); }// </editor-fold>//GEN-END:initComponents private void menuitemOptionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuitemOptionsActionPerformed try { optionsDialog.setVisible(true); Options options = optionsDialog.getOptions(); if (options != null) { if (options.getIndex() != null) { File newIndexFile = new File(options.getIndex()); if (!newIndexFile.equals(indexDir)) { indexDir = newIndexFile; searcher = new Searcher(indexDir); } } if (options.getTriFolder() != null && !options.getTriFolder().equals(triFolder)) { triApi.close(); triApi.setMaindir(options.getTriFolder()); List<String> years = triApi.year(0, Integer.MAX_VALUE); Collections.sort(years); setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); LoadTriTask task = new LoadTriTask(years); task.execute(); progressDialog.getLabel().setText("TRI loading..."); progressDialog.setVisible(true); getDialog.getYearComboBox().setModel(yearListmodel); //init time period dialog DefaultComboBoxModel<String> tsModel = new DefaultComboBoxModel<>(); DefaultComboBoxModel<String> ysModel = new DefaultComboBoxModel<>(); for (int i = 0; i < yearListmodel.getSize(); i++) { tsModel.addElement(yearListmodel.getElementAt(i)); ysModel.addElement(yearListmodel.getElementAt(i)); } timeComboBox.setModel(ysModel); timeSetupDialog = new TimeSetupDialog(this, true, tsModel); menuItemTimeSetting.setEnabled(true); } } } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Error to set new options\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } }//GEN-LAST:event_menuitemOptionsActionPerformed private void menuItemCloseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemCloseActionPerformed this.dispose(); }//GEN-LAST:event_menuItemCloseActionPerformed private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed if (searcher == null) { JOptionPane.showMessageDialog(this, "You need to load a search engine. See options.", "Warning", JOptionPane.WARNING_MESSAGE); } else { String queryText = tfQuery.getText(); if (queryText != null && queryText.length() > 0) { try { if (timeCheck.isSelected()) { Object item = timeComboBox.getSelectedItem(); if (item != null && timeSetupDialog.getPeriodMap().containsKey(item.toString())) { if (semanticCheck.isSelected()) { TimePeriod tp = timeSetupDialog.getPeriodMap().get(item.toString()); VectorReader vr = triApi.getStores().get(tp.getKey()); results = searcher.search(queryText, (Integer) topnSpinner.getModel().getValue(), tp.getStart(), tp.getEnd(), vr); } else { TimePeriod tp = timeSetupDialog.getPeriodMap().get(item.toString()); results = searcher.search(queryText, (Integer) topnSpinner.getModel().getValue(), tp.getStart(), tp.getEnd()); } } else { JOptionPane.showMessageDialog(this, "No valid time period", "Warning", JOptionPane.WARNING_MESSAGE); results = searcher.search(queryText, ((Integer) topnSpinner.getModel().getValue())); } } else { results = searcher.search(queryText, ((Integer) topnSpinner.getModel().getValue())); } refreshTable(); } catch (ParseException | IOException ex) { JOptionPane.showMessageDialog(this, "Error to search\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } } }//GEN-LAST:event_searchButtonActionPerformed private void tablePrevActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tablePrevActionPerformed if (results != null) { if (offset - 10 >= 0) { offset -= 10; refreshTable(); } } }//GEN-LAST:event_tablePrevActionPerformed private void tableNextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tableNextActionPerformed if (results != null) { if (offset + 10 < results.size()) { offset += 10; refreshTable(); } } }//GEN-LAST:event_tableNextActionPerformed private void resultsTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resultsTableMouseClicked if (evt.getClickCount() == 2) { int row = resultsTable.getSelectedRow(); if (row >= 0) { JOptionPane.showInputDialog(this, resultsTable.getModel().getValueAt(row, 1), resultsTable.getModel().getValueAt(row, 0).toString(), JOptionPane.INFORMATION_MESSAGE); } } }//GEN-LAST:event_resultsTableMouseClicked private void getbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_getbActionPerformed // TODO add your handling code here: getDialog.setVisible(true); if (getDialog.getWord() != null && getDialog.getYear() != null) { try { triApi.get(getDialog.getYear(), getDialog.getWord() + "_" + getDialog.getYear(), getDialog.getWord()); this.wordListModel.addElement(new WordEntry(getDialog.getWord(), getDialog.getYear())); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Error to get vector\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } }//GEN-LAST:event_getbActionPerformed private void simbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_simbActionPerformed int[] selectedIndices = wordJList.getSelectedIndices(); if (selectedIndices.length > 1) { try { WordEntry w1 = wordListModel.get(selectedIndices[0]); WordEntry w2 = wordListModel.get(selectedIndices[1]); double sim = triApi.sim(w1.getKeyLabel(), w2.getKeyLabel()); JOptionPane.showMessageDialog(this, "Similarity between " + w1 + " and " + w2 + " = " + sim, "Similarity", JOptionPane.INFORMATION_MESSAGE); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Error to compute similarity\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } }//GEN-LAST:event_simbActionPerformed private void nearbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nearbActionPerformed int[] selectedIndices = wordJList.getSelectedIndices(); if (selectedIndices.length > 0) { //ask year WordEntry we = wordListModel.get(selectedIndices[0]); String ti = JOptionPane.showInputDialog(this, "Please, insert temporal interval", we.getYear()); try { List<ObjectVector> near = triApi.near(ti, we.getKeyLabel(), topnear); WordListDialog rsd = new WordListDialog(this, true, near); rsd.setVisible(true); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Error to compute neighborhood\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } }//GEN-LAST:event_nearbActionPerformed private void simsbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_simsbActionPerformed if (yearListmodel.getSize() > 0) { DefaultComboBoxModel<String> cym1 = new DefaultComboBoxModel<>(); DefaultComboBoxModel<String> cym2 = new DefaultComboBoxModel<>(); for (int i = 0; i < yearListmodel.getSize(); i++) { cym1.addElement(yearListmodel.getElementAt(i)); cym2.addElement(yearListmodel.getElementAt(i)); } SimsDialog simsd = new SimsDialog(this, true); simsd.getComboBox1().setModel(cym1); simsd.getComboBox1().setSelectedIndex(0); simsd.getComboBox2().setModel(cym2); simsd.getComboBox2().setSelectedIndex(0); simsd.setVisible(true); String v1 = simsd.getComboBox1().getSelectedItem().toString(); String v2 = simsd.getComboBox2().getSelectedItem().toString(); double t1 = (double) simsd.getSliderMin().getValue() / 100d; double t2 = (double) simsd.getSliderMax().getValue() / 100d; try { List<ObjectVector> sims = triApi.sims(v1, v2, topsims, t1, t2); WordListDialog rsd = new WordListDialog(this, true, sims); rsd.setVisible(true); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Error to analyze TRI (sims)\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } }//GEN-LAST:event_simsbActionPerformed private void plotbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_plotbActionPerformed String firstTerm = JOptionPane.showInputDialog("Insert first term"); String secondTerm = JOptionPane.showInputDialog("Insert second term"); try { List<TriResultObject> plotWords = triApi.plotWords(firstTerm, secondTerm); ChartPanel chartPanel = ChartUtils.plotWords(plotWords, "Plot words over time", firstTerm + "-" + secondTerm); ChartDialog chartDialog = new ChartDialog(this, true, chartPanel); chartDialog.setVisible(true); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Error to plot words\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } }//GEN-LAST:event_plotbActionPerformed private void openbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openbActionPerformed int selectedRow = resultsTable.getSelectedRow(); if (selectedRow > -1) { String id = resultsTable.getModel().getValueAt(selectedRow, 0).toString(); String content = resultsTable.getModel().getValueAt(selectedRow, 1).toString(); docDialog.setTitle("Document " + id); docDialog.setText(content); docDialog.setVisible(true); } }//GEN-LAST:event_openbActionPerformed private void menuItemTimeSettingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemTimeSettingActionPerformed timeSetupDialog.setVisible(true); }//GEN-LAST:event_menuItemTimeSettingActionPerformed private void refreshTable() { if (results != null) { int limit = Math.min(results.size(), offset + 10); int k = 0; for (int i = offset; i < limit; i++) { resultsTable.getModel().setValueAt(results.get(i).getId(), k, 0); resultsTable.getModel().setValueAt(results.get(i).getText(), k, 1); resultsTable.getModel().setValueAt(results.get(i).getScore(), k, 2); k++; } for (int i = k; i < 10; i++) { resultsTable.getModel().setValueAt(null, k, 0); resultsTable.getModel().setValueAt(null, k, 1); resultsTable.getModel().setValueAt(null, k, 2); k++; } } } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("GTK+".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(TriShellGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(TriShellGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(TriShellGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(TriShellGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TriShellGUI().setVisible(true); } }); } //Task class LoadTriTask extends SwingWorker<Void, Void> { final List<String> years; public LoadTriTask(List<String> years) { this.years = years; } @Override protected Void doInBackground() throws Exception { yearListmodel.removeAllElements(); for (String year : years) { yearListmodel.addElement(year); triApi.load("mem", year, year); } return null; } @Override protected void done() { setCursor(null); progressDialog.dispose(); } } // Start options private int topnear = 25; private int topsims = 500; // End options private DocDialog docDialog = new DocDialog(this, false); private TimeSetupDialog timeSetupDialog; private ProgressDialog progressDialog = new ProgressDialog(this, true); private GetDialog getDialog = new GetDialog(this, true); private DefaultComboBoxModel<String> yearListmodel = new DefaultComboBoxModel<>(); private DefaultListModel<WordEntry> wordListModel = new DefaultListModel<>(); private int offset = 0; private List<SearchResult> results = null; private Searcher searcher = null; private File indexDir = null; private Tri triApi = new Tri(); private String triFolder = null; private OptionsDialog optionsDialog = new OptionsDialog(this, true); // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton getb; private javax.swing.JLabel jLabel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JToolBar.Separator jSeparator1; private javax.swing.JToolBar.Separator jSeparator2; private javax.swing.JMenuBar mainMenubar; private javax.swing.JTabbedPane mainTabbedPanel; private javax.swing.JMenu menuClose; private javax.swing.JMenu menuFile; private javax.swing.JMenuItem menuItemClose; private javax.swing.JMenuItem menuItemTimeSetting; private javax.swing.JMenuItem menuitemOptions; private javax.swing.JButton nearb; private javax.swing.JButton openb; private javax.swing.JButton plotb; private javax.swing.JTable resultsTable; private javax.swing.JButton searchButton; private javax.swing.JPanel searchPanel; private javax.swing.JCheckBox semanticCheck; private javax.swing.JButton simb; private javax.swing.JButton simsb; private javax.swing.JButton tableNext; private javax.swing.JButton tablePrev; private javax.swing.JTextField tfQuery; private javax.swing.JCheckBox timeCheck; private javax.swing.JComboBox<String> timeComboBox; private javax.swing.JSpinner topnSpinner; private javax.swing.JPanel triPanel; private javax.swing.JToolBar triToolbar; private javax.swing.JList<String> wordJList; // End of variables declaration//GEN-END:variables }