public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
String label)
{
+ return getAlignmentAnnotations(calcId, label, null, true);
+ }
+
+ @Override
+ public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+ String label, String description)
+ {
+ return getAlignmentAnnotations(calcId, label, description, false);
+ }
+
+ private List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+ String label, String description, boolean nullWildcard)
+ {
List<AlignmentAnnotation> result = new ArrayList<>();
if (this.annotation != null)
{
for (AlignmentAnnotation ann : annotation)
{
- if (ann.calcId != null && ann.calcId.equals(calcId)
- && ann.label != null && ann.label.equals(label))
+ if (((nullWildcard && calcId == null)
+ || (ann.calcId != null && ann.calcId.equals(calcId)))
+ && ((nullWildcard && label == null)
+ || (ann.label != null && ann.label.equals(label)))
+ && ((nullWildcard && description == null)
+ || (ann.description != null
+ && ann.description.equals(description))))
+
{
result.add(ann);
}
String label);
/**
+ * Returns a (possibly empty) list of any annotations that match on given
+ * calcId (source), label (type) and description (observation instance).
+ * Null values do not match.
+ *
+ * @param calcId
+ * @param label
+ * @param description
+ */
+ public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+ String label, String description);
+ /**
* create a new dataset sequence (if necessary) for this sequence and sets
* this sequence to refer to it. This call will move any features or
* references on the sequence onto the dataset. It will also make a duplicate
assertTrue(seq.getAlignmentAnnotations(null, null).isEmpty());
}
+
+ @Test(groups = { "Functional" })
+ public void testGetAlignmentAnnotations_forCalcIdLabelAndDescription()
+ {
+ addAnnotation("label1", "desc1", "calcId1", 1f);
+ AlignmentAnnotation ann2 = addAnnotation("label2", "desc2", "calcId2",
+ 1f);
+ addAnnotation("label2", "desc3", "calcId3", 1f);
+ AlignmentAnnotation ann4 = addAnnotation("label2", "desc3", "calcId2",
+ 1f);
+ addAnnotation("label5", "desc3", null, 1f);
+ addAnnotation(null, "desc3", "calcId3", 1f);
+
+ List<AlignmentAnnotation> anns = seq.getAlignmentAnnotations("calcId2",
+ "label2", "desc3");
+ assertEquals(1, anns.size());
+ assertSame(ann4, anns.get(0));
+ /**
+ * null matching should fail
+ */
+ assertTrue(seq.getAlignmentAnnotations("calcId3", "label2",null).isEmpty());
+
+ assertTrue(seq.getAlignmentAnnotations("calcId2", "label3",null).isEmpty());
+ assertTrue(seq.getAlignmentAnnotations("calcId3", "label5",null).isEmpty());
+ assertTrue(seq.getAlignmentAnnotations("calcId2", null,null).isEmpty());
+ assertTrue(seq.getAlignmentAnnotations(null, "label3",null).isEmpty());
+ assertTrue(seq.getAlignmentAnnotations(null, null,null).isEmpty());
+ }
+
/**
* Tests for addAlignmentAnnotation. Note this method has the side-effect of
* setting the sequenceRef on the annotation. Adding the same annotation twice