From 629ca5b40d76f911c35f8d4172b87c6230dbd206 Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Fri, 14 Feb 2020 14:27:03 +0000 Subject: [PATCH] JAL-3529 preferentially output source dbrefs or principle db for sequence type before others. --- src/jalview/io/StockholmFile.java | 40 +++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/jalview/io/StockholmFile.java b/src/jalview/io/StockholmFile.java index 0e73af1..c3b0a69 100644 --- a/src/jalview/io/StockholmFile.java +++ b/src/jalview/io/StockholmFile.java @@ -28,12 +28,14 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; import jalview.datamodel.DBRefEntry; +import jalview.datamodel.DBRefSource; import jalview.datamodel.Mapping; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; import jalview.schemes.ResidueProperties; import jalview.util.Comparison; +import jalview.util.DBRefUtils; import jalview.util.Format; import jalview.util.MessageManager; @@ -930,6 +932,11 @@ public class StockholmFile extends AlignFile return annot; } + private String dbref_to_ac_record(DBRefEntry ref) + { + return ref.getSource().toString() + " ; " + + ref.getAccessionId().toString(); + } @Override public String print(SequenceI[] s, boolean jvSuffix) { @@ -944,6 +951,7 @@ public class StockholmFile extends AlignFile Hashtable dataRef = null; while ((in < s.length) && (s[in] != null)) { + boolean isAA = s[in].isProtein(); String tmp = printId(s[in], jvSuffix); max = Math.max(max, s[in].getLength()); @@ -953,17 +961,33 @@ public class StockholmFile extends AlignFile } if (s[in].getDBRefs() != null) { - for (int idb = 0; idb < s[in].getDBRefs().length; idb++) + if (dataRef == null) + { + dataRef = new Hashtable(); + } + List primrefs = s[in].getPrimaryDBRefs(); + if (primrefs.size() >= 1) + { + dataRef.put(tmp, dbref_to_ac_record(primrefs.get(0))); + } + else { - if (dataRef == null) + for (int idb = 0; idb < s[in].getDBRefs().length; idb++) { - dataRef = new Hashtable(); + DBRefEntry dbref = s[in].getDBRefs()[idb]; + dataRef.put(tmp, dbref_to_ac_record(dbref)); + // if we put in a uniprot or EMBL record then we're done: + if (isAA && DBRefSource.UNIPROT + .equals(DBRefUtils.getCanonicalName(dbref.getSource()))) + { + break; + } + if (!isAA && DBRefSource.EMBL + .equals(DBRefUtils.getCanonicalName(dbref.getSource()))) + { + break; + } } - - String datAs1 = s[in].getDBRefs()[idb].getSource().toString() - + " ; " - + s[in].getDBRefs()[idb].getAccessionId().toString(); - dataRef.put(tmp, datAs1); } } in++; -- 1.7.10.2