summaryrefslogtreecommitdiff
path: root/WEB-INF/classes/SciExec.java
diff options
context:
space:
mode:
Diffstat (limited to 'WEB-INF/classes/SciExec.java')
-rwxr-xr-xWEB-INF/classes/SciExec.java133
1 files changed, 133 insertions, 0 deletions
diff --git a/WEB-INF/classes/SciExec.java b/WEB-INF/classes/SciExec.java
new file mode 100755
index 0000000..42c185a
--- /dev/null
+++ b/WEB-INF/classes/SciExec.java
@@ -0,0 +1,133 @@
+/*
+ Servlet code for xcos-on-web
+ Authors: Maverick and Adhitya
+ Description:
+ The following servlet creates a shell command to run Scilab without any GUI/simulation window.
+ The diagram sent from client is stored in a usr-xxx.xcos file and is then simulated. The result
+ is a .png file which is then sent back to the client.
+*/
+import java.io.*;
+import javax.servlet.*;
+import java.util.*;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.FilenameUtils;
+
+
+public class SciExec extends GenericServlet {
+
+
+ public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException
+ {
+ PrintWriter pw = response.getWriter();
+
+
+ InputStream is = null;
+ ByteArrayOutputStream baos = null;
+ List<String> commands = new ArrayList<String>();
+ /*
+ Maverick & Srikant sir.
+ Creating a shell command to run Scilab without any GUI so that the simulation window doesn't appear.
+ */
+ commands.add("scilab-adv-cli");
+ commands.add("-noatomsautoload");
+ commands.add("-nogui");
+ commands.add("-nb");
+ commands.add("-e");
+
+ String imagePath="";
+ String fileNameWithoutExt="";
+
+ /*
+ Maverick
+ Ignore the following comments.
+ */
+
+ //---IGNORE---
+ /*
+ commands.add("plot3d();xs2png(gcf(),'img2.png');exit();");
+ String data=request.getParameter("name");
+ pw.println(data);
+ commands.add("echo "+data+" > /home/saarang/Softwares/apache-tomcat-8.0.36/webapps/sci/servlet/file.xcos");
+ commands.add("driver('PNG');xinit('/home/saarang/apache-tomcat-8.0.36/webapps/worknogui/servlet/ans"+k+".png');loadXcosLibs();importXcosDiagram('/home/saarang/apache-tomcat-8.0.36/file.xcos');xcos_simulate(scs_m,4);mode(2);xend();quit();");
+ */
+ //--IGNORE till here---
+
+
+ ProcessBuilder pb = new ProcessBuilder(commands);
+ try
+ {
+ InputStream inputStream = request.getInputStream();
+ /*
+ Adhitya
+ Creating a temporary file in the directory containing tomcat. This file is the .xcos file which will be executed by the Scilab engine.
+ */
+ File xcosFile = File.createTempFile("usr-", ".xcos");
+ OutputStream outputStream = new FileOutputStream(xcosFile);
+ IOUtils.copy(inputStream, outputStream);
+ outputStream.close();
+
+ String tempPath = xcosFile.getAbsolutePath();
+
+ String parentPath = xcosFile.getParent();
+ fileNameWithoutExt = FilenameUtils.removeExtension(xcosFile.getName());
+
+ /*
+ Maverick
+ The resultant .png file which is produced as a result of simulation is stored in a different folder inside the respective webapp directory.
+ The path of the folder is /path/to/webapp/servlet.
+
+ TODO: Modify the following path.
+ */
+ imagePath = "/path/to/webapps/xcos-on-web/servlet"+File.separator + fileNameWithoutExt + ".png";
+
+ /*
+ Maverick
+ Creating the command which is to be executed using terminal.
+ */
+ commands.add("driver('PNG');xinit('"+imagePath+"');loadXcosLibs();importXcosDiagram('"+tempPath+"');xcos_simulate(scs_m,4);mode(2);xend();quit();");
+
+ /*
+ Maverick
+ Reference: www.stackoverflow.com
+ Starting a process to execute the created command.
+ */
+ Process prs = pb.start();
+ is = prs.getInputStream();
+ byte[] b = new byte[1024];
+ int size = 0;
+ baos = new ByteArrayOutputStream();
+ while((size = is.read(b)) != -1){
+ baos.write(b, 0, size);
+ }
+ System.out.println(new String(baos.toByteArray()));
+
+
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ catch(Exception e)
+ {
+ pw.println("Exception");
+ }
+ finally
+ {
+ try {
+ if(is != null) is.close();
+ if(baos != null) baos.close();
+ } catch (Exception ex){}
+ }
+ /*
+ Maverick
+ Accessing the .png file and sending it to the client.
+ */
+ pw.println("servlet/"+fileNameWithoutExt+".png");
+ pw.close();
+ }
+}