package ch.uzh.ifi.attempto.acewiki;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import nextapp.echo.app.ApplicationInstance;
import nextapp.echo.webcontainer.WebContainerServlet;
import ch.uzh.ifi.attempto.base.Logger;
import ch.uzh.ifi.attempto.base.APE;
private static final long serialVersionUID = -7342857942059126499L;
private Logger logger;
private Backend backend;
private Map<String, String> parameters;
private String backendName;
}
public void init(ServletConfig config)
throws ServletException {
parameters = getInitParameters(config);
if (logger == null) {
logger = new Logger(parameters.get("context:logdir") + "/syst", "syst", 0);
}
backendName = config.getInitParameter("backend");
if (backendName != null) {
logger.log("appl", "use backend: " + backendName);
while (true) {
backend = (Backend) config.getServletContext().getAttribute(backendName);
if (backend != null) break;
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
break;
}
}
Map<String, String> p = parameters;
parameters = new HashMap<String,String>();
parameters.putAll(backend.getParameters());
parameters.putAll(p);
} else {
logger.log("appl", "create backend");
APE.setParameters(parameters);
backend = new Backend(parameters);
}
super.init(config);
}
logger.log("appl", "new application instance: " + parameters.get("ontology"));
return new AceWikiApp(backend, parameters);
}
protected void process(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String showpageParam = request.getParameter("showpage");
if ("".equals(showpageParam)) showpageParam = null;
String pageParam = request.getParameter("page");
if ("".equals(pageParam)) pageParam = null;
String serviceidParam = request.getParameter("sid");
if ("".equals(serviceidParam)) serviceidParam = null;
if (!request.getSession().isNew() && showpageParam != null) {
response.sendRedirect(
response.encodeRedirectURL("?sid=ExternalEvent&page=" + showpageParam)
);
}
if (showpageParam == null && pageParam != null && serviceidParam == null) {
response.sendRedirect(response.encodeRedirectURL("."));
}
try {
super.process(request, response);
} catch (RuntimeException ex) {
logger.log("fail", "fatal error: " + ex);
ex.printStackTrace();
throw ex;
} catch (IOException ex) {
logger.log("fail", "fatal error: " + ex);
ex.printStackTrace();
throw ex;
} catch (ServletException ex) {
logger.log("fail", "fatal error: " + ex);
ex.printStackTrace();
throw ex;
}
}
@SuppressWarnings("rawtypes")
Map<String, String> initParameters = new HashMap<String, String>();
Enumeration paramEnum = config.getInitParameterNames();
while (paramEnum.hasMoreElements()) {
String n = paramEnum.nextElement().toString();
initParameters.put(n, config.getInitParameter(n));
}
Enumeration contextParamEnum = config.getServletContext().getInitParameterNames();
while (contextParamEnum.hasMoreElements()) {
String n = contextParamEnum.nextElement().toString();
initParameters.put("context:" + n, config.getServletContext().getInitParameter(n));
}
if (initParameters.get("context:apecommand") == null) {
initParameters.put("context:apecommand", "ape.exe");
}
if (initParameters.get("context:logdir") == null) {
initParameters.put("context:logdir", "logs");
}
if (initParameters.get("context:datadir") == null) {
initParameters.put("context:datadir", "data");
}
return initParameters;
}
}