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