+ 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();
+
+ // Probably don't need to do this anymore...
+ // Desktop.desktop.getComponentAt(x, y);
+ // TODO: NOW: check that this recovers the PDB file correctly.
+ String pdbFile = loadPDBFile(jprovider, ids[p].getId());
+ jalview.datamodel.SequenceI seq = (jalview.datamodel.SequenceI) seqRefIds
+ .get(JSEQ[i].getId() + "");
+ if (sviewid == null)
+ {
+ sviewid = "_jalview_pre2_4_" + x + "," + y + "," + width
+ + "," + height;
+ }
+ if (!jmolViewIds.containsKey(sviewid))
+ {
+ jmolViewIds.put(sviewid, new Object[]
+ { new int[]
+ { x, y, width, height }, "",
+ new Hashtable<String, Object[]>(), new boolean[]
+ { false, false, true } });
+ // Legacy pre-2.7 conversion JAL-823 :
+ // do not assume any view has to be linked for colour by
+ // sequence
+ }
+
+ // assemble String[] { pdb files }, String[] { id for each
+ // file }, orig_fileloc, SequenceI[][] {{ seqs_file 1 }, {
+ // seqs_file 2}, boolean[] {
+ // linkAlignPanel,superposeWithAlignpanel}} from hash
+ Object[] jmoldat = jmolViewIds.get(sviewid);
+ ((boolean[]) jmoldat[3])[0] |= ids[p].getStructureState(s)
+ .hasAlignwithAlignPanel() ? ids[p].getStructureState(
+ s).getAlignwithAlignPanel() : false;
+ // never colour by linked panel if not specified
+ ((boolean[]) jmoldat[3])[1] |= ids[p].getStructureState(s)
+ .hasColourwithAlignPanel() ? ids[p]
+ .getStructureState(s).getColourwithAlignPanel()
+ : false;
+ // default for pre-2.7 projects is that Jmol colouring is enabled
+ ((boolean[]) jmoldat[3])[2] &= ids[p].getStructureState(s)
+ .hasColourByJmol() ? ids[p].getStructureState(s)
+ .getColourByJmol() : true;
+
+ if (((String) jmoldat[1]).length() < ids[p]
+ .getStructureState(s).getContent().length())
+ {
+ {
+ jmoldat[1] = ids[p].getStructureState(s).getContent();
+ }
+ }
+ if (ids[p].getFile() != null)
+ {
+ File mapkey = new File(ids[p].getFile());
+ Object[] seqstrmaps = (Object[]) ((Hashtable) jmoldat[2])
+ .get(mapkey);
+ if (seqstrmaps == null)
+ {
+ ((Hashtable) jmoldat[2]).put(mapkey,
+ seqstrmaps = new Object[]
+ { pdbFile, ids[p].getId(), new Vector(),
+ new Vector() });
+ }
+ if (!((Vector) seqstrmaps[2]).contains(seq))
+ {
+ ((Vector) seqstrmaps[2]).addElement(seq);
+ // ((Vector)seqstrmaps[3]).addElement(n) :
+ // in principle, chains
+ // should be stored here : do we need to
+ // TODO: store and recover seq/pdb_id :
+ // chain mappings
+ }
+ }
+ else
+ {
+ errorMessage = ("The Jmol views in this project were imported\nfrom an older version of Jalview.\nPlease review the sequence colour associations\nin the Colour by section of the Jmol View menu.\n\nIn the case of problems, see note at\nhttp://issues.jalview.org/browse/JAL-747");
+ warn(errorMessage);
+ }
+ }
+ }
+ }
+ }
+ {
+
+ // Instantiate the associated Jmol views
+ for (Entry<String, Object[]> entry : jmolViewIds.entrySet())
+ {
+ String sviewid = entry.getKey();
+ Object[] svattrib = entry.getValue();
+ int[] geom = (int[]) svattrib[0];
+ String state = (String) svattrib[1];
+ Hashtable<File, Object[]> oldFiles = (Hashtable<File, Object[]>) svattrib[2];
+ final boolean useinJmolsuperpos = ((boolean[]) svattrib[3])[0], usetoColourbyseq = ((boolean[]) svattrib[3])[1], jmolColouring = ((boolean[]) svattrib[3])[2];
+ int x = geom[0], y = geom[1], width = geom[2], height = geom[3];
+ // collate the pdbfile -> sequence mappings from this view
+ Vector<String> pdbfilenames = new Vector<String>();
+ Vector<SequenceI[]> seqmaps = new Vector<SequenceI[]>();
+ Vector<String> pdbids = new Vector<String>();
+
+ // Search to see if we've already created this Jmol view
+ AppJmol comp = null;
+ JInternalFrame[] frames = null;
+ do
+ {
+ try
+ {
+ frames = Desktop.desktop.getAllFrames();
+ } catch (ArrayIndexOutOfBoundsException e)
+ {
+ // occasional No such child exceptions are thrown here...
+ frames = null;
+ try
+ {
+ Thread.sleep(10);
+ } catch (Exception f)
+ {
+ }
+ ;
+ }
+ } while (frames == null);
+ // search for any Jmol windows already open from other
+ // alignment views that exactly match the stored structure state
+ for (int f = 0; comp == null && f < frames.length; f++)
+ {
+ if (frames[f] instanceof AppJmol)
+ {
+ if (sviewid != null
+ && ((AppJmol) frames[f]).getViewId().equals(sviewid))
+ {
+ // post jalview 2.4 schema includes structure view id
+ comp = (AppJmol) frames[f];
+ }
+ else if (frames[f].getX() == x && frames[f].getY() == y
+ && frames[f].getHeight() == height
+ && frames[f].getWidth() == width)
+ {
+ comp = (AppJmol) frames[f];
+ }