diff --git a/uk/ac/sanger/artemis/io/PublicDBDocumentEntry.java b/uk/ac/sanger/artemis/io/PublicDBDocumentEntry.java
index cf188d9a72ab5f3c658a27fcf767a4196c722dc8..7388e5b95f0c343a250fa8c2563daf689d161950 100644
--- a/uk/ac/sanger/artemis/io/PublicDBDocumentEntry.java
+++ b/uk/ac/sanger/artemis/io/PublicDBDocumentEntry.java
@@ -207,7 +207,9 @@ public class PublicDBDocumentEntry extends SimpleDocumentEntry
}
}
-
+ Location location = joinUtrs(feature, key, qualifiers);
+ if(location == null)
+ return null;
// flatten gene model - combining qualifiers
if(key.getKeyString().equals(DatabaseDocument.EXONMODEL))
{
@@ -286,13 +288,11 @@ public class PublicDBDocumentEntry extends SimpleDocumentEntry
if(this instanceof EmblDocumentEntry)
return new EmblStreamFeature (
- key,
- feature.getLocation(),
+ key, location,
qualifiers);
else
return new GenbankStreamFeature (
- key,
- feature.getLocation(),
+ key, location,
qualifiers);
}
catch(InvalidRelationException e)
@@ -305,6 +305,53 @@ public class PublicDBDocumentEntry extends SimpleDocumentEntry
}
}
+ /**
+ * Handle UTR joins
+ * @param feature
+ * @param key
+ * @param qualifiers
+ * @return
+ */
+ private Location joinUtrs(Feature feature, Key key, QualifierVector qualifiers)
+ {
+ Location location = feature.getLocation();
+ if(key.getKeyString().equals("5'UTR") ||
+ key.getKeyString().equals("3'UTR"))
+ {
+ ChadoCanonicalGene gene = ((GFFStreamFeature)feature).getChadoGene();
+ String utrName = GeneUtils.getUniqueName(feature);
+ String transcriptName = gene.getTranscriptFromName(utrName);
+ List<Feature> utrs;
+
+ if(key.getKeyString().equals("5'UTR"))
+ utrs = gene.get5UtrOfTranscript(transcriptName);
+ else
+ utrs = gene.get3UtrOfTranscript(transcriptName);
+
+ if(utrs.size() > 1)
+ {
+ int start = Integer.MAX_VALUE;
+ RangeVector ranges = new RangeVector();
+ for(int i=0; i<utrs.size(); i++)
+ {
+ Feature utr = utrs.get(i);
+ Range range = utr.getLocation().getTotalRange();
+ if(start > range.getStart())
+ start = range.getStart();
+ ranges.add(range);
+ }
+
+ if(start != feature.getLocation().getTotalRange().getStart())
+ return null;
+
+ location =
+ new Location(ranges, feature.getLocation().isComplement());
+ }
+ qualifiers.setQualifier(new Qualifier("locus_tag", transcriptName));
+ qualifiers.removeQualifierByName("ID");
+ }
+ return location;
+ }
/**
* Merge qualifiers