1 package org.jahia.content.comparators; 2 3 import java.util.Comparator ; 4 import org.jahia.content.JahiaObject; 5 import java.util.Map ; 6 import java.util.HashMap ; 7 8 24 25 public class ObjectTypeDispatcherComparator implements Comparator { 26 27 private static org.apache.log4j.Logger logger = 28 org.apache.log4j.Logger.getLogger(ObjectTypeDispatcherComparator.class); 29 30 private Map typeComparators = new HashMap (); 31 32 public ObjectTypeDispatcherComparator() { 33 } 34 35 public void addTypeComparator(String typeName, Comparator typeComparator) { 36 typeComparators.put(typeName, typeComparator); 37 } 38 39 public int compare(Object o1, Object o2) { 40 if ( (o1 instanceof JahiaObject) && (o2 instanceof JahiaObject)) { 41 JahiaObject leftJahiaObject = (JahiaObject) o1; 42 JahiaObject rightJahiaObject = (JahiaObject) o2; 43 if (!leftJahiaObject.getObjectKey().getType().equals(rightJahiaObject.getObjectKey().getType())) { 44 return leftJahiaObject.getObjectKey().compareTo(rightJahiaObject.getObjectKey()); 45 } 46 Comparator typeComparator = (Comparator ) typeComparators.get(leftJahiaObject.getObjectKey().getType()); 49 return typeComparator.compare(o1, o2); 50 } else { 51 if ((o1 instanceof Comparable ) && (o2 instanceof Comparable )) { 54 Comparable leftComparable = (Comparable ) o1; 55 Comparable rightComparable = (Comparable ) o2; 56 return leftComparable.compareTo(rightComparable); 57 } else { 58 return o1.toString().compareTo(o2.toString()); 59 } 60 } 61 } 62 63 public boolean equals(Object obj) { 64 if (obj instanceof ObjectTypeDispatcherComparator) { 65 ObjectTypeDispatcherComparator otherComparator = ( 66 ObjectTypeDispatcherComparator) obj; 67 return otherComparator.typeComparators.equals(typeComparators); 68 } else { 69 return false; 70 } 71 } 72 73 } | Popular Tags |