From b6e7f73953742c72d1df633b79a2c39404fbbad0 Mon Sep 17 00:00:00 2001 From: "cmzmasek@gmail.com" Date: Tue, 22 May 2012 01:20:49 +0000 Subject: [PATCH] in progress --- .../org/forester/archaeopteryx/Configuration.java | 31 +++++--------- .../src/org/forester/archaeopteryx/MainFrame.java | 10 ++--- .../archaeopteryx/MainFrameApplication.java | 8 ++-- .../tools/AncestralTaxonomyInferrer.java | 44 +++++++++++++++++--- .../archaeopteryx/tools/InferenceManager.java | 10 +++++ .../forester/archaeopteryx/tools/ProcessPool.java | 33 +++++++++------ .../archaeopteryx/tools/ProcessRunning.java | 27 ++++++------ 7 files changed, 104 insertions(+), 59 deletions(-) create mode 100644 forester/java/src/org/forester/archaeopteryx/tools/InferenceManager.java diff --git a/forester/java/src/org/forester/archaeopteryx/Configuration.java b/forester/java/src/org/forester/archaeopteryx/Configuration.java index bb896ae..ea48459 100644 --- a/forester/java/src/org/forester/archaeopteryx/Configuration.java +++ b/forester/java/src/org/forester/archaeopteryx/Configuration.java @@ -62,10 +62,9 @@ public final class Configuration { private boolean _use_tabbed_display = false; private boolean _hide_controls_and_menus = false; private CLADOGRAM_TYPE _cladogram_type = Constants.CLADOGRAM_TYPE_DEFAULT; - private File _mafft = null; - private File _clustalo = null; - private File _fastme = null; - + private File _mafft = null; + private File _clustalo = null; + private File _fastme = null; private SortedMap _weblinks = null; private SortedMap _display_colors = null; private boolean _antialias_screen = true; @@ -932,16 +931,16 @@ public final class Configuration { } } else if ( key.equals( "path_to_mafft" ) ) { - setPathToMafft( new File( (String) st.nextElement() ) ); + setPathToMafft( new File( ( String ) st.nextElement() ) ); } else if ( key.equals( "path_to_clustalo" ) ) { - setPathToClustalOmega( new File( (String) st.nextElement() ) ); + setPathToClustalOmega( new File( ( String ) st.nextElement() ) ); } else if ( key.equals( "path_to_fastme" ) ) { - setPathToFastME( new File( (String) st.nextElement() ) ); + setPathToFastME( new File( ( String ) st.nextElement() ) ); } else if ( key.equals( "path_to_mafft" ) ) { - setPathToMafft( new File( (String) st.nextElement() ) ); + setPathToMafft( new File( ( String ) st.nextElement() ) ); } else if ( key.equals( VALIDATE_AGAINST_PHYLOXML_XSD_SCHEMA ) ) { setValidatePhyloXmlAgainstSchema( parseBoolean( ( String ) st.nextElement() ) ); @@ -1518,36 +1517,28 @@ public final class Configuration { return DEFAULT_FONT_FAMILY; } - public File getPathToMafft() { return _mafft; } - - public File getPathToClustalOmega() { return _clustalo; } - public File getPathToFastME() { return _fastme; } - - + public void setPathToMafft( final File mafft ) { _mafft = mafft; } - - - public void setPathToClustalOmega( final File clustalo ) { - _clustalo = clustalo ; + public void setPathToClustalOmega( final File clustalo ) { + _clustalo = clustalo; } - public void setPathToFastME( final File fastme ) { - _fastme = fastme; + _fastme = fastme; } static enum TRIPLET { diff --git a/forester/java/src/org/forester/archaeopteryx/MainFrame.java b/forester/java/src/org/forester/archaeopteryx/MainFrame.java index e2ba175..a04ebe5 100644 --- a/forester/java/src/org/forester/archaeopteryx/MainFrame.java +++ b/forester/java/src/org/forester/archaeopteryx/MainFrame.java @@ -210,13 +210,13 @@ public abstract class MainFrame extends JFrame implements ActionListener { Configuration _configuration; JMenuItem _remove_branch_color_item; Options _options; - final ProcessPool _process_pool; - + final ProcessPool _process_pool; + MainFrame() { - _process_pool = new ProcessPool(); + _process_pool = ProcessPool.createInstance(); } - - ProcessPool getProcessPool() { + + public ProcessPool getProcessPool() { return _process_pool; } diff --git a/forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java b/forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java index 55ddbc1..d6fe0f6 100644 --- a/forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java +++ b/forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java @@ -65,6 +65,7 @@ import org.forester.archaeopteryx.Options.NODE_LABEL_DIRECTION; import org.forester.archaeopteryx.Options.PHYLOGENY_GRAPHICS_TYPE; import org.forester.archaeopteryx.tools.AncestralTaxonomyInferrer; import org.forester.archaeopteryx.tools.GoAnnotation; +import org.forester.archaeopteryx.tools.InferenceManager; import org.forester.archaeopteryx.tools.PhyloInferenceDialog; import org.forester.archaeopteryx.tools.PhylogeneticInferenceOptions; import org.forester.archaeopteryx.tools.PhylogeneticInferrer; @@ -234,7 +235,6 @@ public final class MainFrameApplication extends MainFrame { JMenuItem _read_values_jmi; private MainFrameApplication( final Phylogeny[] phys, final Configuration config, final String title ) { - this( phys, config, title, null ); } @@ -681,12 +681,10 @@ public final class MainFrameApplication extends MainFrame { void buildPhylogeneticInferenceMenu() { final InferenceManager inference_manager = InferenceManager.getInstance(); _inference_menu = MainFrame.createMenu( "Inference", getConfiguration() ); - _inference_menu - .add( _inference_from_msa_item = new JMenuItem( "From Multiple Sequence Alignment..." ) ); + _inference_menu.add( _inference_from_msa_item = new JMenuItem( "From Multiple Sequence Alignment..." ) ); customizeJMenuItem( _inference_from_msa_item ); _inference_from_msa_item.setToolTipText( "Basic phylogenetic inference from MSA" ); - _inference_menu - .add( _inference_from_seqs_item = new JMenuItem( "From Unaligned Sequences..." ) ); + _inference_menu.add( _inference_from_seqs_item = new JMenuItem( "From Unaligned Sequences..." ) ); customizeJMenuItem( _inference_from_seqs_item ); _inference_from_seqs_item.setToolTipText( "Basic phylogenetic inference including multiple sequence alignment" ); _jmenubar.add( _inference_menu ); diff --git a/forester/java/src/org/forester/archaeopteryx/tools/AncestralTaxonomyInferrer.java b/forester/java/src/org/forester/archaeopteryx/tools/AncestralTaxonomyInferrer.java index 8445246..8a93585 100644 --- a/forester/java/src/org/forester/archaeopteryx/tools/AncestralTaxonomyInferrer.java +++ b/forester/java/src/org/forester/archaeopteryx/tools/AncestralTaxonomyInferrer.java @@ -31,9 +31,11 @@ import javax.swing.JOptionPane; import org.forester.analysis.AncestralTaxonomyInference; import org.forester.analysis.AncestralTaxonomyInferenceException; +import org.forester.archaeopteryx.Constants; import org.forester.archaeopteryx.MainFrameApplication; import org.forester.archaeopteryx.TreePanel; import org.forester.phylogeny.Phylogeny; +import org.forester.util.ForesterUtil; import org.forester.ws.uniprot.UniProtWsTools; public class AncestralTaxonomyInferrer implements Runnable { @@ -41,6 +43,15 @@ public class AncestralTaxonomyInferrer implements Runnable { private final Phylogeny _phy; private final MainFrameApplication _mf; private final TreePanel _treepanel; + private long _process_id; + + private long getProcessId() { + return _process_id; + } + + private void setProcessId( final long process_id ) { + _process_id = process_id; + } public AncestralTaxonomyInferrer( final MainFrameApplication mf, final TreePanel treepanel, final Phylogeny phy ) { _phy = phy; @@ -52,13 +63,27 @@ public class AncestralTaxonomyInferrer implements Runnable { return UniProtWsTools.BASE_URL; } - private void inferTaxonomies() { + private void start() { _mf.getMainPanel().getCurrentTreePanel().setWaitCursor(); + setProcessId( _mf.getProcessPool().addProcess( "ancestral taxonomy" ) ); + } + + private void end() { + final boolean removed = _mf.getProcessPool().removeProcess( getProcessId() ); + if ( !removed ) { + ForesterUtil.printWarningMessage( Constants.PRG_NAME, "could not remove process " + getProcessId() + + " from process pool" ); + } + _mf.getMainPanel().getCurrentTreePanel().setArrowCursor(); + } + + private void inferTaxonomies() { + start(); try { AncestralTaxonomyInference.inferTaxonomyFromDescendents( _phy ); } catch ( final AncestralTaxonomyInferenceException e ) { - _mf.getMainPanel().getCurrentTreePanel().setArrowCursor(); + end(); JOptionPane.showMessageDialog( _mf, e.getMessage(), "Error during ancestral taxonomy inference", @@ -66,7 +91,7 @@ public class AncestralTaxonomyInferrer implements Runnable { return; } catch ( final UnknownHostException e ) { - _mf.getMainPanel().getCurrentTreePanel().setArrowCursor(); + end(); JOptionPane.showMessageDialog( _mf, "Could not connect to \"" + getBaseUrl() + "\"", "Network error during ancestral taxonomy inference", @@ -74,7 +99,16 @@ public class AncestralTaxonomyInferrer implements Runnable { return; } catch ( final Exception e ) { - _mf.getMainPanel().getCurrentTreePanel().setArrowCursor(); + end(); + e.printStackTrace(); + JOptionPane.showMessageDialog( _mf, + e.toString(), + "Unexpected exception during ancestral taxonomy inference", + JOptionPane.ERROR_MESSAGE ); + return; + } + catch ( final Error e ) { + end(); e.printStackTrace(); JOptionPane.showMessageDialog( _mf, e.toString(), @@ -82,11 +116,11 @@ public class AncestralTaxonomyInferrer implements Runnable { JOptionPane.ERROR_MESSAGE ); return; } - _mf.getMainPanel().getCurrentTreePanel().setArrowCursor(); _phy.setRerootable( false ); _treepanel.setTree( _phy ); _mf.showWhole(); _treepanel.setEdited( true ); + end(); try { JOptionPane.showMessageDialog( _mf, "Ancestral taxonomy inference successfully completed", diff --git a/forester/java/src/org/forester/archaeopteryx/tools/InferenceManager.java b/forester/java/src/org/forester/archaeopteryx/tools/InferenceManager.java new file mode 100644 index 0000000..fc679aa --- /dev/null +++ b/forester/java/src/org/forester/archaeopteryx/tools/InferenceManager.java @@ -0,0 +1,10 @@ + +package org.forester.archaeopteryx.tools; + +public class InferenceManager { + + public static InferenceManager getInstance() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/forester/java/src/org/forester/archaeopteryx/tools/ProcessPool.java b/forester/java/src/org/forester/archaeopteryx/tools/ProcessPool.java index 0e58ca2..60c531f 100644 --- a/forester/java/src/org/forester/archaeopteryx/tools/ProcessPool.java +++ b/forester/java/src/org/forester/archaeopteryx/tools/ProcessPool.java @@ -30,8 +30,16 @@ import java.util.List; public class ProcessPool { - private final static boolean DEBUG = true; - final static private ArrayList _processes = new ArrayList(); + private final static boolean DEBUG = true; + private final ArrayList _processes; + + private ProcessPool() { + _processes = new ArrayList(); + } + + public static ProcessPool createInstance() { + return new ProcessPool(); + } public synchronized ProcessRunning getProcessByIndex( final int i ) { return getProcesses().get( i ); @@ -41,7 +49,7 @@ public class ProcessPool { return getProcesses().size(); } - public synchronized ProcessRunning getProcessById( final int id ) { + public synchronized ProcessRunning getProcessById( final long id ) { for( final ProcessRunning p : getProcesses() ) { if ( p.getId() == id ) { return p; @@ -50,25 +58,25 @@ public class ProcessPool { return null; } - public synchronized int addProcess( final String name ) { + public synchronized long addProcess( final String name ) { final ProcessRunning p = ProcessRunning.createInstance( name ); - final int id = p.getId(); + final long id = p.getId(); if ( getProcessById( id ) != null ) { throw new IllegalStateException( " process with id " + id + "already exists" ); } getProcesses().add( p ); if ( DEBUG ) { - System.out.println( "added: " + p ); + System.out.println( " pp: added: " + p ); } return id; } - public synchronized boolean removeProcess( final int id ) { + public synchronized boolean removeProcess( final long id ) { final int i = getProcessIndexById( id ); if ( i >= 0 ) { if ( DEBUG ) { final ProcessRunning p = getProcessById( id ); - System.out.println( " removing: " + p ); + System.out.println( " pp: removing: " + p ); } getProcesses().remove( i ); return true; @@ -76,10 +84,11 @@ public class ProcessPool { return false; } - private synchronized int getProcessIndexById( final int id ) { - final ProcessRunning p = getProcessById( id ); - if ( p != null ) { - return p.getId(); + private synchronized int getProcessIndexById( final long id ) { + for( int i = 0; i < size(); ++i ) { + if ( getProcesses().get( i ).getId() == id ) { + return i; + } } return -1; } diff --git a/forester/java/src/org/forester/archaeopteryx/tools/ProcessRunning.java b/forester/java/src/org/forester/archaeopteryx/tools/ProcessRunning.java index 8b923f2..2ca5f05 100644 --- a/forester/java/src/org/forester/archaeopteryx/tools/ProcessRunning.java +++ b/forester/java/src/org/forester/archaeopteryx/tools/ProcessRunning.java @@ -30,37 +30,40 @@ import java.util.Calendar; final public class ProcessRunning { - private static int count = 0; - final private int _id; + private static long count = 0; + final private long _id; final private String _name; final private String _start; - public int getId() { + public long getId() { return _id; } - - public String getName() { + + public String getName() { return _name; } - + public String getStart() { return _start; } - + + @Override public String toString() { return getName() + " [id=" + getId() + "] [start=" + getStart() + "]"; } - + synchronized static ProcessRunning createInstance( final String name ) { final Calendar cal = Calendar.getInstance(); final SimpleDateFormat sdf = new SimpleDateFormat( "HH:mm:ss" ); return new ProcessRunning( count++, name, sdf.format( cal.getTime() ) ); } - - private ProcessRunning( final int id, final String name, final String start ) { + + private ProcessRunning( final long id, final String name, final String start ) { + if ( id < 0 ) { + throw new IllegalArgumentException( "process id cannot be negative" ); + } _id = id; _name = name; - _start = start; + _start = start; } - } -- 1.7.10.2