+ private void addDBRefs(SequenceI datasetSequence, Sequence sequence)
+ {
+ for (int d = 0; d < sequence.getDBRefCount(); d++)
+ {
+ DBRef dr = sequence.getDBRef(d);
+ jalview.datamodel.DBRefEntry entry = new jalview.datamodel.DBRefEntry(
+ sequence.getDBRef(d).getSource(), sequence.getDBRef(d)
+ .getVersion(), sequence.getDBRef(d).getAccessionId());
+ if (dr.getMapping() != null)
+ {
+ entry.setMap(addMapping(dr.getMapping()));
+ }
+ datasetSequence.addDBRef(entry);
+ }
+ }
+
+ private jalview.datamodel.Mapping addMapping(Mapping m)
+ {
+ SequenceI dsto = null;
+ // Mapping m = dr.getMapping();
+ int fr[] = new int[m.getMapListFromCount() * 2];
+ Enumeration f = m.enumerateMapListFrom();
+ for (int _i = 0; f.hasMoreElements(); _i += 2)
+ {
+ MapListFrom mf = (MapListFrom) f.nextElement();
+ fr[_i] = mf.getStart();
+ fr[_i + 1] = mf.getEnd();
+ }
+ int fto[] = new int[m.getMapListToCount() * 2];
+ f = m.enumerateMapListTo();
+ for (int _i = 0; f.hasMoreElements(); _i += 2)
+ {
+ MapListTo mf = (MapListTo) f.nextElement();
+ fto[_i] = mf.getStart();
+ fto[_i + 1] = mf.getEnd();
+ }
+ jalview.datamodel.Mapping jmap = new jalview.datamodel.Mapping(dsto,
+ fr, fto, (int) m.getMapFromUnit(), (int) m.getMapToUnit());
+ if (m.getMappingChoice() != null)
+ {
+ MappingChoice mc = m.getMappingChoice();
+ if (mc.getDseqFor() != null)
+ {
+ if (seqRefIds.containsKey(mc.getDseqFor()))
+ {
+ /**
+ * recover from hash
+ */
+ jmap.setTo((SequenceI) seqRefIds.get(mc.getDseqFor()));
+ }
+ else
+ {
+ frefedSequence.add(new Object[]
+ { mc.getDseqFor(), jmap });
+ }
+ }
+ else
+ {
+ /**
+ * local sequence definition
+ */
+ Sequence ms = mc.getSequence();
+ jalview.datamodel.Sequence djs=null;
+ String sqid = ms.getDsseqid();
+ if (sqid!=null && sqid.length()>0)
+ {
+ /*
+ * recover dataset sequence
+ */
+ djs = (jalview.datamodel.Sequence) seqRefIds.get(sqid);
+ } else {
+ System.err.println("Warning - making up dataset sequence id for DbRef sequence map reference");
+ sqid = ((Object)ms).toString(); // make up a new hascode for undefined dataset sequence hash (unlikely to happen)
+ }
+
+ if (djs==null) {
+ /**
+ * make a new dataset sequence and add it to refIds hash
+ */
+ djs = new jalview.datamodel.Sequence(ms
+ .getName(), ms.getSequence());
+ djs.setStart(jmap.getMap().getToLowest());
+ djs.setEnd(jmap.getMap().getToHighest());
+ djs.setVamsasId(uniqueSetSuffix + sqid);
+ jmap.setTo(djs);
+ seqRefIds.put(sqid, djs);
+
+ }
+ jalview.bin.Cache.log.debug("about to recurse on addDBRefs.");
+ addDBRefs(djs, ms);
+
+ }
+ }
+ return (jmap);
+
+ }
+
+ public jalview.gui.AlignmentPanel copyAlignPanel(AlignmentPanel ap,
+ boolean keepSeqRefs)
+ {
+ jalview.schemabinding.version2.JalviewModel jm =
+ SaveState(ap, null, null);
+
+ if (!keepSeqRefs)
+ {
+ clearSeqRefs();
+ jm.getJalviewModelSequence().getViewport(0).setSequenceSetId(null);
+ }
+ else
+ {
+ uniqueSetSuffix = "";
+ }
+
+ viewportsAdded = new Hashtable();
+
+ AlignFrame af = LoadFromObject(jm, null, false);
+ af.alignPanels.clear();
+ af.closeMenuItem_actionPerformed(true);
+
+ /* if(ap.av.alignment.getAlignmentAnnotation()!=null)
+ {
+ for(int i=0; i<ap.av.alignment.getAlignmentAnnotation().length; i++)
+ {
+ if(!ap.av.alignment.getAlignmentAnnotation()[i].autoCalculated)
+ {
+ af.alignPanel.av.alignment.getAlignmentAnnotation()[i] =
+ ap.av.alignment.getAlignmentAnnotation()[i];
+ }
+ }
+ } */
+
+ return af.alignPanel;
+ }
+ /* (non-Javadoc)
+ * @see java.lang.Object#finalize()
+ */
+ protected void finalize() throws Throwable
+ {
+ // really make sure we have no buried refs left.
+ clearSeqRefs();
+ this.seqRefIds = null;
+ this.seqsToIds = null;
+ super.finalize();
+ }
+
+}