JAL-2446 getFeatureTypesForGroup() added
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 11 Apr 2017 11:17:14 +0000 (12:17 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 11 Apr 2017 11:17:14 +0000 (12:17 +0100)
src/jalview/datamodel/features/SequenceFeatures.java
test/jalview/datamodel/features/SequenceFeaturesTest.java

index a61eff2..ff5f32c 100644 (file)
@@ -8,6 +8,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 /**
@@ -225,4 +226,28 @@ public class SequenceFeatures
     }
     return groups;
   }
+
+  /**
+   * Answers the set of distinct feature types for which there is at least one
+   * feature with the given feature group
+   * 
+   * @param group
+   * @return
+   */
+  public Set<String> getFeatureTypesForGroup(String group)
+  {
+    Set<String> result = new HashSet<String>();
+    for (Entry<String, FeatureStore> featureType : featureStore.entrySet())
+    {
+      if (featureType.getValue().getFeatureGroups().contains(group))
+      {
+        /*
+         * yes this feature type includes the query group
+         */
+        result.add(featureType.getKey());
+      }
+    }
+
+    return result;
+  }
 }
index d5da9fa..c096b1b 100644 (file)
@@ -356,4 +356,62 @@ public class SequenceFeaturesTest
     assertEquals(groups.size(), 1);
     assertTrue(groups.contains("Ensembl"));
   }
+
+  @Test(groups = "Functional")
+  public void testGetFeatureTypesForGroup()
+  {
+    SequenceFeatures sf = new SequenceFeatures();
+    assertTrue(sf.getFeatureTypesForGroup(null).isEmpty());
+  
+    /*
+     * add feature with group = "Uniprot", type = "helix"
+     */
+    String groupUniprot = "Uniprot";
+    SequenceFeature sf1 = new SequenceFeature("helix", "Desc", 10, 50, 0f,
+            groupUniprot);
+    sf.add(sf1);
+    Set<String> groups = sf.getFeatureTypesForGroup(groupUniprot);
+    assertEquals(groups.size(), 1);
+    assertTrue(groups.contains("helix"));
+    assertTrue(sf.getFeatureTypesForGroup(null).isEmpty());
+  
+    /*
+     * add feature with group = "Uniprot", type = "strand"
+     */
+    SequenceFeature sf2 = new SequenceFeature("strand", "Desc", 10, 50, 0f,
+            groupUniprot);
+    sf.add(sf2);
+    groups = sf.getFeatureTypesForGroup(groupUniprot);
+    assertEquals(groups.size(), 2);
+    assertTrue(groups.contains("helix"));
+    assertTrue(groups.contains("strand"));
+
+    /*
+     * delete the "strand" Uniprot feature - still have "helix"
+     */
+    sf.delete(sf2);
+    groups = sf.getFeatureTypesForGroup(groupUniprot);
+    assertEquals(groups.size(), 1);
+    assertTrue(groups.contains("helix"));
+
+    /*
+     * delete the "helix" Uniprot feature - none left
+     */
+    sf.delete(sf1);
+    assertTrue(sf.getFeatureTypesForGroup(groupUniprot).isEmpty());
+
+    /*
+     * add some null group features
+     */
+    SequenceFeature sf3 = new SequenceFeature("strand", "Desc", 10, 50, 0f,
+            null);
+    sf.add(sf3);
+    SequenceFeature sf4 = new SequenceFeature("turn", "Desc", 10, 50, 0f,
+            null);
+    sf.add(sf4);
+    groups = sf.getFeatureTypesForGroup(null);
+    assertEquals(groups.size(), 2);
+    assertTrue(groups.contains("strand"));
+    assertTrue(groups.contains("turn"));
+  }
 }