From: Egon W. <eg...@us...> - 2004-03-28 14:21:57
|
Update of /cvsroot/cdk/cdk-plugins/macieplugin/src/org/openscience/cdkplugin/macieplugin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20674/src/org/openscience/cdkplugin/macieplugin Modified Files: MACiEPlugin.java Log Message: File reading is now threaded, which makes MACiE responsive Index: MACiEPlugin.java =================================================================== RCS file: /cvsroot/cdk/cdk-plugins/macieplugin/src/org/openscience/cdkplugin/macieplugin/MACiEPlugin.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- MACiEPlugin.java 28 Mar 2004 13:26:23 -0000 1.8 +++ MACiEPlugin.java 28 Mar 2004 14:10:39 -0000 1.9 @@ -71,6 +71,7 @@ import javax.swing.JComboBox; import javax.swing.JOptionPane; import javax.swing.JTextPane; +import javax.swing.border.BevelBorder; import javax.swing.event.*; import javax.swing.table.AbstractTableModel; @@ -90,6 +91,8 @@ private LoggingTool logger = null; private Properties pluginProps = null; + private FileLoaderThread fileLoadingThread = null; + // fields with shared info private MACiEContentModel tableContent = null; private SortedTableModel sortedContent = null; @@ -110,6 +113,10 @@ if (tableContent == null) { tableContent = new MACiEContentModel(); } + if (fileLoadingThread == null) { + fileLoadingThread = new FileLoaderThread(); + fileLoadingThread.start(); + } } public void stop() { @@ -366,15 +373,103 @@ } } + class FileLoaderThread extends Thread { + + private File fileToLoad; + + public FileLoaderThread() { + super("MACiEPlugin:FileLoader"); + fileToLoad = null; + } + + public void run() { + Thread myThread = Thread.currentThread(); + while (fileLoadingThread == myThread) { + if (fileToLoad == null) { + // nothing to do + try { + Thread.sleep(250); // 1/4 sec + } catch (InterruptedException e){ + // the VM doesn't want us to sleep anymore, + // so get back to work + } + } else { + loadFile(fileToLoad); + fileToLoad = null; + try { + Thread.sleep(50); // 50 ms + } catch (InterruptedException e){ + // the VM doesn't want us to sleep anymore, + // so get back to work + } + } + } + } + + public void addFile(File file) { + fileToLoad = file; + } + + private void loadFile(File inFile) { + ChemObjectReader cor = null; + if (inFile == null) { + JOptionPane.showMessageDialog(null, "No file was selected: " + inFile); + return; + } + + try { + cor = getChemObjectReader(inFile); + } catch (IOException ioExc) { + logger.warn("IOException while determining file format: ", ioExc.getMessage()); + logger.debug(ioExc); + } catch (Exception exc) { + logger.warn("Exception while determining file format: ", exc.getMessage()); + logger.debug(exc); + } + + if (cor == null) { + JOptionPane.showMessageDialog(null, "Could not determine file format."); + return; + } + + if (!(cor instanceof MACiEReader)) { + JOptionPane.showMessageDialog(null, "Selected file is not a MACiE database."); + return; + } + + String message = "Loading " + fileToLoad + "..."; + logger.info(message); + statusBar.setStatus(message); + // now actually open file + MACiEReader reader = (MACiEReader)cor; + try { + ChemSequence allEntries = (ChemSequence)reader.read(new ChemSequence()); + parseMACiEIntoTable(tableContent, allEntries); + } catch (Exception exception) { + JOptionPane.showMessageDialog(null, "Error: " + exception.getMessage()); + logger.error("Error: " + exception.getMessage()); + logger.debug(exception); + return; + } + statusBar.setStatus(""); + } + + } + class StatusBar extends JPanel { JLabel status; public StatusBar() { super(); + setPreferredSize(new Dimension(500, 40)); status = new JLabel(); + // status.setBorder(new BevelBorder(BevelBorder.LOWERED)); + status.setPreferredSize(new Dimension(500, 30)); status.setHorizontalAlignment(JLabel.CENTER); + add(status); + validate(); } public void setStatus(String text) { @@ -410,48 +505,12 @@ int returnVal = chooser.showOpenDialog(null); String type = null; - ChemObjectReader cor = null; if (returnVal == JFileChooser.APPROVE_OPTION) { File inFile = chooser.getSelectedFile(); - if (inFile == null) { - JOptionPane.showMessageDialog(null, "No file was selected: " + inFile); - return; - } - - try { - cor = getChemObjectReader(inFile); - } catch (IOException ioExc) { - logger.warn("IOException while determining file format: ", ioExc.getMessage()); - logger.debug(ioExc); - } catch (Exception exc) { - logger.warn("Exception while determining file format: ", exc.getMessage()); - logger.debug(exc); - } - - if (cor == null) { - JOptionPane.showMessageDialog(null, "Could not determine file format."); - return; - } - - if (!(cor instanceof MACiEReader)) { - JOptionPane.showMessageDialog(null, "Selected file is not a MACiE database."); - return; - } - - // now actually open file - MACiEReader reader = (MACiEReader)cor; - try { - ChemSequence allEntries = (ChemSequence)reader.read(new ChemSequence()); - parseMACiEIntoTable(tableContent, allEntries); - } catch (Exception exception) { - JOptionPane.showMessageDialog(null, "Error: " + exception.getMessage()); - logger.error("Error: " + exception.getMessage()); - logger.debug(exception); - return; - } + fileLoadingThread.addFile(inFile); } } } @@ -460,6 +519,7 @@ Reader fileReader = new FileReader(file); ChemObjectReader reader = new MACiEReader(fileReader); if (reader != null) { + logger.debug("Setting reader listeners..."); reader.addChemObjectIOListener(new PropertiesListener(pluginProps)); reader.addChemObjectIOListener(new PluginReaderListener()); } |