JAL-2480 methods to get features for group
[jalview.git] / src / jalview / datamodel / features / SequenceFeaturesI.java
index 43e9448..c423391 100644 (file)
@@ -12,11 +12,12 @@ public interface SequenceFeaturesI
    * Adds one sequence feature to the store, and returns true, unless the
    * feature is already contained in the store, in which case this method
    * returns false. Containment is determined by SequenceFeature.equals()
-   * comparison.
+   * comparison. Answers false, and does not add the feature, if feature type is
+   * null.
    * 
    * @param sf
    */
-  abstract boolean add(SequenceFeature sf);
+  boolean add(SequenceFeature sf);
 
   /**
    * Returns a (possibly empty) list of features, optionally restricted to
@@ -28,17 +29,47 @@ public interface SequenceFeaturesI
    * @param type
    * @return
    */
-  abstract List<SequenceFeature> findFeatures(int from, int to,
+  List<SequenceFeature> findFeatures(int from, int to,
           String... type);
 
   /**
-   * Answers a list of all features stored, optionally restricted to specified
-   * types, in no particular guaranteed order
+   * Answers a list of all features stored, in no particular guaranteed order.
+   * Positional features may optionally be restricted to specified types, but
+   * all non-positional features (if any) are always returned.
+   * <p>
+   * To filter non-positional features by type, use
+   * getNonPositionalFeatures(type).
+   * 
+   * @param type
+   * @return
+   */
+  List<SequenceFeature> getAllFeatures(String... type);
+
+  /**
+   * Answers a list of all positional (or non-positional) features which are in
+   * the specified feature group, optionally restricted to features of specified
+   * types.
    * 
+   * @param positional
+   *          if true returns positional features, else non-positional features
+   * @param group
+   *          the feature group to be matched (which may be null)
    * @param type
+   *          optional feature types to filter by
+   * @return
+   */
+  List<SequenceFeature> getFeaturesForGroup(boolean positional,
+          String group, String... type);
+
+  /**
+   * Answers a list of all features stored, whose type either matches one of the
+   * given ontology terms, or is a specialisation of a term in the Sequence
+   * Ontology. Results are returned in no particular guaranteed order.
+   * 
+   * @param ontologyTerm
    * @return
    */
-  abstract List<SequenceFeature> getAllFeatures(String... type);
+  List<SequenceFeature> getFeaturesByOntology(String... ontologyTerm);
 
   /**
    * Answers the number of (positional or non-positional) features, optionally
@@ -48,7 +79,7 @@ public interface SequenceFeaturesI
    * @param type
    * @return
    */
-  abstract int getFeatureCount(boolean positional, String... type);
+  int getFeatureCount(boolean positional, String... type);
 
   /**
    * Answers the total length of positional features, optionally restricted to
@@ -57,7 +88,7 @@ public interface SequenceFeaturesI
    * @param type
    * @return
    */
-  abstract int getTotalFeatureLength(String... type);
+  int getTotalFeatureLength(String... type);
 
   /**
    * Answers a list of all positional features, optionally restricted to
@@ -66,7 +97,7 @@ public interface SequenceFeaturesI
    * @param type
    * @return
    */
-  abstract List<SequenceFeature> getPositionalFeatures(
+  List<SequenceFeature> getPositionalFeatures(
           String... type);
 
   /**
@@ -75,7 +106,7 @@ public interface SequenceFeaturesI
    * 
    * @return
    */
-  abstract List<SequenceFeature> getContactFeatures(String... type);
+  List<SequenceFeature> getContactFeatures(String... type);
 
   /**
    * Answers a list of all non-positional features, optionally restricted to
@@ -85,7 +116,7 @@ public interface SequenceFeaturesI
    *          if no type is specified, all are returned
    * @return
    */
-  abstract List<SequenceFeature> getNonPositionalFeatures(
+  List<SequenceFeature> getNonPositionalFeatures(
           String... type);
 
   /**
@@ -96,14 +127,14 @@ public interface SequenceFeaturesI
    * 
    * @param sf
    */
-  abstract boolean delete(SequenceFeature sf);
+  boolean delete(SequenceFeature sf);
 
   /**
    * Answers true if this store contains at least one feature, else false
    * 
    * @return
    */
-  abstract boolean hasFeatures();
+  boolean hasFeatures();
 
   /**
    * Returns a set of the distinct feature groups present in the collection. The
@@ -116,7 +147,7 @@ public interface SequenceFeaturesI
    * @param type
    * @return
    */
-  abstract Set<String> getFeatureGroups(boolean positionalFeatures,
+  Set<String> getFeatureGroups(boolean positionalFeatures,
           String... type);
 
   /**
@@ -129,14 +160,37 @@ public interface SequenceFeaturesI
    * @param groups
    * @return
    */
-  abstract Set<String> getFeatureTypesForGroups(
+  Set<String> getFeatureTypesForGroups(
           boolean positionalFeatures, String... groups);
 
   /**
-   * Answers a set of the distinct feature types for which a feature is stored
+   * Answers a set of the distinct feature types for which a feature is stored.
+   * The types may optionally be restricted to those which match, or are a
+   * subtype of, given sequence ontology terms
    * 
    * @return
    */
-  abstract Set<String> getFeatureTypes();
+  Set<String> getFeatureTypes(String... soTerm);
 
+  /**
+   * Answers the minimum score held for positional or non-positional features
+   * for the specified type. This may be Float.NaN if there are no features, or
+   * none has a non-NaN score.
+   * 
+   * @param type
+   * @param positional
+   * @return
+   */
+  float getMinimumScore(String type, boolean positional);
+
+  /**
+   * Answers the maximum score held for positional or non-positional features
+   * for the specified type. This may be Float.NaN if there are no features, or
+   * none has a non-NaN score.
+   * 
+   * @param type
+   * @param positional
+   * @return
+   */
+  float getMaximumScore(String type, boolean positional);
 }
\ No newline at end of file