X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FFeatureColour.java;fp=src%2Fjalview%2Fschemes%2FFeatureColour.java;h=480522a3900927698cc936e979770a706702f35a;hb=73d23396f9ed076d43e9416eeac708e1b300fd44;hp=54d1c6cf76a45bff99cc020c18dc90e12ffe6c18;hpb=d3e33a7b85e3369da8ff51ff9af7cf6132865e2a;p=jalview.git diff --git a/src/jalview/schemes/FeatureColour.java b/src/jalview/schemes/FeatureColour.java index 54d1c6c..480522a 100644 --- a/src/jalview/schemes/FeatureColour.java +++ b/src/jalview/schemes/FeatureColour.java @@ -24,9 +24,11 @@ import jalview.api.FeatureColourI; import jalview.datamodel.SequenceFeature; import jalview.util.ColorUtils; import jalview.util.Format; +import jalview.util.matcher.KeyedMatcherI; import java.awt.Color; import java.util.StringTokenizer; +import java.util.function.Function; /** * A class that wraps either a simple colour or a graduated colour @@ -73,6 +75,11 @@ public class FeatureColour implements FeatureColourI final private float deltaBlue; + /* + * optional filter by attribute values + */ + private KeyedMatcherI attributeFilters; + /** * Parses a Jalview features file format colour descriptor * [label|][mincolour|maxcolour @@ -359,6 +366,7 @@ public class FeatureColour implements FeatureColourI base = fc.base; range = fc.range; isHighToLow = fc.isHighToLow; + attributeFilters = fc.attributeFilters; setAboveThreshold(fc.isAboveThreshold()); setBelowThreshold(fc.isBelowThreshold()); setThreshold(fc.getThreshold()); @@ -540,6 +548,11 @@ public class FeatureColour implements FeatureColourI @Override public Color getColor(SequenceFeature feature) { + if (!matchesFilters(feature)) + { + return null; + } + if (isColourByLabel()) { return ColorUtils.createColourFromName(feature.getDescription()); @@ -589,6 +602,23 @@ public class FeatureColour implements FeatureColourI } /** + * Answers true if there are any attribute value filters defined, and the + * feature matches all of the filter conditions + * + * @param feature + * + * @return + */ + boolean matchesFilters(SequenceFeature feature) + { + Function valueProvider = key -> feature.otherDetails == null ? null + : (feature.otherDetails.containsKey(key) ? feature.otherDetails + .get(key).toString() : null); + return attributeFilters == null ? true : attributeFilters + .matches(valueProvider); + } + + /** * Returns the maximum score of the graduated colour range * * @return @@ -674,4 +704,21 @@ public class FeatureColour implements FeatureColourI return String.format("%s\t%s", featureType, colourString); } + /** + * Adds an attribute filter + * + * @param attName + * @param filter + */ + @Override + public void setAttributeFilters(KeyedMatcherI matcher) + { + attributeFilters = matcher; + } + + @Override + public KeyedMatcherI getAttributeFilters() + { + return attributeFilters; + } }