JAL-2403 simplify instantiation / configuration of score model for view
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 16 May 2017 12:40:27 +0000 (13:40 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 16 May 2017 12:40:27 +0000 (13:40 +0100)
src/jalview/analysis/scoremodels/FeatureDistanceModel.java
src/jalview/analysis/scoremodels/PIDModel.java
src/jalview/analysis/scoremodels/ScoreMatrix.java
src/jalview/analysis/scoremodels/ScoreModels.java
src/jalview/analysis/scoremodels/SmithWatermanModel.java
src/jalview/api/analysis/ScoreModelI.java
src/jalview/api/analysis/ViewBasedAnalysisI.java [deleted file]

index f88180a..056ecdb 100644 (file)
@@ -22,8 +22,8 @@ package jalview.analysis.scoremodels;
 
 import jalview.api.AlignmentViewPanel;
 import jalview.api.FeatureRenderer;
+import jalview.api.analysis.ScoreModelI;
 import jalview.api.analysis.SimilarityParamsI;
-import jalview.api.analysis.ViewBasedAnalysisI;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.SeqCigar;
 import jalview.datamodel.SequenceFeature;
@@ -37,8 +37,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class FeatureDistanceModel extends DistanceScoreModel implements
-        ViewBasedAnalysisI
+public class FeatureDistanceModel extends DistanceScoreModel
 {
   private static final String NAME = "Sequence Feature Similarity";
 
@@ -54,7 +53,23 @@ public class FeatureDistanceModel extends DistanceScoreModel implements
   }
 
   @Override
-  public boolean configureFromAlignmentView(AlignmentViewPanel view)
+  public ScoreModelI getInstance(AlignmentViewPanel view)
+  {
+    FeatureDistanceModel instance;
+    try
+    {
+      instance = this.getClass().newInstance();
+      instance.configureFromAlignmentView(view);
+      return instance;
+    } catch (InstantiationException | IllegalAccessException e)
+    {
+      System.err.println("Error in " + getClass().getName()
+              + ".getInstance(): " + e.getMessage());
+      return null;
+    }
+  }
+
+  boolean configureFromAlignmentView(AlignmentViewPanel view)
 
   {
     fr = view.cloneFeatureRenderer();
index 985918b..721ba45 100644 (file)
@@ -1,6 +1,8 @@
 package jalview.analysis.scoremodels;
 
+import jalview.api.AlignmentViewPanel;
 import jalview.api.analysis.PairwiseScoreModelI;
+import jalview.api.analysis.ScoreModelI;
 import jalview.api.analysis.SimilarityParamsI;
 import jalview.datamodel.AlignmentView;
 import jalview.math.Matrix;
@@ -9,7 +11,8 @@ import jalview.util.Comparison;
 
 /**
  * A class to provide sequence pairwise similarity based on residue identity.
- * Instances of this class are immutable and thread-safe.
+ * Instances of this class are immutable and thread-safe, so the same object is
+ * returned from calls to getInstance().
  */
 public class PIDModel extends SimilarityScoreModel implements
         PairwiseScoreModelI
@@ -231,4 +234,10 @@ public class PIDModel extends SimilarityScoreModel implements
 
     return divideBy == 0 ? 0D : 100D * total / divideBy;
   }
+
+  @Override
+  public ScoreModelI getInstance(AlignmentViewPanel avp)
+  {
+    return this;
+  }
 }
index 9bec6e4..efaeb43 100644 (file)
@@ -20,7 +20,9 @@
  */
 package jalview.analysis.scoremodels;
 
+import jalview.api.AlignmentViewPanel;
 import jalview.api.analysis.PairwiseScoreModelI;
+import jalview.api.analysis.ScoreModelI;
 import jalview.api.analysis.SimilarityParamsI;
 import jalview.datamodel.AlignmentView;
 import jalview.math.Matrix;
@@ -31,7 +33,8 @@ import java.util.Arrays;
 
 /**
  * A class that models a substitution score matrix for any given alphabet of
- * symbols. Instances of this class are immutable and thread-safe.
+ * symbols. Instances of this class are immutable and thread-safe, so the same
+ * object is returned from calls to getInstance().
  */
 public class ScoreMatrix extends SimilarityScoreModel implements
         PairwiseScoreModelI
@@ -582,4 +585,10 @@ public class ScoreMatrix extends SimilarityScoreModel implements
   {
     return maxValue;
   }
+
+  @Override
+  public ScoreModelI getInstance(AlignmentViewPanel avp)
+  {
+    return this;
+  }
 }
index 7146383..654136a 100644 (file)
@@ -2,7 +2,6 @@ package jalview.analysis.scoremodels;
 
 import jalview.api.AlignmentViewPanel;
 import jalview.api.analysis.ScoreModelI;
-import jalview.api.analysis.ViewBasedAnalysisI;
 import jalview.io.DataSourceType;
 import jalview.io.FileParse;
 import jalview.io.ScoreMatrixFile;
@@ -105,20 +104,7 @@ public class ScoreModels
   public ScoreModelI getScoreModel(String name, AlignmentViewPanel avp)
   {
     ScoreModelI model = models.get(name);
-    if (model instanceof ViewBasedAnalysisI)
-    {
-      try
-      {
-        model = model.getClass().newInstance();
-        ((ViewBasedAnalysisI) model).configureFromAlignmentView(avp);
-      } catch (IllegalAccessException | InstantiationException e)
-      {
-        System.err.println("Error creating score model " + name + ": "
-                + e.getMessage());
-        return null;
-      }
-    }
-    return model;
+    return model == null ? null : model.getInstance(avp);
   }
 
   public void registerScoreModel(ScoreModelI sm)
index 2428b81..f88101f 100644 (file)
@@ -21,6 +21,8 @@
 package jalview.analysis.scoremodels;
 
 import jalview.analysis.AlignSeq;
+import jalview.api.AlignmentViewPanel;
+import jalview.api.analysis.ScoreModelI;
 import jalview.api.analysis.SimilarityParamsI;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.SequenceI;
@@ -100,4 +102,10 @@ public class SmithWatermanModel extends SimilarityScoreModel
   {
     return description;
   }
+
+  @Override
+  public ScoreModelI getInstance(AlignmentViewPanel avp)
+  {
+    return this;
+  }
 }
index 6afd483..7f138cd 100644 (file)
@@ -1,5 +1,6 @@
 package jalview.api.analysis;
 
+import jalview.api.AlignmentViewPanel;
 import jalview.datamodel.AlignmentView;
 import jalview.math.MatrixI;
 
@@ -65,4 +66,14 @@ public interface ScoreModelI
    * @return
    */
   MatrixI findSimilarities(AlignmentView seqData, SimilarityParamsI options);
+
+  /**
+   * Returns a score model object configured for the given alignment view.
+   * Depending on the score model, this may just be a singleton instance, or a
+   * new instance configured with data from the view.
+   * 
+   * @param avp
+   * @return
+   */
+  ScoreModelI getInstance(AlignmentViewPanel avp);
 }
diff --git a/src/jalview/api/analysis/ViewBasedAnalysisI.java b/src/jalview/api/analysis/ViewBasedAnalysisI.java
deleted file mode 100644 (file)
index 37a5643..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.api.analysis;
-
-import jalview.api.AlignmentViewPanel;
-
-public interface ViewBasedAnalysisI
-{
-
-  /**
-   * Parameterise the analysis model using the current view
-   * 
-   * @param view
-   * @return true if model is applicable and calculation should proceed
-   */
-
-  boolean configureFromAlignmentView(AlignmentViewPanel view);
-
-}