Changeset 6005 for vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProvider.java
- Timestamp:
- 02/23/15 08:18:26 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProvider.java
r5154 r6005 38 38 import org.apache.wicket.model.IModel; 39 39 import org.apache.wicket.model.Model; 40 import org.apache.wicket.util.convert.IConverter; 40 41 import org.slf4j.Logger; 41 42 import org.slf4j.LoggerFactory; … … 49 50 */ 50 51 public class FacetFieldValuesProvider extends SortableDataProvider<FacetField.Count, FieldValuesOrder> implements ListProvider<FacetField.Count> { 51 52 52 53 private final static Logger logger = LoggerFactory.getLogger(FacetFieldValuesProvider.class); 53 54 private final IModel<FacetField> model; 54 55 private final int maxNumberOfItems; 55 56 private final Collection<String> lowPriorityValues; 57 private final FieldValueConverterProvider fieldValueConverterProvider; 56 58 57 59 /** … … 71 73 * @param lowPriorityValues values that should with low priority (e.g. 72 74 * unknown, unspecified) 73 */ 74 public FacetFieldValuesProvider(IModel<FacetField> model, Collection<String> lowPriorityValues) { 75 this(model, Integer.MAX_VALUE, lowPriorityValues); 75 * @param fieldValueConverterProvider 76 */ 77 public FacetFieldValuesProvider(IModel<FacetField> model, Collection<String> lowPriorityValues, FieldValueConverterProvider fieldValueConverterProvider) { 78 this(model, Integer.MAX_VALUE, lowPriorityValues, fieldValueConverterProvider); 76 79 } 77 80 … … 81 84 * @param max maximum number of values to show 82 85 * @param lowPriorityValues (e.g. unknown, unspecified) 83 */ 84 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues) { 85 this(model, max, lowPriorityValues, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false)); 86 } 87 88 public FacetFieldValuesProvider(IModel<FacetField> model, int max, SortParam<FieldValuesOrder> sort) { 89 this(model, max, null, sort); 86 * @param fieldValueConverterProvider 87 */ 88 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, FieldValueConverterProvider fieldValueConverterProvider) { 89 this(model, max, lowPriorityValues, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false), fieldValueConverterProvider); 90 } 91 92 public FacetFieldValuesProvider(IModel<FacetField> model, int max, SortParam<FieldValuesOrder> sort, FieldValueConverterProvider fieldValueConverterProvider) { 93 this(model, max, null, sort, fieldValueConverterProvider); 90 94 } 91 95 … … 97 101 * @param lowPriorityValues (e.g. unknown, unspecified) 98 102 * @param sort initial sort property and order 99 */ 100 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, SortParam<FieldValuesOrder> sort) { 103 * @param fieldValueConverterProvider 104 */ 105 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, SortParam<FieldValuesOrder> sort, FieldValueConverterProvider fieldValueConverterProvider) { 101 106 this.model = model; 102 107 this.maxNumberOfItems = max; 103 108 this.lowPriorityValues = lowPriorityValues; 109 this.fieldValueConverterProvider = fieldValueConverterProvider; 104 110 setSort(sort); 105 111 } … … 113 119 return null; 114 120 } 115 121 116 122 @Override 117 123 public Iterator<? extends FacetField.Count> iterator(long first, long count) { … … 119 125 return getList().listIterator((int) first); 120 126 } 121 127 122 128 @Override 123 129 public List<? extends FacetField.Count> getList() { … … 132 138 } 133 139 } 134 140 135 141 @Override 136 142 public long size() { … … 140 146 return size; 141 147 } 142 148 143 149 @Override 144 150 public IModel<FacetField.Count> model(FacetField.Count object) { … … 161 167 } 162 168 } 163 169 164 170 private Iterable<Count> getFilteredValues() { 165 171 if (filtered == null) { … … 170 176 return filtered; 171 177 } 172 178 173 179 private long getSize() { 174 180 if (hasFilter()) { … … 182 188 } 183 189 } 184 190 185 191 private boolean hasFilter() { 186 192 return getFilterModel() != null && getFilterModel().getObject() != null && !getFilterModel().getObject().isEmpty(); … … 200 206 } 201 207 } 202 208 203 209 private Ordering getBaseOrdering() { 204 210 final Ordering ordering; … … 206 212 ordering = new CountOrdering(); 207 213 } else if (getSort().getProperty() == FieldValuesOrder.NAME) { 208 ordering = new NameOrdering(getLocale() );214 ordering = new NameOrdering(getLocale(), fieldValueConverterProvider.getConverter(model.getObject().getName())); 209 215 } else { 210 216 ordering = Ordering.natural(); 211 217 } 212 218 213 219 if (getSort().isAscending()) { 214 220 return ordering; … … 217 223 } 218 224 } 219 225 220 226 protected Locale getLocale() { 221 227 try { … … 229 235 return Locale.getDefault(); 230 236 } 231 237 232 238 private final static class CountOrdering extends Ordering<FacetField.Count> { 233 239 234 240 @Override 235 241 public int compare(Count arg0, Count arg1) { … … 237 243 } 238 244 }; 239 245 240 246 private final static class NameOrdering extends Ordering<FacetField.Count> implements Serializable { 241 247 242 248 private final Collator collator; 243 244 public NameOrdering(Locale locale) { 249 private final IConverter<String> converter; 250 private final Locale locale; 251 252 public NameOrdering(Locale locale, IConverter<String> converter) { 245 253 collator = Collator.getInstance(locale); 246 254 collator.setStrength(Collator.PRIMARY); 247 } 248 255 this.converter = converter; 256 this.locale = locale; 257 } 258 249 259 @Override 250 260 public int compare(Count arg0, Count arg1) { 251 return collator.compare(arg0.getName(), arg1.getName()); 261 if (converter == null) { 262 return collator.compare(arg0.getName(), arg1.getName()); 263 } else { 264 return collator.compare( 265 converter.convertToString(arg0.getName(), locale), 266 converter.convertToString(arg1.getName(), locale)); 267 } 252 268 } 253 269 }; … … 258 274 */ 259 275 private static class PriorityOrdering extends Ordering<FacetField.Count> { 260 276 261 277 private final Collection<String> lowPriorityValues; 262 278 263 279 public PriorityOrdering(Collection<String> lowPriorityValues) { 264 280 this.lowPriorityValues = lowPriorityValues; 265 281 } 266 282 267 283 @Override 268 284 public int compare(Count arg0, Count arg1) { 269 285 270 286 if (lowPriorityValues.contains(arg0.getName())) { 271 287 if (!lowPriorityValues.contains(arg1.getName())) { … … 281 297 return 0; 282 298 } 283 299 284 300 }; 285 301 286 302 @Override 287 303 public void detach() {
Note: See TracChangeset
for help on using the changeset viewer.