package plan.dom; import java.util.*; /** Compares Features by in-plan desirability. More highly desirable features are < less desirable ones in order that sort can sort them so that the most desired ones come out first. <p> The criteria are <ol> <li>higher priority <li>greater cumulative customer desirability <li>smaller sizing </ol> */ class ReverseFeaturePlanningOrder implements Comparator { /** Ensure only one instance. */ private ReverseFeaturePlanningOrder() { } /** Returns the unique instance of this comparator */ public static Comparator get() { return theInstance; } /** Compares two features to see which is least desirable to be in-plan. */ public int compare(Object o1, Object o2) { Feature f1 = (Feature)o1; Feature f2 = (Feature)o2; // Return values: // -1: f1 < f2 // 0: f1 == f2 // +1: f1 > f2 // priority first int c = f1.getPriority().compareTo(f2.getPriority()); if (c != 0) return -c; // then desirability c = new Double(f1.customerDesirability()).compareTo(new Double(f2.customerDesirability())); if( c!= 0 ) return -c; // finally sizing return new Double(f1.getSizing()).compareTo(new Double(f2.getSizing())); } /** Compares two features for equal in-plan desirability. */ public boolean equals(Object o1, Object o2) { return compare(o1,o2)==0; } private static Comparator theInstance = new ReverseFeaturePlanningOrder(); }