/**
* 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;
+ }
}
}
}
@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"
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"
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"));
* 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"));
* 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
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"));
}
}