JAL-2446 find feature types for one or more groups (vararg)
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 11 Apr 2017 14:24:59 +0000 (15:24 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 11 Apr 2017 14:24:59 +0000 (15:24 +0100)
src/jalview/datamodel/features/SequenceFeatures.java
test/jalview/datamodel/features/SequenceFeaturesTest.java

index ff5f32c..ba63f69 100644 (file)
@@ -229,22 +229,27 @@ public class SequenceFeatures
 
   /**
    * Answers the set of distinct feature types for which there is at least one
-   * feature with the given feature group
+   * feature with one of the given feature group(s)
    * 
-   * @param group
+   * @param groups
    * @return
    */
-  public Set<String> getFeatureTypesForGroup(String group)
+  public Set<String> getFeatureTypesForGroups(String... groups)
   {
     Set<String> result = new HashSet<String>();
     for (Entry<String, FeatureStore> featureType : featureStore.entrySet())
     {
-      if (featureType.getValue().getFeatureGroups().contains(group))
+      Set<String> featureGroups = featureType.getValue().getFeatureGroups();
+      for (String group : groups)
       {
-        /*
-         * yes this feature type includes the query group
-         */
-        result.add(featureType.getKey());
+        if (featureGroups.contains(group))
+        {
+          /*
+           * yes this feature type includes a query group
+           */
+          result.add(featureType.getKey());
+          break;
+        }
       }
     }
 
index c096b1b..ea46d83 100644 (file)
@@ -358,10 +358,10 @@ public class SequenceFeaturesTest
   }
 
   @Test(groups = "Functional")
-  public void testGetFeatureTypesForGroup()
+  public void testGetFeatureTypesForGroups()
   {
     SequenceFeatures sf = new SequenceFeatures();
-    assertTrue(sf.getFeatureTypesForGroup(null).isEmpty());
+    assertTrue(sf.getFeatureTypesForGroups((String) null).isEmpty());
   
     /*
      * add feature with group = "Uniprot", type = "helix"
@@ -370,10 +370,10 @@ public class SequenceFeaturesTest
     SequenceFeature sf1 = new SequenceFeature("helix", "Desc", 10, 50, 0f,
             groupUniprot);
     sf.add(sf1);
-    Set<String> groups = sf.getFeatureTypesForGroup(groupUniprot);
+    Set<String> groups = sf.getFeatureTypesForGroups(groupUniprot);
     assertEquals(groups.size(), 1);
     assertTrue(groups.contains("helix"));
-    assertTrue(sf.getFeatureTypesForGroup(null).isEmpty());
+    assertTrue(sf.getFeatureTypesForGroups((String) null).isEmpty());
   
     /*
      * add feature with group = "Uniprot", type = "strand"
@@ -381,7 +381,7 @@ public class SequenceFeaturesTest
     SequenceFeature sf2 = new SequenceFeature("strand", "Desc", 10, 50, 0f,
             groupUniprot);
     sf.add(sf2);
-    groups = sf.getFeatureTypesForGroup(groupUniprot);
+    groups = sf.getFeatureTypesForGroups(groupUniprot);
     assertEquals(groups.size(), 2);
     assertTrue(groups.contains("helix"));
     assertTrue(groups.contains("strand"));
@@ -390,7 +390,7 @@ public class SequenceFeaturesTest
      * delete the "strand" Uniprot feature - still have "helix"
      */
     sf.delete(sf2);
-    groups = sf.getFeatureTypesForGroup(groupUniprot);
+    groups = sf.getFeatureTypesForGroups(groupUniprot);
     assertEquals(groups.size(), 1);
     assertTrue(groups.contains("helix"));
 
@@ -398,7 +398,7 @@ public class SequenceFeaturesTest
      * delete the "helix" Uniprot feature - none left
      */
     sf.delete(sf1);
-    assertTrue(sf.getFeatureTypesForGroup(groupUniprot).isEmpty());
+    assertTrue(sf.getFeatureTypesForGroups(groupUniprot).isEmpty());
 
     /*
      * add some null group features
@@ -409,9 +409,35 @@ public class SequenceFeaturesTest
     SequenceFeature sf4 = new SequenceFeature("turn", "Desc", 10, 50, 0f,
             null);
     sf.add(sf4);
-    groups = sf.getFeatureTypesForGroup(null);
+    groups = sf.getFeatureTypesForGroups((String) null);
     assertEquals(groups.size(), 2);
     assertTrue(groups.contains("strand"));
     assertTrue(groups.contains("turn"));
+
+    /*
+     * add strand/Cath  and turn/Scop and query for one or both groups
+     * (find feature types for groups selected in Feature Settings)
+     */
+    SequenceFeature sf5 = new SequenceFeature("strand", "Desc", 10, 50, 0f,
+            "Cath");
+    sf.add(sf5);
+    SequenceFeature sf6 = new SequenceFeature("turn", "Desc", 10, 50, 0f,
+            "Scop");
+    sf.add(sf6);
+    groups = sf.getFeatureTypesForGroups("Cath");
+    assertEquals(groups.size(), 1);
+    assertTrue(groups.contains("strand"));
+    groups = sf.getFeatureTypesForGroups("Scop");
+    assertEquals(groups.size(), 1);
+    assertTrue(groups.contains("turn"));
+    groups = sf.getFeatureTypesForGroups("Cath", "Scop");
+    assertEquals(groups.size(), 2);
+    assertTrue(groups.contains("turn"));
+    assertTrue(groups.contains("strand"));
+    // alternative vararg syntax
+    groups = sf.getFeatureTypesForGroups(new String[] { "Cath", "Scop" });
+    assertEquals(groups.size(), 2);
+    assertTrue(groups.contains("turn"));
+    assertTrue(groups.contains("strand"));
   }
 }