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 }