001: /*****************************************************************************
002: * Copyright (C) NanoContainer Organization. All rights reserved. *
003: * ------------------------------------------------------------------------- *
004: * The software in this package is published under the terms of the BSD *
005: * style license a copy of which has been included with this distribution in *
006: * the LICENSE.txt file. *
007: * *
008: *****************************************************************************/package org.nanocontainer.webcontainer;
009:
010: import java.util.EventListener;
011: import java.util.HashMap;
012: import java.util.Map;
013:
014: import javax.servlet.Filter;
015: import javax.servlet.Servlet;
016:
017: import org.mortbay.jetty.handler.ErrorHandler;
018: import org.mortbay.jetty.servlet.Context;
019: import org.mortbay.jetty.servlet.DefaultServlet;
020: import org.mortbay.jetty.servlet.ErrorPageErrorHandler;
021: import org.mortbay.jetty.servlet.FilterHolder;
022: import org.mortbay.jetty.servlet.ServletHolder;
023: import org.picocontainer.PicoContainer;
024: import org.picocontainer.defaults.DefaultPicoContainer;
025:
026: public class PicoContext {
027:
028: private final Context context;
029: private final PicoContainer parentContainer;
030: private final boolean withSessionHandler;
031:
032: public static final int DEFAULT = 0;
033: public static final int REQUEST = 1;
034: public static final int FORWARD = 2;
035: public static final int INCLUDE = 4;
036: public static final int ERROR = 8;
037: public static final int ALL = 15;
038:
039: public PicoContext(Context context, PicoContainer parentContainer,
040: boolean withSessionHandler) {
041: this .context = context;
042: this .parentContainer = parentContainer;
043: this .withSessionHandler = withSessionHandler;
044: }
045:
046: public PicoServletHolder addServletWithMapping(Class servletClass,
047: String pathMapping) {
048: PicoServletHolder holder = new PicoServletHolder(servletClass,
049: parentContainer);
050: context.addServlet(holder, pathMapping);
051: return holder;
052: }
053:
054: public Servlet addServletWithMapping(Servlet servlet,
055: String pathMapping) {
056: ServletHolder holder = new ServletHolder(servlet);
057: context.addServlet(holder, pathMapping);
058: return servlet;
059: }
060:
061: public PicoFilterHolder addFilterWithMapping(Class filterClass,
062: String pathMapping, int dispatchers) {
063: PicoFilterHolder filterHolder = new PicoFilterHolder(
064: filterClass, parentContainer);
065: context.addFilter(filterHolder, pathMapping, 0);
066: return filterHolder;
067: }
068:
069: public Filter addFilterWithMapping(Filter filter,
070: String pathMapping, int dispatchers) {
071: context.addFilter(new FilterHolder(filter), pathMapping,
072: dispatchers);
073: return filter;
074: }
075:
076: public void addInitParam(String param, String value) {
077: Map params = new HashMap(context.getInitParams());
078: params.put(param, value);
079: context.setInitParams(params);
080: }
081:
082: public EventListener addListener(Class listenerClass) {
083: DefaultPicoContainer child = new DefaultPicoContainer(
084: parentContainer);
085: child.registerComponentImplementation(EventListener.class,
086: listenerClass);
087: EventListener instance = (EventListener) child
088: .getComponentInstance(EventListener.class);
089: return addListener(instance);
090: }
091:
092: public EventListener addListener(EventListener listener) {
093: context.addEventListener(listener);
094: return listener;
095: }
096:
097: public void setStaticContext(String absolutePath) {
098: context.addServlet(DefaultServlet.class.getName(), "/");
099: context.setResourceBase(absolutePath);
100: }
101:
102: public void setStaticContext(String absolutePath, String welcomePage) {
103: context.addServlet(DefaultServlet.class.getName(), "/");
104: context.setResourceBase(absolutePath);
105: context.setWelcomeFiles(new String[] { welcomePage });
106: }
107:
108: public void setDefaultHandling(final String absolutePath,
109: String scratchDir, String pageSuffix) {
110: context.setResourceBase(absolutePath);
111: ServletHolder jspHolder = new PicoServletHolder(parentContainer);
112: jspHolder.setName("jsp");
113: jspHolder.setClassName("org.apache.jasper.servlet.JspServlet");
114: jspHolder.setInitParameter("scratchdir", scratchDir);
115: jspHolder.setInitParameter("logVerbosityLevel", "DEBUG");
116: jspHolder.setInitParameter("fork", "false");
117: jspHolder.setInitParameter("xpoweredBy", "false");
118: jspHolder.setForcedPath(null);
119: jspHolder.setInitOrder(0);
120:
121: context.addServlet(jspHolder, "*.jsp");
122: context.addServlet(DefaultServlet.class.getName(), "/");
123:
124: }
125:
126: public void addErrorHandler() {
127: addErrorHandler(new ErrorPageErrorHandler());
128: }
129:
130: public void addErrorHandler(ErrorHandler handler) {
131: context.setErrorHandler(handler);
132: }
133:
134: }
|