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 }