X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJalview2XML.java;h=830b791e2e0603f301d534403ac1fd308afa4b61;hb=c66902a9536b10a5477b58aaf7c2d75772890a5d;hp=4e72236db292af3e40dffb847b88ccd8946b1966;hpb=e775f1627590b62ccad7cc5104667d347079497b;p=jalview.git diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index 4e72236..830b791 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -25,7 +25,9 @@ import jalview.bin.Cache; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; +import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; +import jalview.jbgui.GStructureViewer; import jalview.schemabinding.version2.AlcodMap; import jalview.schemabinding.version2.Alcodon; import jalview.schemabinding.version2.AlcodonFrame; @@ -64,7 +66,9 @@ import jalview.schemes.ColourSchemeProperty; import jalview.schemes.GraduatedColor; import jalview.schemes.ResidueColourScheme; import jalview.schemes.ResidueProperties; +import jalview.schemes.UserColourScheme; import jalview.structure.StructureSelectionManager; +import jalview.structures.models.AAStructureBindingModel; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.util.jarInputStreamProvider; @@ -527,7 +531,7 @@ public class Jalview2XML } /** - * create a JalviewModel from an algnment view and marshall it to a + * create a JalviewModel from an alignment view and marshall it to a * JarOutputStream * * @param ap @@ -546,8 +550,8 @@ public class Jalview2XML boolean storeDS, JarOutputStream jout) { initSeqRefs(); - Vector jmolViewIds = new Vector(); // - Vector userColours = new Vector(); + List chimeraViewIds = new ArrayList(); + List userColours = new ArrayList(); AlignViewport av = ap.av; @@ -717,80 +721,20 @@ public class Jalview2XML pdb.setId(entry.getId()); pdb.setType(entry.getType()); // - // store any JMol views associated with this seqeunce + // store any JMol views associated with this sequence // this section copes with duplicate entries in the project, so a // dataset only view *should* be coped with sensibly - AppJmol jmol; + List jmolViewIds = new ArrayList(); // This must have been loaded, is it still visible? JInternalFrame[] frames = Desktop.desktop.getAllFrames(); String matchedFile = null; for (int f = frames.length - 1; f > -1; f--) { - if (frames[f] instanceof AppJmol) + if (frames[f] instanceof GStructureViewer) { - jmol = (AppJmol) frames[f]; - for (int peid = 0; peid < jmol.jmb.pdbentry.length; peid++) - { - if (!jmol.jmb.pdbentry[peid].getId().equals(entry.getId()) - && !(entry.getId().length() > 4 && entry - .getId() - .toLowerCase() - .startsWith( - jmol.jmb.pdbentry[peid].getId() - .toLowerCase()))) - { - continue; - } - if (matchedFile == null) - { - matchedFile = jmol.jmb.pdbentry[peid].getFile(); - } - else if (!matchedFile.equals(jmol.jmb.pdbentry[peid] - .getFile())) - { - Cache.log - .warn("Probably lost some PDB-Sequence mappings for this structure file (which apparently has same PDB Entry code): " - + jmol.jmb.pdbentry[peid].getFile()); - ; // record the - } - // file so we - // can get at it if the ID - // match is ambiguous (e.g. - // 1QIP==1qipA) - String statestring = jmol.jmb.viewer.getStateInfo(); - - for (int smap = 0; smap < jmol.jmb.sequence[peid].length; smap++) - { - // if (jal.findIndex(jmol.jmb.sequence[peid][smap]) > -1) - if (jds == jmol.jmb.sequence[peid][smap]) - { - StructureState state = new StructureState(); - state.setVisible(true); - state.setXpos(jmol.getX()); - state.setYpos(jmol.getY()); - state.setWidth(jmol.getWidth()); - state.setHeight(jmol.getHeight()); - state.setViewId(jmol.getViewId()); - state.setAlignwithAlignPanel(jmol.isUsedforaligment(ap)); - state.setColourwithAlignPanel(jmol - .isUsedforcolourby(ap)); - state.setColourByJmol(jmol.isColouredByJmol()); - if (!jmolViewIds.contains(state.getViewId())) - { - // Make sure we only store a Jmol state once in each XML - // document. - jmolViewIds.addElement(state.getViewId()); - state.setContent(statestring.replaceAll("\n", "")); - } - else - { - state.setContent("# duplicate state"); - } - pdb.addStructureState(state); - } - - } - } + GStructureViewer viewFrame = (GStructureViewer) frames[f]; + matchedFile = saveStructureState(ap, jds, pdb, entry, + jmolViewIds, matchedFile, viewFrame); } } @@ -1308,8 +1252,91 @@ public class Jalview2XML return object; } + /** + * @param ap + * @param jds + * @param pdb + * @param entry + * @param jmolViewIds + * @param matchedFile + * @param viewFrame + * @return + */ + protected String saveStructureState(AlignmentPanel ap, + jalview.datamodel.SequenceI jds, Pdbids pdb, + jalview.datamodel.PDBEntry entry, List jmolViewIds, + String matchedFile, GStructureViewer viewFrame) + { + final AAStructureBindingModel bindingModel = viewFrame + .getBinding(); + for (int peid = 0; peid < bindingModel + .getPdbCount(); peid++) + { + final PDBEntry pdbentry = bindingModel.getPdbEntry(peid); + final String pdbId = pdbentry.getId(); + if (!pdbId.equals(entry.getId()) + && !(entry.getId().length() > 4 && entry.getId() + .toLowerCase() + .startsWith(pdbId.toLowerCase()))) + { + continue; + } + if (matchedFile == null) + { + matchedFile = pdbentry.getFile(); + } + else if (!matchedFile.equals(pdbentry + .getFile())) + { + Cache.log + .warn("Probably lost some PDB-Sequence mappings for this structure file (which apparently has same PDB Entry code): " + + pdbentry.getFile()); + } + // record the + // file so we + // can get at it if the ID + // match is ambiguous (e.g. + // 1QIP==1qipA) + String statestring = viewFrame.getStateInfo(); + + for (int smap = 0; smap < viewFrame.getBinding() + .getSequence()[peid].length; smap++) + { + // if (jal.findIndex(jmol.jmb.sequence[peid][smap]) > -1) + if (jds == viewFrame.getBinding().getSequence()[peid][smap]) + { + StructureState state = new StructureState(); + state.setVisible(true); + state.setXpos(viewFrame.getX()); + state.setYpos(viewFrame.getY()); + state.setWidth(viewFrame.getWidth()); + state.setHeight(viewFrame.getHeight()); + state.setViewId(viewFrame.getViewId()); + state.setAlignwithAlignPanel(viewFrame.isUsedforaligment(ap)); + state.setColourwithAlignPanel(viewFrame + .isUsedforcolourby(ap)); + state.setColourByJmol(viewFrame.isColouredByViewer()); + if (!jmolViewIds.contains(state.getViewId())) + { + // Make sure we only store a Jmol state once in each XML + // document. + jmolViewIds.add(state.getViewId()); + state.setContent(statestring.replaceAll("\n", "")); + } + else + { + state.setContent("# duplicate state"); + } + pdb.addStructureState(state); + } + + } + } + return matchedFile; + } + private AnnotationColours constructAnnotationColours( - AnnotationColourGradient acg, Vector userColours, + AnnotationColourGradient acg, List userColours, JalviewModelSequence jms) { AnnotationColours ac = new AnnotationColours(); @@ -1763,7 +1790,7 @@ public class Jalview2XML } String SetUserColourScheme(jalview.schemes.ColourSchemeI cs, - Vector userColours, JalviewModelSequence jms) + List userColours, JalviewModelSequence jms) { String id = null; jalview.schemes.UserColourScheme ucs = (jalview.schemes.UserColourScheme) cs; @@ -3112,7 +3139,7 @@ public class Jalview2XML if (frames[f] instanceof AppJmol) { if (sviewid != null - && ((AppJmol) frames[f]).getViewId().equals(sviewid)) + && ((GStructureViewer) frames[f]).getViewId().equals(sviewid)) { // post jalview 2.4 schema includes structure view id comp = (AppJmol) frames[f]; @@ -3283,7 +3310,7 @@ public class Jalview2XML String pdbFile = (String) filedat[0]; SequenceI[] seq = ((Vector) filedat[2]) .toArray(new SequenceI[0]); - comp.jmb.ssm.setMapping(seq, null, pdbFile, + comp.jmb.getSsm().setMapping(seq, null, pdbFile, jalview.io.AppletFormatAdapter.FILE); comp.jmb.addSequenceForStructFile(pdbFile, seq); }