1 16 17 package org.springframework.util.comparator; 18 19 import java.io.Serializable ; 20 import java.util.ArrayList ; 21 import java.util.Comparator ; 22 import java.util.Iterator ; 23 import java.util.List ; 24 25 import org.springframework.util.Assert; 26 27 41 public class CompoundComparator implements Comparator , Serializable { 42 43 private final List comparators; 44 45 46 51 public CompoundComparator() { 52 this.comparators = new ArrayList (); 53 } 54 55 62 public CompoundComparator(Comparator [] comparators) { 63 this.comparators = new ArrayList (comparators.length); 64 for (int i = 0; i < comparators.length; i++) { 65 addComparator(comparators[i]); 66 } 67 } 68 69 70 77 public void addComparator(Comparator comparator) { 78 if (comparator instanceof InvertibleComparator) { 79 this.comparators.add(comparator); 80 } 81 else { 82 this.comparators.add(new InvertibleComparator(comparator)); 83 } 84 } 85 86 91 public void addComparator(Comparator comparator, boolean ascending) { 92 this.comparators.add(new InvertibleComparator(comparator, ascending)); 93 } 94 95 103 public void setComparator(int index, Comparator comparator) { 104 if (comparator instanceof InvertibleComparator) { 105 this.comparators.set(index, comparator); 106 } 107 else { 108 InvertibleComparator invComp = new InvertibleComparator(comparator); 109 this.comparators.set(index, invComp); 110 } 111 } 112 113 119 public void setComparator(int index, Comparator comparator, boolean ascending) { 120 InvertibleComparator invComp = new InvertibleComparator(comparator, ascending); 121 this.comparators.set(index, invComp); 122 } 123 124 128 public void invertOrder() { 129 Iterator it = this.comparators.iterator(); 130 while (it.hasNext()) { 131 ((InvertibleComparator) it.next()).invertOrder(); 132 } 133 } 134 135 139 public void invertOrder(int index) { 140 getInvertibleComparator(index).invertOrder(); 141 } 142 143 147 public void setAscendingOrder(int index) { 148 getInvertibleComparator(index).setAscending(true); 149 } 150 151 155 public void setDescendingOrder(int index) { 156 getInvertibleComparator(index).setAscending(false); 157 } 158 159 162 private InvertibleComparator getInvertibleComparator(int index) { 163 return (InvertibleComparator) this.comparators.get(index); 164 } 165 166 169 public int getComparatorCount() { 170 return comparators.size(); 171 } 172 173 174 public int compare(Object o1, Object o2) { 175 Assert.state(this.comparators.size() > 0, 176 "No sort definitions have been added to this CompoundComparator to compare"); 177 for (Iterator it = this.comparators.iterator(); it.hasNext();) { 178 InvertibleComparator def = (InvertibleComparator) it.next(); 179 int result = def.compare(o1, o2); 180 if (result != 0) { 181 return result; 182 } 183 } 184 return 0; 185 } 186 187 public boolean equals(Object obj) { 188 if (this == obj) { 189 return true; 190 } 191 if (!(obj instanceof CompoundComparator)) { 192 return false; 193 } 194 CompoundComparator other = (CompoundComparator) obj; 195 return this.comparators.equals(other.comparators); 196 } 197 198 public int hashCode() { 199 return this.comparators.hashCode(); 200 } 201 202 public String toString() { 203 return "CompoundComparator: " + this.comparators; 204 } 205 206 } 207 | Popular Tags |