text: Clazz.declarePackage ("JS");
  Clazz.load (["J.api.JmolParallelProcessor", "JS.ScriptFunction", "JU.Lst"], "JS.ScriptParallelProcessor", ["java.util.concurrent.Executors", "JS.ScriptProcess", "$.ScriptProcessRunnable", "J.shape.MeshCollection", "JU.Logger", "JV.ShapeManager", "$.viewer"], function () {
  c$ = Clazz.decorateAsClass (function () {
  this.vwr = null;
  this.counter = 0;
  this.error = null;
  this.lock = null;
  this.processes = null;
  Clazz.instantialize (this, arguments);
  }, JS, "ScriptParallelProcessor", JS.ScriptFunction, J.api.JmolParallelProcessor);
  Clazz.prepareFields (c$, function () {
  this.lock =  new Clazz._O ();
  this.processes =  new JU.Lst ();
  });
  Clazz.makeConstructor (c$, 
  function () {
  Clazz.superConstructor (this, JS.ScriptParallelProcessor, []);
  });
  Clazz.overrideMethod (c$, "getExecutor", 
  function () {
  return java.util.concurrent.Executors.newCachedThreadPool ();
  });
  Clazz.overrideMethod (c$, "runAllProcesses", 
  function (vwr) {
  if (this.processes.size () == 0) return;
  this.vwr = vwr;
  var inParallel = !vwr.isParallel () && vwr.setParallel (true);
  var vShapeManagers =  new JU.Lst ();
  this.error = null;
  this.counter = 0;
  if (JU.Logger.debugging) JU.Logger.debug ("running " + this.processes.size () + " processes on " + JV.viewer.nProcessors + " processesors inParallel=" + inParallel);
  this.counter = this.processes.size ();
  for (var i = this.processes.size (); --i >= 0; ) {
  var sm = null;
  if (inParallel) {
  sm =  new JV.ShapeManager (vwr);
  sm.setParallel ();
  vShapeManagers.addLast (sm);
  }this.runProcess (this.processes.removeItemAt (0), sm);
  }
  {
  while (this.counter > 0) {
  try {
  this.lock.wait ();
  } catch (e) {
  if (Clazz.exceptionOf (e, InterruptedException)) {
  } else {
  throw e;
  }
  }
  if (this.error != null) throw this.error;
  }
  }this.mergeResults (vShapeManagers);
  vwr.setParallel (false);
  }, "JV.viewer");
  Clazz.defineMethod (c$, "mergeResults", 
  function (vShapeManagers) {
  try {
  for (var i = 0; i < vShapeManagers.size (); i++) this.mergeShapes (vShapeManagers.get (i));
  
  } catch (e) {
  if (Clazz.exceptionOf (e, Error)) {
  throw e;
  } else {
  throw e;
  }
  } finally {
  this.counter = -1;
  vShapeManagers = null;
  }
  }, "JU.Lst");
  Clazz.defineMethod (c$, "mergeShapes", 
   function (shapeManager) {
  var newShapes = shapeManager.shapes;
  if (newShapes == null) return;
  if (this.vwr.shm.shapes == null) this.vwr.shm.shapes = newShapes;
   else for (var i = 0; i < newShapes.length; ++i) if (newShapes[i] != null && Clazz.instanceOf (newShapes[i], J.shape.MeshCollection)) {
  if (this.vwr.shm.shapes[i] == null) this.vwr.shm.loadShape (i);
  (this.vwr.shm.shapes[i]).merge (newShapes[i]);
  }
  }, "JV.ShapeManager");
  Clazz.defineMethod (c$, "clearShapeManager", 
  function (er) {
  {
  this.error = er;
  this.notifyAll ();
  }}, "Error");
  Clazz.overrideMethod (c$, "addProcess", 
  function (name, context) {
  this.processes.addLast ( new JS.ScriptProcess (name, context));
  }, "~S,JS.ScriptContext");
  Clazz.defineMethod (c$, "runProcess", 
   function (process, shapeManager) {
  var r =  new JS.ScriptProcessRunnable (this, process, this.lock, shapeManager);
  var exec = (shapeManager == null ? null : this.getMyExecutor ());
  if (exec != null) {
  exec.execute (r);
  } else {
  r.run ();
  }}, "JS.ScriptProcess,JV.ShapeManager");
  Clazz.defineMethod (c$, "eval", 
  function (context, shapeManager) {
  this.vwr.evalParallel (context, shapeManager);
  }, "JS.ScriptContext,JV.ShapeManager");
  Clazz.defineMethod (c$, "getMyExecutor", 
   function () {
  if (this.vwr.executor != null || JV.viewer.nProcessors < 2) return this.vwr.executor;
  try {
  this.vwr.executor = this.getExecutor ();
  } catch (e$$) {
  if (Clazz.exceptionOf (e$$, Exception)) {
  var e = e$$;
  {
  this.vwr.executor = null;
  }
  } else if (Clazz.exceptionOf (e$$, Error)) {
  var er = e$$;
  {
  this.vwr.executor = null;
  }
  } else {
  throw e$$;
  }
  }
  if (this.vwr.executor == null) JU.Logger.error ("parallel processing is not available");
  return this.vwr.executor;
  });
  });
  