+++ /dev/null
-/* Copyright (C) 2001, HELM Team
- *
- * This file is part of UWOBO, developed at the Computer Science
- * Department, University of Bologna, Italy.
- *
- * UWOBO is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * UWOBO is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with UWOBO; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
- *
- * For details, see the UWOBO World-Wide-Web page,
- * http://cs.unibo.it/helm/uwobo
- */
-
-package it.unibo.cs.helm.uwobo;
-
-import java.io.*;
-import java.util.*;
-import javax.servlet.*;
-import javax.servlet.http.*;
-import javax.xml.transform.*;
-import org.xml.sax.*;
-
-// WARNING: next comment is obsolete!!!!!
-/*
-*
-* usage:
-* http://hostname/helm/servlet/uwobo/help
-* http://hostname/helm/servlet/uwobo/add?bind=key,stylesheet[&bind=key,stylesheet]*
-* http://hostname/helm/servlet/uwobo/remove[?keys=key_1,...,key_n]
-* http://hostname/helm/servlet/uwobo/list
-* http://hostname/helm/servlet/uwobo/reload[?keys=key_1,...,key_n]
-* http://hostname/helm/servlet/uwobo/apply?xmluri=xmldata&keys=key_1,...,key_n[¶m.name=value]*[¶m.key.name=value]*[&prop.name=[value]]*
-*
-* example:
-* http://aristotele/helm/servlet/uwobo/add?bind=foo1,file:///D:/Archivio/Progetti/helm/resources/xsl/foo1.xsl
-* http://aristotele/helm/servlet/uwobo/add?bind=foo2,file:///D:/Archivio/Progetti/helm/resources/xsl/foo2.xsl
-* http://aristotele/helm/servlet/uwobo/apply?xmluri=file:///D:/Archivio/Progetti/helm/resources/xsl/foo.xml&keys=foo1,foo2
-*
-* installation notes (Tomcat):
-* replace parser.jar and jaxp.jar from /lib with xerces.jar and add xalan.jar
-*
-* add in conf/server.xml
-* <Context path="/helm"
-* docBase="webapps/helm"
-* crossContext="false"
-* debug="0"
-* reloadable="true" >
-* </Context>
-*
-* add in uriworkermap.properties
-* /helm/*=ajp12
-*
-*
-* @author The HELM team
-*/
-public class Servlet extends HttpServlet {
-
- public static final String[] usage = {
- "http://<i>hostname</i>/helm/servlet/uwobo/help",
- "http://<i>hostname</i>/helm/servlet/uwobo/add?bind=<i>key</i>,<i>stylesheet</i>[&bind=<i>key</i>,<i>stylesheet</i>]*",
- "http://<i>hostname</i>/helm/servlet/uwobo/remove[?keys=<i>key_1,...,key_n</i>]",
- "http://<i>hostname</i>/helm/servlet/uwobo/list",
- "http://<i>hostname</i>/helm/servlet/uwobo/reload[?keys=<i>key_1,...,key_n</i>]",
- "http://<i>hostname</i>/helm/servlet/uwobo/apply?xmluri=<i>xmldata</i>&keys=<i>key_1,...,key_n</i>[¶m.<i>name</i>=<i>value</i>]*[¶m.<i>key</i>.<i>name</i>=<i>value</i>]*[&prop.<i>name</i>=[<i>value</i>]]*"
- };
- public static final String help;
-
- static {
- StringBuffer sb = new StringBuffer();
- sb.append("<ul>");
- for (int i=0; i<usage.length; i++)
- sb.append("<li>").append(usage[i]).append("</li>");
- sb.append("</ul>");
- help = sb.toString();
- }
-
- private Server server;
-
- public void init(ServletConfig config)
- throws ServletException
- {
- super.init(config);
-
- System.out.println("UWOBO init");
- server = new Server();
- }
-
- private static String[] split(final String s, final String delim)
- {
- String[] res = {null};
- if (s == null) return res;
- StringTokenizer st = new StringTokenizer(s, delim);
- res = new String[st.countTokens()];
- for (int i = 0; i < res.length; i++) res[i] = st.nextToken();
- return res;
- }
-
- private static String[] split2(final String s, final String delim)
- {
- String[] res = new String[2];
- StringTokenizer st = new StringTokenizer(s);
- res[0] = st.nextToken(delim); res[1] = st.nextToken("").substring(1);
- return res;
- }
-
- private void html_open(HttpServletResponse resp, ServletOutputStream out)
- throws IOException
- {
- resp.setContentType("text/html");
- out.println("<html><body bgcolor=\"#ffffff\"><h1>" + server.PACKAGE + " servlet</h1>");
- }
-
- private void html_close(ServletOutputStream out)
- throws IOException
- {
- out.println("<p>done</p></body></html>");
- out.close();
- }
-
- private String msg_out(String message)
- {
- return message+"<br />";
- }
-
- private String exc_out(String message, Exception e)
- {
- if (message == null)
- {
- message = e.getClass().getName();
- message = message.substring(message.lastIndexOf('.')+1);
- }
- String local = e.getLocalizedMessage();
- local = local.substring(local.lastIndexOf(':')+1);
- return "<b style=\"color: red\">"+message+": "+local+"</b><br />";
- }
-
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException
- {
- ServletOutputStream out = response.getOutputStream();
- String log = "";
-
- response.setHeader("Cache-Control", "no-cache");
- response.setHeader("Pragma", "no-cache");
- response.setHeader("Expires", "0");
- System.out.println("UWOBO "+request.getPathInfo());
-
- try {
- final String cmd = request.getPathInfo();
- if (cmd == null) {
- sendError(response, out, "unknown command", help); return;
- }
- if (cmd.equals("/add")) {
- final String[] xslkey = request.getParameterValues("bind");
- if (xslkey == null) {
- sendError(response, out, "bad parameters", usage[1]); return;
- }
- html_open(response, out);
- for (int i = 0; i < xslkey.length; i++) {
- final String data[] = split2(xslkey[i], ",");
- out.println(msg_out("adding stylesheet "+data[0]+" ("+data[1]+")"));
- try {
- log = server.add(data[1], data[0]);
- if(!log.equals(""))
- out.println(msg_out(log));
- } catch (TransformerConfigurationException tce) {
- out.println(exc_out("Stylesheet Error", tce));
- } catch (Exception e) {
- out.println(exc_out(null, e));
- }
- }
- html_close(out); return;
- }
- if (cmd.equals("/apply")) {
- final String infile = request.getParameter("xmluri");
- final String keys = request.getParameter("keys");
-
- if (infile == null || keys == null) {
- sendError(response, out, "bad parameters", usage[6]); return;
- }
-
- final String[] keyName = split(keys, ",");
- final Key[] keySeq = new Key[keyName.length];
- for (int i = 0; i < keySeq.length; i++) {
- keySeq[i] = new Key();
- keySeq[i].name = keyName[i];
- keySeq[i].params = new HashMap();
- }
-
- final Properties props = new Properties();
- final Enumeration e = request.getParameterNames();
- while (e.hasMoreElements()) {
- String param = (String) e.nextElement();
- if (param.startsWith("param.")) {
- final String name = param.substring(6);
- final String value = request.getParameter(param);
- final String[] keyParam = split(name, ".");
- if (keyParam.length == 1) {
- // this is a global parameter
- Server.log("global parameter: " + keyParam[0] + " = " + value);
- for (int i = 0; i < keySeq.length; i++)
- // we add the global parameter only if there is no
- // local parameter with the same name
- if (!keySeq[i].params.containsKey(keyParam[0]))
- keySeq[i].params.put(keyParam[0], value);
- } else
- if (keyParam.length == 2) {
- // this is a local parameter
- Server.log("local parameter: " + keyParam[0] + "." + keyParam[1] + " = " + value);
- for (int i = 0; i < keySeq.length; i++) {
- if (keySeq[i].name.equals(keyParam[0]))
- keySeq[i].params.put(keyParam[1], value);
- }
- } else {
- sendError(response, out, "bad parameters", usage[6]); return;
- }
- } else
- if (param.startsWith("prop.")) {
- final String name = param.substring(5);
- final String value = request.getParameter(param);
- Server.log("property: " + name + " = " + value);
- props.setProperty(name, value);
- }
- }
-
- String contentType = props.getProperty(OutputKeys.MEDIA_TYPE);
- if (contentType == null && keySeq.length > 0)
- contentType = server.getContentType(keySeq[keySeq.length - 1].name);
- else if (contentType == null)
- contentType = "text/xml";
- response.setContentType(contentType);
- Server.log("content type: " + contentType);
-
- try {
- out = response.getOutputStream();
- server.apply(infile, out, keySeq, props);
- out.close();
- } catch (TransformerConfigurationException tce) {
- sendError(response, out, exc_out("stylesheet error", tce), "");
- } catch (Exception ee) {
- sendError(response, out, exc_out(null, ee), "");
- }
- return;
- }
- if (cmd.equals("/remove")) {
- final String key = request.getParameter("keys");
- final String [] data = split(key, ",");
- html_open(response, out);
- for (int i = 0; i < data.length; i++) {
- if (data[i] == null) {
- out.println(msg_out("removing all keys"));
- ArrayList res;
- res = server.removeAll();
- Iterator j = res.iterator();
- while (j.hasNext())
- out.println(msg_out((String)j.next()));
- } else {
- out.println(msg_out("removing key "+data[i]));
- out.println(msg_out(server.remove(data[i])));
- }
- }
- html_close(out); return;
- }
- if (cmd.equals("/list")) {
- html_open(response, out);
- out.println("<p>stylesheet list:</p><ul>");
-
- Iterator i = server.list().iterator();
- while (i.hasNext())
- out.println("<li>"+i.next()+"</li>");
- out.println("</ul>"); html_close(out); return;
- }
- if (cmd.equals("/reload")) {
- final String key = request.getParameter("keys");
- final String [] data = split(key, ",");
- html_open(response, out);
- for (int i = 0; i < data.length; i++) {
- try {
- if (data[i] == null) {
- out.println(msg_out("reloading all keys"));
- ArrayList res;
- res = server.reloadAll();
- Iterator j = res.iterator();
- while(j.hasNext())
- out.println(msg_out((String)j.next()));
- } else {
- out.println(msg_out("reloading key "+data[i]));
- out.println(msg_out(server.reload(data[i])));
- }
- } catch (TransformerConfigurationException tce) {
- out.println(exc_out("Stylesheet Error", tce));
- } catch (Exception e) {
- out.println(exc_out(null, e));
- }
- }
- html_close(out); return;
- }
- if (cmd.equals("/help")) {
- html_open(response, out);
- out.println("<h2>Version "+server.VERSION+"</h1>");
- out.println("<b>compiled "+server.DATE+" at "+server.TIME.substring(0,2)+":"+server.TIME.substring(2)+"</b>");
- if(Server.SERIALIZATION_DIR.equals("")) {
- out.println("<p><b>Stylesheet serialization is off.</b>");
- out.println("(To turn it on, choose a non-empty value for the " +
- "SERIALIZATION_DIR property.)</p>");
- } else
- out.println("<p><b>Serialized stylesheed are stored in "" +
- Server.SERIALIZATION_DIR + "".</b></p>");
- out.println("<p>usage:</p>"+help+"</body></html>");
- html_close(out); return;
- }
- sendError(response, out, "unknown command", help); return;
- } catch (Exception e) {
- sendError(response, out, exc_out(null, e),"");
- return;
- }
- }
-
- private void sendError(HttpServletResponse resp, ServletOutputStream out,
- String msg, String usage)
- throws IOException
- {
- html_open(resp, out);
- out.println("<p>"+msg+"</p>usage: "+usage);
- html_close(out);
- }
-
- public String getServletInfo()
- {
- return "The UWOBO servlet";
- }
-}