1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.commons.proxy.interceptor; 19 20 import org.apache.commons.proxy.Invocation; 21 import org.apache.commons.proxy.Interceptor; 22 23 /** 24 * Decorates another <code>MethodInterceptor</code> by only calling it if the method is accepted by the supplied 25 * <code>MethodFilter</code>. 26 * 27 * @author James Carman 28 * @since 1.0 29 */ 30 public class FilteredInterceptor implements Interceptor 31 { 32 //---------------------------------------------------------------------------------------------------------------------- 33 // Fields 34 //---------------------------------------------------------------------------------------------------------------------- 35 36 private final Interceptor inner; 37 private final MethodFilter filter; 38 39 //---------------------------------------------------------------------------------------------------------------------- 40 // Constructors 41 //---------------------------------------------------------------------------------------------------------------------- 42 43 public FilteredInterceptor( Interceptor inner, MethodFilter filter ) 44 { 45 this.inner = inner; 46 this.filter = filter; 47 } 48 49 //---------------------------------------------------------------------------------------------------------------------- 50 // MethodInterceptor Implementation 51 //---------------------------------------------------------------------------------------------------------------------- 52 53 public Object intercept( Invocation invocation ) throws Throwable 54 { 55 if( filter.accepts( invocation.getMethod() ) ) 56 { 57 return inner.intercept( invocation ); 58 } 59 else 60 { 61 return invocation.proceed(); 62 } 63 } 64 } 65