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