JAL-2480 SequenceFeaturesI encapsulates features api
[jalview.git] / src / jalview / datamodel / features / SequenceFeatures.java
index 6165d0a..4489b1d 100644 (file)
@@ -4,6 +4,7 @@ import jalview.datamodel.SequenceFeature;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -19,7 +20,7 @@ import java.util.Set;
  * @author gmcarstairs
  *
  */
-public class SequenceFeatures
+public class SequenceFeatures implements SequenceFeaturesI
 {
 
   /*
@@ -36,14 +37,10 @@ public class SequenceFeatures
     featureStore = new HashMap<String, FeatureStore>();
   }
 
-  /**
-   * 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.
-   * 
-   * @param sf
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#add(jalview.datamodel.SequenceFeature)
    */
+  @Override
   public boolean add(SequenceFeature sf)
   {
     String type = sf.getType();
@@ -55,16 +52,10 @@ public class SequenceFeatures
     return featureStore.get(type).addFeature(sf);
   }
 
-  /**
-   * Returns a (possibly empty) list of features, optionally restricted to
-   * specified types, which overlap the given (inclusive) sequence position
-   * range
-   * 
-   * @param from
-   * @param to
-   * @param type
-   * @return
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#findFeatures(int, int, java.lang.String)
    */
+  @Override
   public List<SequenceFeature> findFeatures(int from, int to,
           String... type)
   {
@@ -82,13 +73,10 @@ public class SequenceFeatures
     return result;
   }
 
-  /**
-   * Answers a list of all features stored, optionally restricted to specified
-   * types, in no particular guaranteed order
-   * 
-   * @param type
-   * @return
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#getAllFeatures(java.lang.String)
    */
+  @Override
   public List<SequenceFeature> getAllFeatures(String... type)
   {
     List<SequenceFeature> result = new ArrayList<SequenceFeature>();
@@ -100,13 +88,25 @@ public class SequenceFeatures
     return result;
   }
 
-  /**
-   * Answers a list of all positional features, optionally restricted to
-   * specified types, in no particular guaranteed order
-   * 
-   * @param type
-   * @return
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#getFeatureCount(boolean, java.lang.String)
    */
+  @Override
+  public int getFeatureCount(boolean positional, String... type)
+  {
+    int result = 0;
+    for (FeatureStore fs : featureStore.values())
+    {
+      result += fs.size(positional);
+    }
+
+    return result;
+  }
+
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#getPositionalFeatures(java.lang.String)
+   */
+  @Override
   public List<SequenceFeature> getPositionalFeatures(String... type)
   {
     List<SequenceFeature> result = new ArrayList<SequenceFeature>();
@@ -136,12 +136,10 @@ public class SequenceFeatures
             .keySet() : Arrays.asList(type);
   }
 
-  /**
-   * Answers a list of all contact features, optionally restricted to specified
-   * types, in no particular guaranteed order
-   * 
-   * @return
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#getContactFeatures(java.lang.String)
    */
+  @Override
   public List<SequenceFeature> getContactFeatures(String... type)
   {
     List<SequenceFeature> result = new ArrayList<SequenceFeature>();
@@ -157,14 +155,10 @@ public class SequenceFeatures
     return result;
   }
 
-  /**
-   * Answers a list of all non-positional features, optionally restricted to
-   * specified types, in no particular guaranteed order
-   * 
-   * @param type
-   *          if no type is specified, all are returned
-   * @return
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#getNonPositionalFeatures(java.lang.String)
    */
+  @Override
   public List<SequenceFeature> getNonPositionalFeatures(String... type)
   {
     List<SequenceFeature> result = new ArrayList<SequenceFeature>();
@@ -180,14 +174,10 @@ public class SequenceFeatures
     return result;
   }
 
-  /**
-   * Deletes the given feature from the store, returning true if it was found
-   * (and deleted), else false. This method makes no assumption that the feature
-   * is in the 'expected' place in the store, in case it has been modified since
-   * it was added.
-   * 
-   * @param sf
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#delete(jalview.datamodel.SequenceFeature)
    */
+  @Override
   public boolean delete(SequenceFeature sf)
   {
     for (FeatureStore featureSet : featureStore.values())
@@ -200,11 +190,10 @@ public class SequenceFeatures
     return false;
   }
 
-  /**
-   * Answers true if this store contains at least one feature, else false
-   * 
-   * @return
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#hasFeatures()
    */
+  @Override
   public boolean hasFeatures()
   {
     for (FeatureStore featureSet : featureStore.values())
@@ -217,17 +206,10 @@ public class SequenceFeatures
     return false;
   }
 
-  /**
-   * Returns a set of the distinct feature groups present in the collection. The
-   * set may include null. The boolean parameter determines whether the groups
-   * for positional or for non-positional features are returned. The optional
-   * type parameter may be used to restrict to groups for specified feature
-   * types.
-   * 
-   * @param positionalFeatures
-   * @param type
-   * @return
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#getFeatureGroups(boolean, java.lang.String)
    */
+  @Override
   public Set<String> getFeatureGroups(boolean positionalFeatures,
           String... type)
   {
@@ -247,16 +229,10 @@ public class SequenceFeatures
     return groups;
   }
 
-  /**
-   * Answers the set of distinct feature types for which there is at least one
-   * feature with one of the given feature group(s). The parameter determines
-   * whether the groups for positional or for non-positional features are
-   * returned.
-   * 
-   * @param positionalFeatures
-   * @param groups
-   * @return
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#getFeatureTypesForGroups(boolean, java.lang.String)
    */
+  @Override
   public Set<String> getFeatureTypesForGroups(boolean positionalFeatures,
           String... groups)
   {
@@ -281,4 +257,13 @@ public class SequenceFeatures
 
     return result;
   }
+
+  /* (non-Javadoc)
+   * @see jalview.datamodel.features.SequenceFeaturesI#getFeatureTypes()
+   */
+  @Override
+  public Set<String> getFeatureTypes()
+  {
+    return Collections.unmodifiableSet(featureStore.keySet());
+  }
 }