Code with Misuse: |
class PathComparator { /* * Compare path of two elements in reverse order (inner to outer) * using a primary strength text collator. * This will collate e, E, �, � together, but not eliminate non-identical * strings which collate in the same place. * * @return equivalent of list1.compareTo(list2) */ private int comparePaths(Object o1, Object o2) {
List<String> path1 = Model.getModelManagementHelper().getPathList(o1); Collections.reverse(path1); List<String> path2 = Model.getModelManagementHelper().getPathList(o2); Collections.reverse(path2); Iterator<String> i2 = path2.iterator(); Iterator<String> i1 = path1.iterator(); int caseSensitiveComparison = 0; while (i2.hasNext()) { String name2 = i2.next(); if (!i1.hasNext()) { return -1; } String name1 = i1.next(); int comparison; if (name1 == null) { if (name2 == null) { comparison = 0; } else { comparison = -1; } } else if (name2 == null) { comparison = 1; } else { comparison = collator.compare(name1, name2); } if (comparison != 0) { return comparison; } // Keep track of first non-equal comparison to use in case the // case-insensitive comparisons all end up equal if (caseSensitiveComparison == 0) { if (name1 == null) { if (name2 == null) { caseSensitiveComparison = 0; } else { caseSensitiveComparison = -1; } } else if (name2 == null) { caseSensitiveComparison = 1; } else { caseSensitiveComparison = name1.compareTo(name2); } } } if (i2.hasNext()) { return 1; } // If the strings differed only in non-primary characteristics at // some point (case, accent, etc) pick an arbitrary, but stable, // collating order. if (caseSensitiveComparison != 0) { return caseSensitiveComparison; } // It's illegal in UML to have multiple elements in a namespace with // the same name, but if it happens, keep them distinct so the user // has a chance of catching the error. Pick an arbitrary, but stable, // collating order. // We don't call them equal because otherwise one will get eliminated // from the TreeSet where this comparator is used. return o1.toString().compareTo(o2.toString()); }
}
|