blob: 42c185a61860ba026c9d296e6ae440487e72768b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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();
}
}
|