import java.util.*;

/**
 * A class that implements the java.util.Comparator interface to compare two transitions regarding their limits.
 * It compares the transitions regarding their pre-frame and then if needed their post-frame.
 *
 * @author NIST-ITL-IAD-Retrieval Group
 * This software was produced by NIST, an agency of the
 * U.S. government, and by statute is not subject to copyright in the
 * United States. Recipients of this software assume all
 * responsibilities associated with its operation, modification and
 * maintenance.
 *
 */

public class IntervalComparator implements Comparator{
    
	/**
     * The unique instance of this class.
     *
     * @see #getInstance()
     */
    private static IntervalComparator myInstance = null;
    /**
     * Private constructor.
     *
     */
    private IntervalComparator(){}
	/**
     * Returns the unique instance of this class.
     *
     */
    public static IntervalComparator getInstance(){
		if(myInstance == null)
	    	myInstance = new IntervalComparator();
		return myInstance;
    }    
	/**
     * Compares its two arguments for ordering them. Uses the pre-frame and if needed the post-frame to check the equality.
     *
     * @return    a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
     * @exception ClassCastException Thrown if one of the arguments is not a transition instance.
     */
	public int compare(Object o1, Object o2) throws ClassCastException{

		if((o1 instanceof Transition) && (o2 instanceof Transition)){

			Transition t1 = (Transition)o1;
			Transition t2 = (Transition)o2;
			if(t1.pre < t2.pre)
				return -1;
			else if(t1.pre == t2.pre){
				if(t1.post == t2.post)
					return 0;
				else if(t1.post < t2.post)
					return -1;
				else
					return 1;
			}
			else return 1;
		}
		else throw new ClassCastException("Instance Problem for IntervalComparator");
	}

}