X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjavascript%2FMouseOverStructureListener.java;h=6d366d067d319d931abfdff979911806d9931f0f;hb=799c26111d6936a2e70cb5f1fd7d7312311e6db9;hp=4b1c9ce8782b9badd34c8c33ccda4bbce9be175b;hpb=43b415c68805f3dec44a6ddc666d52220483c120;p=jalview.git diff --git a/src/jalview/javascript/MouseOverStructureListener.java b/src/jalview/javascript/MouseOverStructureListener.java index 4b1c9ce..6d366d0 100644 --- a/src/jalview/javascript/MouseOverStructureListener.java +++ b/src/jalview/javascript/MouseOverStructureListener.java @@ -20,9 +20,6 @@ */ package jalview.javascript; -import java.util.ArrayList; -import java.util.List; - import jalview.api.AlignmentViewPanel; import jalview.api.FeatureRenderer; import jalview.api.SequenceRenderer; @@ -35,6 +32,10 @@ import jalview.structure.StructureListener; import jalview.structure.StructureMapping; import jalview.structure.StructureMappingcommandSet; import jalview.structure.StructureSelectionManager; +import jalview.util.HttpUtils; + +import java.util.ArrayList; +import java.util.List; /** * Propagate events involving PDB structures associated with sequences to a @@ -87,47 +88,43 @@ public class MouseOverStructureListener extends JSFunctionExec implements { for (int i = 0; i < modelSet.length; i++) { - // resolve a real filename - try - { - if (new java.net.URL(modelSet[i]).openConnection() != null) - { - continue; - } - } catch (Exception x) - { - } - ; - try - { - String db = jvlite.getDocumentBase().toString(); - db = db.substring(0, db.lastIndexOf("/")); - if (new java.net.URL(db + "/" + modelSet[i]).openConnection() != null) - { - modelSet[i] = db + "/" + modelSet[i]; - continue; - } - } catch (Exception x) - { - } - ; - try - { - if (new java.net.URL(jvlite.getCodeBase() + modelSet[i]) - .openConnection() != null) - { - modelSet[i] = jvlite.getCodeBase() + modelSet[i]; - continue; - } - } catch (Exception x) - { - } - ; - + modelSet[i] = resolveModelFile(modelSet[i]); } } } + /** + * Returns the first out of: file, file prefixed by document base, or file + * prefixed by codebase which can be resolved to a valid URL. If none can, + * returns the input parameter value. + * + * @param file + */ + public String resolveModelFile(String file) + { + // TODO reuse JalviewLite.LoadingThread.addProtocol instead + if (HttpUtils.isValidUrl(file)) + { + return file; + } + + String db = jvlite.getDocumentBase().toString(); + db = db.substring(0, db.lastIndexOf("/")); + String docBaseFile = db + "/" + file; + if (HttpUtils.isValidUrl(docBaseFile)) + { + return docBaseFile; + } + + String cb = jvlite.getCodeBase() + file; + if (HttpUtils.isValidUrl(cb)) + { + return cb; + } + + return file; + } + @Override public String[] getPdbFile() { @@ -154,10 +151,10 @@ public class MouseOverStructureListener extends JSFunctionExec implements // field that is interpreted (in 2.8.2) as pdbId? // JBPComment: yep - this is right! the Javascript harness uses the // absolute pdbFile URI to locate the PDB file in the external viewer - executeJavascriptFunction(_listenerfn, new String[] - { "mouseover", "" + atom.getPdbFile(), - "" + atom.getChain(), - "" + (atom.getPdbResNum()), "" + atom.getAtomIndex() }); + executeJavascriptFunction(_listenerfn, + new String[] { "mouseover", "" + atom.getPdbFile(), + "" + atom.getChain(), "" + (atom.getPdbResNum()), + "" + atom.getAtomIndex() }); } catch (Exception ex) { System.err.println("Couldn't execute callback with " + _listenerfn @@ -173,10 +170,14 @@ public class MouseOverStructureListener extends JSFunctionExec implements final Object source = srce; StructureSelectionManager ssm = StructureSelectionManager .getStructureSelectionManager(jvlite); - // if (jvlite.debug) - // { - // ssm.reportMapping(); - // } + + if (JalviewLite.debug) + { + System.err.println(this.getClass().getName() + " modelSet[0]: " + + modelSet[0]); + ssm.reportMapping(); + } + if (source instanceof jalview.api.AlignmentViewPanel) { SequenceI[][] sequence = new SequenceI[modelSet.length][]; @@ -221,7 +222,7 @@ public class MouseOverStructureListener extends JSFunctionExec implements ArrayList pdbfn = new ArrayList(); StructureMappingcommandSet[] colcommands = JmolCommands .getColourBySequenceCommand(ssm, modelSet, sequence, sr, fr, - ((AlignmentViewPanel) source).getAlignment()); + ((AlignmentViewPanel) source).getAlignViewport()); if (colcommands == null) { return; @@ -249,8 +250,7 @@ public class MouseOverStructureListener extends JSFunctionExec implements { jvlite.setJsMessageSet(mclass, mhandle, ccomandset); // and notify javascript handler - String st[] = new String[] - { + String st[] = new String[] { "colourstruct", "" + ((jalview.appletgui.AlignmentPanel) source).av.getViewId(), "" + ccomandset.length, @@ -298,7 +298,8 @@ public class MouseOverStructureListener extends JSFunctionExec implements return _listenerfn; } - public void finalise() + @Override + public void finalize() throws Throwable { jvlite = null; super.finalize();