Ordering.java

package autumn.util.functors;

import autumn.lang.TypedFunctor;
import autumn.lang.exceptions.CheckedException;
import autumn.lang.internals.annotations.FunctorDefinition;
import com.google.common.collect.ImmutableList;
import java.util.Comparator;
import java.util.List;

/**
 *
 * @author mackenzie
 */
@FunctorDefinition
public class Ordering
        extends Function2
        implements Comparator<Object>
{
    /**
     * Sole Constructor.
     *
     * @param inner is the functor that provides the actual functionality.
     */
    public Ordering(final TypedFunctor inner)
    {
        super(inner);
    }

    /**
     * This method invokes the inner functor.
     *
     * @param arg1 is the 1st argument.
     * @param arg2 is the 2nd argument.
     */
    @Override
    public Integer invoke(final Object arg1,
                          final Object arg2)
            throws Throwable
    {
        return (Integer) super.invoke(arg1, arg2);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List<Class> parameterTypes()
    {
        return ImmutableList.<Class>of(Object.class, Object.class);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Class returnType()
    {
        return Integer.class;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public int compare(final Object arg1,
                       final Object arg2)
    {
        try
        {
            return invoke(arg1, arg2);
        }
        catch (Throwable ex)
        {
            throw new CheckedException(ex);
        }
    }
}