blob: 0169be586bfe199ac3f95599edc2900b0da53a35 [file] [log] [blame]
package org.apache.commons.proxy2.interceptor.matcher.argument;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.proxy2.interceptor.matcher.ArgumentMatcher;
public final class ArgumentMatcherUtils
{
//----------------------------------------------------------------------------------------------------------------------
// Static Methods
//----------------------------------------------------------------------------------------------------------------------
public static ArgumentMatcher any()
{
return new AnyMatcher();
}
public static ArgumentMatcher eq(final Object value)
{
return new EqualsMatcher(value);
}
public static ArgumentMatcher isA(final Class<?> type)
{
return new InstanceOfMatcher(type);
}
public static ArgumentMatcher isNull()
{
return new IsNullMatcher();
}
public static ArgumentMatcher notNull()
{
return new NotNullMatcher();
}
public static ArgumentMatcher same(final Object ref)
{
return new SameMatcher(ref);
}
//----------------------------------------------------------------------------------------------------------------------
// Constructors
//----------------------------------------------------------------------------------------------------------------------
private ArgumentMatcherUtils()
{
}
//----------------------------------------------------------------------------------------------------------------------
// Inner Classes
//----------------------------------------------------------------------------------------------------------------------
private static class AnyMatcher implements ArgumentMatcher
{
@Override
public boolean matches(Object argument)
{
return true;
}
}
private static class EqualsMatcher implements ArgumentMatcher
{
private final Object value;
public EqualsMatcher(Object value)
{
this.value = value;
}
@Override
public boolean matches(Object argument)
{
return ObjectUtils.equals(argument, value);
}
}
private static class InstanceOfMatcher implements ArgumentMatcher
{
private final Class<?> type;
public InstanceOfMatcher(Class<?> type)
{
this.type = type;
}
@Override
public boolean matches(Object argument)
{
return type.isInstance(argument);
}
}
private static class IsNullMatcher implements ArgumentMatcher
{
@Override
public boolean matches(Object argument)
{
return argument == null;
}
}
private static class NotNullMatcher implements ArgumentMatcher
{
@Override
public boolean matches(Object argument)
{
return argument != null;
}
}
private static class SameMatcher implements ArgumentMatcher
{
private final Object ref;
public SameMatcher(Object ref)
{
this.ref = ref;
}
@Override
public boolean matches(Object argument)
{
return argument == ref;
}
}
}