View Javadoc

1   // ========================================================================
2   // Copyright (c) 2006-2009 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // ========================================================================
13  
14  package org.eclipse.jetty.annotations;
15  
16  import java.util.EventListener;
17  
18  import javax.servlet.Filter;
19  import javax.servlet.Servlet;
20  import javax.servlet.ServletException;
21  
22  import org.eclipse.jetty.server.handler.ContextHandler;
23  import org.eclipse.jetty.servlet.FilterHolder;
24  import org.eclipse.jetty.servlet.ServletHolder;
25  import org.eclipse.jetty.servlet.ServletContextHandler.Decorator;
26  import org.eclipse.jetty.webapp.WebAppContext;
27  
28  /**
29   * WebAppDecoratorWrapper
30   *
31   *
32   */
33  public class AnnotationDecorator implements Decorator
34  {
35      AnnotationIntrospector _introspector = new AnnotationIntrospector();
36      
37      /**
38       * @param context
39       */
40      public AnnotationDecorator(WebAppContext context)
41      {
42          _introspector.registerHandler(new ResourceAnnotationHandler(context));
43          _introspector.registerHandler(new ResourcesAnnotationHandler(context));
44          _introspector.registerHandler(new RunAsAnnotationHandler(context));
45          _introspector.registerHandler(new PostConstructAnnotationHandler(context));
46          _introspector.registerHandler(new PreDestroyAnnotationHandler(context));
47          _introspector.registerHandler(new DeclareRolesAnnotationHandler(context));
48          _introspector.registerHandler(new MultiPartConfigAnnotationHandler(context));
49          _introspector.registerHandler(new ServletSecurityAnnotationHandler(context));
50      }
51  
52      /* ------------------------------------------------------------ */
53      /**
54       * @param filter
55       * @throws ServletException
56       * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterHolder(org.eclipse.jetty.servlet.FilterHolder)
57       */
58      public void decorateFilterHolder(FilterHolder filter) throws ServletException
59      {
60      }
61      
62      /* ------------------------------------------------------------ */
63      /**
64       * @param <T>
65       * @param filter
66       * @return the decorated filter
67       * @throws ServletException
68       * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterInstance(javax.servlet.Filter)
69       */
70      public <T extends Filter> T decorateFilterInstance(T filter) throws ServletException
71      {
72          introspect(filter);
73          return filter;
74      }
75      
76      /* ------------------------------------------------------------ */
77      /**
78       * @param <T>
79       * @param listener
80       * @return the decorated event listener instance
81       * @throws ServletException
82       * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateListenerInstance(java.util.EventListener)
83       */
84      public <T extends EventListener> T decorateListenerInstance(T listener) throws ServletException
85      {
86          introspect(listener);
87          return listener;
88      }
89  
90      /* ------------------------------------------------------------ */
91      /**
92       * @param servlet
93       * @throws ServletException
94       * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletHolder(org.eclipse.jetty.servlet.ServletHolder)
95       */
96      public void decorateServletHolder(ServletHolder servlet) throws ServletException
97      {
98      }
99  
100     /* ------------------------------------------------------------ */
101     /**
102      * @param <T>
103      * @param servlet
104      * @return the decorated servlet instance
105      * @throws ServletException
106      * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletInstance(javax.servlet.Servlet)
107      */
108     public <T extends Servlet> T decorateServletInstance(T servlet) throws ServletException
109     {
110         introspect(servlet);
111         return servlet;
112     }
113 
114     /* ------------------------------------------------------------ */
115     /**
116      * @param f
117      * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyFilterInstance(javax.servlet.Filter)
118      */
119     public void destroyFilterInstance(Filter f)
120     {
121     }
122 
123     /* ------------------------------------------------------------ */
124     /**
125      * @param s
126      * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyServletInstance(javax.servlet.Servlet)
127      */
128     public void destroyServletInstance(Servlet s)
129     {
130     }
131 
132     
133     
134 
135   
136     /* ------------------------------------------------------------ */
137     /**
138      * @param f
139      * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyListenerInstance(java.util.EventListener)
140      */
141     public void destroyListenerInstance(EventListener f)
142     {
143     }
144 
145     /**
146      * Look for annotations that can be discovered with introspection:
147      * <ul>
148      * <li> Resource
149      * <li> Resources
150      * <li> PostConstruct
151      * <li> PreDestroy
152      * <li> ServletSecurity?
153      * </ul>
154      * @param o
155      */
156     protected void introspect (Object o)
157     {
158         _introspector.introspect(o.getClass());
159     }
160 }