From e5f78e9333fbec05d93a48a770f5d93052ece580 Mon Sep 17 00:00:00 2001
From: Sascha Steinbiss <ss34@sanger.ac.uk>
Date: Wed, 29 Jan 2014 16:26:36 +0000
Subject: [PATCH] make aggregators tied to pre-mapping keys take precedence

---
 test/uk/ac/sanger/artemis/io/GFF3AttributeBuilderTest.java | 2 +-
 uk/ac/sanger/artemis/io/GFF3AttributeBuilder.java          | 6 +++++-
 uk/ac/sanger/artemis/io/GFFStreamFeature.java              | 2 +-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/test/uk/ac/sanger/artemis/io/GFF3AttributeBuilderTest.java b/test/uk/ac/sanger/artemis/io/GFF3AttributeBuilderTest.java
index 80b27334f..e65c526b6 100644
--- a/test/uk/ac/sanger/artemis/io/GFF3AttributeBuilderTest.java
+++ b/test/uk/ac/sanger/artemis/io/GFF3AttributeBuilderTest.java
@@ -290,6 +290,6 @@ public class GFF3AttributeBuilderTest {
     ab.setAggregator("attr1", testProc);
     ab.add("attr1", in);
     ab.add("attr2", in);
-    assertEquals(ab.toString(), "attr2=foo,bar foo,bar");
+    assertEquals(ab.toString(), "attr2=>>foo<<|>>bar<< foo,bar");
   }
 }
diff --git a/uk/ac/sanger/artemis/io/GFF3AttributeBuilder.java b/uk/ac/sanger/artemis/io/GFF3AttributeBuilder.java
index 2a7b25294..a46cf4378 100644
--- a/uk/ac/sanger/artemis/io/GFF3AttributeBuilder.java
+++ b/uk/ac/sanger/artemis/io/GFF3AttributeBuilder.java
@@ -116,6 +116,7 @@ public class GFF3AttributeBuilder {
   }
 
   public void add(String attr, StringVector val) {
+    String origAttr = attr;
     ArrayList<String> targetAttrs = new ArrayList<String>();
     // expand attributes
     if (clones.containsKey(attr))
@@ -136,7 +137,10 @@ public class GFF3AttributeBuilder {
     for (String this_attr : targetAttrs) {
       String aggregatedVal;
       // do we have an aggregator for this type?
-      if (aggs.containsKey(this_attr)) {
+      if (aggs.containsKey(origAttr)) {
+        GFF3AttributeAggregator agg = aggs.get(origAttr);
+        aggregatedVal = agg.process(val);
+      } else if (aggs.containsKey(this_attr)) {
         GFF3AttributeAggregator agg = aggs.get(this_attr);
         aggregatedVal = agg.process(val);
       } else {
diff --git a/uk/ac/sanger/artemis/io/GFFStreamFeature.java b/uk/ac/sanger/artemis/io/GFFStreamFeature.java
index 522d050e6..6279f57ef 100644
--- a/uk/ac/sanger/artemis/io/GFFStreamFeature.java
+++ b/uk/ac/sanger/artemis/io/GFFStreamFeature.java
@@ -915,7 +915,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature implements
 
     // EC numbers go into Dbxref
     abuf.setMapping("EC_number", "Dbxref");
-    abuf.setAggregator("Dbxref", ecProc);
+    abuf.setAggregator("EC_number", ecProc);
     abuf.setGlue("Dbxref", ",");
 
     // start/end ranges
-- 
GitLab