/* * JBoss, Home of Professional Open Source * Copyright 2009, Red Hat, Inc. and/or its affiliates, and individual * contributors by the @authors tag. See the copyright.txt in the * distribution for a full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.weld.interceptor.spi.model; import java.lang.annotation.Annotation; import java.lang.reflect.Member; import java.lang.reflect.Method; import java.util.List; import java.util.Set; import javax.interceptor.AroundConstruct; import org.jboss.weld.interceptor.reader.TargetClassInterceptorMetadata; import org.jboss.weld.interceptor.spi.metadata.InterceptorClassMetadata; /** * Describes the {@link org.jboss.weld.interceptor.spi.metadata.InterceptorClassMetadata}s that apply to a particular entity. * <p/> * Implementors must implement equals() and hashcode() consistently * * @author <a href="mailto:mariusb@redhat.com">Marius Bogoevici</a> */ public interface InterceptionModel { /** * Returns the interceptors applicable for the given interception type and method. For resolving {@link AroundConstruct} interceptors use {@link #getConstructorInvocationInterceptors(java.lang.reflect.Constructor)}. * * @param interceptionType * @param method - null if the interception type is lifecycle * @return list of interceptors * @throws IllegalArgumentException if interceptionType is business method or around timeout * but method is null, as well as if interceptionType is callback and method is not null */ List<InterceptorClassMetadata<?>> getInterceptors(InterceptionType interceptionType, Method method); /** * Returns {@link AroundConstruct} interceptors applicable for the given constructor. */ List<InterceptorClassMetadata<?>> getConstructorInvocationInterceptors(); /** * Returns all interceptor classes that are applicable to the given intercepted entity * * @return all interceptors */ Set<InterceptorClassMetadata<?>> getAllInterceptors(); /** * Indicates whether the given entity has associated {@link AroundConstruct} interceptors. */ boolean hasExternalConstructorInterceptors(); /** * Indicates whether the given entity has an associated interceptor of a kind other than {@link AroundConstruct} */ boolean hasExternalNonConstructorInterceptors(); /** * Indicates whether the given entity has target class interceptor methods. */ boolean hasTargetClassInterceptors(); /** * Returns the interceptor metadata for the component class of this component. * @return interceptor metadata for the component class */ TargetClassInterceptorMetadata getTargetClassInterceptorMetadata(); /** * * @return class-level interceptor bindings */ Set<Annotation> getClassInterceptorBindings(); /** * @param method * @return method/constructor interceptor bindings */ Set<Annotation> getMemberInterceptorBindings(Member member); }