From 7adb42fe5c532fddeb98bde155c339128174708c Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Thu, 22 Mar 2007 18:30:40 +0000 Subject: [PATCH] Saves structures --- src/jalview/gui/Jalview2XML.java | 116 ++++++++++++++++++++++++++++++++++---- 1 file changed, 106 insertions(+), 10 deletions(-) diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index da807d4..3c8d31a 100755 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -28,6 +28,7 @@ import javax.swing.*; import org.exolab.castor.xml.*; import jalview.schemabinding.version2.*; import jalview.schemes.*; +import jalview.structure.StructureSelectionManager; /** * DOCUMENT ME! @@ -334,6 +335,37 @@ public class Jalview2XML pdb.setId(entry.getId()); pdb.setType(entry.getType()); + AppJMol jmol; + //This must have been loaded, is it still visible? + JInternalFrame[] frames = Desktop.desktop.getAllFrames(); + for (int f = frames.length - 1; f > -1; f--) + { + if (frames[f] instanceof AppJMol) + { + jmol = (AppJMol) frames[f]; + if (!jmol.pdbentry.getId().equals(entry.getId())) + continue; + + StructureState state = new StructureState(); + state.setVisible(true); + state.setXpos(jmol.getX()); + state.setYpos(jmol.getY()); + state.setWidth(jmol.getWidth()); + state.setHeight(jmol.getHeight()); + + state.setContent(jmol.viewer.getStateInfo().replaceAll("\n", "")); + + for (int s = 0; s < jmol.sequence.length; s++) + { + if (jal.findIndex(jmol.sequence[s]) > -1) + { + pdb.addStructureState(state); + } + } + } + } + + if (entry.getFile() != null) { pdb.setFile(entry.getFile()); @@ -363,8 +395,9 @@ public class Jalview2XML } catch (Exception ex) { - ex.printStackTrace(); + ex.printStackTrace(); } + } } @@ -604,6 +637,8 @@ public class Jalview2XML view.setViewName(av.viewName); view.setGatheredViews(av.gatherViewsHere); + + if (ap.av.explodedPosition != null) { view.setXpos(av.explodedPosition.x); @@ -893,7 +928,7 @@ public class Jalview2XML seqRefIds = new Hashtable(); viewportsAdded = new Hashtable(); - Vector gatherToThisFrame = new Vector(); + Hashtable gatherToThisFrame = new Hashtable(); try { @@ -937,7 +972,7 @@ public class Jalview2XML af = LoadFromObject(object, file, true); if (af.viewport.gatherViewsHere) { - gatherToThisFrame.add(af); + gatherToThisFrame.put(af.viewport.getSequenceSetId(), af); } entryCount++; } @@ -998,10 +1033,11 @@ public class Jalview2XML Desktop.instance.stopLoading(); } - for (int i = 0; i < gatherToThisFrame.size(); i++) + Enumeration en = gatherToThisFrame.elements(); + while(en.hasMoreElements()) { Desktop.instance.gatherViews( - (AlignFrame) gatherToThisFrame.elementAt(i)); + (AlignFrame) en.nextElement()); } return af; @@ -1062,7 +1098,7 @@ public class Jalview2XML AlignFrame LoadFromObject(JalviewModel object, String file, - boolean loadTrees) + boolean loadTreesAndStructures) { SequenceSet vamsasSet = object.getVamsasModel().getSequenceSet(0); Sequence[] vamsasSeq = vamsasSet.getSequence(); @@ -1133,6 +1169,7 @@ public class Jalview2XML Hashtable pdbloaded = new Hashtable(); + if (!multipleView) { for (int i = 0; i < vamsasSeq.length; i++) @@ -1166,6 +1203,7 @@ public class Jalview2XML al.getSequenceAt(i).getDatasetSequence().addSequenceFeature(sf); } } + if (JSEQ[i].getPdbidsCount() > 0) { Pdbids[] ids = JSEQ[i].getPdbids(); @@ -1179,9 +1217,7 @@ public class Jalview2XML { if (!pdbloaded.containsKey(ids[p].getFile())) { - String tmppdb = loadPDBFile(file, ids[p].getId()); - entry.setFile(tmppdb); - pdbloaded.put(ids[p].getId(), tmppdb); + entry.setFile(loadPDBFile(file, ids[p].getId())); } else { @@ -1693,7 +1729,7 @@ public class Jalview2XML //LOAD TREES /////////////////////////////////////// - if (loadTrees && jms.getTreeCount() > 0) + if (loadTreesAndStructures && jms.getTreeCount() > 0) { try { @@ -1740,7 +1776,67 @@ public class Jalview2XML { ex.printStackTrace(); } + } + + ////LOAD STRUCTURES + if(loadTreesAndStructures) + { + for (int i = 0; i < JSEQ.length; i++) + { + if (JSEQ[i].getPdbidsCount() > 0) + { + Pdbids[] ids = JSEQ[i].getPdbids(); + for (int p = 0; p < ids.length; p++) + { + for (int s = 0; s < ids[p].getStructureStateCount(); s++) + { + jalview.datamodel.PDBEntry jpdb = new jalview.datamodel.PDBEntry(); + + jpdb.setFile(loadPDBFile(ids[p].getFile(), ids[p].getId())); + jpdb.setId(ids[p].getId()); + + int x = ids[p].getStructureState(s).getXpos(); + int y = ids[p].getStructureState(s).getYpos(); + int width = ids[p].getStructureState(s).getWidth(); + int height = ids[p].getStructureState(s).getHeight(); + + java.awt.Component comp = Desktop.desktop.getComponentAt(x, y); + + String pdbFile = loadPDBFile(file, ids[p].getId()); + + jalview.datamodel.SequenceI[] seq = new jalview.datamodel.SequenceI[] + { + al.getSequenceAt(i)}; + + if (comp == null || + (comp.getWidth() != width && comp.getHeight() != height)) + { + String state = ids[p].getStructureState(s).getContent(); + StringBuffer newFileLoc = new StringBuffer(state.substring(0, + state.indexOf("\"", state.indexOf("load")) + 1)); + + newFileLoc.append(jpdb.getFile()); + newFileLoc.append(state.substring( + state.indexOf("\"", state.indexOf("load \"") + 6))); + + new AppJMol(pdbFile, + ids[p].getId(), + seq, + af.alignPanel, + newFileLoc.toString(), + new java.awt.Rectangle(x, y, width, height)); + + } + else + { + StructureSelectionManager.getStructureSelectionManager() + .setMapping(seq, pdbFile, jalview.io.AppletFormatAdapter.FILE); + } + } + } + } + } } return af; -- 1.7.10.2