From 3ce99b075083253d9f2840e9876967fab73bd617 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Tue, 11 Apr 2017 15:24:59 +0100 Subject: [PATCH] JAL-2446 find feature types for one or more groups (vararg) --- .../datamodel/features/SequenceFeatures.java | 21 ++++++---- .../datamodel/features/SequenceFeaturesTest.java | 42 ++++++++++++++++---- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/jalview/datamodel/features/SequenceFeatures.java b/src/jalview/datamodel/features/SequenceFeatures.java index ff5f32c..ba63f69 100644 --- a/src/jalview/datamodel/features/SequenceFeatures.java +++ b/src/jalview/datamodel/features/SequenceFeatures.java @@ -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 getFeatureTypesForGroup(String group) + public Set getFeatureTypesForGroups(String... groups) { Set result = new HashSet(); for (Entry featureType : featureStore.entrySet()) { - if (featureType.getValue().getFeatureGroups().contains(group)) + Set 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; + } } } diff --git a/test/jalview/datamodel/features/SequenceFeaturesTest.java b/test/jalview/datamodel/features/SequenceFeaturesTest.java index c096b1b..ea46d83 100644 --- a/test/jalview/datamodel/features/SequenceFeaturesTest.java +++ b/test/jalview/datamodel/features/SequenceFeaturesTest.java @@ -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 groups = sf.getFeatureTypesForGroup(groupUniprot); + Set 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")); } } -- 1.7.10.2