X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJalview2XML.java;h=42760f38e44ce3ad0204f263e07e257bb9a1a151;hp=689261c0280c3fbbc62b88a8a7f9898817960167;hb=ac5f0c912a1c7819530456bab13942ad3734460b;hpb=55d8ed2824ef1e2f5a8ea30f43d14980119f8c43 diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index 689261c..42760f3 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -194,6 +194,12 @@ public class Jalview2XML private static final String UTF_8 = "UTF-8"; + /** + * prefix for recovering datasets for alignments with multiple views where + * non-existent dataset IDs were written for some views + */ + private static final String UNIQSEQSETID = "uniqueSeqSetId."; + // use this with nextCounter() to make unique names for entities private int counter = 0; @@ -1127,13 +1133,13 @@ public class Jalview2XML { TreePanel tp = (TreePanel) frames[t]; - if (tp.treeCanvas.av.getAlignment() == jal) + if (tp.getTreeCanvas().getViewport().getAlignment() == jal) { Tree tree = new Tree(); tree.setTitle(tp.getTitle()); tree.setCurrentTree((av.getCurrentTree() == tp.getTree())); tree.setNewick(tp.getTree().print()); - tree.setThreshold(tp.treeCanvas.threshold); + tree.setThreshold(tp.getTreeCanvas().getThreshold()); tree.setFitToWindow(tp.fitToWindow.getState()); tree.setFontName(tp.getTreeFont().getName()); @@ -1291,7 +1297,7 @@ public class Jalview2XML { view.setComplementId(av.getCodingComplement().getViewId()); } - view.setViewName(av.viewName); + view.setViewName(av.getViewName()); view.setGatheredViews(av.isGatherViewsHere()); Rectangle size = ap.av.getExplodedGeometry(); @@ -3071,6 +3077,28 @@ public class Jalview2XML : null; // //////////////////////////////// + // INITIALISE ALIGNMENT SEQUENCESETID AND VIEWID + // + // + // If we just load in the same jar file again, the sequenceSetId + // will be the same, and we end up with multiple references + // to the same sequenceSet. We must modify this id on load + // so that each load of the file gives a unique id + + /** + * used to resolve correct alignment dataset for alignments with multiple + * views + */ + String uniqueSeqSetId = null; + String viewId = null; + if (view != null) + { + uniqueSeqSetId = view.getSequenceSetId() + uniqueSetSuffix; + viewId = (view.getId() == null ? null + : view.getId() + uniqueSetSuffix); + } + + // //////////////////////////////// // LOAD SEQUENCES List hiddenSeqs = null; @@ -3188,7 +3216,7 @@ public class Jalview2XML // finally, verify all data in vamsasSet is actually present in al // passing on flag indicating if it is actually a stored dataset - recoverDatasetFor(vamsasSet, al, isdsal); + recoverDatasetFor(vamsasSet, al, isdsal, uniqueSeqSetId); } if (referenceseqForView != null) @@ -3736,13 +3764,6 @@ public class Jalview2XML // /////////////////////////////// // LOAD VIEWPORT - // If we just load in the same jar file again, the sequenceSetId - // will be the same, and we end up with multiple references - // to the same sequenceSet. We must modify this id on load - // so that each load of the file gives a unique id - String uniqueSeqSetId = view.getSequenceSetId() + uniqueSetSuffix; - String viewId = (view.getId() == null ? null - : view.getId() + uniqueSetSuffix); AlignFrame af = null; AlignViewport av = null; // now check to see if we really need to create a new viewport. @@ -3967,10 +3988,11 @@ public class Jalview2XML tp.setTitle(tree.getTitle()); tp.setBounds(new Rectangle(tree.getXpos(), tree.getYpos(), tree.getWidth(), tree.getHeight())); - tp.av = av; - tp.treeCanvas.av = av; // af.viewport; - tp.treeCanvas.ap = ap; // af.alignPanel; - + tp.setViewport(av); // af.viewport; // TODO: verify 'associate with all + // views' + // works still + tp.getTreeCanvas().setViewport(av); // af.viewport; + tp.getTreeCanvas().setAssociatedPanel(ap); // af.alignPanel; } if (tp == null) { @@ -3997,7 +4019,7 @@ public class Jalview2XML tp.showBootstrap(tree.getShowBootstrap()); tp.showDistances(tree.getShowDistances()); - tp.treeCanvas.threshold = tree.getThreshold(); + tp.getTreeCanvas().setThreshold(tree.getThreshold()); tp.treeCanvas.applyToAllViews = tree.isLinkToAllViews(); if (tree.getCurrentTree()) @@ -4731,7 +4753,7 @@ public class Jalview2XML if (view.getViewName() != null) { - af.viewport.viewName = view.getViewName(); + af.viewport.setViewName(view.getViewName()); af.setInitialTabVisible(); } af.setBounds(view.getXpos(), view.getYpos(), view.getWidth(), @@ -5286,13 +5308,25 @@ public class Jalview2XML } private void recoverDatasetFor(SequenceSet vamsasSet, AlignmentI al, - boolean ignoreUnrefed) + boolean ignoreUnrefed, String uniqueSeqSetId) { jalview.datamodel.AlignmentI ds = getDatasetFor( vamsasSet.getDatasetId()); Vector dseqs = null; if (ds == null) { + if (!ignoreUnrefed) + { + // try to resolve the dataset via uniqueSeqSetId + ds = getDatasetFor(UNIQSEQSETID + uniqueSeqSetId); + if (ds != null) + { + addDatasetRef(vamsasSet.getDatasetId(), ds); + } + } + } + if (ds == null) + { // create a list of new dataset sequences dseqs = new Vector(); } @@ -5315,6 +5349,8 @@ public class Jalview2XML if (al.getDataset() == null && !ignoreUnrefed) { al.setDataset(ds); + // register dataset for the alignment's uniqueSeqSetId for legacy projects + addDatasetRef(UNIQSEQSETID + uniqueSeqSetId, ds); } } @@ -5656,6 +5692,9 @@ public class Jalview2XML initSeqRefs(); JalviewModel jm = saveState(ap, null, null, null); + addDatasetRef(jm.getVamsasModel().getSequenceSet()[0].getDatasetId(), + ap.getAlignment().getDataset()); + uniqueSetSuffix = ""; jm.getJalviewModelSequence().getViewport(0).setId(null); // we don't overwrite the view we just copied