1 10 11 package org.mmbase.util; 12 13 import java.util.*; 14 import org.mmbase.module.core.*; 15 16 25 public class NodeComparator implements Comparator { 26 27 public final static String UP = "UP"; 28 public final static String DOWN = "DOWN"; 29 30 33 private Vector fields; 34 37 private Vector sortDirs; 38 39 43 public NodeComparator(Vector fields) { 44 this.fields = fields; 45 sortDirs = new Vector(fields.size()); 46 } 47 48 53 public NodeComparator(Vector fields, Vector sortDirs) { 54 this.fields = fields; 55 this.sortDirs = sortDirs; 56 for (int i = sortDirs.size(); i < fields.size(); i++) { 57 sortDirs.add(UP); 58 } 59 } 60 61 76 public int compare(Object o1, Object o2) { 77 Object f1, f2; 78 int result=0; 79 int fieldnr = 0; 80 String field; 81 while ((result == 0) && (fieldnr < fields.size())) { 82 field =(String )fields.elementAt(fieldnr); 83 f1 = ((MMObjectNode)o1).getValue(field); 84 f2 = ((MMObjectNode)o2).getValue(field); 85 if (f1 instanceof Comparable ) { 86 try { 87 result=((Comparable )f1).compareTo(f2); 88 } catch (ClassCastException e) { 89 } 96 } else if (!f1.equals(f2)) { 97 if (f1 instanceof Boolean ) { 98 result=((Boolean )f1).booleanValue() ? 1 : -1; 99 } 100 } 101 fieldnr++; 102 } 103 if ((fieldnr>0) && 104 (fieldnr<=sortDirs.size()) && 105 ((String )sortDirs.elementAt(fieldnr-1)).equals(DOWN)) { 106 result=-result; 107 } 108 return result; 109 } 110 111 118 public boolean equals(Object obj) { 119 if (obj instanceof NodeComparator) { 120 return (obj.hashCode()==hashCode()); 121 } else { 122 throw new ClassCastException (); 123 } 124 } 125 126 129 public int hashCode() { 130 return fields.hashCode()^sortDirs.hashCode(); 131 } 132 } 133 | Popular Tags |