import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
/**
}
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;
+ }
}
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"));
+ }
}