/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.javascript;
+import jalview.api.JalviewApp;
+
import java.net.URL;
+import java.util.Hashtable;
import java.util.Vector;
import netscape.javascript.JSObject;
-import jalview.bin.JalviewLite;
public class JSFunctionExec implements Runnable
{
- public JalviewLite jvlite;
-
- public JSFunctionExec(JalviewLite applet)
- {
- jvlite = applet;
+ public JalviewApp jvlite;
- jsExecQueue = jvlite.getJsExecQueue();
- jvlite.setExecutor(this);
- }
+ protected boolean debug;
- public void finalize()
+ public JSFunctionExec(JalviewApp applet, boolean debug)
{
- jvlite = null;
- executor = null;
- if (jsExecQueue != null)
- {
- jsExecQueue.clear();
- }
- jsExecQueue = null;
+ jvlite = applet;
+ this.debug = debug;
+ jsExecQueue = jvlite.getJsExecQueue(this);
}
- private Vector jsExecQueue;
+ private Vector<Runnable> jsExecQueue;
private Thread executor = null;
{
if (jsExecQueue != null)
{
- Vector<JSFunctionExec> q = null;
+ Vector<Runnable> q = null;
synchronized (jsExecQueue)
{
q = jsExecQueue;
}
if (q != null)
{
- for (JSFunctionExec jx : q)
+ for (Runnable jx : q)
{
- jx.jvlite = null;
+ ((JSFunctionExec) jx).jvlite = null;
}
q.removeAllElements();
executor = null;
}
+ @Override
public void run()
{
while (jsExecQueue != null)
{
if (jsExecQueue.size() > 0)
{
- Runnable r = (Runnable) jsExecQueue.elementAt(0);
+ Runnable r = jsExecQueue.elementAt(0);
jsExecQueue.removeElementAt(0);
try
{
final Exception[] jsex = new Exception[1];
Runnable exec = new Runnable()
{
+ @Override
public void run()
{
try
JSObject scriptObject = null;
try
{
- scriptObject = JSObject.getWindow(jvlite);
+ scriptObject = jvlite.getJSObject();
} catch (Exception ex)
{
}
;
if (scriptObject != null)
{
- if (jvlite.debug && dbgMsg != null)
+ if (debug && dbgMsg != null)
{
System.err.println(dbgMsg);
}
// squash any malformedURLExceptions thrown by windows/safari
if (!(jex instanceof java.net.MalformedURLException))
{
- if (jvlite.debug)
+ if (debug)
{
System.err.println(jex);
}
if (jex instanceof netscape.javascript.JSException
- && jvlite.jsfallbackEnabled)
+ && jvlite.isJsfallbackEnabled())
{
- jsex[0] = (netscape.javascript.JSException) jex;
- if (jvlite.debug)
+ jsex[0] = jex;
+ if (debug)
{
System.err.println("Falling back to javascript: url call");
}
- StringBuffer sb = new StringBuffer("javascript:" + _listener
- + "(");
+ StringBuffer sb = new StringBuffer(
+ "javascript:" + _listener + "(");
for (int i = 0; objects != null && i < objects.length; i++)
{
if (i > 0)
sb.append("\"");
// strip out nulls and complex objects that we can't pass this
// way.
- if (objects[i] != null
- && !(objects[i].getClass().getName()
- .indexOf("jalview") == 0))
+ if (objects[i] != null && !(objects[i].getClass().getName()
+ .indexOf("jalview") == 0))
{
sb.append(objects[i].toString());
}
sb.append("\"");
}
sb.append(")");
- if (jvlite.debug)
+ if (debug)
{
System.err.println(sb.toString());
}
{
if (executor == null)
{
- executor = new Thread(new JSFunctionExec(jvlite));
+ executor = new Thread(new JSFunctionExec(jvlite, debug));
executor.start();
}
synchronized (jsExecQueue)
}
}
+ public static void setJsMessageSet(String messageclass, String viewId,
+ String[] colcommands, JalviewApp app)
+ {
+ Hashtable<String, Hashtable<String, String[]>> jsmessages = app
+ .getJSMessages();
+ Hashtable<String, int[]> jshashes = app.getJSHashes();
+
+ Hashtable<String, String[]> msgset = jsmessages.get(messageclass);
+ if (msgset == null)
+ {
+ msgset = new Hashtable<>();
+ jsmessages.put(messageclass, msgset);
+ }
+ msgset.put(viewId, colcommands);
+ int[] l = new int[colcommands.length];
+ for (int i = 0; i < colcommands.length; i++)
+ {
+ l[i] = colcommands[i].hashCode();
+ }
+ jshashes.put(messageclass + "|" + viewId, l);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see jalview.bin.JalviewLiteJsApi#getJsMessage(java.lang.String,
+ * java.lang.String)
+ */
+ public static String getJsMessage(String messageclass, String viewId,
+ JalviewApp app)
+ {
+ Hashtable<String, String[]> msgset = app.getJSMessages()
+ .get(messageclass);
+ if (msgset != null)
+ {
+ String[] msgs = msgset.get(viewId);
+ if (msgs != null)
+ {
+ for (int i = 0; i < msgs.length; i++)
+ {
+ if (msgs[i] != null)
+ {
+ String m = msgs[i];
+ msgs[i] = null;
+ return m;
+ }
+ }
+ }
+ }
+ return "";
+ }
+
+ public static boolean isJsMessageSetChanged(String string, String string2,
+ String[] colcommands, JalviewApp app)
+ {
+ int[] l = app.getJSHashes().get(string + "|" + string2);
+ if (l == null && colcommands != null)
+ {
+ return true;
+ }
+ for (int i = 0; i < colcommands.length; i++)
+ {
+ if (l[i] != colcommands[i].hashCode())
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void tidyUp()
+ {
+ stopQueue();
+ jvlite = null;
+ }
+
}