//--------------------------------------------------------------------------- // Copyright 2006-2009 // Dan Roozemond, d.a.roozemond@tue.nl, (TU Eindhoven, Netherlands) // Peter Horn, horn@math.uni-kassel.de (University Kassel, Germany) // // Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //--------------------------------------------------------------------------- package org.symcomp.webwupsi; import org.mortbay.jetty.Request; import org.symcomp.wupsi.Wupsifer; import org.symcomp.scscp.SCSCPClient; import org.symcomp.openmath.OpenMathBase; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; import javax.servlet.http.HttpServlet; /** * This is the Servlet that is responsible for handling the 'compute' action */ public class Wupslet extends HttpServlet { private final static String HOME = "/capp/index.html"; Wupsifer w; public Wupslet() { w = Wupsifer.getInstance(); } public Wupslet(Wupsifer w) { this.w = w; } /** * Entry point of all the handled actions * @param target * @param request * @param response * @param dispatch * @throws java.io.IOException * @throws javax.servlet.ServletException */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getPathInfo(); System.out.println("REQUEST path: "+path); String error = ""; String res = null; if (path.equals("/") || path.equals("/index") || path.equals("/index.html")) { response.sendRedirect(HOME); return; } if (path.equals("/compute")) { String systemId = request.getParameter("systemId"); if (null == systemId) { error += "ERROR. Must specify \"systemId\". "; } SCSCPClient client = w.getClients().get(systemId); if (null == client) { error += "ERROR. No system with systemId '"+systemId+"' found. "; } String command = request.getParameter("command"); if (null == command) { error += "ERROR. Must specify 'command'. "; } String outputFormat = request.getParameter("outputFormat"); if (null == outputFormat) { outputFormat = "xml"; } OpenMathBase omb = null; try { omb = OpenMathBase.parse(command); } catch(Exception e) { error += "ERROR. Command could not be parsed: "+e.getMessage(); } if (error.length() == 0) { OpenMathBase result = null; try { String token = client.compute(omb); while (!client.resultAvailable(token)) { try { Thread.sleep(80); } catch(Exception e) {} } result = client.getResult(token); } catch (Exception oops) { error = "ERROR. Parsing or Computing failed."; } if (error.length() == 0) { if (outputFormat.equalsIgnoreCase("ALL")) { res = "POPCORN: "+result.toPopcorn()+"\n\nLATEX: "+result.toLatex()+"\n\nOPENMATH: "+result.toXml()+"\n\n"; } else if (outputFormat.equalsIgnoreCase("XML")) { res = result.toXml(); } else if (outputFormat.equalsIgnoreCase("POPCORN")) { res = result.toPopcorn(); } else if (outputFormat.equalsIgnoreCase("LATEX")) { res = result.toLatex(); } else { error = "Illegal output format: "+outputFormat; } } } } else if (path.equals("/print")) { String command = request.getParameter("command"); if (null == command) { error += "ERROR. Must specify 'command'. "; } String outputFormat = request.getParameter("outputFormat"); if (null == outputFormat) { outputFormat = "xml"; } OpenMathBase omb = null; try { omb = OpenMathBase.parse(command); } catch(Exception e) { error += "ERROR. Command could not be parsed: "+e.getMessage(); } if (error.length() == 0) { OpenMathBase result = omb; if (error.length() == 0) { if (outputFormat.equalsIgnoreCase("ALL")) { res = "POPCORN: "+result.toPopcorn()+"\n\nLATEX: "+result.toLatex()+"\n\nOPENMATH: "+result.toXml()+"\n\n"; } else if (outputFormat.equalsIgnoreCase("XML")) { res = result.toXml(); } else if (outputFormat.equalsIgnoreCase("POPCORN")) { res = result.toPopcorn(); } else if (outputFormat.equalsIgnoreCase("LATEX")) { res = result.toLatex(); } else { error = "Illegal output format: "+outputFormat; } } } } else { response.sendRedirect(HOME); return; } if (res != null && error.length() == 0) { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println(res); ((Request)request).setHandled(true); } else if (res != null && error.length() > 0) { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println(error); ((Request)request).setHandled(true); } else { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println("ERROR. Was war denn das?!"); ((Request)request).setHandled(true); } } }