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.servlet.FilterHolder;
28 import org.eclipse.jetty.servlet.ServletContextHandler.Decorator;
29 import org.eclipse.jetty.servlet.ServletHolder;
30 import org.eclipse.jetty.webapp.WebAppContext;
31
32 /**
33 * WebAppDecoratorWrapper
34 *
35 *
36 */
37 public class AnnotationDecorator implements Decorator
38 {
39 AnnotationIntrospector _introspector = new AnnotationIntrospector();
40
41 /**
42 * @param context
43 */
44 public AnnotationDecorator(WebAppContext context)
45 {
46 _introspector.registerHandler(new ResourceAnnotationHandler(context));
47 _introspector.registerHandler(new ResourcesAnnotationHandler(context));
48 _introspector.registerHandler(new RunAsAnnotationHandler(context));
49 _introspector.registerHandler(new PostConstructAnnotationHandler(context));
50 _introspector.registerHandler(new PreDestroyAnnotationHandler(context));
51 _introspector.registerHandler(new DeclareRolesAnnotationHandler(context));
52 _introspector.registerHandler(new MultiPartConfigAnnotationHandler(context));
53 _introspector.registerHandler(new ServletSecurityAnnotationHandler(context));
54 }
55
56 /* ------------------------------------------------------------ */
57 /**
58 * @param filter
59 * @throws ServletException
60 * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterHolder(org.eclipse.jetty.servlet.FilterHolder)
61 */
62 public void decorateFilterHolder(FilterHolder filter) throws ServletException
63 {
64 }
65
66 /* ------------------------------------------------------------ */
67 /**
68 * @param <T>
69 * @param filter
70 * @return the decorated filter
71 * @throws ServletException
72 * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterInstance(javax.servlet.Filter)
73 */
74 public <T extends Filter> T decorateFilterInstance(T filter) throws ServletException
75 {
76 introspect(filter);
77 return filter;
78 }
79
80 /* ------------------------------------------------------------ */
81 /**
82 * @param <T>
83 * @param listener
84 * @return the decorated event listener instance
85 * @throws ServletException
86 * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateListenerInstance(java.util.EventListener)
87 */
88 public <T extends EventListener> T decorateListenerInstance(T listener) throws ServletException
89 {
90 introspect(listener);
91 return listener;
92 }
93
94 /* ------------------------------------------------------------ */
95 /**
96 * @param servlet
97 * @throws ServletException
98 * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletHolder(org.eclipse.jetty.servlet.ServletHolder)
99 */
100 public void decorateServletHolder(ServletHolder servlet) throws ServletException
101 {
102 }
103
104 /* ------------------------------------------------------------ */
105 /**
106 * @param <T>
107 * @param servlet
108 * @return the decorated servlet instance
109 * @throws ServletException
110 * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletInstance(javax.servlet.Servlet)
111 */
112 public <T extends Servlet> T decorateServletInstance(T servlet) throws ServletException
113 {
114 introspect(servlet);
115 return servlet;
116 }
117
118 /* ------------------------------------------------------------ */
119 /**
120 * @param f
121 * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyFilterInstance(javax.servlet.Filter)
122 */
123 public void destroyFilterInstance(Filter f)
124 {
125 }
126
127 /* ------------------------------------------------------------ */
128 /**
129 * @param s
130 * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyServletInstance(javax.servlet.Servlet)
131 */
132 public void destroyServletInstance(Servlet s)
133 {
134 }
135
136
137
138
139
140 /* ------------------------------------------------------------ */
141 /**
142 * @param f
143 * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyListenerInstance(java.util.EventListener)
144 */
145 public void destroyListenerInstance(EventListener f)
146 {
147 }
148
149 /**
150 * Look for annotations that can be discovered with introspection:
151 * <ul>
152 * <li> Resource
153 * <li> Resources
154 * <li> PostConstruct
155 * <li> PreDestroy
156 * <li> ServletSecurity?
157 * </ul>
158 * @param o
159 */
160 protected void introspect (Object o)
161 {
162 _introspector.introspect(o.getClass());
163 }
164 }