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