package jalview.api;
import jalview.datamodel.SequenceFeature;
+import jalview.util.matcher.KeyedMatcherI;
import java.awt.Color;
* @return
*/
String toJalviewFormat(String featureType);
+
+ /**
+ * Sets the attribute filter conditions, or removes them if the argument is
+ * null
+ *
+ * @param filter
+ */
+ public void setAttributeFilters(KeyedMatcherI filter);
+
+ /**
+ * Answers the attribute value filters for the colour scheme, or null if no
+ * filters are set
+ *
+ * @return
+ */
+ public KeyedMatcherI getAttributeFilters();
}
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
final private float deltaBlue;
+ /*
+ * optional filter by attribute values
+ */
+ private KeyedMatcherI attributeFilters;
+
/**
* Parses a Jalview features file format colour descriptor
* [label|][mincolour|maxcolour
base = fc.base;
range = fc.range;
isHighToLow = fc.isHighToLow;
+ attributeFilters = fc.attributeFilters;
setAboveThreshold(fc.isAboveThreshold());
setBelowThreshold(fc.isBelowThreshold());
setThreshold(fc.getThreshold());
@Override
public Color getColor(SequenceFeature feature)
{
+ if (!matchesFilters(feature))
+ {
+ return null;
+ }
+
if (isColourByLabel())
{
return ColorUtils.createColourFromName(feature.getDescription());
}
/**
+ * 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<String, String> 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
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;
+ }
}