diff --git a/pom.xml b/pom.xml index 32e5f3bc0f..e65e61aac1 100644 --- a/pom.xml +++ b/pom.xml @@ -96,12 +96,8 @@ 5.18.3 5.18.3 1.4 - 1.2 - 1.70 - 1.70 6.1.1 6.0.4 - 1.21 1.2.0 1.4.1 1.9.4 @@ -121,8 +117,6 @@ 7.0.0 4.5.11 4.4.13 - 2.3.0 - ${imagej2.version} 2.1.7 3.0.5 3.1.0 @@ -162,7 +156,6 @@ 5.0.0 3.0.0 4.3.22 - 3.2.10.Final 2.1.1 23.3.0.23.09 5.7.1 diff --git a/vcell-api/pom.xml b/vcell-api/pom.xml index d1078cddab..52622d6ed0 100644 --- a/vcell-api/pom.xml +++ b/vcell-api/pom.xml @@ -157,10 +157,10 @@ - - - - - + + joda-time + joda-time + ${joda-time.version} + diff --git a/vcell-apiclient/pom.xml b/vcell-apiclient/pom.xml index 2c10db2354..3f9f22fef0 100644 --- a/vcell-apiclient/pom.xml +++ b/vcell-apiclient/pom.xml @@ -109,32 +109,6 @@ log4j-1.2-api ${log4j-1.2-api.version} - - org.bitbucket.b_c - jose4j - 0.9.3 - - - org.slf4j - slf4j-api - - - - - javax.xml.bind - jaxb-api - 2.3.0 - - - com.sun.xml.bind - jaxb-core - 2.3.0 - - - com.sun.xml.bind - jaxb-impl - 2.3.0 - org.vcell vcell-restclient diff --git a/vcell-apiclient/src/main/java/org/vcell/api/client/VCellApiClient.java b/vcell-apiclient/src/main/java/org/vcell/api/client/VCellApiClient.java index 394b44fa70..1c7b284458 100644 --- a/vcell-apiclient/src/main/java/org/vcell/api/client/VCellApiClient.java +++ b/vcell-apiclient/src/main/java/org/vcell/api/client/VCellApiClient.java @@ -3,9 +3,6 @@ import com.google.gson.Gson; import com.nimbusds.oauth2.sdk.ParseException; import org.apache.http.*; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.AuthCache; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpResponseException; import org.apache.http.client.ResponseHandler; @@ -18,15 +15,20 @@ import org.apache.http.entity.ByteArrayEntity; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; -import org.apache.http.impl.auth.BasicScheme; -import org.apache.http.impl.client.*; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultRedirectStrategy; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.apache.http.util.TextUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.vcell.api.client.query.BioModelsQuerySpec; import org.vcell.api.client.query.SimTasksQuerySpec; -import org.vcell.api.common.*; +import org.vcell.api.common.BiomodelRepresentation; +import org.vcell.api.common.SimulationRepresentation; +import org.vcell.api.common.SimulationTaskRepresentation; +import org.vcell.api.common.UserInfo; import org.vcell.api.common.events.EventWrapper; import org.vcell.restclient.ApiClient; import org.vcell.restclient.ApiException; diff --git a/vcell-client/pom.xml b/vcell-client/pom.xml index 999bb8db6d..dcd9a3e247 100644 --- a/vcell-client/pom.xml +++ b/vcell-client/pom.xml @@ -150,24 +150,6 @@ picocli ${picocli.version} - - - xalan - xalan - ${xalan.version} - - - - org.eclipse.jetty - jetty-server - ${jetty.version} - - - org.json - json - 20220924 - - diff --git a/vcell-client/src/main/java/cbit/vcell/client/desktop/biomodel/annotations/UniProtSearch.java b/vcell-client/src/main/java/cbit/vcell/client/desktop/biomodel/annotations/UniProtSearch.java index 463277746a..1c406e5747 100644 --- a/vcell-client/src/main/java/cbit/vcell/client/desktop/biomodel/annotations/UniProtSearch.java +++ b/vcell-client/src/main/java/cbit/vcell/client/desktop/biomodel/annotations/UniProtSearch.java @@ -1,5 +1,10 @@ package cbit.vcell.client.desktop.biomodel.annotations; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -8,7 +13,6 @@ import java.util.ArrayList; import java.util.List; -import org.json.*; public class UniProtSearch { @@ -44,42 +48,50 @@ public List search(String searchTerm, int searchSize, String orga System.out.println(response); System.out.println("Parsing JSON\n"); - JSONObject obj = new JSONObject(response); -// String accession = obj.getJSONObject("pageInfo").getString("pageName"); - JSONArray results = obj.getJSONArray("results"); // notice that `"posts": [...]` - for (int i = 0; i < results.length(); i++) { - JSONObject result = results.getJSONObject(i); - String accession = result.getString("primaryAccession"); + searchElements.addAll(parseResponse(response)); + +// System.out.println("\nSearch Elements:"); +// for (SearchElement element: searchElements) { +// System.out.println(element.toString()+"\n"); +// } + + // System.out.println("Status Code: " + response.statusCode()); +// System.out.println("Response Body:\n" + response.body()); + return searchElements; + } + + + private static List parseResponse(String response) { + List searchElements = new ArrayList<>(); + JsonElement jelement = JsonParser.parseString(response); + JsonObject jobject = jelement.getAsJsonObject(); + JsonArray results = jobject.getAsJsonArray("results"); + + for (JsonElement resultElement : results) { + JsonObject result = resultElement.getAsJsonObject(); + String accession = result.get("primaryAccession").getAsString(); System.out.println("Accession: " + accession); String name; if (result.toString().contains("submissionNames")) { name = result - .getJSONObject("proteinDescription") - .getJSONArray("submissionNames") - .getJSONObject(0) - .getJSONObject("fullName") - .getString("value"); + .getAsJsonObject("proteinDescription") + .getAsJsonArray("submissionNames") + .get(0).getAsJsonObject() + .getAsJsonObject("fullName") + .get("value").getAsString(); } else { - name = results.getJSONObject(i) - .getJSONObject("proteinDescription") - .getJSONObject("recommendedName") - .getJSONObject("fullName") - .getString("value"); + name = result + .getAsJsonObject("proteinDescription") + .getAsJsonObject("recommendedName") + .getAsJsonObject("fullName") + .get("value").getAsString(); } - System.out.println("Name: " + name+"\n"); + System.out.println("Name: " + name + "\n"); - //Add searchElements to list + // Add searchElements to list searchElements.add(new SearchElement(name, accession)); } - -// System.out.println("\nSearch Elements:"); -// for (SearchElement element: searchElements) { -// System.out.println(element.toString()+"\n"); -// } - - // System.out.println("Status Code: " + response.statusCode()); -// System.out.println("Response Body:\n" + response.body()); return searchElements; } diff --git a/vcell-client/src/main/java/cbit/vcell/export/gui/ExportMonitorPanel.java b/vcell-client/src/main/java/cbit/vcell/export/gui/ExportMonitorPanel.java index 8bc18f14ce..e61f79a2dd 100644 --- a/vcell-client/src/main/java/cbit/vcell/export/gui/ExportMonitorPanel.java +++ b/vcell-client/src/main/java/cbit/vcell/export/gui/ExportMonitorPanel.java @@ -10,6 +10,18 @@ package cbit.vcell.export.gui; +import cbit.rmi.event.ExportEvent; +import cbit.vcell.resource.PropertyLoader; +import org.vcell.util.gui.DefaultScrollTableActionManager; +import org.vcell.util.gui.DialogUtils; +import org.vcell.util.gui.ScrollTable; + +import javax.swing.*; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.TableColumn; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; @@ -18,31 +30,8 @@ import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; -import java.nio.file.Paths; import java.util.Enumeration; import java.util.Optional; - -import javax.swing.*; -import javax.swing.event.HyperlinkEvent; -import javax.swing.event.HyperlinkListener; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.TableCellRenderer; -import javax.swing.table.TableColumn; - -import cbit.vcell.client.data.ExportedDataTableModel; -import cbit.vcell.resource.PropertyLoader; -import org.apache.xalan.trace.SelectionEvent; -import org.vcell.client.logicalwindow.LWContainerHandle; -import org.vcell.client.logicalwindow.LWDialog; -import org.vcell.client.logicalwindow.LWNamespace; -import org.vcell.client.logicalwindow.LWTitledOptionPaneDialog; -import org.vcell.util.gui.DefaultScrollTableActionManager; -import org.vcell.util.gui.DialogUtils; -import org.vcell.util.gui.ScrollTable; - -import cbit.rmi.event.ExportEvent; /** * Insert the type's description here. * Creation date: (4/4/2001 2:38:28 AM) diff --git a/vcell-client/src/main/java/org/vcell/imagej/ImageJHelper.java b/vcell-client/src/main/java/org/vcell/imagej/ImageJHelper.java deleted file mode 100644 index 70359fb857..0000000000 --- a/vcell-client/src/main/java/org/vcell/imagej/ImageJHelper.java +++ /dev/null @@ -1,3245 +0,0 @@ -package org.vcell.imagej; - -import cbit.image.DisplayAdapterService; -import cbit.image.VCImageUncompressed; -import cbit.image.VCPixelClass; -import cbit.vcell.biomodel.BioModel; -import cbit.vcell.client.*; -import cbit.vcell.client.data.DataProcessingResultsPanel; -import cbit.vcell.client.data.PDEDataViewerPostProcess; -import cbit.vcell.client.data.PDEDataViewerPostProcess.PostProcessDataPDEDataContext; -import cbit.vcell.client.data.SimulationWorkspaceModelInfo; -import cbit.vcell.client.desktop.simulation.SimulationWindow; -import cbit.vcell.client.task.AsynchClientTask; -import cbit.vcell.client.task.ClientTaskDispatcher; -import cbit.vcell.client.task.FinishSave; -import cbit.vcell.field.gui.FieldDataGUIPanel; -import cbit.vcell.field.io.FieldDataFileOperationSpec; -import cbit.vcell.geometry.Geometry; -import cbit.vcell.geometry.SubVolume; -import cbit.vcell.mapping.MathMappingCallbackTaskAdapter; -import cbit.vcell.mapping.SimulationContext; -import cbit.vcell.mapping.SimulationContext.MathMappingCallback; -import cbit.vcell.mapping.SimulationContext.NetworkGenerationRequirements; -import cbit.vcell.mapping.SpeciesContextSpec; -import cbit.vcell.mapping.StructureMapping; -import cbit.vcell.math.Constant; -import cbit.vcell.math.Variable.Domain; -import cbit.vcell.math.VariableType; -import cbit.vcell.mathmodel.MathModel; -import cbit.vcell.messaging.server.SimulationTask; -import cbit.vcell.parser.Expression; -import cbit.vcell.resource.ResourceUtil; -import cbit.vcell.server.SimulationStatus; -import cbit.vcell.simdata.*; -import cbit.vcell.simdata.DataOperationResults.DataProcessingOutputInfo; -import cbit.vcell.simdata.gui.PDEDataContextPanel.RecodeDataForDomainInfo; -import cbit.vcell.solver.*; -import cbit.vcell.solver.ode.ODESimData; -import cbit.vcell.solver.ode.ODESolverResultSet; -import cbit.vcell.solver.server.Solver; -import cbit.vcell.solver.server.SolverFactory; -import cbit.vcell.solver.server.SolverStatus; -import cbit.vcell.solvers.CartesianMesh; -import cbit.vcell.xml.ExternalDocInfo; -import cbit.vcell.xml.XMLSource; -import cbit.vcell.xml.XMLTags; -import cbit.vcell.xml.XmlHelper; -import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; -import org.eclipse.jetty.server.Handler; -import org.eclipse.jetty.server.Request; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.handler.AbstractHandler; -import org.eclipse.jetty.server.handler.ContextHandler; -import org.eclipse.jetty.server.handler.ContextHandlerCollection; -import org.jdom.Namespace; -import org.vcell.imagej.ImageJHelper.ApiSolverHandler.IJGeom; -import org.vcell.util.*; -import org.vcell.util.document.*; -import org.vcell.util.document.BioModelChildSummary.MathType; -import org.vcell.util.document.VCDocument.VCDocumentType; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlInlineBinaryData; -import javax.xml.bind.annotation.XmlRootElement; -import java.io.*; -import java.net.BindException; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.util.*; -import java.util.Map.Entry; - -public class ImageJHelper { -// public static final String USER_ABORT = "userAbort"; -// public enum ExternalCommunicator -// { -// IMAGEJ(5000), -// BLENDER(5001); -// -// private final int port; -// private ExternalCommunicator(final int port) { this.port = port; } -// public int getPort() { return this.port;} -// } -// public static class ImageJConnection { -// public ServerSocket serverSocket; -// public Socket socket; -// public DataInputStream dis; -// public DataOutputStream dos; -// public ExternalCommunicator externalCommunicator; -// private BufferedInputStream bis; -// public ImageJConnection(ExternalCommunicator externalCommunicator) throws Exception{ -// serverSocket = new ServerSocket(externalCommunicator.getPort()); -// this.externalCommunicator = externalCommunicator; -// } -// public void openConnection(ImageJHelper.VCellImageJCommands command,String descr) throws Exception{ -// socket = serverSocket.accept(); -// serverSocket.close(); -// bis = new BufferedInputStream(socket.getInputStream()); -// dis = new DataInputStream(bis); -// dos = new DataOutputStream(socket.getOutputStream()); -// dos.writeUTF(command.name()); -// dos.writeUTF(descr); -// String startMessage = null; -// switch(externalCommunicator){ -// case IMAGEJ: -// startMessage = dis.readUTF(); -// break; -// case BLENDER: -// startMessage = readLine(); -// break; -// default: -// throw new IllegalArgumentException("Unexpected external program "+externalCommunicator.name()); -// } -// if(startMessage == null){ -// throw new Exception(externalCommunicator.name()+" unexpectedly stopped communicating"); -// } -// if(startMessage.equals(USER_ABORT)){ -// throw UserCancelException.CANCEL_GENERIC; -// } -// } -// public Exception[] closeConnection(){ -// ArrayList errors = new ArrayList<>(); -// try{dis.close();}catch(Exception e){errors.add(e);} -// try{bis.close();}catch(Exception e){errors.add(e);} -// try{dos.close();}catch(Exception e){errors.add(e);} -// try{socket.close();}catch(Exception e){errors.add(e);} -// try{serverSocket.close();}catch(Exception e){errors.add(e);} -// if(errors.size() > 0){ -// return errors.toArray(new Exception[0]); -// } -// return null; -// } -// public String readLine() throws IOException{ -// return ImageJHelper.readLine(bis); -// } -// } -// - private static class BasicStackDimensions { - @XmlAttribute - public int xsize; - @XmlAttribute - public int ysize; - @XmlAttribute - public int zsize; - @XmlAttribute - public int csize; - @XmlAttribute - public int tsize; - public BasicStackDimensions() { - - } - public BasicStackDimensions(int xsize, int ysize, int zsize, int csize, int tsize){ - this.xsize = xsize; - this.ysize = ysize; - this.zsize = zsize; - this.csize = csize; - this.tsize = tsize; - } - public int getTotalSize(){ - return xsize*ysize*zsize*csize*tsize; - } - public int[] getSizesInVCellPluginOrder(){ - //return sizes in "x,y,z,t,c" order - return new int[] {xsize,ysize,zsize,tsize,csize}; - } - } -// private static class HyperStackHelper extends BasicStackDimensions{ -// public String dataClass; -// public boolean hasOverlays; -// public Extent extent; -// public int[] domainSubvolumeIDs;//this will be non-null if this is a domain mask -// public double[] timePoints; -// public String[] channelDescriptions; -// public int[] channelSubvolIDs; -// public int[] colormap; -// public HyperStackHelper(BasicStackDimensions basicStackDimensions,Extent extent,boolean hasOverlays,String dataClass,int[] domainSubvolumeIDs,int[] channelSubvolIDs,double[] timePoints,String[] channelDescriptions,int[] colormap) { -// super(basicStackDimensions.xsize,basicStackDimensions.ysize,basicStackDimensions.zsize,basicStackDimensions.csize,basicStackDimensions.tsize); -// this.extent = extent; -// this.dataClass = dataClass; -// this.hasOverlays = hasOverlays; -// this.domainSubvolumeIDs = domainSubvolumeIDs; -// this.channelSubvolIDs = channelSubvolIDs; -// this.timePoints = timePoints; -// this.channelDescriptions = channelDescriptions; -// this.colormap = colormap; -// } -// public void writeInfo(DataOutputStream dos) throws Exception{ -// dos.writeUTF(dataClass); -// for (int i = 0; i < getSizesInVCellPluginOrder().length; i++) { -// dos.writeInt(getSizesInVCellPluginOrder()[i]); -// } -// dos.writeDouble(extent.getX()); -// dos.writeDouble(extent.getY()); -// dos.writeDouble(extent.getZ()); -// dos.writeBoolean(hasOverlays); -// //write colormap -// dos.writeInt((colormap != null?colormap.length:0)); -// if(colormap != null){ -// for (int i = 0; i < colormap.length; i++) { -// dos.writeInt(colormap[i]);//argb -// } -// } -// //write subvolumeIDs -// dos.writeInt((domainSubvolumeIDs==null?0:domainSubvolumeIDs.length)); -// if(domainSubvolumeIDs != null){ -// for (int j = 0; j < domainSubvolumeIDs.length; j++) { -// dos.writeInt(domainSubvolumeIDs[j]); -// } -// } -// //write channel subvolumeIDs -// dos.writeInt((channelSubvolIDs==null?0:channelSubvolIDs.length)); -// if(channelSubvolIDs != null){ -// for (int j = 0; j < channelSubvolIDs.length; j++) { -// dos.writeInt(channelSubvolIDs[j]); -// } -// } -// //timepoints -// dos.writeInt((timePoints==null?0:timePoints.length)); -// if(timePoints != null){ -// for (int i = 0; i < timePoints.length; i++) { -// dos.writeDouble(timePoints[i]); -// } -// } -// //channel descriptions -// dos.writeInt((channelDescriptions==null?0:channelDescriptions.length)); -// if(channelDescriptions != null){ -// for (int i = 0; i < channelDescriptions.length; i++) { -// dos.writeUTF(channelDescriptions[i]); -// } -// } -// } -// } -// public static enum VCellImageJCommands {vcellWantImage,vcellWantInfo,vcellSendImage,vcellSendInfo,vcellSendDomains,vcellWantSurface}; -// -// private static enum doneFlags {working,cancelled,finished}; -// -// public static File vcellWantSurface(ClientTaskStatusSupport clientTaskStatusSupport,String description) throws Exception{ -// return doCancellableConnection(ExternalCommunicator.BLENDER, VCellImageJCommands.vcellWantSurface, clientTaskStatusSupport, description); -// } -// private static File vcellWantSurface0(ClientTaskStatusSupport clientTaskStatusSupport,String description,ImageJConnection imageJConnection) throws Exception{ -// String sizeStr = imageJConnection.readLine(); -// int fileSize = Integer.parseInt(sizeStr); -// byte[] bytes = new byte[fileSize]; -// int numread = 0; -// while(numread >= 0 && numread != bytes.length){ -// numread+= imageJConnection.dis.read(bytes, numread, bytes.length-numread); -// } -// File newFile = File.createTempFile("vcellBlener", ".stl"); -// FileUtils.writeByteArrayToFile(bytes, newFile); -// return newFile; -// } -// -// private static void startCancelThread(ClientTaskStatusSupport clientTaskStatusSupport,ImageJConnection[] imageJConnectionArr,doneFlags[] bDone){ -// //check in separate thread for possible cancel while this task is blocked waiting for serversocket contact with ImageJ -// if(clientTaskStatusSupport != null){ -// new Thread(new Runnable() { -// @Override -// public void run() { -// while(bDone[0] == doneFlags.working){ -// if(clientTaskStatusSupport.isInterrupted()){ -// bDone[0] = doneFlags.cancelled; -// try{if(imageJConnectionArr[0] != null){imageJConnectionArr[0].closeConnection();}}catch(Exception e){e.printStackTrace();} -// return; -// } -// try{Thread.sleep(250);}catch(Exception e){e.printStackTrace();} -// } -// } -// }).start(); -// } -// } -// private static File doCancellableConnection(ExternalCommunicator externalCommunicator,VCellImageJCommands command,ClientTaskStatusSupport clientTaskStatusSupport,String description) throws Exception{ -// ImageJConnection[] imageJConnectionArr = new ImageJConnection[1]; -// doneFlags[] bDone = new doneFlags[] {doneFlags.working}; -// try{ -// imageJConnectionArr[0] = new ImageJConnection(externalCommunicator); -// startCancelThread(clientTaskStatusSupport, imageJConnectionArr, bDone); -// imageJConnectionArr[0].openConnection(command,description); -// switch(command){ -// case vcellWantSurface: -// return vcellWantSurface0(clientTaskStatusSupport, description, imageJConnectionArr[0]); -//// break; -// case vcellWantImage: -// return vcellWantImage0(clientTaskStatusSupport, description,imageJConnectionArr[0]); -//// break; -// default: -// throw new IllegalArgumentException("Unexpected command "+command.name()); -// } -// }catch(Exception e){ -// if(bDone[0] == doneFlags.cancelled){ -// throw UserCancelException.CANCEL_GENERIC; -// } -// throw e; -// }finally{ -// bDone[0] = doneFlags.finished; -// try{if(imageJConnectionArr[0] != null){imageJConnectionArr[0].closeConnection();}}catch(Exception e){e.printStackTrace();} -// } -// } -// public static File vcellWantImage(ClientTaskStatusSupport clientTaskStatusSupport,String description) throws Exception{ -// return doCancellableConnection(ExternalCommunicator.IMAGEJ, VCellImageJCommands.vcellWantImage, clientTaskStatusSupport, description); -// } -// private static File vcellWantImage0(ClientTaskStatusSupport clientTaskStatusSupport,String description,ImageJConnection imageJConnection) throws Exception{ -// if(clientTaskStatusSupport != null){ -// clientTaskStatusSupport.setMessage("Waiting for ImageJ to send image..."); -// } -// //Create nrrd file from socket input -// imageJConnection.dis.readInt();//integer (dimensions) -// //get size of the standard 5 dimensions in this order (width, height, nChannels, nSlices, nFrames) -// int xsize = imageJConnection.dis.readInt(); -// int ysize = imageJConnection.dis.readInt(); -// imageJConnection.dis.readInt(); -// imageJConnection.dis.readInt(); -// imageJConnection.dis.readInt(); -// //read data -// int slices = imageJConnection.dis.readInt(); -// byte[] data = new byte[slices*xsize*ysize*Double.BYTES]; -// ByteBuffer byteBuffer = ByteBuffer.wrap(data); -// for (int i = 0; i < slices; i++) { -// if(clientTaskStatusSupport != null){ -// clientTaskStatusSupport.setMessage("Reading Fiji/ImageJ slice "+(i+1)+" of "+slices+"..."); -// if(clientTaskStatusSupport.isInterrupted()){ -// throw UserCancelException.CANCEL_GENERIC; -// } -// } -// String arraytype = imageJConnection.dis.readUTF(); -// int arrLength = imageJConnection.dis.readInt(); -// if(arraytype.equals(byte[].class.getName())){//byte array -// byte[] bytes = new byte[arrLength]; -// int numread = 0; -// while(numread != bytes.length){ -// numread+= imageJConnection.dis.read(bytes, numread, bytes.length-numread); -// } -// for (int j = 0; j < bytes.length; j++) { -// byteBuffer.putDouble((double)Byte.toUnsignedInt(bytes[j])); -// } -// System.out.println("bytesRead="+numread); -// }else if(arraytype.equals(short[].class.getName())){// short array -// short[] shorts = new short[arrLength]; -// for (int j = 0; j < shorts.length; j++) { -// shorts[j] = imageJConnection.dis.readShort(); -// byteBuffer.putDouble((double)Short.toUnsignedInt(shorts[j])); -// } -// System.out.println("shortsRead="+shorts.length); -// } -// } -// -// if(clientTaskStatusSupport != null){ -// clientTaskStatusSupport.setMessage("Converting slices to file..."); -// if(clientTaskStatusSupport.isInterrupted()){ -// throw UserCancelException.CANCEL_GENERIC; -// } -// } -// NrrdInfo nrrdInfo = NrrdInfo.createBasicNrrdInfo(5, new int[] {xsize,ysize,slices,1,1}, "double", "raw", NrrdInfo.createXYZTVMap()); -// FileDataContainerManager fileDataContainerManager = new FileDataContainerManager(); -// nrrdInfo.setDataFileID(fileDataContainerManager.getNewFileDataContainerID()); -// fileDataContainerManager.append(nrrdInfo.getDataFileID(), byteBuffer.array()); -// NrrdWriter.writeNRRD(nrrdInfo, fileDataContainerManager); -// File tempFile = File.createTempFile("fijinrrd", ".nrrd"); -// fileDataContainerManager.writeAndFlush(nrrdInfo.getHeaderFileID(), new FileOutputStream(tempFile)); -// if(clientTaskStatusSupport != null){ -// clientTaskStatusSupport.setMessage("Finished ImageJ data conversion..."); -// if(clientTaskStatusSupport.isInterrupted()){ -// throw UserCancelException.CANCEL_GENERIC; -// } -// } -// return tempFile; -// } -// -// private static String extract(String line) throws IOException{ -// StringTokenizer st = new StringTokenizer(line, ":"); -// st.nextToken(); -// return st.nextToken().trim(); -// } -// private static BasicStackDimensions extractArr(String line) throws IOException{ -// StringTokenizer st = new StringTokenizer(line, ":"); -// st.nextToken(); -// String arr = st.nextToken(); -// StringTokenizer st2 = new StringTokenizer(arr, " "); -// ArrayList resultArr = new ArrayList<>(); -// while(st2.hasMoreTokens()){ -// resultArr.add(Integer.parseInt(st2.nextToken().trim())); -// } -// int[] result = new int[resultArr.size()];//x,y,z,t,v see RasterExporter.createSingleFullNrrdInfo(...) -// for (int i = 0; i < result.length; i++) { -// result[i] = resultArr.get(i); -// } -// return new BasicStackDimensions((result.length>=1?result[0]:1), (result.length>=2?result[1]:1), (result.length>=3?result[2]:1), (result.length>=5?result[4]:1), (result.length>=4?result[3]:1)); -// } -// public static class ListenAndCancel implements ProgressDialogListener { -// private Runnable cancelMethod; -// public void setCancelMethod(Runnable runnable) { -// cancelMethod = runnable; -// } -// @Override -// public void cancelButton_actionPerformed(EventObject newEvent) { -// if(cancelMethod != null){ -// cancelMethod.run(); -// } -// } -// }; -// -// public static void sendVolumeDomain0(ImageJConnection imageJConnection,CartesianMesh mesh,SimulationModelInfo simulationModelInfo,String description) throws Exception{ -// Hashtable subVolMapMask = new Hashtable<>(); -// for (int i = 0; i < mesh.getNumVolumeElements(); i++) { -// int subvolume = mesh.getSubVolumeFromVolumeIndex(i); -// if(subvolume > 255){ -// throw new Exception("Error ImageJHelper.sendVolumeDomain(...) subvolume > 255 not implemented"); -// } -// if(!subVolMapMask.containsKey(subvolume)){ -// subVolMapMask.put(subvolume, new BitSet(mesh.getNumVolumeElements())); -// } -// subVolMapMask.get(subvolume).set(i); -// } -// ArrayList channelDescriptions = new ArrayList<>(); -// if(simulationModelInfo != null){ -// for(Integer subvolID:subVolMapMask.keySet()){ -// channelDescriptions.add(simulationModelInfo.getVolumeNameGeometry(subvolID)+":"+simulationModelInfo.getVolumeNamePhysiology(subvolID)); -// } -// } -// int[] subvolumeIDs = new int[subVolMapMask.size()]; -// Enumeration subvolid = subVolMapMask.keys(); -// int cnt = 0; -// while(subvolid.hasMoreElements()){ -// subvolumeIDs[cnt] = subvolid.nextElement(); -// cnt++; -// } -// sendData0(imageJConnection, new HyperStackHelper(new BasicStackDimensions(mesh.getSizeX(),mesh.getSizeY(),mesh.getSizeZ(), subVolMapMask.size(), 1),mesh.getExtent(),false,Byte.class.getSimpleName(),subvolumeIDs,null,null,(channelDescriptions.size()==0?null:channelDescriptions.toArray(new String[0])),null), subVolMapMask,description); -// -// } -// public static void sendVolumeDomain(Component requester,PDEDataContext pdeDataContext,ISize iSize,ClientTaskStatusSupport clientTaskStatusSupport,ListenAndCancel listenAndCancel,String description,SimulationModelInfo simulationModelInfo) throws Exception{ -// ImageJConnection[] imageJConnection = new ImageJConnection[1]; -// try{ -// if(listenAndCancel != null){ -// listenAndCancel.setCancelMethod(new Runnable() { -// @Override -// public void run() { -// if(imageJConnection[0] != null){ -// imageJConnection[0].closeConnection(); -// } -// } -// }); -// } -// if(clientTaskStatusSupport != null){ -// clientTaskStatusSupport.setMessage("Sending Domain data to ImageJ..."); -// } -// imageJConnection[0] = new ImageJConnection(ExternalCommunicator.IMAGEJ); -// imageJConnection[0].openConnection(VCellImageJCommands.vcellSendDomains,description); -// sendVolumeDomain0(imageJConnection[0], pdeDataContext.getCartesianMesh(), simulationModelInfo, description); -// }catch(Exception e){ -// if(clientTaskStatusSupport != null && clientTaskStatusSupport.isInterrupted()){ -// //ignore, we were cancelled -// } -// }finally{ -// try{if(imageJConnection != null){imageJConnection[0].closeConnection();}}catch(Exception e){e.printStackTrace();} -// } -// -// } -// public static String readLine(BufferedInputStream bis) throws IOException{ -// StringBuffer sb = new StringBuffer(); -// int nextChar = 0; -// while((nextChar = bis.read()) != -1){ -// if(nextChar == '\n'){ -// break; -// }else if(nextChar == '\r'){ -// bis.mark(1); -// nextChar = bis.read(); -// if(nextChar == -1 || nextChar != '\n'){ -// bis.reset(); -// break; -// } -// } -// sb.append((char)nextChar); -// } -// return sb.toString(); -// } -// public static void vcellSendNRRD(final Component requester,BufferedInputStream bis,ClientTaskStatusSupport clientTaskStatusSupport,ImageJConnection imageJConnection,String description,double[] timePoints,String[] channelDescriptions) throws Exception{ -// if(clientTaskStatusSupport != null){ -// clientTaskStatusSupport.setMessage("reading format... "); -// } -// //read nrrd file format (See NRRDWriter.writeNRRD(...) for header format) -// DataInputStream dis = new DataInputStream(bis); -// readLine(bis);//magic nrrd -// readLine(bis);//endian -// readLine(bis);//comment -// String type = extract(readLine(bis));//"double" -// Integer.parseInt(extract(readLine(bis)));//integer (dimension) -// extract(readLine(bis));//"raw" (encoding) -// BasicStackDimensions basicStackDimensions = extractArr(readLine(bis)); -// -// //read other text header elements until exhausted -// String unused = ""; -// while((unused = readLine(bis)).length() != 0){ -// System.out.println(unused); -// } -// try{ -// if(clientTaskStatusSupport != null){ -// clientTaskStatusSupport.setMessage("Sending data to ImageJ..."); -// } -// imageJConnection.openConnection(VCellImageJCommands.vcellSendImage,description); -// double[] data = new double[basicStackDimensions.getTotalSize()]; -// for (int i = 0; i < data.length; i++) { -// data[i] = dis.readDouble(); -// } -// sendData0(imageJConnection, new HyperStackHelper(basicStackDimensions, new Extent(1,1,1), false, Float.class.getSimpleName(), null,null,timePoints,channelDescriptions,null), data,description); -// } -// finally{ -// try{if(imageJConnection != null){imageJConnection.closeConnection();}}catch(Exception e){e.printStackTrace();} -// } -// -// } -// private static void sendMembraneOutline(ImageJConnection imageJConnection,Hashtable[] membraneTables) throws Exception{ -// if(membraneTables != null){ -// imageJConnection.dos.writeInt(membraneTables.length);//num slices -// for(Hashtable membraneTable:membraneTables){ -// //System.out.println(); -// if(membraneTable != null){//some slices have no membrane outline -// imageJConnection.dos.writeInt(membraneTable.size());//num polygons on slice -// Enumeration sliceMembranes = membraneTable.keys(); -// while(sliceMembranes.hasMoreElements()){ -// SampledCurve sampledCurve = sliceMembranes.nextElement(); -// Vector polygonPoints = sampledCurve.getControlPointsVector(); -// //System.out.println(polygonPoints.size()); -// imageJConnection.dos.writeInt(polygonPoints.size());//num points for polygon -// imageJConnection.dos.writeInt((sampledCurve.isClosed()?1:0));//isClosed -// for(Coordinate coord:polygonPoints){ -// imageJConnection.dos.writeDouble(coord.getX()); -// imageJConnection.dos.writeDouble(coord.getY()); -// imageJConnection.dos.writeDouble(coord.getZ()); -// } -// } -// }else{ -// imageJConnection.dos.writeInt(0); -// } -// } -// }else{ -// imageJConnection.dos.writeInt(0); -// } -// } -// -// private static void sendData0(ImageJConnection imageJConnection, HyperStackHelper hyperStackHelper,Object dataObj,String title) throws Exception{ -// // -// //This method expects data to be in "x,y,z,t,c" order -// // -// //See cbit.vcell.export.server.RasterExporter.exportPDEData(...), NRRD_SINGLE, GEOMETRY_FULL -// //See also RasterExporter.NRRDHelper.createSingleFullNrrdInfo(...) -// // -// imageJConnection.dos.writeUTF(title); -// hyperStackHelper.writeInfo(imageJConnection.dos); -// if(dataObj instanceof double[]){//convert to floats for imagej (GRAY32 image type) -// final int buffersize = 100000; -// byte[] bytes = new byte[Float.BYTES*buffersize]; -// ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); -// int dataLen = hyperStackHelper.getTotalSize(); -// for (int i = 0; i < dataLen; i++) { -// float val = (float)(((double[])dataObj)[i]); -// if(val == 0 && ((double[])dataObj)[i] != 0){ -// val = Float.MIN_VALUE; -// } -// byteBuffer.putFloat(val); -// if((i+1)%buffersize == 0){ -// imageJConnection.dos.write(bytes, 0, buffersize*Float.BYTES); -// byteBuffer.rewind(); -// } -// } -// if(dataLen%buffersize != 0){ -// imageJConnection.dos.write(bytes, 0, (dataLen%buffersize)*Float.BYTES); -// } -// }else if(dataObj instanceof byte[]){//send 8bit bytes as is to ImageJ (grayscale or colormap images) -// imageJConnection.dos.write((byte[])dataObj); -// }else if(dataObj instanceof Hashtable && hyperStackHelper.domainSubvolumeIDs != null){//convert to bytes (0 or 255) for ImageJ binary processing -// int channelSize = hyperStackHelper.xsize*hyperStackHelper.ysize*hyperStackHelper.zsize; -// Enumeration subVolIDs = ((Hashtable)dataObj).keys(); -// while(subVolIDs.hasMoreElements()){ -// Integer subvolID = subVolIDs.nextElement(); -// BitSet bitset = ((Hashtable)dataObj).get(subvolID); -// System.out.println(bitset.cardinality()); -// byte[] data = new byte[channelSize]; -// Arrays.fill(data, (byte)0); -// for (int i = 0; i < channelSize; i++) { -// if(bitset.get(i)){ -// data[i]|= 0xFF; -// } -// } -// imageJConnection.dos.write(data); -// } -// }else{ -// throw new IllegalArgumentException("Unexpected data type="+dataObj.getClass().getName()); -// } -// } -// public static void vcellSendImage(final Component requester,final PDEDataContext pdeDataContext,SubVolume subvolume,Hashtable[] membraneTables,String description,double[] timePoints,String[] channelDescriptions,int[] colormap) throws Exception{//xyz, 1 time, 1 var -// final ImageJConnection[] imageJConnectionArr = new ImageJConnection[1]; -// AsynchClientTask sendImageTask = new AsynchClientTask("Send image to ImageJ...",AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) { -// @Override -// public void run(Hashtable hashTable) throws Exception { -// try{ -// ImageJConnection imageJConnection = new ImageJConnection(ExternalCommunicator.IMAGEJ); -// imageJConnectionArr[0] = imageJConnection; -// imageJConnection.openConnection(VCellImageJCommands.vcellSendImage,description); -// //send size of the standard 5 dimensions in this order (width, height, nChannels, nSlices, nFrames) -// ISize xyzSize = pdeDataContext.getCartesianMesh().getISize(); -// Extent extent = pdeDataContext.getCartesianMesh().getExtent(); -// BasicStackDimensions basicStackDimensions = new BasicStackDimensions(xyzSize.getX(), xyzSize.getY(), xyzSize.getZ(), 1, 1); -// sendData0(imageJConnection, new HyperStackHelper(basicStackDimensions,extent,true,Float.class.getSimpleName(),null,new int[] {subvolume.getHandle()},timePoints,channelDescriptions,colormap), pdeDataContext.getDataValues(),"'"+pdeDataContext.getVariableName()+"'"+pdeDataContext.getTimePoint()); -// sendVolumeDomain0(imageJConnection, pdeDataContext.getCartesianMesh(), null, description); -// sendMembraneOutline(imageJConnection, membraneTables); -// }catch(Exception e){ -// if(e instanceof UserCancelException){ -// throw e; -// } -// e.printStackTrace(); -// hashTable.put("imagejerror",e); -// }finally{ -// try{if(imageJConnectionArr[0] != null){imageJConnectionArr[0].closeConnection();}}catch(Exception e){e.printStackTrace();} -// } -// -// } -// }; -// ClientTaskDispatcher.dispatch(requester, new Hashtable<>(), new AsynchClientTask[] {sendImageTask}, false, true, new ProgressDialogListener() { -// @Override -// public void cancelButton_actionPerformed(EventObject newEvent) { -// if(imageJConnectionArr[0] != null){ -// imageJConnectionArr[0].closeConnection(); -// } -// } -// }); -// } - - private static JAXBContext jaxbContext = null; - static { - try { - jaxbContext = JAXBContext.newInstance(new Class[] {IJSimStatusJobs.class,IJFDid.class,VCCommandList.class,IJModelInfos.class,/*IJSolverStatus.class,*/IJSimStatus.class,IJTimeSeriesJobResults.class,IJDataList.class,IJVarInfos.class,IJFieldData.class,IJGeom.class,CTable.class}); - } catch (JAXBException e) { - e.printStackTrace(); - } - } - private static String createXML(Object theClass) throws Exception{ - Marshaller m = jaxbContext.createMarshaller(); - // for pretty-print XML in JAXB - m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); - StringWriter writer = new StringWriter(); - m.marshal(theClass, writer); - String str = writer.toString(); - return str; - } - -// @XmlRootElement() - private static class VCCommand{ - @XmlElement - private String command; - @XmlElement - private String description; - public VCCommand() { - - } - public VCCommand(String command, String description) { - super(); - this.command = command; - this.description = description; - } - } - - @XmlRootElement() - private static class IJFDid{ - @XmlElement() - public String fdid; - public IJFDid() { - - } - public IJFDid(String fdid) { - super(); - this.fdid = fdid; - } - } - - @XmlRootElement() - private static class VCCommandList{ - @XmlElement() - private ArrayList commandInfo; - public VCCommandList() { - - } - public VCCommandList(ArrayList commandInfo) { - super(); - this.commandInfo = commandInfo; - } - } - - @XmlRootElement() - private static class CTable{ - @XmlElement() - String lutServiceFormat; - //from DisplayAdapterService -// public static final int NUM_SPECIAL_COLORS = 8; -// public static final int BELOW_MIN_COLOR_OFFSET = 0; -// public static final int ABOVE_MAX_COLOR_OFFSET = 1; -// public static final int NAN_COLOR_OFFSET = 2; -// public static final int NOT_IN_DOMAIN_COLOR_OFFSET = 3; -// public static final int NO_RANGE_COLOR_OFFSET = 4; -// public static final int FOREGROUND_HIGHLIGHT_COLOR_OFFSET = 5; -// public static final int FOREGROUND_NONHIGHLIGHT_COLOR_OFFSET = 6; -// public static final int NULL_COLOR_OFFSET = 7; - @XmlElement() - static String[] specialColors = new String[] {"BELOW_MIN_COLOR_OFFSET","ABOVE_MAX_COLOR_OFFSET","NAN_COLOR_OFFSET","NOT_IN_DOMAIN_COLOR_OFFSET", - "NO_RANGE_COLOR_OFFSET","FOREGROUND_HIGHLIGHT_COLOR_OFFSET","FOREGROUND_NONHIGHLIGHT_COLOR_OFFSET","NULL_COLOR_OFFSET"}; - public CTable() { - - } - public CTable(String cmapName) { - int[] argb = null; - //int[] specialColors = null; - if(cmapName.equals("bg")) { - argb = DisplayAdapterService.createBlueRedColorModel0(false); - //specialColors = DisplayAdapterService.createBlueRedSpecialColors(); - }else { - argb= new int[256]; - for (int i = 0; i < argb.length; i += 1) { - argb[i] = i | i << 8 | i << 16 | 0xFF << 24;//opaque colors - } - - //argb = DisplayAdapterService.createGrayColorModel(); - //specialColors = DisplayAdapterService.createGraySpecialColors(); - } -// for (int i = 0; i < specialColors.length; i++) { -// argb[argb.length-specialColors.length+i] = specialColors[i]; -// } - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < argb.length; i++) { - byte[] byteArr = Hex.toBytes(Hex.toString(argb[i]).substring(2)); - for (int j = 0; j < byteArr.length; j++) { - sb.append((j!=0?" ":"")+(byteArr[j]&0x000000FF)); - } - sb.append("\n"); - } - lutServiceFormat = sb.toString(); - } - } - - public static enum ApiEnum {hello,getinfo,getdata,gettimeseries,solver}; - private static String GETINFO_PARMS = IJListParams.type.name()+"={"+IJDocType.bm.name()+","+IJDocType.mm.name()+","+IJDocType.quick.name()+"}"+"&"+IJListParams.open.name()+"={true,false}"; - private static String GETDATA_PARMS = IJGetDataParams.cachekey.name()+"=int"+"&"+IJGetDataParams.varname.name()+"=string"+"&"+IJGetDataParams.timeindex.name()+"="+"double"; - private static String GETTIMESERIES_PARMS = - IJGetTimeSeriesParams.varnames.name()+"=int"+"&"+ - IJGetTimeSeriesParams.indices.name()+"=int"+"&"+ - IJGetTimeSeriesParams.starttime.name()+"=int"+"&"+ - IJGetTimeSeriesParams.steptime.name()+"=int"+"&"+ - IJGetTimeSeriesParams.endtime.name()+"=int"+"&"+ - IJGetTimeSeriesParams.bspacestats.name()+"=int"+"&"+ - IJGetTimeSeriesParams.btimestats.name()+"=int"+"&"+ - IJGetTimeSeriesParams.jobid.name()+"=int"+"&"+ - IJGetTimeSeriesParams.cacheky.name()+"=int"; - - public static class ApiInfoHandler extends AbstractHandler - { - private HashMap apiParams = new HashMap<>(); - public ApiInfoHandler() { - apiParams.put(ApiEnum.hello, new VCCommand[] { - /*"type={biom,math}","type=sims&modelname=xxx"*/ - new VCCommand(ApiEnum.hello.name(), "simple reply if server is listening running") - }); - apiParams.put(ApiEnum.getinfo, new VCCommand[] { - /*"type={biom,math}","type=sims&modelname=xxx"*/ - new VCCommand(ApiEnum.getinfo.name()+"?"+GETINFO_PARMS, "List of Bio/Math models information") - }); - apiParams.put(ApiEnum.getdata, new VCCommand[] { - /*"type={biom,math}","type=sims&modelname=xxx"*/ - new VCCommand(ApiEnum.getdata.name()+"?"+GETDATA_PARMS, "Get sim data") - }); - apiParams.put(ApiEnum.gettimeseries, new VCCommand[] { - /*"type={biom,math}","type=sims&modelname=xxx"*/ - new VCCommand(ApiEnum.gettimeseries.name()+"?"+GETTIMESERIES_PARMS, "Get point,line,kymograph,ROI. Retrieve data at multiple times") - }); - apiParams.put(ApiEnum.solver, new VCCommand[] { - /*"type={biom,math}","type=sims&modelname=xxx"*/ - new VCCommand(ApiEnum.solver.name()+"?"+"TBI", "Start solver") - }); - } - @Override - public void handle( String target, - Request baseRequest, - HttpServletRequest request, - HttpServletResponse response ) throws IOException, - ServletException - { - - String baseUri = "http:"+baseRequest.getHttpURI().toString(); - System.out.println(target+"\n"+baseUri); -// if ("POST".equalsIgnoreCase(request.getMethod())) -// { -// System.out.println(" \n\n Headers"); -// -// Enumeration headerNames = request.getHeaderNames(); -// while(headerNames.hasMoreElements()) { -// String headerName = (String)headerNames.nextElement(); -// System.out.println(headerName + " = " + request.getHeader(headerName)); -// } -// -// System.out.println("\n\nParameters"); -// -// Enumeration params = request.getParameterNames(); -// while(params.hasMoreElements()){ -// String paramName = (String)params.nextElement(); -// System.out.println(paramName + " = " + request.getParameter(paramName)); -// } -// -// System.out.println("\n\n Row data"); -// String test = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); -// System.out.println(test); -// } - // Declare response encoding and types - response.setContentType("text/html; charset=utf-8"); - - // Declare response status code - response.setStatus(HttpServletResponse.SC_OK); - - ArrayList result = new ArrayList<>(); - for(ApiEnum apiEnum:ApiEnum.values()) { - - VCCommand[] commands = apiParams.get(apiEnum); - for(VCCommand commandInfo:commands) { - String res = baseUri+commandInfo.command; -// response.getWriter().println(res); - result.add(new VCCommand(res, commandInfo.description)); - } - -// if(params != null) { -// for(VCCommand s:params) { -// String res = baseUri+apiEnum.name()+"?"+s.command; -// response.getWriter().println(res); -// result.add(new VCCommand(res, "blah")); -// } -// }else { -// response.getWriter().println(baseUri+apiEnum.name()); -// result.add(new VCCommand(baseUri+apiEnum.name(), "blah")); -// } - - - } - // Write back response -// response.getWriter().println("

Hello World

"); - - // Inform jetty that this request has now been handled - baseRequest.setHandled(true); - - VCCommandList vcListXML = new VCCommandList(result); - try { - response.getWriter().println(createXML(vcListXML)); - response.getWriter().close(); - } catch (Exception e) { - e.printStackTrace(); - throw new ServletException(e); - } - -// try { -// if(VCellClient.getInstance() != null){ -//// TreeMap mapObsTpData = new TreeMap<>(); -// double[] times = null; -// BioModelInfo[] bioModelInfos = VCellClient.getInstance().getRequestManager().getDocumentManager().getBioModelInfos(); -// for (int i = 0; i < bioModelInfos.length; i++) { -// if(bioModelInfos[i].getVersion().getName().equals("EGFR Full_Model_Compart_v3")) { -// System.out.println(bioModelInfos[i]); -// BioModel bioModel = VCellClient.getInstance().getRequestManager().getDocumentManager().getBioModel(bioModelInfos[i]); -// SimulationContext[] simulationContexts = bioModel.getSimulationContexts(); -// for (int j = 0; j < simulationContexts.length; j++) { -// if(simulationContexts[j].getName().toLowerCase().contains("nfsim")) { -// TreeMap mapObsTpData = new TreeMap<>(); -// SimulationContext simulationContext = simulationContexts[j]; -// Simulation[] sims = simulationContext.getSimulations(); -// for (int k = 0; k < sims.length; k++) { -// VCSimulationDataIdentifier vcSimulationDataIdentifier = new VCSimulationDataIdentifier(sims[k].getSimulationInfo().getAuthoritativeVCSimulationIdentifier(), 0); -// ODESimData odeSimData = VCellClient.getInstance().getClientServerManager().getVCDataManager().getODEData(vcSimulationDataIdentifier); -// for (int l = 0; l < odeSimData.getRowCount(); l++) { -// ColumnDescription columnDescription = odeSimData.getColumnDescriptions(l); -//// System.out.println(columnDescription.getName()+"\n-----"); -// double[] rowData = odeSimData.extractColumn(l); -// if(times == null && columnDescription.getName().toLowerCase().equals("t")) { -// times = rowData; -// System.out.print("'Model:App:Variable'"); -// for (int m = 0;m < times.length; m++) { -// System.out.print((m!= 0?",":"")+(times[m])); -// } -// System.out.println(); -// } -// String keyName = simulationContexts[j].getName()+":"+columnDescription.getName(); -// double[] accumData = mapObsTpData.get(keyName); -// if(accumData == null) { -// accumData = rowData; -// mapObsTpData.put(keyName, accumData); -// } -// if(accumData.length != rowData.length) { -// throw new Exception("Rows are different lengths"); -// } -// for (int m = 0; m < rowData.length; m++) { -// accumData[m]+= rowData[m]; -// } -//// System.out.println(); -// } -//// DataIdentifier[] dataIdentifiers = VCellClient.getInstance().getClientServerManager().getVCDataManager().getDataIdentifiers(null, vcSimulationDataIdentifier); -//// for (int l = 0; l < dataIdentifiers.length; l++) { -//// if(dataIdentifiers[l].getName().toLowerCase().endsWith("_count")){ -//// VCellClient.getInstance().getClientServerManager().getVCDataManager().getODEData(dataIdentifiers[l]); -//// } -//// } -// } -// for(String s:mapObsTpData.keySet()) { -// System.out.print("'"+/*bioModelInfos[i].getVersion().getName()+":"+simulationContexts[j].getName()+":"+*/s+"'"); -// double[] accumVals = mapObsTpData.get(s); -// for (int k = 0; k < accumVals.length; k++) { -// System.out.print((k!= 0?",":"")+(accumVals[k]/sims.length)); -// } -// System.out.println(); -// } -// System.out.println(); -// } -// } -// } -// } -//// VCellClient.getInstance().getClientServerManager().getVCDataManager(). -// } -// } catch (Exception e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - } - - } - -// public static class TimeSeriesJobSpec{ -// private String[] variableNames; -// private int[] indices; -// private double startTime; -// private int step; -// private double endTime; -// private boolean calcSpaceStats = false;//Calc stats over space for each timepoint -// private boolean calcTimeStats = false; -// private int jobid; -// private int cachekey; -//} - -// public static String getRawContent(URL url) throws Exception{ -// HttpURLConnection con = (HttpURLConnection)url.openConnection(); -// int responseCode = con.getResponseCode(); -// if(responseCode == HttpURLConnection.HTTP_OK) { -// return streamToString(con.getInputStream()); -// }else { -// throw new Exception("Expecting OK but got "+responseCode+" "+streamToString(con.getErrorStream())); -// } -// } - public static String streamToString(InputStream stream) throws Exception{ - try(InputStream instrm = stream){ - StringBuilder textBuilder = new StringBuilder(); - Reader reader = new BufferedReader(new InputStreamReader(instrm, Charset.forName(StandardCharsets.UTF_8.name()))); - int c = 0; - while ((c = reader.read()) != -1) { - textBuilder.append((char) c); - } - return textBuilder.toString(); - } - - } - - @XmlRootElement - public static class IJTimeSeriesJobResults{ - @XmlElement - private String[] variableNames; - @XmlElement - private int[] indices;//all variable share same indices - @XmlElement - private double[] times;//all vars share times - @XmlElement - private double[][][] data;//[varname][indices][times]; - @XmlElement - private double[][] min; - @XmlElement - private double[][] max; - @XmlElement - private double[][] unweightedMean; - @XmlElement - private double[][] weightedMean = null; - @XmlElement - private double[] totalSpace = null; - @XmlElement - private double[][] unweightedSum; - @XmlElement - private double[][] weightedSum; - - public IJTimeSeriesJobResults() { - - } - public IJTimeSeriesJobResults(String[] variableNames, int[] indices, double[] times, double[][][] data) { - super(); - this.variableNames = variableNames; - this.indices = indices; - this.times = times; - this.data = data; - } - public IJTimeSeriesJobResults(String[] variableNames, int[] indices, double[] times, double[][] min, - double[][] max, double[][] unweightedMean, double[][] weightedMean, double[] totalSpace, - double[][] unweightedSum, double[][] weightedSum) { - super(); - this.variableNames = variableNames; - this.indices = indices; - this.times = times; - this.min = min; - this.max = max; - this.unweightedMean = unweightedMean; - this.weightedMean = weightedMean; - this.totalSpace = totalSpace; - this.unweightedSum = unweightedSum; - this.weightedSum = weightedSum; - } - - } - - @XmlRootElement - public static class IJTimeSeriesResults{ - @XmlElement - private double[][] results; - public IJTimeSeriesResults() { - - } - public IJTimeSeriesResults(double[][] results) { - super(); - this.results = results; - } - } - - @XmlRootElement - public static class IJTimeSeriesJobSpec{ - @XmlElement - private String[] variableNames; - @XmlElement - private int[] indices; - @XmlAttribute - private double startTime; - @XmlAttribute - private int step; - @XmlAttribute - private double endTime; - @XmlAttribute - private boolean calcSpaceStats;//Calc stats over space for each timepoint - @XmlAttribute - private boolean calcTimeStats; - @XmlAttribute - private int jobid; - @XmlAttribute - private int cachekey; - public IJTimeSeriesJobSpec() { - - } -// public IJTimeSeriesJobSpec(String[] variableNames, int[] indices, double startTime, int step, double endTime, -// boolean calcSpaceStats, boolean calcTimeStats, int jobid, int cachekey) { -// super(); -// this.variableNames = variableNames; -// this.indices = indices; -// this.startTime = startTime; -// this.step = step; -// this.endTime = endTime; -// this.calcSpaceStats = calcSpaceStats; -// this.calcTimeStats = calcTimeStats; -// this.jobid = jobid; -// this.cachekey = cachekey; -// } - - } - - private static IJDataResponder getIJDataResponderFromCache(int cacheKey,Integer jobid) throws Exception{ - IJDataResponder ijDataResponder = null; - if(ijModelInfoCache != null) { - outerloop: - for(IJModelInfo ijModelInfo:ijModelInfoCache) { - if(ijModelInfo.contexts != null) { - for(IJContextInfo ijContextInfo:ijModelInfo.contexts) { - if(ijContextInfo.ijSimId != null) { - for(IJSimInfo ijSimInfo:ijContextInfo.ijSimId) { - if(ijSimInfo.cacheKey == cacheKey) { - if(!ijSimInfo.isDB) { - KeyValue simKey = new KeyValue(ijSimInfo.simId.substring("SimId_".length())); - ijDataResponder = IJDataResponder.create(simKey, ResourceUtil.getLocalRootDir(), jobid); - }else if(VCellClient.getInstance() != null) { - ijDataResponder = IJDataResponder.create(VCellClient.getInstance(), new KeyValue(ijModelInfo.modelkey) , ijContextInfo.name, ijSimInfo.name, jobid); -// if(ijContextInfo.name == null) {//mathmodel -// KeyValue simKey = VCellClient.getInstance().getRequestManager().getDocumentManager().getMathModel(new KeyValue(ijModelInfo.modelkey)).getSimulation(ijSimInfo.name).getSimulationVersion().getVersionKey(); -// }else { -// KeyValue simKey = VCellClient.getInstance().getRequestManager().getDocumentManager().getBioModel(new KeyValue(ijModelInfo.modelkey)).getSimulationContext(ijContextInfo.name).getSimulation(ijSimInfo.name).getSimulationVersion().getVersionKey(); -// } - } - break outerloop; - } - } - } - } - } - } - } - return ijDataResponder; - } - - private static enum IJGetTimeSeriesParams {varnames,indices,starttime,steptime,endtime,bspacestats,btimestats,jobid,cacheky} - public static class ApiTimeSeriesHandler extends AbstractHandler{ - - @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - try { -// List params = getParamsFromRequest(request); - if ("POST".equalsIgnoreCase(request.getMethod())) - { -// System.out.println(" \n\n Headers"); -// Enumeration headerNames = request.getHeaderNames(); -// while(headerNames.hasMoreElements()) { -// String headerName = (String)headerNames.nextElement(); -// System.out.println(headerName + " = " + request.getHeader(headerName)); -// } -// -// System.out.println("\n\nParameters"); -// Enumeration params2 = request.getParameterNames(); -// while(params2.hasMoreElements()){ -// String paramName = (String)params2.nextElement(); -// System.out.println(paramName + " = " + request.getParameter(paramName)); -// } - -// System.out.println("\n\n Row data"); - String test = streamToString(request.getInputStream()); -// System.out.println(test); - JAXBContext jContext = JAXBContext.newInstance(IJTimeSeriesJobSpec.class); - //creating the unmarshall object - Unmarshaller unmarshallerObj = jContext.createUnmarshaller(); - //calling the unmarshall method - IJTimeSeriesJobSpec ijTimeSeriesJobSpec=(IJTimeSeriesJobSpec) unmarshallerObj.unmarshal(new ByteArrayInputStream(test.getBytes())); - IJDataResponder ijDataResponder = getIJDataResponderFromCache(ijTimeSeriesJobSpec.cachekey, ijTimeSeriesJobSpec.jobid);//IJDataResponder.create(getSimKeyFromCache(ijTimeSeriesJobSpec.cachekey), ResourceUtil.getLocalSimDir("temp"), ijTimeSeriesJobSpec.jobid); - // Declare response encoding and types - response.setContentType("text/html; charset=utf-8"); - - // Declare response status code - response.setStatus(HttpServletResponse.SC_OK); - - // Inform jetty that this request has now been handled - baseRequest.setHandled(true); - - response.setContentType("text/xml; charset=utf-8"); -// response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().print(createXML(ijDataResponder.getIJTimeSeriesData(ijTimeSeriesJobSpec))); - }else { - throw new Exception("POST expected"); - } - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - throw new ServletException(e); - } - - - -//// public class TimeSeriesJobSpec implements java.io.Serializable{ -//// -//// private String[] variableNames; -//// private int[][] indices;// int[varNameIndex][varValIndex] -//// private double startTime; -//// private int step; -//// private double endTime; -//// private boolean calcSpaceStats = false;//Calc stats over space for each timepoint -//// private boolean calcTimeStats = false; -//// private BitSet[] roi; -//// private VCDataJobID vcDataJobID; -//// private int[][] crossingMembraneIndices;//int[varNameIndex][MembraneIndex] non-null for volume data only -// -// String[] variableNames = null; -// int[][] indices = null; -// Double starttime = null; -// Integer step = null; -// Double endtime = null; -// Boolean calcSpaceStats = null; -// Boolean calcTimeStats = null; -// BitSet[] roi = null; -// VCDataJobID vcDataJobID = null; -// int[][] crossingMembraneIndices = null; -// for(NameValuePair nameValuePair:params) { -// if(nameValuePair.getName().equals(IJGetTimeSeriesParams.varnames.name())) { -// StringTokenizer st = new StringTokenizer(str, ","); -// }else if(nameValuePair.getName().equals(IJGetTimeSeriesParams.indices.name())) { -// bOpen = Boolean.parseBoolean(nameValuePair.getValue()); -// } -//// else if(nameValuePair.getName().equals(IJListParams.cachekey.name())) { -//// cacheKey = Long.valueOf(nameValuePair.getValue()); -//// } -// } - -// if(ijDocType == null && bOpen == null/* && cacheKey == null*/) { -// response.setContentType("text/html; charset=utf-8"); -// response.setStatus(HttpServletResponse.SC_BAD_REQUEST); -// response.getWriter().println("

Expecting '"+GETINFO_PARMS+"' in request

"); -// }else { -// -// } - - } - } - - private static class IJSimInfo { - @XmlAttribute() - private boolean isOpen; - @XmlAttribute() - private boolean isDB; - @XmlAttribute() - private String simId; - @XmlAttribute() - private String name; - @XmlAttribute() - private long cacheKey; - public IJSimInfo() { - } - public IJSimInfo(boolean isOpen, boolean isDB, String simId, String name) { - super(); - this.isOpen = isOpen; - this.isDB = isDB; - this.simId = simId; - this.name = name; - this.cacheKey = ijCacheCounter++; - } - } - private static class IJContextInfo{ - @XmlAttribute() - private String name; - @XmlAttribute() - private String mathType; - @XmlAttribute() - private Integer geomDim; - @XmlAttribute() - private String geomName; - @XmlElement(name="simInfo") - private ArrayList ijSimId; - public IJContextInfo() { - - } - public IJContextInfo(String name, MathType mathType, Integer geomDim, String geomName, ArrayList ijSimId) { - super(); - this.name = name; - this.mathType = (mathType != null?mathType.name():null); - this.geomDim = geomDim; - this.geomName = geomName; - this.ijSimId = ijSimId; - } - - } - private static enum IJDocType { - bm(VCDocument.VCDocumentType.BIOMODEL_DOC), - mm(VCDocument.VCDocumentType.MATHMODEL_DOC), - quick(null); - - VCDocument.VCDocumentType vcDocType; - private IJDocType(VCDocument.VCDocumentType vcDocType) { - this.vcDocType = vcDocType; - } - public VCDocument.VCDocumentType getVCDocType() { - return vcDocType; - } - - } - private static class IJModelInfo { - @XmlAttribute() - private String name; - @XmlAttribute() - private Long date; - @XmlAttribute() - private String type; - @XmlAttribute() - private Boolean open; - @XmlAttribute() - private String user; - @XmlAttribute() - private String modelkey; - @XmlElement(name="context") - ArrayList contexts; - public IJModelInfo() { - - } - public IJModelInfo(String name, Date date, IJDocType type, Boolean open,String user,KeyValue modelkey,ArrayList contexts) { - super(); - this.name = name; - this.date = (date != null?date.getTime():null); - this.type = (type != null?type.name():null); - this.open = open; - this.user = user; - this.modelkey = (modelkey != null?modelkey.toString():null); - this.contexts = contexts; - } - public IJSimInfo getIJSimInfo(String modelName,String simContextName,String simName) { - if(this.name.equals(modelName)) { - for(IJContextInfo myContextInfo:contexts) { - if(myContextInfo.name.equals(simContextName)) { - for(IJSimInfo mySimInfo:myContextInfo.ijSimId) { - if(mySimInfo.name.equals(simName)) { - return mySimInfo; - } - } - } - } - } - return null; - } - } - @XmlRootElement() - private static class IJModelInfos { - @XmlElement() - private ArrayList modelInfo; - public IJModelInfos() { - - } - public IJModelInfos(ArrayList modelInfo) { - super(); - this.modelInfo = modelInfo; - } - - } - - private static void addSimToIJContextInfo(ArrayListijContextInfos,String contextName,MathType mathType,int geomDim,String geomName,Simulation[] sims) { - ArrayList ijSimInfos = new ArrayList<>(); - for(Simulation sim:sims) { - ijSimInfos.add(new IJSimInfo(true, false, sim.getSimulationID(), sim.getName())); - final Iterator> iterator = TempSimulation.mapTempSimIDToModelAppSim.entrySet().iterator(); - String modelAppSim = TempSimulation.createModelAppSimName(sim); - while(iterator.hasNext()) { - final Entry next = iterator.next(); - if(next.getValue().equals(modelAppSim)) { - ijSimInfos.add(new IJSimInfo(true, false, next.getKey().toString(), sim.getName()+" (quickrun_"+next.getKey().toString()+")")); - } - } - } - ijContextInfos.add(new IJContextInfo(contextName,mathType,geomDim,geomName, ijSimInfos)); - } - private static void populateDesktopIJModelInfos(IJDocType docType,ArrayList openVCDocumentVersionKeys,ArrayList modelInfos) { - if(VCellClient.getInstance() == null) { - return; - } - Collection windowManagers = VCellClient.getInstance().getMdiManager().getWindowManagers(); - for(TopLevelWindowManager topLevelWindowManager:windowManagers) { - if(topLevelWindowManager instanceof DocumentWindowManager) { - DocumentWindowManager documentWindowManager = (DocumentWindowManager)topLevelWindowManager; - VCDocument.VCDocumentType currDocType = documentWindowManager.getVCDocument().getDocumentType(); - if(currDocType == docType.getVCDocType()) { - if(documentWindowManager.getVCDocument().getVersion() != null && documentWindowManager.getVCDocument().getVersion().getVersionKey() != null) { - openVCDocumentVersionKeys.add(documentWindowManager.getVCDocument().getVersion().getVersionKey()); - }else { - ArrayList ijContextInfos = new ArrayList<>(); - if(documentWindowManager instanceof BioModelWindowManager) { - for(SimulationContext simulationContext:((BioModelWindowManager)documentWindowManager).getBioModel().getSimulationContexts()) { - addSimToIJContextInfo(ijContextInfos, simulationContext.getName(), simulationContext.getMathType(),simulationContext.getGeometryContext().getGeometry().getDimension(),simulationContext.getGeometry().getName(),simulationContext.getSimulations()); - } - modelInfos.add(new IJModelInfo(documentWindowManager.getVCDocument().getName(), null, IJDocType.bm, true,(documentWindowManager.getUser()==null?null:documentWindowManager.getUser().getName()),null, ijContextInfos)); - }else if(documentWindowManager instanceof MathModelWindowManager) { - MathModel mathModel = ((MathModelWindowManager)documentWindowManager).getMathModel(); - addSimToIJContextInfo(ijContextInfos, null,mathModel.getMathDescription().getMathType(),mathModel.getGeometry().getDimension(),mathModel.getGeometry().getName(),((MathModelWindowManager)documentWindowManager).getSimulationWorkspace().getSimulations()); - modelInfos.add(new IJModelInfo(documentWindowManager.getVCDocument().getName(), null, IJDocType.mm, true,(documentWindowManager.getUser()==null?null:documentWindowManager.getUser().getName()),null, ijContextInfos)); - } - } - } - } - } - } - - private static SimulationWorkspaceModelInfo getOpenSimulationWorkspaceModelInfo(VCSimulationIdentifier quickrunKey) { - if(VCellClient.getInstance() == null) { - return null; - } -// ArrayList result = new ArrayList<>(); - Collection windowManagers = VCellClient.getInstance().getMdiManager().getWindowManagers(); - for(TopLevelWindowManager topLevelWindowManager:windowManagers) { - if(topLevelWindowManager instanceof DocumentWindowManager) { - DocumentWindowManager documentWindowManager = (DocumentWindowManager)topLevelWindowManager; - VCDocument.VCDocumentType currDocType = documentWindowManager.getVCDocument().getDocumentType(); - if(currDocType == VCDocumentType.BIOMODEL_DOC || currDocType == VCDocumentType.MATHMODEL_DOC) { - if(documentWindowManager instanceof BioModelWindowManager) { - SimulationWindow simWindow = ((BioModelWindowManager)documentWindowManager).haveSimulationWindow(quickrunKey); - if(simWindow != null) { - return new SimulationWorkspaceModelInfo(simWindow.getSimOwner(), simWindow.getSimulation().getName()); - } -// System.out.println(((BioModelWindowManager)documentWindowManager).haveSimulationWindow(quickrunKey)); -// for(SimulationContext simulationContext:((BioModelWindowManager)documentWindowManager).getBioModel().getSimulationContexts()) { -// Simulation[] sims = simulationContext.getSimulations(); -// for (int i = 0; i < sims.length; i++) { -// if(quickrunKey.getSimulationKey().equals(sims[i].getKey())) { -// return new SimulationWorkspaceModelInfo(simulationContext, sims[i].getName()); -// } -// } -// } - }else if(documentWindowManager instanceof MathModelWindowManager) { - SimulationWindow simWindow = ((MathModelWindowManager)documentWindowManager).haveSimulationWindow(quickrunKey); - if(simWindow != null) { - return new SimulationWorkspaceModelInfo(simWindow.getSimOwner(), simWindow.getSimulation().getName()); - } - -// MathModel mathModel = ((MathModelWindowManager)documentWindowManager).getMathModel(); -// Simulation[] sims = mathModel.getSimulations(); -// for (int i = 0; i < sims.length; i++) { -// if(quickrunKey.getSimulationKey().equals(sims[i].getKey())) { -// return new SimulationWorkspaceModelInfo(mathModel, sims[i].getName()); -// } -// } - } - } - } - } -// if(result.size() > 0) { -// return result.toArray(new SimulationWorkspaceModelInfo[0]); -// } - return null; - } - - private static List getParamsFromRequest(HttpServletRequest request) throws ServletException{ - List params = null; - StringBuilder requestURL = new StringBuilder(request.getRequestURL().toString()); - String queryString = request.getQueryString(); - - if (queryString == null) { - queryString = requestURL.toString(); - } else { - queryString = requestURL.append('?').append(queryString).toString(); - } - try { - return URLEncodedUtils.parse(new URI(queryString), "UTF-8"); - } catch (URISyntaxException e) { - throw new ServletException(e); - } - - } - - private static long ijCacheCounter = 0; - private static ArrayList ijModelInfoCache; - private static HashMap modelKeyMapToVCDocument = new HashMap<>(); - private static HashMap SimDataIdMapToOdeResultSet = new HashMap<>(); - private static enum IJListParams {type,open} - public static class ApiListHandler extends AbstractHandler{ - - @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { -// System.out.println(target+"\n"+baseRequest.getQueryString()); - List params = getParamsFromRequest(request); - IJDocType ijDocType = null; - Boolean bOpenOnly = null; -// Long cacheKey = null; - for(NameValuePair nameValuePair:params) { - if(nameValuePair.getName().equals(IJListParams.type.name())) { - ijDocType = IJDocType.valueOf(nameValuePair.getValue()); - }else if(nameValuePair.getName().equals(IJListParams.open.name())) { - bOpenOnly = Boolean.parseBoolean(nameValuePair.getValue()); - } -// else if(nameValuePair.getName().equals(IJListParams.cachekey.name())) { -// cacheKey = Long.valueOf(nameValuePair.getValue()); -// } - } - if(ijDocType == null && bOpenOnly == null/* && cacheKey == null*/) { - response.setContentType("text/html; charset=utf-8"); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - response.getWriter().println("

Expecting '"+GETINFO_PARMS+"' in request

"); - }else { - // Declare response encoding and types - response.setContentType("text/xml; charset=utf-8"); - - // Declare response status code - response.setStatus(HttpServletResponse.SC_OK); - - ArrayList modelInfos = refreshIJModelInfoCache(ijDocType, bOpenOnly); - // Write back response -// response.getWriter().println("

getInfo requested

"); - try { - response.getWriter().println(createXML(new IJModelInfos(modelInfos))); - ijModelInfoCache = modelInfos; - } catch (Exception e) { - e.printStackTrace(); - throw new ServletException(e); - } - } - // Inform jetty that this request has now been handled - baseRequest.setHandled(true); - - - } - - public static ArrayList refreshIJModelInfoCache(IJDocType ijDocType, Boolean bOpenOnly) throws ServletException { - ArrayList openVCDocumentVersionKeys = new ArrayList<>(); - ArrayList modelInfos = new ArrayList<>(); - populateDesktopIJModelInfos(ijDocType,openVCDocumentVersionKeys, modelInfos); - - if(ijDocType == null || ijDocType == IJDocType.quick) { - ArrayList dirs = new ArrayList<>(); - dirs.add(ResourceUtil.getLocalRootDir()); - while(dirs.size() != 0) { - File dir = dirs.remove(0); - File[] files = dir.listFiles(); - for (File file:files) { - if(file.isHidden()) { - continue; - } - if(file.isDirectory()) { - dirs.add(file); - }else if (file.getName().startsWith("SimID_") && file.getName().endsWith(SimDataConstants.LOGFILE_EXTENSION)) { - Integer parentGeomDim = null; - try { - String simRoot = file.getName().substring(0, file.getName().length()-SimDataConstants.LOGFILE_EXTENSION.length()); - File meshFile = new File(file.getParentFile(),simRoot+SimDataConstants.MESHFILE_EXTENSION); - if(meshFile.exists()) {//try to get geometry dimension even if there is no open vcell data window - File meshmetricsFile = new File(file.getParentFile(),simRoot+SimDataConstants.MESHMETRICSFILE_EXTENSION); - File subdomainFile = new File(file.getParentFile(),simRoot+SimDataConstants.SUBDOMAINS_FILE_SUFFIX); - CartesianMesh mesh = CartesianMesh.readFromFiles(meshFile, meshmetricsFile, subdomainFile); - parentGeomDim = mesh.getGeometryDimension(); - } - } catch (Exception e) { - e.printStackTrace(); - //continue, downstream might not need dim - } - StringTokenizer st = new StringTokenizer(file.getName(), "_"); - st.nextToken(); - String quickrunKey = st.nextToken(); - //See if a quickrun sim has an open data viewer that we can get context info from - String parentSimName = null; - String parentContextName = null; - MathType parentMathType = null; - String parentGeomName = null; - String parentModelName = null; - Date parentDate = null; - String parentUser = null; - KeyValue parentModelKey = null; - IJDocType docType = IJDocType.quick; - boolean bOpenOnDesktop = false; - //Match a local file SimID with an open model if possible - if(VCellClient.getInstance() != null) { - Collection windowManagers = VCellClient.getInstance().getMdiManager().getWindowManagers(); - for(TopLevelWindowManager topLevelWindowManager:windowManagers) { - if(topLevelWindowManager.getComponent() != null && topLevelWindowManager instanceof DocumentWindowManager) {//can be null for databseWinManger or FieldDataWindowMangr if they are not showing - DocumentWindowManager documentWindowManager = (DocumentWindowManager)topLevelWindowManager; - ChildWindowManager childWindowManager = ChildWindowManager.findChildWindowManager(topLevelWindowManager.getComponent()); - SimulationWindow simulationWindow = childWindowManager.getTempSimWindow(quickrunKey); - if(simulationWindow != null) { - parentSimName = simulationWindow.getSimulation().getName(); - parentContextName = simulationWindow.getSimOwner().getName(); - int tempdim = simulationWindow.getSimOwner().getGeometry().getDimension(); - if(parentGeomDim != null && parentGeomDim.intValue() != tempdim) { - throw new ServletException("Geometry dimesnion from mesh="+parentGeomDim+" does not equal display window model dimension="+tempdim); - } - parentGeomDim = tempdim; - parentMathType = simulationWindow.getSimOwner().getMathDescription().getMathType(); - parentGeomName = simulationWindow.getSimOwner().getGeometry().getName(); - parentModelName = documentWindowManager.getVCDocument().getName(); - parentDate = documentWindowManager.getVCDocument().getVersion().getDate(); - parentUser = documentWindowManager.getVCDocument().getVersion().getOwner().getName(); - parentModelKey = documentWindowManager.getVCDocument().getVersion().getVersionKey(); - docType = (documentWindowManager.getVCDocument().getDocumentType() ==VCDocumentType.BIOMODEL_DOC?IJDocType.bm:IJDocType.mm); - bOpenOnDesktop = true; - } - } - } - } - if(bOpenOnly == null || bOpenOnly.booleanValue() == false || (bOpenOnly.booleanValue() == true && bOpenOnDesktop == true)){ - ArrayList contInfos = new ArrayList<>(); - ArrayList ijsimfos= new ArrayList<>(); - ijsimfos.add(new IJSimInfo(bOpenOnDesktop, false,quickrunKey/*Simulation.createSimulationID(new KeyValue(quickrunKey))*/, parentSimName)); -// ijsimfos.add(new IJSimInfo(quickrunKey, parentSimName)); - contInfos.add(new IJContextInfo(parentContextName, parentMathType, parentGeomDim, parentGeomName, ijsimfos)); - modelInfos.add(new IJModelInfo(parentModelName, parentDate, docType, (docType != IJDocType.quick?true:false), parentUser,parentModelKey,contInfos)); - } - } - } - } - - } - if(VCellClient.getInstance() != null) { - RequestManager requestManager = VCellClient.getInstance().getRequestManager(); - if(ijDocType == null || ijDocType == IJDocType.bm) { - BioModelInfo[] bioModelInfos = requestManager.getDocumentManager().getBioModelInfos(); - for(BioModelInfo bioModelInfo:bioModelInfos) { - if((bOpenOnly != null && bOpenOnly.booleanValue()) && !openVCDocumentVersionKeys.contains(bioModelInfo.getVersion().getVersionKey())) { - continue; - } - ArrayList ijContextInfos = new ArrayList<>(); - BioModelChildSummary bioModelChildSummary = bioModelInfo.getBioModelChildSummary(); - if(bioModelChildSummary != null && bioModelChildSummary.getSimulationContextNames() != null) { - for(int i = 0; i ijSimInfos = new ArrayList<>(); - for(String simName:bioModelInfo.getBioModelChildSummary().getSimulationNames(bioModelContextName)) { - ijSimInfos.add(new IJSimInfo(false, true, null, simName)); -// ijSimInfos.add(new IJSimInfo(null,simName)); - } - IJContextInfo ijContextInfo = new IJContextInfo(bioModelContextName,bioModelInfo.getBioModelChildSummary().getAppTypes()[i],bioModelInfo.getBioModelChildSummary().getGeometryDimensions()[i],bioModelInfo.getBioModelChildSummary().getGeometryNames()[i],ijSimInfos); - ijContextInfos.add(ijContextInfo); - } - } - } - modelInfos.add(new IJModelInfo(bioModelInfo.getVersion().getName(), bioModelInfo.getVersion().getDate(), IJDocType.bm, openVCDocumentVersionKeys.contains(bioModelInfo.getVersion().getVersionKey()),bioModelInfo.getVersion().getOwner().getName(),bioModelInfo.getVersion().getVersionKey(), ijContextInfos)); - } - } - - if(ijDocType == null || ijDocType == IJDocType.mm) { - MathModelInfo[] mathModelInfos = requestManager.getDocumentManager().getMathModelInfos(); - for(MathModelInfo mathModelInfo:mathModelInfos) { - if((bOpenOnly != null && bOpenOnly.booleanValue()) && !openVCDocumentVersionKeys.contains(mathModelInfo.getVersion().getVersionKey())) { - continue; - } - ArrayList ijSimInfos = new ArrayList<>(); - for(String simName:mathModelInfo.getMathModelChildSummary().getSimulationNames()) { - ijSimInfos.add(new IJSimInfo(false, true, null, simName)); -// ijSimInfos.add(new IJSimInfo(null,simName)); - } - - ArrayList ijContextInfos = new ArrayList<>(); - IJContextInfo ijContextInfo = new IJContextInfo(null,mathModelInfo.getMathModelChildSummary().getModelType(),mathModelInfo.getMathModelChildSummary().getGeometryDimension(),mathModelInfo.getMathModelChildSummary().getGeometryName(),ijSimInfos); - ijContextInfos.add(ijContextInfo); - modelInfos.add(new IJModelInfo(mathModelInfo.getVersion().getName(), mathModelInfo.getVersion().getDate(), IJDocType.mm, openVCDocumentVersionKeys.contains(mathModelInfo.getVersion().getVersionKey()), mathModelInfo.getVersion().getOwner().getName(),mathModelInfo.getVersion().getVersionKey(),ijContextInfos)); - } - } - } - return modelInfos; - } - - } - -// @XmlRootElement() -// private static class IJData { -// @XmlAttribute() -// private int x; -// @XmlAttribute() -// private int y; -// @XmlAttribute() -// private int z; -// @XmlAttribute() -// private int c; -// @XmlAttribute() -// private int t; -// @XmlElement() -// private double[] data; -// public IJData() { -// -// } -// public IJData(int x, int y, int z, int c, int t, double[] data) { -// super(); -// this.x = x; -// this.y = y; -// this.z = z; -// this.c = c; -// this.t = t; -// this.data = data; -// } -// } - private static class IJData { - @XmlAttribute - private String varname; - @XmlAttribute - private Double timepoint; - @XmlAttribute - private Integer jobindex; - @XmlElement - private BasicStackDimensions stackInfo; - @XmlInlineBinaryData - private byte[] data;//double[] converted to byte[] - @XmlElement - private Double notInDomainValue; - private transient double[] doubleData; - @XmlElement - private Double min; - @XmlElement - private Double max; - - public IJData() { - - } - public IJData(BasicStackDimensions stackInfo, byte[] data,String varname,Double timepoint,Integer jobindex,Double notInDomainValue,Double min,Double max) { - super(); - this.stackInfo = stackInfo; - this.data = data; - this.varname = varname; - this.timepoint = timepoint; - this.jobindex = jobindex; - this.notInDomainValue = notInDomainValue; - this.min = min; - this.max = max; - } - - } - - @XmlRootElement - private static class IJDataList { - @XmlElement - IJData[] ijData; - public IJDataList() { - - } - public IJDataList(IJData[] ijData) { - super(); - this.ijData = ijData; - } - - } - - private static class IJVarInfo{ - @XmlAttribute - private String name; - @XmlAttribute - private String displayName; - @XmlAttribute - private String variableType; - @XmlAttribute - private String domain; - @XmlAttribute - private Boolean bFunction; - public IJVarInfo() { - - } - public IJVarInfo(String name, String displayName, VariableType variableType, Domain domain, Boolean bFunction) { - this.name = name; - this.displayName = displayName; - this.variableType = (variableType != null?variableType.getTypeName():null); - this.domain = (domain != null?domain.getName():null); - this.bFunction = bFunction; - } - - } - - @XmlRootElement - private static class IJVarInfos { - @XmlAttribute - private String simname; - @XmlAttribute - private Long cachekey; - @XmlAttribute - private Integer scancount; - @XmlElement - private String times; - @XmlElement - private ArrayList ijVarInfo; - public IJVarInfos() { - - } - public IJVarInfos(ArrayList ijVarInfos,String simname,Long cachekey,double[] times,Integer scancount) { - super(); - this.simname = simname; - this.cachekey = cachekey; - this.ijVarInfo = ijVarInfos; - if(times != null && times.length > 0) { - StringBuffer sb =new StringBuffer(); - for(int i=0;i0?",":"")+i+"='"+times[i]+"'"); - } - this.times=sb.toString(); - } - this.scancount = scancount; - } - - } - -// @XmlRootElement -// private static class IJSimJobIDInfo { -// @XmlAttribute -// private String simname; -// @XmlAttribute -// private int scancount; -// @XmlAttribute -// private String modelkey; -// @XmlAttribute -// private String simcontextkey; -// @XmlAttribute -// private String simkey; -// public IJSimJobIDInfo() { -// -// } -// public IJSimJobIDInfo(String simname, int scancount, KeyValue modelkey, KeyValue simcontextkey, KeyValue simkey) { -// super(); -// this.simname = simname; -// this.scancount = scancount; -// this.modelkey = modelkey.toString(); -// this.simcontextkey = simcontextkey.toString(); -// this.simkey = simkey.toString(); -// } -// -// } - - private static byte[] convertDoubleToBytes(double[] doubles) { - byte[] byteDoubles = new byte[doubles.length*Double.BYTES]; - ByteBuffer bb = ByteBuffer.wrap(byteDoubles); - for(int i=0;i modelInfos = new ArrayList<>(); -// ArrayList openVCDocumentVersionKeys = new ArrayList<>(); -// populateDesktopIJModelInfos(IJDocType.quick,openVCDocumentVersionKeys, modelInfos); -// modelInfos.get(0).contexts.get(0).ijSimId.get(0). - this.simulationModelInfo = simulationModelInfo; - } - public static IJDataResponder create(VCellClient vCellClient,KeyValue modelKey,String simContextName,String simName,Integer jobIndex) throws Exception{ - SimulationOwner simOwner = null; - VCDocument vcDocument = modelKeyMapToVCDocument.get(modelKey.toString()); - if(vcDocument == null) { - vcDocument = (simContextName != null?vCellClient.getRequestManager().getDocumentManager().getBioModel(modelKey):vCellClient.getRequestManager().getDocumentManager().getMathModel(modelKey)); - modelKeyMapToVCDocument.clear(); - modelKeyMapToVCDocument.put(modelKey.toString(), vcDocument); - } - simOwner = (vcDocument instanceof BioModel?((BioModel)vcDocument).getSimulationContext(simContextName):((MathModel)vcDocument)); - Simulation[] simulations = simOwner.getSimulations(); - for(Simulation sim:simulations) { - if(sim.getName().equals(simName)) { - VCSimulationIdentifier vcSimulationIdentifier = sim.getSimulationInfo().getAuthoritativeVCSimulationIdentifier(); - VCSimulationDataIdentifier vcSimulationDataIdentifier = new VCSimulationDataIdentifier(vcSimulationIdentifier, (jobIndex!=null?jobIndex:0)); - OutputContext outputContext = new OutputContext(simOwner.getOutputFunctionContext().getOutputFunctionsList().toArray(new AnnotatedFunction[0])); - VCDataManager vcDataManager = new VCDataManager(vCellClient.getClientServerManager()); - SimulationModelInfo simulationModelInfo0 = new SimulationWorkspaceModelInfo(simOwner, simName); - return new IJDataResponder(vcDataManager, outputContext, vcSimulationDataIdentifier,sim.getScanCount(),sim.getSimulationVersion().getOwner(),simulationModelInfo0); - } - } - throw new Exception("IJREsponder: simulation name '"+simName+"' not found"); - } - public static IJDataResponder create(KeyValue quickrunKey,File simDataDir,int jobIndex) throws Exception{ - VCSimulationIdentifier vcSimulationIdentifier = new VCSimulationIdentifier(quickrunKey, User.tempUser); - VCSimulationDataIdentifier vcSimulationDataIdentifier = new VCSimulationDataIdentifier(vcSimulationIdentifier, jobIndex); -// SimulationData simulationData = new SimulationData(vcSimulationDataIdentifier, simDataDir, simDataDir, null); - DataSetControllerImpl dsci = new DataSetControllerImpl(null, simDataDir,null); - final SimulationWorkspaceModelInfo openSimulationWorkspaceModelInfo = getOpenSimulationWorkspaceModelInfo(vcSimulationIdentifier); - return new IJDataResponder(dsci, null, vcSimulationDataIdentifier,1,User.tempUser,openSimulationWorkspaceModelInfo); - } - public ArrayList getIJData(String varname,VARTYPE_POSTPROC varTypePostProcess,int[] timeIndexes) throws Exception{ - ArrayList ijDatas = new ArrayList<>(); - if(varTypePostProcess != null && varTypePostProcess == VARTYPE_POSTPROC.DataProcessingOutputInfo) { - final DataProcessingOutputInfo dataProcessingOutputInfo = DataProcessingResultsPanel.getDataProcessingOutputInfo(pdeDataContext); - double[] ppData = dataProcessingOutputInfo.getVariableStatValues().get(varname); - final BasicStackDimensions stackInfo = new BasicStackDimensions(ppData.length,1,1, 1, 1); - if(timeIndexes != null) { - ijDatas.add(new IJData(stackInfo, convertDoubleToBytes(ppData), - varname,null,vcSimulationDataIdentifier.getJobIndex(),null,null,null)); - }else { - ijDatas.add(new IJData(stackInfo, null,varname,null,vcSimulationDataIdentifier.getJobIndex(),null,null,null));//just return BasicStackDimensions - } - return ijDatas; - }else if(varTypePostProcess != null && varTypePostProcess == VARTYPE_POSTPROC.PostProcessDataPDEDataContext) { - PostProcessDataPDEDataContext postProcessDataPDEDataContext = PDEDataViewerPostProcess.createPostProcessPDEDataContext((ClientPDEDataContext)pdeDataContext); - postProcessDataPDEDataContext.setVariableName(varname); -// DataIdentifier di = pdeDataContext.getDataIdentifier(); -// DataInfoProvider dip = new DataInfoProvider(postProcessDataPDEDataContext, simulationModelInfo); - CartesianMesh mesh = postProcessDataPDEDataContext.getCartesianMesh(); - BasicStackDimensions basicStackDimensions = new BasicStackDimensions(mesh.getSizeX(),mesh.getSizeY(),mesh.getSizeZ(), 1, 1); - double[] times = postProcessDataPDEDataContext.getTimePoints(); - if(timeIndexes != null) { - for(int timeIndex:timeIndexes) { - double timePoint = times[timeIndex]; - postProcessDataPDEDataContext.setTimePoint(timePoint); -// SimDataBlock simDataBlock = (dataSetControllerImpl != null?dataSetControllerImpl.getSimDataBlock(outputContext, vcSimulationDataIdentifier, varname,timePoint):vcDataManager.getSimDataBlock(outputContext, vcSimulationDataIdentifier, varname, timePoint)); -// final RecodeDataForDomainInfo recodeDataForDomain0 = recodeDataForDomain0(di, dip, postProcessDataPDEDataContext.getDataValues(), mesh); - ijDatas.add(new IJData(basicStackDimensions, convertDoubleToBytes(postProcessDataPDEDataContext.getDataValues()), - varname,timePoint,vcSimulationDataIdentifier.getJobIndex(),null,null,null)); - } - }else { - ijDatas.add(new IJData(basicStackDimensions, null,varname,null,vcSimulationDataIdentifier.getJobIndex(),null,null,null));//just return BasicStackDimensions - } - return ijDatas; - } - double[] times = (dataSetControllerImpl != null?dataSetControllerImpl.getDataSetTimes(vcSimulationDataIdentifier):vcDataManager.getDataSetTimes(vcSimulationDataIdentifier)); - CartesianMesh mesh = pdeDataContext.getCartesianMesh(); - BasicStackDimensions basicStackDimensions = new BasicStackDimensions(mesh.getSizeX(),mesh.getSizeY(),mesh.getSizeZ(), 1, 1); - DataInfoProvider dip = new DataInfoProvider(pdeDataContext, simulationModelInfo); - pdeDataContext.setVariableName(varname); - DataIdentifier di = pdeDataContext.getDataIdentifier(); - if(timeIndexes != null) { - for(int timeIndex:timeIndexes) { - double timePoint = times[timeIndex]; - SimDataBlock simDataBlock = (dataSetControllerImpl != null?dataSetControllerImpl.getSimDataBlock(outputContext, vcSimulationDataIdentifier, varname,timePoint):vcDataManager.getSimDataBlock(outputContext, vcSimulationDataIdentifier, varname, timePoint)); - final RecodeDataForDomainInfo recodeDataForDomain0 = recodeDataForDomain0(di, dip, simDataBlock.getData(), mesh); - ijDatas.add(new IJData(basicStackDimensions, convertDoubleToBytes(recodeDataForDomain0.getRecodedDataForDomain()), - varname,timePoint,vcSimulationDataIdentifier.getJobIndex(), - recodeDataForDomain0.getNotInDomainValue(), - recodeDataForDomain0.getRecodedDataRange().getMin(),recodeDataForDomain0.getRecodedDataRange().getMax())); - } - }else { - ijDatas.add(new IJData(basicStackDimensions, null,varname,null,vcSimulationDataIdentifier.getJobIndex(),null,null,null));//just return BasicStackDimensions - } - return ijDatas; - } -// public DataIdentifier[] getDataIdentifiers() throws FileNotFoundException, DataAccessException, IOException { -// return pdeDataContext.getDataIdentifiers(); -//// return (dataSetControllerImpl != null?dataSetControllerImpl.getDataIdentifiers(outputContext, vcSimulationDataIdentifier):vcDataManager.getDataIdentifiers(outputContext, vcSimulationDataIdentifier)); -// } -// public CartesianMesh getMesh() throws DataAccessException, IOException, MathException { -// return pdeDataContext.getCartesianMesh(); -//// return (dataSetControllerImpl != null?dataSetControllerImpl.getMesh(vcSimulationDataIdentifier):vcDataManager.getMesh(vcSimulationDataIdentifier)); -// } - public IJData getOdeIJData(String varName) throws Exception{ - ODESolverResultSet odeSolverResultSet = SimDataIdMapToOdeResultSet.get(vcSimulationDataIdentifier.toString()); - if(odeSolverResultSet == null) { - if(vcDataManager != null) { - ODESimData odeSimData = vcDataManager.getODEData(vcSimulationDataIdentifier); - odeSolverResultSet = odeSimData; - }else { - ODEDataBlock odeDataBlock = dataSetControllerImpl.getODEDataBlock(vcSimulationDataIdentifier); - odeSolverResultSet = odeDataBlock.getODESimData(); - } - SimDataIdMapToOdeResultSet.clear(); - SimDataIdMapToOdeResultSet.put(vcSimulationDataIdentifier.toString(), odeSolverResultSet); - } - double[] doubles = odeSolverResultSet.extractColumn(odeSolverResultSet.findColumn(varName)); -// double[] times = odeSolverResultSet.extractColumn(odeSolverResultSet.findColumn(ReservedVariable.TIME.getName())); -// for (int i = 0; i < odeSolverResultSet.getRowCount(); i++) { -// ColumnDescription columnDescription = odeSolverResultSet.getColumnDescriptions(i); -// if(columnDescription.getName().equals(varName)) { -// doubles = odeSolverResultSet.extractColumn(i); -// if (times != null) { -// break; -// } -// }else if(columnDescription.getName().equals(ReservedVariable.TIME.getName())) { -// times = odeSolverResultSet.extractColumn(i); -// if (doubles != null) { -// break; -// } -// } -// } - BasicStackDimensions basicStackDimensions = new BasicStackDimensions(1, 1, 1, 1, doubles.length); - IJData ijData = new IJData(basicStackDimensions, convertDoubleToBytes(doubles),varName,null,vcSimulationDataIdentifier.getJobIndex(),null,null,null); - return ijData; - } - public IJTimeSeriesJobResults getIJTimeSeriesData(IJTimeSeriesJobSpec ijTimeSeriesJobSpec) throws Exception{ - TimeSeriesJobSpec timeSeriesJobSpec = null; - BitSet[] domainMaskArr = new BitSet[ijTimeSeriesJobSpec.variableNames.length]; - for (int i = 0; i < domainMaskArr.length; i++) { - if(i==0) { - pdeDataContext.setVariableName(ijTimeSeriesJobSpec.variableNames[i]); - domainMaskArr[i] = getDomainMask(pdeDataContext.getDataIdentifier(),simulationModelInfo); - System.out.println(domainMaskArr[i].cardinality()); - if(ijTimeSeriesJobSpec.indices == null) { - ijTimeSeriesJobSpec.indices = new int[domainMaskArr[i].cardinality()]; - int cnt = 0; - for (int j = domainMaskArr[i].nextSetBit(0); j >= 0; j = domainMaskArr[i].nextSetBit(j+1)) { - ijTimeSeriesJobSpec.indices[cnt++] = j; - if (i == Integer.MAX_VALUE) { - break; // or (i+1) would overflow - } - } - }else { - domainMaskArr[i].clear(); - for (int j = 0; j < ijTimeSeriesJobSpec.indices.length; j++) { - domainMaskArr[i].set(ijTimeSeriesJobSpec.indices[j]); - } - } - }else { - domainMaskArr[i] = domainMaskArr[0]; - } - } - - int[][] copiedIndices = new int[ijTimeSeriesJobSpec.variableNames.length][]; - for (int i = 0; i < ijTimeSeriesJobSpec.variableNames.length; i++) { - copiedIndices[i] = ijTimeSeriesJobSpec.indices; - } - - if(!(ijTimeSeriesJobSpec.calcTimeStats || ijTimeSeriesJobSpec.calcSpaceStats)) { - timeSeriesJobSpec = new TimeSeriesJobSpec(ijTimeSeriesJobSpec.variableNames, copiedIndices,null, - ijTimeSeriesJobSpec.startTime, ijTimeSeriesJobSpec.step, ijTimeSeriesJobSpec.endTime, new VCDataJobID(vcSimulationDataIdentifier.getJobIndex(), user, false)); - }else if(!ijTimeSeriesJobSpec.calcTimeStats){ - timeSeriesJobSpec = new TimeSeriesJobSpec(ijTimeSeriesJobSpec.variableNames, domainMaskArr, - ijTimeSeriesJobSpec.startTime, ijTimeSeriesJobSpec.step, ijTimeSeriesJobSpec.endTime, ijTimeSeriesJobSpec.calcSpaceStats, ijTimeSeriesJobSpec.calcTimeStats, new VCDataJobID(vcSimulationDataIdentifier.getJobIndex(), user, false)); - }else { - throw new IllegalArgumentException("calc time states not yet implemented"); - } - - - TimeSeriesJobResults timeSeriesJobResults = (dataSetControllerImpl != null?dataSetControllerImpl.getTimeSeriesValues(outputContext, vcSimulationDataIdentifier, timeSeriesJobSpec):vcDataManager.getTimeSeriesValues(outputContext, vcSimulationDataIdentifier, timeSeriesJobSpec)); - if(timeSeriesJobResults instanceof TSJobResultsNoStats) { - double[][][] newData = new double[timeSeriesJobResults.getVariableNames().length][][]; - for (int i = 0; i < newData.length; i++) { - newData[i] = ((TSJobResultsNoStats)timeSeriesJobResults).getTimesAndValuesForVariable(timeSeriesJobResults.getVariableNames()[i]); - } - return new IJTimeSeriesJobResults(timeSeriesJobResults.getVariableNames(), timeSeriesJobResults.getIndices()[0], timeSeriesJobResults.getTimes(), newData); - }else if(timeSeriesJobResults instanceof TSJobResultsSpaceStats) { - TSJobResultsSpaceStats tsjrst = ((TSJobResultsSpaceStats) timeSeriesJobResults); - return new IJTimeSeriesJobResults(timeSeriesJobResults.getVariableNames(), timeSeriesJobResults.getIndices()[0], timeSeriesJobResults.getTimes(), - tsjrst.getMinimums(),tsjrst.getMaximums(), tsjrst.getUnweightedMean(), tsjrst.getWeightedMean(), tsjrst.getTotalSpace(), tsjrst.getUnweightedSum(), tsjrst.getWeightedSum()); - } - throw new Exception("Unexpected Results type= "+timeSeriesJobResults.getClass().getName()); - } - public IJVarInfos getIJVarInfos(String simName,Long cachekey,Integer scancount) throws Exception{ - DataIdentifier[] dataIdentifiers = (dataSetControllerImpl != null?dataSetControllerImpl.getDataIdentifiers(outputContext, vcSimulationDataIdentifier):vcDataManager.getDataIdentifiers(outputContext, vcSimulationDataIdentifier)); - ArrayList ijVarInfos = new ArrayList<>(); - for(DataIdentifier did:dataIdentifiers) { - ijVarInfos.add(new IJVarInfo(did.getName(), did.getDisplayName(), did.getVariableType(), did.getDomain(), did.isFunction())); - } - return new IJVarInfos(ijVarInfos,simName,cachekey,(dataSetControllerImpl != null?dataSetControllerImpl.getDataSetTimes(vcSimulationDataIdentifier):vcDataManager.getDataSetTimes(vcSimulationDataIdentifier)),scancount); - } - public void respondData(HttpServletResponse response,String[] varNames,VARTYPE_POSTPROC[] varTypePostProcess,int[] timeIndexes,boolean bSpatial) throws Exception{ - ArrayList ijDatas = new ArrayList<>(); - for (int i = 0; i < varNames.length; i++) { - if(bSpatial) { - ijDatas.addAll(getIJData(varNames[i],(varTypePostProcess==null?null:varTypePostProcess[i]),timeIndexes)); - }else { - ijDatas.add(getOdeIJData(varNames[i])); - } - } - respond(response, createXML(new IJDataList(ijDatas.toArray(new IJData[0])))); - } - public void respondIdentifiers(HttpServletResponse response,String simName,Long cachekey) throws Exception{ - respond(response, createXML(getIJVarInfos(simName, cachekey, jobCount))); - } - public BitSet getDomainMask(DataIdentifier di,SimulationModelInfo simulationModelInfo) { -// SimulationModelInfo simulationModelInfo = new SimulationWorkspaceModelInfo(simOwner, argSimulationName); - final CartesianMesh cartesianMesh = pdeDataContext.getCartesianMesh(); - double[] originalData = new double[cartesianMesh.getISize().getXYZ()]; - Arrays.fill(originalData, 1.0); - DataInfoProvider dip = new DataInfoProvider(pdeDataContext, simulationModelInfo); - final RecodeDataForDomainInfo recodeDataForDomain0 = recodeDataForDomain0(di, dip, originalData, cartesianMesh); - BitSet domainBitSet = new BitSet(originalData.length); - for (int i = 0; i < originalData.length; i++) { - if(recodeDataForDomain0.getRecodedDataForDomain()[i] == 1.0) { - domainBitSet.set(i); - } - } - return domainBitSet; - } - - private static RecodeDataForDomainInfo recodeDataForDomain0(DataIdentifier di,DataInfoProvider dip,double[] originalData,CartesianMesh mesh) { - Domain varDomain = di.getDomain(); - double[] tempRecodedData = null; - //Range dataRange = null; - VariableType vt = di.getVariableType(); - boolean bRecoding = dip != null && varDomain != null; - Double notInDomainValue = null; -// if (getPdeDataContext().getDataValues() != originalData || -// recodeDataForDomainInfo == null || -// ((getDataInfoProvider() == null) != bDataInfoProviderNull) || -// !Compare.isEqualOrNull(functionStatisticsRange, lastFunctionStatisticsRange)) { -// lastFunctionStatisticsRange = functionStatisticsRange; -// bDataInfoProviderNull = (dip== null); -// originalData = getPdeDataContext().getDataValues(); - tempRecodedData = originalData; - - double illegalNumber = Double.POSITIVE_INFINITY; - if (bRecoding) { - tempRecodedData = new double[originalData.length]; - System.arraycopy(originalData, 0, tempRecodedData, 0, tempRecodedData.length); - for(int i = 0; i < originalData.length; i++){ - if(!Double.isNaN(originalData[i])){ - illegalNumber = Math.min(illegalNumber, originalData[i]); - } - } - } - illegalNumber = Math.floor(illegalNumber-1); - notInDomainValue = new Double(illegalNumber); - - final CartesianMesh cartesianMesh = mesh; - double minCurrTime = Double.POSITIVE_INFINITY; - double maxCurrTime = Double.NEGATIVE_INFINITY; - for (int i = 0; i < tempRecodedData.length; i ++) { - if (bRecoding) { - if(!isInDomain(cartesianMesh, varDomain, dip, i, vt)){ -// System.out.println(i+" "+tempRecodedData[i] +" "+notDomainCount); - tempRecodedData[i] = illegalNumber; - } - } - if(!Double.isNaN(tempRecodedData[i]) && tempRecodedData[i] != illegalNumber){ - minCurrTime = Math.min(minCurrTime, tempRecodedData[i]); - maxCurrTime = Math.max(maxCurrTime, tempRecodedData[i]); - } - } -// if(!getdisplayAdapterService1().getAllTimes() || functionStatisticsRange == null){ -// dataRange = new Range(minCurrTime,maxCurrTime); -// }else if(functionStatisticsRange != null){ -// dataRange = functionStatisticsRange; -// }else{ -// throw new RuntimeException("Unexpected state for range calculation"); -// } -// }else{ -// dataRange = recodeDataForDomainInfo.getRecodedDataRange(); -// tempRecodedData = recodeDataForDomainInfo.getRecodedDataForDomain(); -// } - if (bRecoding) { - return new RecodeDataForDomainInfo(true, tempRecodedData, new Range(minCurrTime,maxCurrTime),notInDomainValue); - }else{ - return new RecodeDataForDomainInfo(false, tempRecodedData, new Range(minCurrTime,maxCurrTime),notInDomainValue); - } - } - - public static boolean isInDomain(CartesianMesh cartesianMesh,Domain varDomain,DataInfoProvider dataInfoProvider,int i,VariableType vt){ - if(!cartesianMesh.hasSubvolumeInfo()){ - return true; - } - if (vt.equals(VariableType.VOLUME) && !(cartesianMesh.isChomboMesh())) { - int subvol = cartesianMesh.getSubVolumeFromVolumeIndex(i); - if (varDomain != null && - dataInfoProvider.getSimulationModelInfo().getVolumeNameGeometry(subvol) != null && - !dataInfoProvider.getSimulationModelInfo().getVolumeNameGeometry(subvol).equals(varDomain.getName())) { - return false; - } - } else if (vt.equals(VariableType.VOLUME_REGION)) { - int subvol = cartesianMesh.getVolumeRegionMapSubvolume().get(i); - if (varDomain != null && - dataInfoProvider.getSimulationModelInfo().getVolumeNameGeometry(subvol) != null && - !dataInfoProvider.getSimulationModelInfo().getVolumeNameGeometry(subvol).equals(varDomain.getName())) { - return false; - } - } else if (vt.equals(VariableType.MEMBRANE) && !(cartesianMesh.isChomboMesh())) { - int insideVolumeIndex = cartesianMesh.getMembraneElements()[i].getInsideVolumeIndex(); - int subvol1 = cartesianMesh.getSubVolumeFromVolumeIndex(insideVolumeIndex); - int outsideVolumeIndex = cartesianMesh.getMembraneElements()[i].getOutsideVolumeIndex(); - int subvol2 = cartesianMesh.getSubVolumeFromVolumeIndex(outsideVolumeIndex); - if (varDomain != null && - dataInfoProvider.getSimulationModelInfo().getMembraneName(subvol1, subvol2, true) != null && - !dataInfoProvider.getSimulationModelInfo().getMembraneName(subvol1, subvol2, true).equals(varDomain.getName())) { - return false; - } - } else if (vt.equals(VariableType.MEMBRANE_REGION)) { - int[] subvols = cartesianMesh.getMembraneRegionMapSubvolumesInOut().get(i); - if (varDomain != null && - dataInfoProvider.getSimulationModelInfo().getMembraneName(subvols[0], subvols[1], true) != null && - !dataInfoProvider.getSimulationModelInfo().getMembraneName(subvols[0], subvols[1], true).equals(varDomain.getName())) { - return false; - } - } - return true; - } - - } - - private static void respond(HttpServletResponse response,String xml) throws IOException{ - response.setContentType("text/xml; charset=utf-8"); -// response.setContentLength(xml.length()); - response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().write(xml); - } - - - - -// private static RecodeDataForDomainInfo recodeDataForDomain0(DataIdentifier di,DataInfoProvider dip,double[] originalData,CartesianMesh mesh) { -// Domain varDomain = di.getDomain(); -// double[] tempRecodedData = null; -// Range dataRange = null; -// VariableType vt = di.getVariableType(); -// boolean bRecoding = dip != null && varDomain != null; -// Double notInDomainValue = null; -//// if (getPdeDataContext().getDataValues() != originalData || -//// recodeDataForDomainInfo == null || -//// ((getDataInfoProvider() == null) != bDataInfoProviderNull) || -//// !Compare.isEqualOrNull(functionStatisticsRange, lastFunctionStatisticsRange)) { -//// lastFunctionStatisticsRange = functionStatisticsRange; -//// bDataInfoProviderNull = (dip== null); -//// originalData = getPdeDataContext().getDataValues(); -// tempRecodedData = originalData; -// -// double illegalNumber = Double.POSITIVE_INFINITY; -// if (bRecoding) { -// tempRecodedData = new double[originalData.length]; -// System.arraycopy(originalData, 0, tempRecodedData, 0, tempRecodedData.length); -// for(int i = 0; i < originalData.length; i++){ -// if(!Double.isNaN(originalData[i])){ -// illegalNumber = Math.min(illegalNumber, originalData[i]); -// } -// } -// } -// illegalNumber-=1;// -// notInDomainValue = new Double(illegalNumber); -// -// final CartesianMesh cartesianMesh = mesh; -// double minCurrTime = Double.POSITIVE_INFINITY; -// double maxCurrTime = Double.NEGATIVE_INFINITY; -// for (int i = 0; i < tempRecodedData.length; i ++) { -// if (bRecoding) { -// if(!isInDomain(cartesianMesh, varDomain, dip, i, vt)){ -// tempRecodedData[i] = illegalNumber; -// } -// } -// if(!Double.isNaN(tempRecodedData[i]) && tempRecodedData[i] != illegalNumber){ -// minCurrTime = Math.min(minCurrTime, tempRecodedData[i]); -// maxCurrTime = Math.max(maxCurrTime, tempRecodedData[i]); -// } -// } -//// if(!getdisplayAdapterService1().getAllTimes() || functionStatisticsRange == null){ -//// dataRange = new Range(minCurrTime,maxCurrTime); -//// }else if(functionStatisticsRange != null){ -//// dataRange = functionStatisticsRange; -//// }else{ -//// throw new RuntimeException("Unexpected state for range calculation"); -//// } -//// }else{ -//// dataRange = recodeDataForDomainInfo.getRecodedDataRange(); -//// tempRecodedData = recodeDataForDomainInfo.getRecodedDataForDomain(); -//// } -// if (bRecoding) { -// return new RecodeDataForDomainInfo(true, tempRecodedData, dataRange,notInDomainValue); -// }else{ -// return new RecodeDataForDomainInfo(false, tempRecodedData, dataRange,notInDomainValue); -// } -// } -// -// public static boolean isInDomain(CartesianMesh cartesianMesh,Domain varDomain,DataInfoProvider dataInfoProvider,int i,VariableType vt){ -// if(!cartesianMesh.hasSubvolumeInfo()){ -// return true; -// } -// if (vt.equals(VariableType.VOLUME) && !(cartesianMesh.isChomboMesh())) { -// int subvol = cartesianMesh.getSubVolumeFromVolumeIndex(i); -// if (varDomain != null && -// dataInfoProvider.getSimulationModelInfo().getVolumeNameGeometry(subvol) != null && -// !dataInfoProvider.getSimulationModelInfo().getVolumeNameGeometry(subvol).equals(varDomain.getName())) { -// return false; -// } -// } else if (vt.equals(VariableType.VOLUME_REGION)) { -// int subvol = cartesianMesh.getVolumeRegionMapSubvolume().get(i); -// if (varDomain != null && -// dataInfoProvider.getSimulationModelInfo().getVolumeNameGeometry(subvol) != null && -// !dataInfoProvider.getSimulationModelInfo().getVolumeNameGeometry(subvol).equals(varDomain.getName())) { -// return false; -// } -// } else if (vt.equals(VariableType.MEMBRANE) && !(cartesianMesh.isChomboMesh())) { -// int insideVolumeIndex = cartesianMesh.getMembraneElements()[i].getInsideVolumeIndex(); -// int subvol1 = cartesianMesh.getSubVolumeFromVolumeIndex(insideVolumeIndex); -// int outsideVolumeIndex = cartesianMesh.getMembraneElements()[i].getOutsideVolumeIndex(); -// int subvol2 = cartesianMesh.getSubVolumeFromVolumeIndex(outsideVolumeIndex); -// if (varDomain != null && -// dataInfoProvider.getSimulationModelInfo().getMembraneName(subvol1, subvol2, true) != null && -// !dataInfoProvider.getSimulationModelInfo().getMembraneName(subvol1, subvol2, true).equals(varDomain.getName())) { -// return false; -// } -// } else if (vt.equals(VariableType.MEMBRANE_REGION)) { -// int[] subvols = cartesianMesh.getMembraneRegionMapSubvolumesInOut().get(i); -// if (varDomain != null && -// dataInfoProvider.getSimulationModelInfo().getMembraneName(subvols[0], subvols[1], true) != null && -// !dataInfoProvider.getSimulationModelInfo().getMembraneName(subvols[0], subvols[1], true).equals(varDomain.getName())) { -// return false; -// } -// } -// return true; -// } - - - - - - - - - - - - - - - - - - private static enum IJGetDataParams {cachekey,varname,timeindex,jobindex,colortable,varTypePostProcess} - public static class ApiGetDataHandler extends AbstractHandler{ - @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - System.out.println(target+"\n"+baseRequest.getQueryString()); -// List params = getParamsFromRequest(request); - Long cacheKey = null; - String[] decodedVarNames = null; - VARTYPE_POSTPROC[] varTypePostProcess = null; - int[] timeIndexes = null; - int jobIndex = 0;//jobIndex 0 by default - String colortableName = null; - Map parameterMap = request.getParameterMap(); - for(String param:parameterMap.keySet()) { - if(param.equals(IJGetDataParams.cachekey.name())) { - cacheKey = Long.valueOf(parameterMap.get(param)[0]); - }else if(param.equals(IJGetDataParams.varTypePostProcess.name())) { - String[] temp = parameterMap.get(param);//Values are already URLDecoded at this point - varTypePostProcess = new VARTYPE_POSTPROC[temp.length]; - for (int i = 0; i < temp.length; i++) { - varTypePostProcess[i] = VARTYPE_POSTPROC.valueOf(temp[i]); - } - }else if(param.equals(IJGetDataParams.varname.name())) { - decodedVarNames = parameterMap.get(param);//Values are already URLDecoded at this point - if(decodedVarNames.length == 1 && decodedVarNames[0] != null && decodedVarNames[0].equals("null")) { - decodedVarNames = null; - } - }else if(param.equals(IJGetDataParams.colortable.name())) { - colortableName = parameterMap.get(param)[0];//Values are already URLDecoded at this point - }else if(param.equals(IJGetDataParams.timeindex.name())) { - String[] timeIndexeStr = parameterMap.get(param); - timeIndexes = new int[timeIndexeStr.length]; - for (int i = 0; i < timeIndexeStr.length; i++) { - timeIndexes[i] = Integer.parseInt(timeIndexeStr[i]); - } - }else if(param.equals(IJGetDataParams.jobindex.name())) { - jobIndex = Integer.valueOf(parameterMap.get(param)[0]); - } - - } - if(cacheKey == null) { - if(colortableName != null) { - try { - respond(response, createXML(new CTable(colortableName))); - } catch (Exception e) { - e.printStackTrace(); - throw new ServletException(e.getMessage(),e); - } - }else { - response.setContentType("text/html; charset=utf-8"); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - response.getWriter().println("

Expecting '"+GETINFO_PARMS+"' in request

"); - } - }else { - if(cacheKey != null) { - boolean bFound = false; - if(ijModelInfoCache != null) { - outerloop: - for(IJModelInfo ijModelInfo:ijModelInfoCache) { - if(ijModelInfo.contexts != null) { - for(IJContextInfo ijContextInfo:ijModelInfo.contexts) { - if(ijContextInfo.ijSimId != null) { - for(IJSimInfo ijSimInfo:ijContextInfo.ijSimId) { - if(ijSimInfo.cacheKey == cacheKey) { - try { - IJDataResponder ijDataResponder = null; - if(!ijSimInfo.isDB) {//quickrun/local sim - ArrayList dirs = new ArrayList<>(); - dirs.add(ResourceUtil.getLocalRootDir()); - fileloop: - while(dirs.size() != 0) { - File dir = dirs.remove(0); - File[] files = dir.listFiles(); - for (File file:files) { - if(file.isHidden()) { - continue; - } - if(file.isDirectory()) { - dirs.add(file); - }else if (file.getName().startsWith("SimID_") && file.getName().endsWith(SimDataConstants.LOGFILE_EXTENSION)) { - StringTokenizer st = new StringTokenizer(file.getName(), "_"); - st.nextToken(); - String quickrunKey = st.nextToken(); -// if(TempSimulation.mapTempSimIDToOriginalSimID.get(quickrunKey) != null && TempSimulation.mapTempSimIDToOriginalSimID.get(quickrunKey).equals(ijSimInfo.simId)) { -// if(Simulation.createSimulationID(new KeyValue(quickrunKey)).equals(ijSimInfo.simId)) { - if(quickrunKey.equals(ijSimInfo.simId)) { - ijDataResponder = IJDataResponder.create(new KeyValue(quickrunKey),file.getParentFile().getParentFile(), jobIndex); - break fileloop; - } - } - } - } - }else {//saved sim - IJDocType ijDocType = IJDocType.valueOf(ijModelInfo.type); - if(ijDocType != IJDocType.bm && ijDocType != IJDocType.mm) { - response.setContentType("text/html; charset=utf-8"); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - response.getWriter().println("

\"Assumed IJ request for saved bio/math model, not expecting IJDocType='"+ijDocType.name()+"'\"

"); - baseRequest.setHandled(true); - return; - } - ijDataResponder = IJDataResponder.create(VCellClient.getInstance(), new KeyValue(ijModelInfo.modelkey), ijContextInfo.name/*null for mathmodel*/, ijSimInfo.name, jobIndex); - } - if(ijDataResponder != null) { - if(decodedVarNames!=null/* && timepoint != null*/){ -// Thread.sleep(1000); - ijDataResponder.respondData(response,decodedVarNames,varTypePostProcess, timeIndexes,(ijContextInfo.geomDim > 0)); - }else { - ijDataResponder.respondIdentifiers(response, ijSimInfo.name, cacheKey); - } - bFound = true; - break outerloop; - } - }catch(Exception e) { - throw new ServletException("model='"+ijModelInfo.name+"'"+"context='"+ijContextInfo.name+"'"+"sim='"+ijSimInfo.name+"': "+e); - } - } - } - } - } - } - } - if(!bFound) { - response.setContentType("text/html; charset=utf-8"); - response.setStatus(HttpServletResponse.SC_NOT_FOUND); - response.getWriter().println("

Key="+cacheKey+" not found

"); - } - }else { - throw new ServletException("No vcell ijcache to lookup cacheKey="+cacheKey); - } - } - } - // Inform jetty that this request has now been handled - baseRequest.setHandled(true); - - - } - - } - - public static class ApiHelloHandler extends AbstractHandler{ - - @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - // TODO Auto-generated method stub - response.setContentType("text/plain; charset=utf-8"); - response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().write("VCellApi"); - //response.getWriter().write("VCellApi:"+VCellClient.getInstance().getRequestManager().getDocumentManager().getUser().getName()); - baseRequest.setHandled(true); - - } - - } - - @XmlRootElement - public static class IJFieldData { - @XmlAttribute - public String fdName; - @XmlAttribute - public String[] varNames; - @XmlAttribute - public int xsize; - @XmlAttribute - public int ysize; - @XmlAttribute - public int zsize; - @XmlElement - short[][][] data; - @XmlElement - double[] times; - @XmlAttribute - public double xExtent; - @XmlAttribute - public double yExtent; - @XmlAttribute - public double zExtent; - @XmlAttribute - public double xOrigin; - @XmlAttribute - public double yOrigin; - @XmlAttribute - public double zOrigin; - - public IJFieldData() { - } - - public IJFieldData(String fdName, String[] varNames, int xsize, int ysize, int zsize, short[][][] data, double[] times, - double xExtent, double yExtent, double zExtent, double xOrigin, double yOrigin, double zOrigin) { - super(); - if(data.length != times.length) { - throw new IllegalArgumentException("data length "+data.length+" not equal times length "+times.length); - } - for (int i = 0; i < data.length; i++) { - if(data[i].length != varNames.length){ - throw new IllegalArgumentException("data length ["+i+"] "+data[i].length+" not equal varNames length "+varNames.length); - } - for (int j = 0; j < data[i].length; j++) { - if(data[i][j].length != xsize*ysize*zsize){ - throw new IllegalArgumentException("data length ["+i+"]["+j+"] "+data[i][j].length+" not equal xyz length "+xsize*ysize*zsize); - } - } - } - this.fdName = fdName; - this.varNames = varNames; - this.xsize = xsize; - this.ysize = ysize; - this.zsize = zsize; - this.data = data; - this.times = times; - this.xExtent = xExtent; - this.yExtent = yExtent; - this.zExtent = zExtent; - this.xOrigin = xOrigin; - this.yOrigin = yOrigin; - this.zOrigin = zOrigin; - } - } - - @XmlRootElement - public static class IJSimStatus { - @XmlAttribute - int simulationStatusCode; - @XmlAttribute - String simulationStatusName; - @XmlAttribute - String statusID; - public IJSimStatus() { - - } - public IJSimStatus(int simulationStatusCode, String simulationStatusName,String statusID) { - super(); - this.simulationStatusCode = simulationStatusCode; - this.simulationStatusName = simulationStatusName; - this.statusID = statusID; - } - } - - @XmlRootElement - public static class IJSimStatusJobs{ - @XmlElement - public IJSimStatus[] results; - public IJSimStatusJobs() { - - } - public IJSimStatusJobs(IJSimStatus[] results) { - super(); - this.results = results; - } - } - -// @XmlRootElement -// private static class IJSolverStatus { -// @XmlAttribute -// String simJobId; -// @XmlAttribute -// int statusCode; -// @XmlAttribute -// String statusName; -// @XmlAttribute -// String statusDetail; -// @XmlAttribute -// String statusMessage; -// public IJSolverStatus() { -// } -// public IJSolverStatus(SolverStatus solverStatus,SimulationJob simJob) { -// super(); -// this.simJobId = simJob.getSimulationJobID(); -// this.statusCode = solverStatus.getStatus(); -// this.statusName = solverStatus.toString().substring(0, solverStatus.toString().indexOf(':')); -// this.statusDetail = (solverStatus.getSimulationMessage()==null || solverStatus.getSimulationMessage().getDetailedState() ==null?null:solverStatus.getSimulationMessage().getDetailedState().name()); -// this.statusMessage = (solverStatus.getSimulationMessage()==null?null:solverStatus.getSimulationMessage().getDisplayMessage()); -// } -// } - private static HashMap solverCache = new HashMap<>(); - public static class ApiSolverHandler extends AbstractHandler{ -// private static final String R_DIFFUSION = "rDiffusion"; -// private static final String KR_BINDING = "krBinding"; -// private static final String KF_BINDING = "kfBinding"; - - @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - try { - - ArrayList mathUpdateTasks = null; - Simulation newsim = null; - boolean[] bResponseHolder = new boolean[] {false}; - if(target.startsWith("/status")) { - String[] vcSimIds = request.getParameterValues("vcSimId"); - if(vcSimIds == null || vcSimIds.length != 1) { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "Expecting 1 'vcdid' to identify sim for status"); - }else { - Object solver = solverCache.get(vcSimIds[0]); - if(solver != null & solver instanceof Solver) {//local run, Assume vcSimID is token put in solver cache - generalResponse(bResponseHolder,baseRequest,response,HttpServletResponse.SC_OK,TYPE_TEXT_XML_UTF8,createXML( - new IJSimStatusJobs(new IJSimStatus[] {new IJSimStatus(((Solver)solver).getSolverStatus().getStatus(), ((Solver)solver).getSolverStatus().getSimulationMessage().getDetailedState().name(),vcSimIds[0])}) - - )); - if(((Solver)solver).getSolverStatus().getStatus() == SolverStatus.SOLVER_ABORTED || ((Solver)solver).getSolverStatus().getStatus() == SolverStatus.SOLVER_STOPPED || ((Solver)solver).getSolverStatus().getStatus() == SolverStatus.SOLVER_FINISHED) { - solverCache.remove(vcSimIds[0]); - } - }else if(solver != null & solver instanceof KeyValue) {//remote run, Assume vcSimID is token put in solver cache - SimulationStatus[] updatedSimStatus = VCellClient.getInstance().getClientServerManager().getSimulationController().getSimulationStatus(new KeyValue[] {((KeyValue)solver)}); - if(updatedSimStatus != null && updatedSimStatus.length>0) { - ArrayList jobsArr = new ArrayList<>(); - for (int i = 0; i < updatedSimStatus.length; i++) { - jobsArr.add(new IJSimStatus(updatedSimStatus[0].getJob0SimulationMessage().getDetailedState().ordinal(), - updatedSimStatus[0].getJob0SimulationMessage().getDetailedState().name(),vcSimIds[0])); - } - generalResponse(bResponseHolder,baseRequest,response,HttpServletResponse.SC_OK,TYPE_TEXT_XML_UTF8,createXML(new IJSimStatusJobs(jobsArr.toArray(new IJSimStatus[0])))); - } - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "No status found, request="+request.toString()); - } else {//running sim not started by an external script, Assume vcSimID is the actual simulation key - try { - final KeyValue keyValue = new KeyValue(vcSimIds[0]); - SimulationStatus[] updatedSimStatus = VCellClient.getInstance().getClientServerManager().getSimulationController().getSimulationStatus(new KeyValue[] {keyValue}); - if(updatedSimStatus != null && updatedSimStatus.length>0) { - ArrayList jobsArr = new ArrayList<>(); - for(int i=0;i<1000;i++) { - if(updatedSimStatus[0].getJobStatus(i) != null) { - jobsArr.add(new IJSimStatus(updatedSimStatus[0].getJob0SimulationMessage().getDetailedState().ordinal(), - updatedSimStatus[0].getJob0SimulationMessage().getDetailedState().name(),vcSimIds[0])); - }else { - break; - } - } - generalResponse(bResponseHolder,baseRequest,response,HttpServletResponse.SC_OK,TYPE_TEXT_XML_UTF8,createXML(new IJSimStatusJobs(jobsArr.toArray(new IJSimStatus[0])))); - } - }catch(Exception e) { - e.printStackTrace(); - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "No status found, request="+request.toString()); - } - } - } - return; - }else if(target.startsWith("/fielddata")) { - //save FieldData - if("POST".equals(request.getMethod())){//Geometry being sent - IJFieldData ijFieldData = (IJFieldData)jaxbContext.createUnmarshaller().unmarshal(request.getInputStream()); - FieldDataWindowManager fieldDataWindowManager = VCellClient.getInstance().getMdiManager().getFieldDataWindowManager(); - fieldDataWindowManager.getFieldDataGUIPanel().checkFieldDataName(ijFieldData.fdName); - AsynchClientTask[] tasks = FieldDataGUIPanel.addNewExternalData(VCellClient.getInstance().getMdiManager().getFocusedWindowManager().getComponent(), fieldDataWindowManager.getFieldDataGUIPanel(), false); - FieldDataFileOperationSpec fdos = new FieldDataFileOperationSpec(); - fdos.owner = VCellClient.getInstance().getRequestManager().getDocumentManager().getUser(); - fdos.opType = FieldDataFileOperationSpec.FDOS_ADD; - fdos.variableTypes = new VariableType[] {VariableType.VOLUME}; - fdos.varNames = ijFieldData.varNames; - fdos.shortSpecData = ijFieldData.data;//[time][var][data] odne time, 1 var assumed for now - fdos.times = ijFieldData.times; - fdos.origin = new Origin(ijFieldData.xOrigin, ijFieldData.yOrigin, ijFieldData.zOrigin); - fdos.extent = new Extent(ijFieldData.xExtent, ijFieldData.yExtent, ijFieldData.zExtent); - fdos.isize = new ISize(ijFieldData.xsize, ijFieldData.ysize, ijFieldData.zsize); - Hashtable hashTable = new Hashtable<>(); - hashTable.put("fdos", fdos);//Expected - hashTable.put(FieldDataGUIPanel.USER_DEFINED_FDOS, fdos);//Tells FieldDataGUIPanel.addNewExternalData to not popup the info dialog - hashTable.put(FieldDataGUIPanel.FIELD_NAME, ijFieldData.fdName); - for (int i = 0; i < tasks.length; i++) { - tasks[i].run(hashTable); - } - generalResponse(bResponseHolder,baseRequest,response,HttpServletResponse.SC_OK,TYPE_TEXT_XML_UTF8,createXML(new IJFDid(fdos.specEDI.getDataKey().toString()))); - return; - } - }else if(target.startsWith("/bycachekey")) {//vcDocument = (simContextName != null?vCellClient.getRequestManager().getDocumentManager().getBioModel(modelKey):vCellClient.getRequestManager().getDocumentManager().getMathModel(modelKey)); - if(VCellClient.getInstance() == null) { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "Must be logged in to start solver"); - }else { - String[] cachekeys = request.getParameterValues("cachekey"); - if(cachekeys == null || cachekeys.length != 1) { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "Expecting 1 'cachekey' to identify sim to run"); - return; - } - Long cachekey = null; - try { - cachekey = Long.parseLong(cachekeys[0]); - } catch (Exception e) { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "Start simulation, trouble parsing 'cachekey': "+e.getMessage()); - return; - } - - if(ijModelInfoCache != null) { - modelInfoCacheLoop: - for(IJModelInfo ijModelInfo:ijModelInfoCache) { - if(ijModelInfo.contexts != null) { - for(IJContextInfo ijContextInfo:ijModelInfo.contexts) { - if(ijContextInfo.ijSimId != null) { - for(IJSimInfo ijSimInfo:ijContextInfo.ijSimId) { - if(ijSimInfo.cacheKey == cachekey) { - if(ijContextInfo.name == null) {//mathmodel - MathModel mathModel = (MathModel)getVCDocument(new KeyValue(ijModelInfo.modelkey));//VCellClient.getInstance().getRequestManager().getDocumentManager().getMathModel(new KeyValue(ijModelInfo.modelkey)); - newsim = mathModel.getSimulation(ijSimInfo.name); - }else { - BioModel bioModel = (BioModel)getVCDocument(new KeyValue(ijModelInfo.modelkey));//VCellClient.getInstance().getRequestManager().getDocumentManager().getBioModel(new KeyValue(ijModelInfo.modelkey)); - newsim = bioModel.getSimulationContext(ijContextInfo.name).getSimulation(ijSimInfo.name); - } - break modelInfoCacheLoop; - } - } - } - } - } - } - } - if(newsim == null) { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "Start simulation, couldn't find simulation for 'cachekey'= "+cachekey); - return; - } - -// BioModelInfo[] bioModelInfos = VCellClient.getInstance().getRequestManager().getDocumentManager().getBioModelInfos(); -// getout: //label this loop to jump out -// for (BioModelInfo bioModelInfo : bioModelInfos) { -// if(bioModelInfo.getVersion().getOwner().getName().equals("frm") && bioModelInfo.getVersion().getName().equals("Tutorial_FRAP")) { -// BioModel frapBioModel = VCellClient.getInstance().getRequestManager().getDocumentManager().getBioModel(bioModelInfo); -// Simulation[] simulations = frapBioModel.getSimulations(); -// for (Simulation simulation : simulations) { -// if(simulation.getName().equals("FRAP")) { -// newsim = simulation; - - Simulation clonedSimulation = (Simulation)BeanUtils.cloneSerializable(newsim); - clonedSimulation.refreshDependencies(); - //Set any simulation parameter overrides - MathOverrides clonedMathOverrides = clonedSimulation.getMathOverrides(); - String[] allConstantNames = clonedMathOverrides.getAllConstantNames(); - Map parameterMap = request.getParameterMap(); - boolean bChanges = false; - for(String param:parameterMap.keySet()) { - for(String constantName:allConstantNames) { - if(constantName.equals(param)) { -// Constant oldConstant = clonedMathOverrides.getConstant(constantName); - if(parameterMap.get(param)[0].contains(",")/*clonedMathOverrides.getConstantArraySpec(constantName) != null*/) { - ConstantArraySpec newConstant = ConstantArraySpec.createFromString(constantName, parameterMap.get(param)[0], ConstantArraySpec.TYPE_LIST); - clonedMathOverrides.putConstantArraySpec(newConstant); - }else { - Constant newConstant = new Constant(constantName, new Expression(parameterMap.get(param)[0])); - clonedMathOverrides.putConstant(newConstant); - } - bChanges = true; - } - } - } - if(bChanges) { - clonedSimulation.refreshDependencies(); - newsim.setMathOverrides(new MathOverrides(newsim, clonedSimulation.getMathOverrides())); - } - - //Set a new geometry if requested - if("POST".equals(request.getMethod())){//Geometry being sent - IJGeom ijGeom = (IJGeom)jaxbContext.createUnmarshaller().unmarshal(request.getInputStream()); - changeGeometry(newsim,ijGeom); - } - - //Set new initial conditions - SimulationContext simulationContext = (SimulationContext)newsim.getSimulationOwner(); -// String[] laserCoverageExp = request.getParameterMap().get("laserCoverage"); -// if(laserCoverageExp != null) { - SpeciesContextSpec[] speciesContextSpecs = simulationContext.getReactionContext().getSpeciesContextSpecs(); - for (SpeciesContextSpec speciesContextSpec : speciesContextSpecs) { - System.out.println(speciesContextSpec); - if(parameterMap.containsKey(speciesContextSpec.getSpeciesContext().getName())) { -// if(speciesContextSpec.getSpeciesContext().getSpecies().getCommonName().equals("Laser") && speciesContextSpec.getSpeciesContext().getStructure().getName().equals("Nuc")) { - System.out.println(speciesContextSpec.getInitialConcentrationParameter()); - System.out.println(speciesContextSpec.getInitialConditionParameter()); - System.out.println(speciesContextSpec.getInitialCountParameter()); - Expression expr = new Expression(parameterMap.get(speciesContextSpec.getSpeciesContext().getName())[0]); -// SimulationSymbolTable sst = new SimulationSymbolTable(newsim, 0); -// expr.bindExpression(sst); - speciesContextSpec.getInitialConcentrationParameter().setExpression(expr); - speciesContextSpec.getInitialConditionParameter().setExpression(expr); -// break; -// speciesContextSpec.refreshDependencies(); - } - } -// ClientTaskDispatcher.dispatchColl(null, new Hashtable(), ClientRequestManager.updateMath(null, simulationContext, true,NetworkGenerationRequirements.ComputeFullStandardTimeout), false); -// Thread.sleep(10000); -// } - - //Change simulation endtime - String[] newSimEndTime = request.getParameterMap().get("newSimEndTime"); - if(newSimEndTime != null) { - ClientTaskManager.changeEndTime(null, newsim.getSolverTaskDescription(), Double.parseDouble(newSimEndTime[0])); - } - - //Update everything - mathUpdateTasks = (ArrayList)ClientRequestManager.updateMath(null, simulationContext, false,NetworkGenerationRequirements.ComputeFullStandardTimeout); -// break getout; -// } -// } -// } -// } - if(newsim == null) { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR,TYPE_TEXT_PLAIN_UTF8, "Couldn't find simulation for 'frap' solver"); - } -// if("POST".equals(request.getMethod())){//FieldData being sent -// IJFieldData ijFieldData = (IJFieldData)jaxbContext.createUnmarshaller().unmarshal(request.getInputStream()); -// Constant overrideThis = newsim.getMathOverrides().getConstant(ijFieldData.varName); -// if(overrideThis == null) { -// generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "Couldn't find fieldData override varname="+ijFieldData.varName); -// }else { -// ExternalDataInfo externalDataInfo = LocalWorkspace.createNewExternalDataInfo(ResourceUtil.getLocalSimDir(User.tempUser.getName()),"frapBinding_"+System.currentTimeMillis()); -// DataSetControllerImpl dsci = new DataSetControllerImpl(null,ResourceUtil.getLocalRootDir(),null); -// Geometry geom = ((SimulationContext)newsim.getSimulationOwner()).getGeometry(); -// FieldDataFileOperationResults fdfor = LocalWorkspace.saveExternalData(geom.getExtent(),geom.getOrigin(), -// new ISize(ijFieldData.xsize, ijFieldData.ysize, ijFieldData.zsize),ijFieldData.data ,User.tempUser, -// "prebleach", externalDataInfo.getExternalDataIdentifier(), dsci); -// Expression expr = new Expression("vcField('"+externalDataInfo.getExternalDataIdentifier().getName()+"','prebleach',0.0,'Volume')"); -// SimulationSymbolTable sst = new SimulationSymbolTable(newsim, 0); -// expr.bindExpression(sst); -// Constant newFieldDataConstant = new Constant(overrideThis.getName(), expr); -//// private static final String[] ARGUMENT_NAMES = new String[]{"DatasetName","VariableName","Time","VariableType"}; -// newsim.getMathOverrides().putConstant(newFieldDataConstant); -// } -// } - - } - }else if(target.startsWith("/sbml")) { - String test = streamToString(request.getInputStream()); - ExternalDocInfo externalDocInfo = new ExternalDocInfo(test); - XMLSource xmlSource = externalDocInfo.createXMLSource(); - org.jdom.Element rootElement = xmlSource.getXmlDoc().getRootElement(); - String xmlType = rootElement.getName(); - if (xmlType.equals(XMLTags.SbmlRootNodeTag)) { - Namespace namespace = rootElement.getNamespace(XMLTags.SBML_SPATIAL_NS_PREFIX); - boolean bIsSpatial = (namespace==null) ? false : true; - TranslationLogger translationLogger = new TranslationLogger((VCellClient.getInstance() == null?null: VCellClient.getInstance().getMdiManager().getFocusedWindowManager())); - VCDocument vcDoc = XmlHelper.importSBML(translationLogger, xmlSource, bIsSpatial); - if(vcDoc instanceof BioModel){ - SimulationContext simContext = ((BioModel)vcDoc).getSimulationContext(0); - MathMappingCallback callback = new MathMappingCallbackTaskAdapter(null); - newsim = simContext.addNewSimulation(SimulationOwner.DEFAULT_SIM_NAME_PREFIX,callback,NetworkGenerationRequirements.AllowTruncatedStandardTimeout); - }else if(vcDoc instanceof MathModel){ - newsim = ((MathModel)vcDoc).addNewSimulation(SimulationOwner.DEFAULT_SIM_NAME_PREFIX); - }else{ - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "'solver' handler does not understand target '"+target+"' that results in "+vcDoc.getClass().getName()); - } - }else { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "'solver' handler does not understand target '"+target+"',"+"xmlType="+xmlType+" is expected to be "+XMLTags.SbmlRootNodeTag); - } - }else { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_BAD_REQUEST,TYPE_TEXT_PLAIN_UTF8, "'solver' handler does not understand target '"+target+"'"); - } -// List params = getParamsFromRequest(request); - //if ("POST".equalsIgnoreCase(request.getMethod())) { -// System.out.println(" \n\n Headers"); -// Enumeration headerNames = request.getHeaderNames(); -// while(headerNames.hasMoreElements()) { -// String headerName = (String)headerNames.nextElement(); -// System.out.println(headerName + " = " + request.getHeader(headerName)); -// } -// -// System.out.println("\n\nParameters"); -// Enumeration params2 = request.getParameterNames(); -// while(params2.hasMoreElements()){ -// String paramName = (String)params2.nextElement(); -// System.out.println(paramName + " = " + request.getParameter(paramName)); -// } - -// runLocal(baseRequest, request, response, mathUpdateTasks, newsim, bResponseHolder); - IJSimStatus ijsimStatus = runRemote(newsim,/*Map parameterMap = */(request.getParameterMap().get("bSaveOnly")==null?false:true)); - generalResponse(bResponseHolder,baseRequest,response,HttpServletResponse.SC_OK,TYPE_TEXT_XML_UTF8,createXML(ijsimStatus)); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - throw new ServletException(e); - } - } - - private VCDocument getVCDocument(KeyValue vcDocumentKey) { - Collection windowManagers = VCellClient.getInstance().getMdiManager().getWindowManagers(); - for(TopLevelWindowManager topLevelWindowManager:windowManagers) { - if(topLevelWindowManager instanceof DocumentWindowManager) { - DocumentWindowManager documentWindowManager = (DocumentWindowManager)topLevelWindowManager; - if(documentWindowManager.getVCDocument().getVersion() != null && - documentWindowManager.getVCDocument().getVersion().getVersionKey() != null && - documentWindowManager.getVCDocument().getVersion().getVersionKey().equals(vcDocumentKey)) { - return documentWindowManager.getVCDocument(); - } - } - } - return null; - } - - private IJSimStatus runRemote(Simulation newsim,boolean bSaveOnly) throws Exception{ - Collection windowManagers = VCellClient.getInstance().getMdiManager().getWindowManagers(); - for(TopLevelWindowManager topLevelWindowManager:windowManagers) { - if(topLevelWindowManager instanceof DocumentWindowManager) { - DocumentWindowManager documentWindowManager = (DocumentWindowManager)topLevelWindowManager; - //must be saved already - if(documentWindowManager.getVCDocument().getVersion() != null && documentWindowManager.getVCDocument().getVersion().getVersionKey() != null) { - //Check versions match - final VCDocument oldvcDocument = documentWindowManager.getVCDocument(); - if(newsim.getSimulationOwner() instanceof SimulationContext && - oldvcDocument.getVersion().getVersionKey().equals(((SimulationContext)newsim.getSimulationOwner()).getBioModel().getVersion().getVersionKey())) { - final ClientSimManager clientSimManager = - ((BioModelWindowManager)documentWindowManager).getApplicationComponents((SimulationContext)newsim.getSimulationOwner()).getSimulationWorkspace().getClientSimManager(); -// if(mathUpdateTasks != null) { -// Hashtable hashTable = new Hashtable(); -// for (AsynchClientTask asynchClientTask : mathUpdateTasks) { -// asynchClientTask.run(hashTable); -// } -// } - - if(bSaveOnly) { - final Object[] finished = new Object[] {null}; - //new FinishSave(); - AsynchClientTask waitForSaveToFinish = new AsynchClientTask("waitForSaveToFinish",AsynchClientTask.TASKTYPE_SWING_NONBLOCKING,false,false) { - @Override - public void run(Hashtable hashTable) throws Exception { - if(getClientTaskStatusSupport().isInterrupted() || hashTable.containsKey(ClientTaskDispatcher.TASK_ABORTED_BY_USER)) { - finished[0] = UserCancelException.CANCEL_GENERIC; - }else if(hashTable.containsKey(ClientTaskDispatcher.TASK_ABORTED_BY_ERROR)) { - finished[0] = hashTable.get(ClientTaskDispatcher.TASK_ABORTED_BY_ERROR); - }else { - finished[0] = new Boolean(true); - } - new FinishSave().run(hashTable);//see ClientRequestManager.saveDcoument(final DocumentWindowManager documentWindowManager, boolean replace,AsynchClientTask closeWindowTask) - } - }; -// long startTime = System.currentTimeMillis(); - ((ClientRequestManager)documentWindowManager.getRequestManager()).saveDocument(documentWindowManager, true,waitForSaveToFinish); - while(finished[0] == null) { -// if((System.currentTimeMillis()-startTime) > 30000) {//return -// -// } - Thread.sleep(1000); - } - if(finished[0] instanceof Exception) { - throw new Exception("Saving '"+documentWindowManager.getVCDocument().getName()+"' failed/aborted, check document, revert to save if necessary, exc="+((Exception)finished[0]).getMessage()); - } - return new IJSimStatus(2, "Save completed",oldvcDocument.getName()+"_"+newsim.getSimulationOwner().getName()+"_"+newsim.getName()); - } - -// documentWindowManager.saveDocument(true);//File->Save -// ApiListHandler.refreshIJModelInfoCache(IJDocType.bm, true); - String solverKey = oldvcDocument.getName()+"_"+newsim.getSimulationOwner().getName()+"_"+newsim.getName(); - ijModelInfoCache.clear(); - final AsynchClientTask asynchClientTask = new AsynchClientTask("",AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) { - @Override - public void run(Hashtable hashTable) throws Exception { - //This will be the new document that gets set on the DocumentwindowManager - BioModel changedBM = (BioModel)documentWindowManager.getVCDocument(); - KeyValue simkey = changedBM.getSimulationContext(newsim.getSimulationOwner().getName()).getSimulation(newsim.getName()).getSimulationVersion().getVersionKey(); - solverCache.put(solverKey, simkey); -// ijModelInfoCache = ApiListHandler.refreshIJModelInfoCache(IJDocType.bm, true); - } - }; - clientSimManager.runSimulations(new Simulation[] {newsim},new AsynchClientTask[] {asynchClientTask}); - return new IJSimStatus(2, "preparing...",solverKey);//see SimulationStatus -// Version currVers = documentWindowManager.getVCDocument().getVersion(); -// documentWindowManager.addDocumentChangeListener(docChangeListener); -// clientSimManager.runSimulations(new Simulation[] {newsim},AsynchClientTask[] {}); -// do { -// Thread.sleep(1000); -// System.out.println(currVers+" ----- "+documentWindowManager.getVCDocument().getVersion()); -// }while(currVers.equals(documentWindowManager.getVCDocument().getVersion())); -// ijModelInfoCache = ApiListHandler.refreshIJModelInfoCache(IJDocType.bm, true); -// for(int i=0;i mathUpdateTasks, Simulation newsim, boolean[] bResponseHolder) - throws Exception { - final Simulation finalSim = newsim; - AsynchClientTask startSolverTask = new AsynchClientTask("start solver...",AsynchClientTask.TASKTYPE_NONSWING_BLOCKING,false) { - @Override - public void run(Hashtable hashTable) throws Exception { - if(finalSim != null && !bResponseHolder[0]) { - SolverDescription solverDescription = finalSim.getSolverTaskDescription().getSolverDescription(); - if (solverDescription.equals(SolverDescription.FiniteVolumeStandalone)) { - throw new IllegalArgumentException("Semi-Implicit Finite Volume Compiled, Regular Grid (Fixed Time Step) solver not allowed for quick run of simulations."); - } - SolverUtilities.prepareSolverExecutable(solverDescription); - // create solver from SolverFactory - SimulationTask simTask = new SimulationTask(new SimulationJob(finalSim, 0, null),0); -// VCSimulationDataIdentifier vcSimulationDataIdentifier = simTask.getSimulationJob().getVCDataIdentifier(); - final File localSimDataDir = ResourceUtil.getLocalSimDir(User.tempUser.getName()); - File[] files = localSimDataDir.listFiles(); - for (int i = 0; i < files.length; i++) { - if(files[i].getName().startsWith(finalSim.getSimulationID())) { - files[i].delete(); - } - } -BioModel bioModel = ((SimulationContext)finalSim.getSimulationOwner()).getBioModel(); -bioModel.clearVersion(); -File outputFile = File.createTempFile("laser", ".xml");//new File("C:/temp/laser.xml"); -outputFile.delete(); -FileUtils.writeByteArrayToFile(XmlHelper.bioModelToXML(bioModel).getBytes(), outputFile); - Thread.sleep(1000); - Solver solver = SolverFactory.createSolver(localSimDataDir, simTask, false); - solver.startSolver(); - SolverStatus solverStatus = solver.getSolverStatus(); - generalResponse(bResponseHolder,baseRequest,response,HttpServletResponse.SC_OK,TYPE_TEXT_XML_UTF8, - createXML(new IJSimStatus(solver.getSolverStatus().getStatus(), solver.getSolverStatus().getSimulationMessage().getDetailedState().name(),solver.getSimulationJob().getSimulationJobID()))); - solverCache.clear(); - solverCache.put(solver.getSimulationJob().getSimulationJobID(), solver); - } - - if(!bResponseHolder[0]) { - generalResponse(bResponseHolder,baseRequest,response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR,TYPE_TEXT_PLAIN_UTF8, request.toString()+" was not handled"); - } - - } - }; - if(mathUpdateTasks != null) { - Hashtable hashTable = new Hashtable(); - mathUpdateTasks.add(startSolverTask); - for (AsynchClientTask asynchClientTask : mathUpdateTasks) { - asynchClientTask.run(hashTable); - } -// ClientTaskDispatcher.dispatchColl(null, new Hashtable(), mathUpdateTasks, false); - } - } - - @XmlRootElement - public static class IJGeom { - @XmlElement - String[] subvolumeNames; - @XmlElement - int[] subvolumePixelValue; - @XmlAttribute - public int xsize; - @XmlAttribute - public int ysize; - @XmlAttribute - public int zsize; - @XmlElement - double[] originXYZ; - @XmlElement - double[] extentXYZ; - @XmlElement - byte[] geom; - public IJGeom() { - - } -// public IJGeom(String[] subvolumeNames, int[] subvolumePixelValue, int xsize, int ysize, int zsize,double[] originXYZ, double[] extentXYZ, byte[] geom) throws Exception{ -// super(); -// if(originXYZ == null || extentXYZ == null || originXYZ.length != 3 || extentXYZ.length != 3) { -// throw new Exception("origin and extent array size must be 3"); -// } -// if(subvolumeNames == null || subvolumePixelValue == null || (subvolumeNames.length != subvolumePixelValue.length)) { -// throw new Exception("subvolNames and pixelvalues arrays must be non-null and same length"); -// } -// if(geom == null || geom.length != (xsize*ysize*zsize)) { -// throw new Exception("x*y*z="+(xsize*ysize*zsize)+" not the same as geom length="+geom.length); -// } -// -// this.subvolumeNames = subvolumeNames; -// this.subvolumePixelValue = subvolumePixelValue; -// this.xsize = xsize; -// this.ysize = ysize; -// this.zsize = zsize; -// this.originXYZ = originXYZ; -// this.extentXYZ = extentXYZ; -// this.geom = geom; -// } - public Extent getExtent() { - return new Extent(extentXYZ[0],extentXYZ[1],extentXYZ[2]); - } - public Origin getOrigin() { - return new Origin(originXYZ[0],originXYZ[1],originXYZ[2]); - } - public VCPixelClass[] getPixelVCPixelClasses() { - ArrayList pixelClassList = new ArrayList<>(); - for (int i = 0; i < subvolumeNames.length; i++) { - pixelClassList.add(new VCPixelClass(null, subvolumeNames[i], subvolumePixelValue[i])); - } - return pixelClassList.toArray(new VCPixelClass[0]); - } - public ISize getISize() { - return new ISize(xsize, ysize, zsize); - } - } - - public void changeGeometry(Simulation newsim,IJGeom ijGeom) throws Exception { -// ISize simMeshSize = newsim.getMeshSpecification().getSamplingSize(); -// byte[] subvolumes = new byte[simMeshSize.getXYZ()]; -// for (int y = 0; y < simMeshSize.getY(); y++) { -// if(y>10 && y < 20) { -// for (int x = 0; x < simMeshSize.getX(); x++) { -// if(x>10 && x <20) { -// subvolumes[y*simMeshSize.getX() + x] = (byte)0x01; -// } -// } -// } -// } - - SimulationContext simulationContext = (SimulationContext)newsim.getSimulationOwner(); - StructureMapping[] origStructureMappings = simulationContext.getGeometryContext().getStructureMappings(); - VCImageUncompressed aVCImage = new VCImageUncompressed(null, ijGeom.geom,ijGeom.getExtent()/*newsim.getMeshSpecification().getGeometry().getExtent()*/ , ijGeom.xsize,ijGeom.ysize,ijGeom.zsize); - aVCImage.setPixelClasses(ijGeom.getPixelVCPixelClasses()); -// SubVolume[] subVolumes4 = simulationContext.getGeometry().getGeometrySpec().getSubVolumes(); -// SubVolume[] subVolumes3 = subVolumes4; -// SubVolume[] subVolumes2 = subVolumes3; -// aVCImage.setPixelClasses(new VCPixelClass[] { -// new VCPixelClass(subVolumes2[1].getKey(), subVolumes2[1].getName(), subVolumes2[1].getHandle()), -// new VCPixelClass(subVolumes2[0].getKey(), subVolumes2[0].getName(), subVolumes2[0].getHandle()) -// }); - Geometry overrideGeom = new Geometry("overrideGeom", aVCImage); - overrideGeom.getGeometrySpec().setOrigin(ijGeom.getOrigin()/*newsim.getMathDescription().getGeometry().getGeometrySpec().getOrigin()*/); - overrideGeom.getGeometrySpec().setExtent(ijGeom.getExtent()); - -// VCPixelClass[] vcpixelClasses = new VCPixelClass[numSampledVols]; -// ImageSubVolume vcImageSubVols[] = new ImageSubVolume[numSampledVols]; -// // get pixel classes for geometry -// int idx = 0; -// for (SampledVolume sVol: sampledVolumes) { -// // from subVolume, get pixelClass? -// final String name = sVol.getDomainType(); -// final int pixelValue = SBMLUtils.ignoreZeroFraction( sVol.getSampledValue() ); -// VCPixelClass pc = new VCPixelClass(null, name, pixelValue); -// vcpixelClasses[idx] = pc; -// // Create the new Image SubVolume - use index of this for -// // loop as 'handle' for ImageSubVol? -// ImageSubVolume isv = new ImageSubVolume(null, pc, idx); -// isv.setName(name); -// vcImageSubVols[idx++] = isv; -// } -// vcGeometry.getGeometrySpec().setSubVolumes(vcImageSubVols); - - - -// overrideGeom.precomputeAll(new GeometryThumbnailImageFactoryAWT()); -// overrideGeom.getGeometrySpec().setImage(aVCImage);//setSubVolumes(simulationContext.getGeometry().getGeometrySpec().getSubVolumes()); - overrideGeom.getGeometrySurfaceDescription().updateAll(); - simulationContext.setGeometry(overrideGeom); - newsim.getMathDescription().setGeometry(overrideGeom); - newsim.getMeshSpecification().setGeometry(overrideGeom); - newsim.getMeshSpecification().setSamplingSize(ijGeom.getISize()); - - //Create Structure mappings using names of subvolumes matching - System.out.println("-----subvolumes"); - SubVolume[] svArr = simulationContext.getGeometry().getGeometrySpec().getSubVolumes(); - for (SubVolume subVolume : svArr) { - System.out.println(subVolume); - } - System.out.println("-----structuremappings"); - StructureMapping[] newStructureMappings = simulationContext.getGeometryContext().getStructureMappings(); - for (StructureMapping structureMapping : newStructureMappings) { - if(structureMapping.getGeometryClass() == null) { - for (SubVolume subvolume: svArr) { - if(subvolume.getName().toLowerCase().equals(structureMapping.getStructure().getName().toLowerCase())) { -// structureMapping.setGeometryClass(subvolume); - simulationContext.getGeometryContext().assignStructure(structureMapping.getStructure(), subvolume); - break; - } - } - } - System.out.println(structureMapping); - } - -// ArrayList structureMappings = new ArrayList<>(); -// structureMappings.add(new FeatureMapping(feature, simulationContext, argModelUnitSystem)) -// simulationContext.getGeometryContext().setStructureMappings(structureMappings.toArray(new StructureMapping[0])); - - simulationContext.getGeometryContext().refreshStructureMappings(); - - -// overrideGeom.refreshDependencies(); -// newsim.getMathDescription().refreshDependencies(); -// simulationContext.refreshDependencies(); - } - } - - private static final String TYPE_TEXT_PLAIN_UTF8 = "text/plain; charset=utf-8"; - private static final String TYPE_TEXT_XML_UTF8 = "text/xml; charset=utf-8"; - private static void generalResponse(boolean[] bResponseHolder,Request request, HttpServletResponse response,int httpResponseCode,String contentType,String content) throws Exception{ - response.setContentType(contentType); - response.setStatus(httpResponseCode); - response.getWriter().write(content); - request.setHandled(true); - if(bResponseHolder != null) { - bResponseHolder[0] = true; - } - } - - public static URI getServiceURI() { - return imageJServer.getURI(); - } - public static boolean serviceExists() { - return imageJServer != null; - } - public static void stopService() throws Exception{ - if(imageJServer != null) { - imageJServer.stop(); - imageJServer = null; - } - } - private static Server imageJServer; - private static final int IJSERVER_BEGIN_PORT_RANGE = 50000; - private static final int IJSERVER_END_PORT_RANGE = 50100; - public static void startService(Integer onlyThisPort) throws Exception{ - if(ImageJHelper.serviceExists()) { - throw new Exception("ImageJServer already exists, only 1 allowed"); - } - ContextHandler contextHello = new ContextHandler("/"+ApiEnum.hello.name()+"/"); - contextHello.setHandler(new ApiHelloHandler()); - - ContextHandler contextRoot = new ContextHandler("/"); - contextRoot.setHandler(new ApiInfoHandler()); - - ContextHandler context = new ContextHandler("/"+ApiEnum.getinfo.name()+"/"); - context.setHandler(new ApiListHandler()); - - ContextHandler contextData = new ContextHandler("/"+ApiEnum.getdata.name()+"/"); - contextData.setHandler(new ApiGetDataHandler()); - - ContextHandler contextTimeSeries = new ContextHandler("/"+ApiEnum.gettimeseries.name()+"/"); - contextTimeSeries.setHandler(new ApiTimeSeriesHandler()); - - ContextHandler contextSolver = new ContextHandler("/"+ApiEnum.solver.name()+"/"); - contextSolver.setHandler(new ApiSolverHandler()); - - ContextHandlerCollection contexts = new ContextHandlerCollection(); - contexts.setHandlers(new Handler[] { contextHello,contextRoot,context,contextData ,contextTimeSeries,contextSolver}); - for(int ijServerPort=IJSERVER_BEGIN_PORT_RANGE;ijServerPort<=IJSERVER_END_PORT_RANGE;ijServerPort++) { - imageJServer = null; - try { - imageJServer = new Server((onlyThisPort == null?ijServerPort:onlyThisPort)); - imageJServer.setHandler(contexts); - imageJServer.start(); - System.out.println(imageJServer.getURI()); - break; - } catch (BindException e) { - ImageJHelper.stopService(); - if(onlyThisPort != null) { - e.printStackTrace(); - throw e; - } - System.out.println("VCellIJ service: port "+ijServerPort+" in use, continuing search..."); - } - } - } -} diff --git a/vcell-core/pom.xml b/vcell-core/pom.xml index 8adb6c61f8..3f9c1847ff 100644 --- a/vcell-core/pom.xml +++ b/vcell-core/pom.xml @@ -180,8 +180,8 @@ org.apache.commons - commons-compress - ${commons-compress.version} + commons-csv + ${commons-csv.version} com.hierynomus @@ -258,18 +258,6 @@ - - - org.bouncycastle - bcprov-jdk15on - ${bcprov-jdk15on.version} - - - - org.bouncycastle - bcpkix-jdk15on - ${bcpkix-jdk15on.version} - @@ -353,6 +341,11 @@ + + xalan + xalan + ${xalan.version} + org.apache.commons commons-configuration2 @@ -419,29 +412,6 @@ - - org.sbml.jsbml - jsbml - ${jsbml.version} - - - org.slf4j - slf4j-api - - - org.apache.logging.log4j - log4j-slf4j-impl - - - org.apache.logging.log4j - log4j-core - - - junit - junit - - - org.sbml.jsbml jsbml-core @@ -465,6 +435,11 @@ + + org.sbml.jsbml.ext + jsbml-spatial + ${jsbml.version} + com.thoughtworks.xstream xstream @@ -517,27 +492,11 @@ jaxrpc-api ${jaxrpc-api.version} - - uk.ac.ebi.biomodels - biomodels-wslib - ${biomodels-wslib.version} - - - axis - axis - - - org.apache.axis axis ${axis.version} - - axis - axis-wsdl4j - ${axis-wsdl4j.version} - colt colt diff --git a/vcell-math/pom.xml b/vcell-math/pom.xml index 93719ac83b..25e29e25c9 100644 --- a/vcell-math/pom.xml +++ b/vcell-math/pom.xml @@ -87,11 +87,6 @@ junit-jupiter-params test - - org.apache.commons - commons-math3 - ${commons-math3.version} - org.vcell vcell-util diff --git a/vcell-rest/pom.xml b/vcell-rest/pom.xml index b511e6d0ca..7a57999111 100644 --- a/vcell-rest/pom.xml +++ b/vcell-rest/pom.xml @@ -129,6 +129,12 @@ test + + org.eclipse.jetty + jetty-server + ${jetty.version} + test + org.vcell vcell-core diff --git a/vcell-server/pom.xml b/vcell-server/pom.xml index 5daa02e5d9..3a07bc8470 100644 --- a/vcell-server/pom.xml +++ b/vcell-server/pom.xml @@ -112,6 +112,17 @@ vcell-util ${project.version} + + org.bitbucket.b_c + jose4j + 0.9.3 + + + org.slf4j + slf4j-api + + + org.apache.activemq diff --git a/vcell-util/pom.xml b/vcell-util/pom.xml index 172575358a..89da76b368 100644 --- a/vcell-util/pom.xml +++ b/vcell-util/pom.xml @@ -82,18 +82,6 @@ junit-jupiter test - - org.apache.commons - commons-csv - ${commons-csv.version} - - - - - org.jboss.netty - netty - ${netty.version} - javax.mail @@ -106,18 +94,6 @@ gson ${gson.version} - - - commons-io - commons-io - ${commons-io.version} - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - org.apache.logging.log4j log4j-core diff --git a/vcell-util/src/main/java/org/vcell/util/FileUtils.java b/vcell-util/src/main/java/org/vcell/util/FileUtils.java index e5cbc8c95a..a630b56e0c 100644 --- a/vcell-util/src/main/java/org/vcell/util/FileUtils.java +++ b/vcell-util/src/main/java/org/vcell/util/FileUtils.java @@ -10,18 +10,7 @@ package org.vcell.util; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileFilter; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.nio.ByteBuffer; @@ -31,6 +20,7 @@ import java.util.Collection; import java.util.Iterator; + /** * Insert the type's description here. * Creation date: (10/10/2002 11:57:56 AM) @@ -80,14 +70,6 @@ public static void copyDirectory(File sourceDir, File destDir, boolean bDeep, Fi } } -public static void copyDirectoryShallow(File sourceDir, File destDir) throws IOException { - copyDirectory(sourceDir, destDir, false, null); -} - -public static void copyDirectoryDeep(File sourceDir, File destDir) throws IOException { - copyDirectory(sourceDir, destDir, true, null); -} - /** * Convenience method to copy a file from a source to a destination. * Overwrite is prevented, and the last modified is kept, 4k buffer used. @@ -371,16 +353,6 @@ public static String pathJoinStrings(Collection input) { } throw new IllegalArgumentException("null input to splitPathString"); } -/** - * join collection of File into into operating system path separator String - * @param input - * @return String with input elements separated by path - * @throws IllegalArgumentException if input null - */ -public static String pathJoinFiles(Collection input) { - return pathJoinStrings(toStrings(input)); - -} /** * convert collection of Strings to Files. Optionally verify Strings are valid files, and omit from @@ -404,23 +376,6 @@ public static Collection toFiles(Collection input, boolean validat throw new IllegalArgumentException("null input to splitPathString"); } -/** - * convert collection of Files to Strings - * @param input - * @return Collection of absolute paths - * @throws IllegalArgumentException if input null - */ -public static Collection toStrings(Collection input) { - if (input != null) { - Collection rval = new ArrayList(); - for (File file:input) { - rval.add(file.getAbsolutePath()); - } - return rval; - } - throw new IllegalArgumentException("null input to splitPathString"); -} - public static final int NOT_FOUND = -1; @@ -578,14 +533,5 @@ public static String getPrefix(final String filename) { private static boolean isSeparator(final char ch) { return ch == UNIX_SEPARATOR || ch == WINDOWS_SEPARATOR; } -/** - * use org.apache.commons.io.FileUtils.deleteQuietly(path); - * @param path - * @throws FileNotFoundException - */ -@Deprecated -public static void deleteRecursive(File path) throws FileNotFoundException{ - org.apache.commons.io.FileUtils.deleteQuietly(path); -} } diff --git a/vcell-util/src/main/java/org/vcell/util/HttpClientPipelineFactory.java b/vcell-util/src/main/java/org/vcell/util/HttpClientPipelineFactory.java deleted file mode 100644 index 2a777d27e9..0000000000 --- a/vcell-util/src/main/java/org/vcell/util/HttpClientPipelineFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 1999-2011 University of Connecticut Health Center - * - * Licensed under the MIT License (the "License"). - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.opensource.org/licenses/mit-license.php - */ - -package org.vcell.util; - -import org.jboss.netty.channel.ChannelPipeline; -import org.jboss.netty.channel.ChannelPipelineFactory; -import org.jboss.netty.channel.Channels; -import org.jboss.netty.handler.codec.http.HttpClientCodec; -import org.jboss.netty.handler.codec.http.HttpContentDecompressor; - -public class HttpClientPipelineFactory implements ChannelPipelineFactory { - - private HttpResponseHandler responseHandler = null; - - public HttpClientPipelineFactory(HttpResponseHandler responseHandler) { - this.responseHandler = responseHandler; - } - - public ChannelPipeline getPipeline() throws Exception { - - ChannelPipeline pipeline = Channels.pipeline(); - - // pipeline.addLast("ssl", new SslHandler(engine)); - - pipeline.addLast("codec", new HttpClientCodec()); - - pipeline.addLast("inflater", new HttpContentDecompressor()); - - // pipeline.addLast("aggregator", new HttpChunkAggregator(1048576)); - - pipeline.addLast("handler", responseHandler); - - return pipeline; - } -} diff --git a/vcell-util/src/main/java/org/vcell/util/HttpResponseHandler.java b/vcell-util/src/main/java/org/vcell/util/HttpResponseHandler.java deleted file mode 100644 index 0a50a32f94..0000000000 --- a/vcell-util/src/main/java/org/vcell/util/HttpResponseHandler.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 1999-2011 University of Connecticut Health Center - * - * Licensed under the MIT License (the "License"). - * You may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.opensource.org/licenses/mit-license.php - */ - - -package org.vcell.util; - -import org.jboss.netty.buffer.ChannelBuffer; -import org.jboss.netty.channel.ChannelHandlerContext; -import org.jboss.netty.channel.ExceptionEvent; -import org.jboss.netty.channel.MessageEvent; -import org.jboss.netty.channel.SimpleChannelUpstreamHandler; -import org.jboss.netty.handler.codec.http.HttpChunk; -import org.jboss.netty.handler.codec.http.HttpResponse; -import org.jboss.netty.util.CharsetUtil; - - -public class HttpResponseHandler extends SimpleChannelUpstreamHandler { - - private boolean readingChunks; - private ClientTaskStatusSupport clientTaskStatusSupport; - private int contentLength = 0; - private StringBuffer responseContent = new StringBuffer(); - private String serverHost = null; - - - public StringBuffer getResponseContent() { - return responseContent; - } - - public HttpResponseHandler(ClientTaskStatusSupport clientTaskStatusSupport, String serverHost) { - this.clientTaskStatusSupport = clientTaskStatusSupport; - this.serverHost = serverHost; - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { - System.out.println(e.toString()); - e.getCause().printStackTrace(); - } - - @Override - public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) - throws Exception { - if (clientTaskStatusSupport!=null && clientTaskStatusSupport.isInterrupted()){ - ctx.getChannel().close(); - return; - } - if (!readingChunks) { - HttpResponse response = (HttpResponse) e.getMessage(); - if (!response.getHeaderNames().isEmpty()) { - if (clientTaskStatusSupport!=null){ - clientTaskStatusSupport.setMessage("downloading "+NumberUtils.formatNumBytes(contentLength)+" from "+serverHost); - clientTaskStatusSupport.setProgress(0); - }else{ - System.out.println("downloading "+contentLength+" bytes from "+serverHost); - } - } - - if (response.isChunked()) { - readingChunks = true; - } else { - ChannelBuffer content = response.getContent(); - if (content.readable()) { - responseContent.append(content.toString(CharsetUtil.UTF_8)); - clientTaskStatusSupport.setProgress(100); - } - } - } else { - HttpChunk chunk = (HttpChunk) e.getMessage(); - if (chunk.isLast()) { - readingChunks = false; - } else { - responseContent.append(chunk.getContent().toString(CharsetUtil.UTF_8)); - if (clientTaskStatusSupport!=null){ - clientTaskStatusSupport.setMessage("downloaded "+NumberUtils.formatNumBytes(responseContent.length()) + " from "+serverHost); - }else{ - System.out.println("downloaded "+responseContent.length()+" of "+NumberUtils.formatNumBytes(responseContent.length())+" from " + serverHost); - } - } - } - } -} diff --git a/vcell-util/src/main/java/org/vcell/util/Issue.java b/vcell-util/src/main/java/org/vcell/util/Issue.java index 2c5bdd668c..9d45a7439d 100644 --- a/vcell-util/src/main/java/org/vcell/util/Issue.java +++ b/vcell-util/src/main/java/org/vcell/util/Issue.java @@ -13,9 +13,6 @@ import java.util.List; import java.util.Objects; -import org.apache.commons.lang3.StringUtils; - - /** * Insert the type's description here. @@ -330,7 +327,7 @@ public java.lang.String getTooltip() { * @return {@link #getTooltip()} wrapped in html tags if not blank; otherwise return {@link #getTooltip()} */ public String getHtmlTooltip() { - if (!StringUtils.isBlank(tooltip)) { + if (tooltip != null && !tooltip.trim().isEmpty()) { return "" + tooltip + ""; } return tooltip;