1 40 package org.dspace.content; 41 42 import java.util.Collections ; 43 import java.util.Comparator ; 44 import java.util.HashMap ; 45 import java.util.Map ; 46 import java.util.Set ; 47 48 import org.dspace.browse.Browse; 49 50 61 public class ItemComparator implements Comparator 62 { 63 64 private String element; 65 66 67 private String qualifier; 68 69 70 private String language; 71 72 73 private boolean max; 74 75 89 public ItemComparator(String element, String qualifier, String language, 90 boolean max) 91 { 92 this.element = element; 93 this.qualifier = qualifier; 94 this.language = language; 95 this.max = max; 96 } 97 98 118 public int compare(Object first, Object second) 119 { 120 if ((!(first instanceof Item)) || (!(second instanceof Item))) 121 { 122 throw new IllegalArgumentException ("Arguments must be Items"); 123 } 124 125 String firstValue = getValue((Item) first); 127 String secondValue = getValue((Item) second); 128 129 if ((firstValue == null) && (secondValue == null)) 130 { 131 return 0; 132 } 133 134 if ((firstValue != null) && (secondValue == null)) 135 { 136 return 1; 137 } 138 139 if ((firstValue == null) && (secondValue != null)) 140 { 141 return -1; 142 } 143 144 return firstValue.compareTo(secondValue); 147 } 148 149 158 public boolean equals(Object obj) 159 { 160 if (!(obj instanceof ItemComparator)) 161 { 162 return false; 163 } 164 165 ItemComparator other = (ItemComparator) obj; 166 167 return _equals(element, other.element) 168 && _equals(qualifier, other.qualifier) 169 && _equals(language, other.language) && (max == other.max); 170 } 171 172 176 private boolean _equals(String first, String second) 177 { 178 if ((first == null) && (second == null)) 179 { 180 return true; 181 } 182 183 if ((first != null) && (second == null)) 184 { 185 return false; 186 } 187 188 if ((first == null) && (second != null)) 189 { 190 return false; 191 } 192 193 return first.equals(second); 194 } 195 196 206 private String getValue(Item item) 207 { 208 DCValue[] dcvalues = item.getDC(element, qualifier, language); 210 211 if (dcvalues.length == 0) 212 { 213 return null; 214 } 215 216 if (dcvalues.length == 1) 217 { 218 return normalizeTitle(dcvalues[0]); 219 } 220 221 Map values = new HashMap (); 224 225 for (int i = 0; i < dcvalues.length; i++) 226 { 227 String value = dcvalues[i].value; 228 229 if (value != null) 230 { 231 values.put(value, new Integer (i)); 232 } 233 } 234 235 if (values.size() == 0) 236 { 237 return null; 238 } 239 240 Set valueSet = values.keySet(); 241 String chosen = max ? (String ) Collections.max(valueSet) 242 : (String ) Collections.min(valueSet); 243 244 int index = ((Integer ) values.get(chosen)).intValue(); 245 246 return normalizeTitle(dcvalues[index]); 247 } 248 249 252 private String normalizeTitle(DCValue value) 253 { 254 if (!"title".equals(element)) 255 { 256 return value.value; 257 } 258 259 return Browse.getNormalizedTitle(value.value, value.language); 260 } 261 } 262 | Popular Tags |