+ /**
+ * @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<String> 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;
+ }
+