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 }