1 // 2 // ======================================================================== 3 // Copyright (c) 1995-2012 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 }