package org.oddjob.webapp.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.oddjob.Oddjob;
import org.oddjob.OddjobLookup;
import org.oddjob.arooa.standard.StandardArooaSession;
import org.oddjob.monitor.context.ExplorerContext;
import org.oddjob.monitor.model.ExplorerContextImpl;
import org.oddjob.monitor.model.ExplorerModelImpl;
import org.oddjob.util.SimpleThreadManager;
import org.oddjob.util.ThreadManager;
import org.oddjob.webapp.WebappConstants;
import org.oddjob.webapp.model.IconRegistry;
import org.oddjob.webapp.model.JobInfoLookup;
/**
* This servlet creates a JobInfoLookup on an Oddjob instance which tracks
* changes in the Oddjob so that the detail is available for presentation.
*
* @author Rob Gordon.
*/
public class LookupServlet extends HttpServlet {
private static final long serialVersionUID = 20051103;
private static final Logger logger = Logger.getLogger(LookupServlet.class);
/** The lookup this instance creates. */
private JobInfoLookup lookup;
private ThreadManager threadManager;
/*
* (non-Javadoc)
* @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
ServletContext context = config.getServletContext();
Oddjob oddjob = (Oddjob) context.getAttribute(
WebappConstants.ODDJOB_INSTANCE);
if (oddjob == null) {
throw new ServletException("No Oddjob Instance - ensure Oddjob Servlet starts first!");
}
String logFormat = context.getInitParameter(
WebappConstants.LOG_FORMAT_PARAM);
if (logFormat== null) {
logFormat= config.getInitParameter(
WebappConstants.LOG_FORMAT_PARAM);
}
String root = context.getInitParameter(
WebappConstants.ROOT_PARAM);
if (root == null) {
root = config.getInitParameter(WebappConstants.ROOT_PARAM);
}
threadManager = new SimpleThreadManager();
ExplorerModelImpl explorerModel = new ExplorerModelImpl(
new StandardArooaSession());
explorerModel.setLogFormat(logFormat);
explorerModel.setThreadManager(threadManager);
explorerModel.setOddjob(oddjob);
ExplorerContext eContext = new ExplorerContextImpl(explorerModel);
Object rootNode = oddjob;
if (root != null) {
while (true) {
OddjobLookup lookup = new OddjobLookup(oddjob);
rootNode = lookup.lookup(root);
if (rootNode != null) {
break;
}
logger.debug("Waiting for oddjob to create [" + root + "]");
synchronized (this) {
try {
wait(1000);
} catch (InterruptedException e) {
return;
}
}
}
eContext = eContext.addChild(rootNode);
}
lookup = new JobInfoLookup((IconRegistry)
context.getAttribute(WebappConstants.ICON_REGISTRY));
lookup.setRoot(rootNode, eContext);
context.setAttribute(WebappConstants.DETAIL_LOOKUP, lookup);
}
/*
* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
out.println("Lookup");
}
/*
* (non-Javadoc)
* @see javax.servlet.Servlet#destroy()
*/
public void destroy() {
threadManager.close();
lookup.destroy();
}
}