/*
* This code is distributed under The GNU Lesser General Public License (LGPLv3)
* Please visit GNU site for LGPLv3 http://www.gnu.org/copyleft/lesser.html
*
* Copyright Denis Pavlov 2009
* Web: http://www.genericdtoassembler.org
* SVN: https://svn.code.sf.net/p/geda-genericdto/code/trunk/
* SVN (mirror): http://geda-genericdto.googlecode.com/svn/trunk/
*/
package com.inspiresoftware.lib.dto.geda.interceptor.impl;
import com.inspiresoftware.lib.dto.geda.annotations.Occurrence;
import com.inspiresoftware.lib.dto.geda.interceptor.AdviceConfig;
import com.inspiresoftware.lib.dto.geda.interceptor.AdviceConfigResolver;
import org.springframework.aop.ClassFilter;
import org.springframework.aop.MethodMatcher;
import org.springframework.aop.Pointcut;
import org.springframework.aop.support.DynamicMethodMatcher;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Method;
import java.util.Map;
/**
* Basic method matcher pointcut.
* <p/>
* User: denispavlov
* Date: Jan 26, 2012
* Time: 2:15:41 PM
*/
public class GeDAMethodMatcherPointcut extends DynamicMethodMatcher implements Pointcut {
private final AdviceConfigResolver resolver;
/**
* @param resolver resolver that will actually match the invocations
*/
public GeDAMethodMatcherPointcut(final AdviceConfigResolver resolver) {
this.resolver = resolver;
}
/** {@inheritDoc} */
public boolean matches(final Method method, final Class<?> targetClass, final Object[] args) {
final Map<Occurrence, AdviceConfig> cfg = this.resolver.resolve(method, targetClass);
return !CollectionUtils.isEmpty(cfg);
}
public ClassFilter getClassFilter() {
return ClassFilter.TRUE;
}
public MethodMatcher getMethodMatcher() {
return this;
}
}