X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;h=44522a85d0977ecc5bbd5fd8ad1042b626507a51;hb=33ad2b9a53a0e7faec7afddf91de829d98df07bc;hp=0018ea1247cf743c63cd8f2adb5c5cf95bca80b2;hpb=ffedfec94d6a9f8ec8ba0775c2b4259368f6f149;p=jalview.git diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 0018ea1..44522a8 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -28,6 +28,7 @@ import jalview.util.StringUtils; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Enumeration; import java.util.List; import java.util.Vector; @@ -411,28 +412,24 @@ public class Sequence extends ASequence implements SequenceI } @Override - public void addPDBId(PDBEntry entry) + public boolean addPDBId(PDBEntry entry) { if (pdbIds == null) { pdbIds = new Vector(); + pdbIds.add(entry); + return true; } - if (pdbIds.contains(entry)) - { - updatePDBEntry(pdbIds.get(pdbIds.indexOf(entry)), entry); - } - else - { - pdbIds.addElement(entry); - } - } - private static void updatePDBEntry(PDBEntry oldEntry, PDBEntry newEntry) - { - if (newEntry.getFile() != null) + for (PDBEntry pdbe : pdbIds) { - oldEntry.setFile(newEntry.getFile()); + if (pdbe.updateFrom(entry)) + { + return false; + } } + pdbIds.addElement(entry); + return true; } /** @@ -1224,46 +1221,22 @@ public class Sequence extends ASequence implements SequenceI { return false; } - Vector newpdb = new Vector(); - for (int i = 0; i < dbrefs.length; i++) - { - if (DBRefSource.PDB.equals(dbrefs[i].getSource())) - { - PDBEntry pdbe = new PDBEntry(); - pdbe.setId(dbrefs[i].getAccessionId()); - if (pdbIds == null || pdbIds.size() == 0) - { - newpdb.addElement(pdbe); - } - else - { - Enumeration en = pdbIds.elements(); - boolean matched = false; - while (!matched && en.hasMoreElements()) - { - PDBEntry anentry = (PDBEntry) en.nextElement(); - if (anentry.getId().equals(pdbe.getId())) - { - matched = true; - } - } - if (!matched) - { - newpdb.addElement(pdbe); - } - } - } - } - if (newpdb.size() > 0) + boolean added = false; + for (DBRefEntry dbr : dbrefs) { - Enumeration en = newpdb.elements(); - while (en.hasMoreElements()) + if (DBRefSource.PDB.equals(dbr.getSource())) { - addPDBId((PDBEntry) en.nextElement()); + /* + * 'Add' any PDB dbrefs as a PDBEntry - add is only performed if the + * PDB id is not already present in a 'matching' PDBEntry + * Constructor parses out a chain code if appended to the accession id + * (a fudge used to 'store' the chain code in the DBRef) + */ + PDBEntry pdbe = new PDBEntry(dbr); + added |= addPDBId(pdbe); } - return true; } - return false; + return added; } @Override @@ -1422,15 +1395,15 @@ public class Sequence extends ASequence implements SequenceI } if (dbrefs==null || dbrefs.length==0) { - return Arrays.asList(new DBRefEntry[0]); + return Collections.emptyList(); } synchronized (dbrefs) { List primaries = new ArrayList(); - DBRefEntry tmp[] = new DBRefEntry[1], res[] = null; + DBRefEntry[] tmp = new DBRefEntry[1]; for (DBRefEntry ref : dbrefs) { - if (!ref.isPrimary()) + if (!ref.isPrimaryCandidate()) { continue; } @@ -1462,7 +1435,7 @@ public class Sequence extends ASequence implements SequenceI } // check standard protein or dna sources tmp[0] = ref; - res = DBRefUtils.selectDbRefs(!isProtein(), tmp); + DBRefEntry[] res = DBRefUtils.selectDbRefs(!isProtein(), tmp); if (res != null && res[0] == tmp[0]) { primaries.add(ref);