From 333d483bec66b894088e71902095a78e902a462f Mon Sep 17 00:00:00 2001 From: gmungoc Date: Tue, 16 May 2017 13:40:27 +0100 Subject: [PATCH] JAL-2403 simplify instantiation / configuration of score model for view --- .../analysis/scoremodels/FeatureDistanceModel.java | 23 +++++++++--- src/jalview/analysis/scoremodels/PIDModel.java | 11 +++++- src/jalview/analysis/scoremodels/ScoreMatrix.java | 11 +++++- src/jalview/analysis/scoremodels/ScoreModels.java | 16 +-------- .../analysis/scoremodels/SmithWatermanModel.java | 8 +++++ src/jalview/api/analysis/ScoreModelI.java | 11 ++++++ src/jalview/api/analysis/ViewBasedAnalysisI.java | 37 -------------------- 7 files changed, 59 insertions(+), 58 deletions(-) delete mode 100644 src/jalview/api/analysis/ViewBasedAnalysisI.java diff --git a/src/jalview/analysis/scoremodels/FeatureDistanceModel.java b/src/jalview/analysis/scoremodels/FeatureDistanceModel.java index f88180a..056ecdb 100644 --- a/src/jalview/analysis/scoremodels/FeatureDistanceModel.java +++ b/src/jalview/analysis/scoremodels/FeatureDistanceModel.java @@ -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(); diff --git a/src/jalview/analysis/scoremodels/PIDModel.java b/src/jalview/analysis/scoremodels/PIDModel.java index 985918b..721ba45 100644 --- a/src/jalview/analysis/scoremodels/PIDModel.java +++ b/src/jalview/analysis/scoremodels/PIDModel.java @@ -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; + } } diff --git a/src/jalview/analysis/scoremodels/ScoreMatrix.java b/src/jalview/analysis/scoremodels/ScoreMatrix.java index 9bec6e4..efaeb43 100644 --- a/src/jalview/analysis/scoremodels/ScoreMatrix.java +++ b/src/jalview/analysis/scoremodels/ScoreMatrix.java @@ -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; + } } diff --git a/src/jalview/analysis/scoremodels/ScoreModels.java b/src/jalview/analysis/scoremodels/ScoreModels.java index 7146383..654136a 100644 --- a/src/jalview/analysis/scoremodels/ScoreModels.java +++ b/src/jalview/analysis/scoremodels/ScoreModels.java @@ -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) diff --git a/src/jalview/analysis/scoremodels/SmithWatermanModel.java b/src/jalview/analysis/scoremodels/SmithWatermanModel.java index 2428b81..f88101f 100644 --- a/src/jalview/analysis/scoremodels/SmithWatermanModel.java +++ b/src/jalview/analysis/scoremodels/SmithWatermanModel.java @@ -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; + } } diff --git a/src/jalview/api/analysis/ScoreModelI.java b/src/jalview/api/analysis/ScoreModelI.java index 6afd483..7f138cd 100644 --- a/src/jalview/api/analysis/ScoreModelI.java +++ b/src/jalview/api/analysis/ScoreModelI.java @@ -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 index 37a5643..0000000 --- a/src/jalview/api/analysis/ViewBasedAnalysisI.java +++ /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 . - * 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); - -} -- 1.7.10.2