jout.close();
} catch (Exception ex)
{
+ //TODO: inform user of the problem - they need to know if their data was not saved !
ex.printStackTrace();
}
}
{
// older jalview projects do not have a dataset id.
al.setDataset(null);
- // addDatasetRef(al.getDataset());
}
else
{
al.getSequenceAt(i).getDatasetSequence().addSequenceFeature(sf);
}
}
-
+ if (vamsasSeq[i].getDBRefCount() > 0)
+ {
+ addDBRefs(al.getSequenceAt(i).getDatasetSequence(), vamsasSeq[i]);
+ }
if (JSEQ[i].getPdbidsCount() > 0)
{
Pdbids[] ids = JSEQ[i].getPdbids();
al.getSequenceAt(i).getDatasetSequence().addPDBId(entry);
}
}
- if (vamsasSeq[i].getDBRefCount() > 0)
- {
- addDBRefs(al.getSequenceAt(i).getDatasetSequence(), vamsasSeq[i]);
- }
}
}
for (int i = 0, iSize = vamsasSet.getSequenceCount(); i < iSize; i++)
{
Sequence vamsasSeq = vamsasSet.getSequence(i);
- jalview.datamodel.Sequence sq = null;
- String sqid = vamsasSeq.getDsseqid();
+ ensureJalviewDatasetSequence(vamsasSeq, ds, dseqs);
+ }
+ // create a new dataset
+ if (ds == null)
+ {
+ SequenceI[] dsseqs = new SequenceI[dseqs.size()];
+ dseqs.copyInto(dsseqs);
+ ds = new jalview.datamodel.Alignment(dsseqs);
+ addDatasetRef(vamsasSet.getDatasetId(), ds);
+ }
+ // set the dataset for the newly imported alignment.
+ if (al.getDataset() == null)
+ {
+ al.setDataset(ds);
+ }
+ }
+
+
+ /**
+ *
+ * @param vamsasSeq sequence definition to create/merge dataset sequence for
+ * @param ds dataset alignment
+ * @param dseqs vector to add new dataset sequence to
+ */
+ private void ensureJalviewDatasetSequence(Sequence vamsasSeq, AlignmentI ds, Vector dseqs)
+ {
+ jalview.datamodel.Sequence sq = (jalview.datamodel.Sequence) seqRefIds.get(vamsasSeq.getId());
+ jalview.datamodel.SequenceI dsq = null;
+ if (sq!=null && sq.getDatasetSequence()!=null)
+ {
+ dsq = (jalview.datamodel.SequenceI) sq.getDatasetSequence();
+ }
+
+ String sqid = vamsasSeq.getDsseqid();
+ if (dsq==null)
+ {
+ // need to create or add a new dataset sequence reference to this sequence
if (sqid != null)
{
- sq = (jalview.datamodel.Sequence) seqRefIds.get(vamsasSeq
- .getDsseqid());
+ dsq = (jalview.datamodel.SequenceI) seqRefIds.get(sqid);
}
- if (sq == null)
+ // check again
+ if (dsq == null)
{
- sq = (jalview.datamodel.Sequence) seqRefIds.get(vamsasSeq.getId());
- jalview.datamodel.SequenceI dsq = sq.createDatasetSequence();
+ // make a new dataset sequence
+ dsq = sq.createDatasetSequence();
if (sqid == null)
{
// make up a new dataset reference for this sequence
sqid = "" + dsq.hashCode();
}
- ((SequenceI) dsq).setVamsasId(uniqueSetSuffix + sqid);
+ dsq.setVamsasId(uniqueSetSuffix + sqid);
seqRefIds.put(sqid, dsq);
if (ds == null)
{
- dseqs.addElement(dsq);
+ if (dseqs!=null)
+ {
+ dseqs.addElement(dsq);
+ }
}
else
{
ds.addSequence(dsq);
}
-
- }
- // TODO: refactor: This is a low-level sequence operation - effectively merging one dataset sequence into another.
- // check that dataset sequence really is the union of all references to it
- boolean pre = sq.getStart() < sq.getDatasetSequence().getStart();
- boolean post = sq.getEnd() > sq.getDatasetSequence().getEnd();
- if (pre || post)
- {
- SequenceI dsq = sq.getDatasetSequence();
- StringBuffer sb = new StringBuffer();
- String newres = jalview.analysis.AlignSeq.extractGaps(
- jalview.util.Comparison.GapChars, sq.getSequenceAsString());
- synchronized (dsq)
- {
- sb.append(dsq.getSequence());
- if (pre)
- {
- sb.insert(0, newres
- .substring(0, dsq.getStart() - sq.getStart()));
- dsq.setStart(sq.getStart());
- }
- if (post)
- {
- sb.append(newres.substring(newres.length() - sq.getEnd()
- - dsq.getEnd()));
- dsq.setEnd(sq.getEnd());
- }
- dsq.setSequence(sb.toString());
- }
- System.err
- .println("DEBUG Notice: Merged dataset sequence ("
- + (pre ? "prepended" : "") + " "
- + (post ? "appended" : ""));
+ } else {
+ // make this dataset sequence sq's dataset sequence
+ sq.setDatasetSequence(dsq);
}
}
- // create a new dataset
- if (ds == null)
+ // TODO: refactor this as a merge dataset sequence function
+ // now check that sq (the dataset sequence) sequence really is the union of all references to it
+ boolean pre = sq.getStart() < dsq.getStart();
+ boolean post = sq.getEnd() > dsq.getEnd();
+ if (pre || post)
{
- SequenceI[] dsseqs = new SequenceI[dseqs.size()];
- dseqs.copyInto(dsseqs);
- ds = new jalview.datamodel.Alignment(dsseqs);
- addDatasetRef(vamsasSet.getDatasetId(), ds);
- }
- // set the dataset for the newly imported alignment.
- if (al.getDataset() == null)
- {
- al.setDataset(ds);
+ StringBuffer sb = new StringBuffer();
+ String newres = jalview.analysis.AlignSeq.extractGaps(
+ jalview.util.Comparison.GapChars, sq.getSequenceAsString());
+ synchronized (dsq)
+ {
+ sb.append(dsq.getSequence());
+ if (pre)
+ {
+ sb.insert(0, newres
+ .substring(0, dsq.getStart() - sq.getStart()));
+ dsq.setStart(sq.getStart());
+ }
+ if (post)
+ {
+ sb.append(newres.substring(newres.length() - sq.getEnd()
+ - dsq.getEnd()));
+ dsq.setEnd(sq.getEnd());
+ }
+ dsq.setSequence(sb.toString());
+ }
+ System.err
+ .println("DEBUG Notice: Merged dataset sequence ("
+ + (pre ? "prepended" : "") + " "
+ + (post ? "appended" : ""));
}
}
else
{
/**
- * make a new sequence and add it to refIds hash
+ * local sequence definition
*/
Sequence ms = mc.getSequence();
- jalview.datamodel.Sequence djs = new jalview.datamodel.Sequence(ms
+ 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 = ""+ms.hashCode(); // 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 + ms.getId());
- jmap.setTo(djs);
- seqRefIds.put(ms.getId(), djs);
+ 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);