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