package org.objectstyle.wolips.jdt.classpath; import java.util.Comparator; import java.util.HashSet; import java.util.Set; import org.eclipse.core.runtime.IPath; import org.eclipse.jdt.core.IClasspathEntry; public class WOFrameworkClasspathComparator implements Comparator<IClasspathEntry> { private static Set<String> _wonderFrameworks; private static Set<String> _systemFrameworks; private IClasspathEntry[] _entries; static { _wonderFrameworks = new HashSet<String>(); _wonderFrameworks.add("Ajax"); _wonderFrameworks.add("AjaxLook"); _wonderFrameworks.add("BTBusinessLogic"); _wonderFrameworks.add("DRGrouping"); _wonderFrameworks.add("DerbyPlugIn"); _wonderFrameworks.add("ERAttachment"); _wonderFrameworks.add("ERCaching"); _wonderFrameworks.add("ERCalendar"); _wonderFrameworks.add("ERCaptcha"); _wonderFrameworks.add("ERChangeNotificationJMS"); _wonderFrameworks.add("ERChronic"); _wonderFrameworks.add("ERCoreBusinessLogic"); _wonderFrameworks.add("ERDirectToWeb"); _wonderFrameworks.add("ERExcelLook"); _wonderFrameworks.add("ERExtensions"); _wonderFrameworks.add("ERIMAdaptor"); _wonderFrameworks.add("ERIndexing"); _wonderFrameworks.add("ERJGroupsSynchronizer"); _wonderFrameworks.add("ERJars"); _wonderFrameworks.add("ERJavaMail"); _wonderFrameworks.add("ERMiniUglyLook"); _wonderFrameworks.add("ERNeutralLook"); _wonderFrameworks.add("EROpenID"); _wonderFrameworks.add("ERPlot"); _wonderFrameworks.add("ERPrototypes"); _wonderFrameworks.add("ERRest"); _wonderFrameworks.add("ERSelenium"); _wonderFrameworks.add("ERTaggable"); _wonderFrameworks.add("ERWorkerChannel"); _wonderFrameworks.add("ExcelGenerator"); _wonderFrameworks.add("FrontBasePlugIn"); _wonderFrameworks.add("JChronic"); _wonderFrameworks.add("JavaMemoryAdaptor"); _wonderFrameworks.add("JavaMonitorFramework"); _wonderFrameworks.add("JavaMonitorSupport"); _wonderFrameworks.add("JavaRESTAdaptor"); _wonderFrameworks.add("JavaWOExtensions"); _wonderFrameworks.add("PostgresqlPlugIn"); _wonderFrameworks.add("SVGObjects"); _wonderFrameworks.add("Validity"); _wonderFrameworks.add("TBLips"); _wonderFrameworks.add("WOOgnl"); _wonderFrameworks.add("WOPayPal"); _wonderFrameworks.add("WRReporting"); _wonderFrameworks.add("YUI"); _systemFrameworks = new HashSet<String>(); _systemFrameworks.add("JavaDTWGeneration"); _systemFrameworks.add("JavaDirectToWeb"); _systemFrameworks.add("JavaEOAccess"); _systemFrameworks.add("JavaEOApplication"); _systemFrameworks.add("JavaEOCocoa"); _systemFrameworks.add("JavaEOControl"); _systemFrameworks.add("JavaEODistribution"); _systemFrameworks.add("JavaEOGeneration"); _systemFrameworks.add("JavaEOInterface"); _systemFrameworks.add("JavaEOInterfaceCocoa"); _systemFrameworks.add("JavaEOInterfaceSwing"); _systemFrameworks.add("JavaEOProject"); _systemFrameworks.add("JavaEORuleSystem"); _systemFrameworks.add("JavaEOTool"); _systemFrameworks.add("JavaFoundation"); _systemFrameworks.add("JavaJDBCAdaptor"); _systemFrameworks.add("JavaJNDIAdaptor"); _systemFrameworks.add("JavaWOJSPServlet"); _systemFrameworks.add("JavaWebObjects"); _systemFrameworks.add("JavaWebServicesClient"); _systemFrameworks.add("JavaWebServicesGeneration"); _systemFrameworks.add("JavaWebServicesSupport"); _systemFrameworks.add("JavaXML"); } public WOFrameworkClasspathComparator(IClasspathEntry[] entries) { _entries = entries; } protected int originalPositionOf(IClasspathEntry entry) { int originalPosition = -1; for (originalPosition = 0; originalPosition < _entries.length; originalPosition++) { if (_entries[originalPosition] == entry) { break; } } return originalPosition; } protected int valueForFrameworkNamed(String frameworkName, IClasspathEntry entry) { int value; if (_systemFrameworks.contains(frameworkName)) { value = 2000; } else if ("ERExtensions".equals(frameworkName)) { value = 999; } else if (_wonderFrameworks.contains(frameworkName)) { value = 1000; } else { value = originalPositionOf(entry); } return value; } public int compare(IClasspathEntry o1, IClasspathEntry o2) { IPath p1 = o1.getPath(); String type1 = p1.segment(0); IPath p2 = o2.getPath(); String type2 = p2.segment(0); int value1; int value2; if ("org.eclipse.jdt.launching.JRE_CONTAINER".equals(type1)) { value1 = 1; value2 = -1; } else if ("org.eclipse.jdt.launching.JRE_CONTAINER".equals(type2)) { value1 = -1; value2 = 1; } else if (WOFrameworkClasspathContainer.ID.equals(type1) && WOFrameworkClasspathContainer.ID.equals(type2)) { String framework1 = p1.segment(1); String framework2 = p2.segment(1); value1 = valueForFrameworkNamed(framework1, o1); value2 = valueForFrameworkNamed(framework2, o2); } else if (WOFrameworkClasspathContainer.ID.equals(type1)) { value1 = 1; value2 = -1; } else if (WOFrameworkClasspathContainer.ID.equals(type2)) { value1 = -1; value2 = 1; } else { value1 = originalPositionOf(o1); value2 = originalPositionOf(o2); } int comparison; if (value1 < value2) { comparison = -1; } else if (value1 > value2) { comparison = 1; } else { comparison = 0; } return comparison; } }