JAL-2754 Sequence.findFeatures(fromCol, toCol)
[jalview.git] / src / jalview / analysis / scoremodels / FeatureDistanceModel.java
index b44b4cf..ddbaf73 100644 (file)
@@ -22,9 +22,8 @@ package jalview.analysis.scoremodels;
 
 import jalview.api.AlignmentViewPanel;
 import jalview.api.FeatureRenderer;
-import jalview.api.analysis.DistanceScoreModelI;
+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;
@@ -38,13 +37,39 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class FeatureDistanceModel implements DistanceScoreModelI,
-        ViewBasedAnalysisI
+public class FeatureDistanceModel extends DistanceScoreModel
 {
+  private static final String NAME = "Sequence Feature Similarity";
+
+  private String description;
+
   FeatureRenderer fr;
 
+  /**
+   * Constructor
+   */
+  public FeatureDistanceModel()
+  {
+  }
+
   @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();
@@ -152,10 +177,12 @@ public class FeatureDistanceModel implements DistanceScoreModelI,
   /**
    * Builds and returns a map containing a (possibly empty) list (one per
    * SeqCigar) of visible feature types at the given column position. The map
-   * has no entry for sequences which are gapped at the column position.
+   * does not include entries for features which straddle a gapped column
+   * positions.
    * 
    * @param seqs
    * @param columnPosition
+   *          (0..)
    * @return
    */
   protected Map<SeqCigar, Set<String>> findFeatureTypesAtColumn(
@@ -167,9 +194,12 @@ public class FeatureDistanceModel implements DistanceScoreModelI,
       int spos = seq.findPosition(columnPosition);
       if (spos != -1)
       {
+        /*
+         * position is not a gap
+         */
         Set<String> types = new HashSet<String>();
-        List<SequenceFeature> sfs = fr.findFeaturesAtRes(seq.getRefSeq(),
-                spos);
+        List<SequenceFeature> sfs = fr.findFeaturesAtResidue(
+                seq.getRefSeq(), spos);
         for (SequenceFeature sf : sfs)
         {
           types.add(sf.getType());
@@ -183,7 +213,13 @@ public class FeatureDistanceModel implements DistanceScoreModelI,
   @Override
   public String getName()
   {
-    return "Sequence Feature Similarity";
+    return NAME;
+  }
+
+  @Override
+  public String getDescription()
+  {
+    return description;
   }
 
   @Override