From b770e33934a49a8286b82a863aec8b2ca3b0d94b Mon Sep 17 00:00:00 2001 From: gmungoc Date: Tue, 11 Apr 2017 12:17:14 +0100 Subject: [PATCH] JAL-2446 getFeatureTypesForGroup() added --- .../datamodel/features/SequenceFeatures.java | 25 +++++++++ .../datamodel/features/SequenceFeaturesTest.java | 58 ++++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/src/jalview/datamodel/features/SequenceFeatures.java b/src/jalview/datamodel/features/SequenceFeatures.java index a61eff2..ff5f32c 100644 --- a/src/jalview/datamodel/features/SequenceFeatures.java +++ b/src/jalview/datamodel/features/SequenceFeatures.java @@ -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 getFeatureTypesForGroup(String group) + { + Set result = new HashSet(); + for (Entry featureType : featureStore.entrySet()) + { + if (featureType.getValue().getFeatureGroups().contains(group)) + { + /* + * yes this feature type includes the query group + */ + result.add(featureType.getKey()); + } + } + + return result; + } } diff --git a/test/jalview/datamodel/features/SequenceFeaturesTest.java b/test/jalview/datamodel/features/SequenceFeaturesTest.java index d5da9fa..c096b1b 100644 --- a/test/jalview/datamodel/features/SequenceFeaturesTest.java +++ b/test/jalview/datamodel/features/SequenceFeaturesTest.java @@ -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 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")); + } } -- 1.7.10.2