Changeset 6005
- Timestamp:
- 02/23/15 08:18:26 (9 years ago)
- Location:
- vlo/trunk/vlo-web-app/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/AllFacetValuesPanel.java
r6002 r6005 27 27 import eu.clarin.cmdi.vlo.wicket.model.BridgeOuterModel; 28 28 import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldValuesProvider; 29 import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider; 29 30 import java.util.Collections; 30 31 import org.apache.solr.client.solrj.response.FacetField; … … 49 50 import org.apache.wicket.model.Model; 50 51 import org.apache.wicket.model.PropertyModel; 52 import org.apache.wicket.spring.injection.annot.SpringBean; 51 53 52 54 /** … … 59 61 */ 60 62 public abstract class AllFacetValuesPanel extends GenericPanel<FacetField> { 63 64 @SpringBean 65 private FieldValueConverterProvider fieldValueConverterProvider; 61 66 62 67 private final FacetFieldValuesProvider valuesProvider; … … 89 94 90 95 // create a provider that shows all values and is sorted by name by default 91 valuesProvider = new FacetFieldValuesProvider(model, Integer.MAX_VALUE, FieldValueOrderSelector.NAME_SORT ) {96 valuesProvider = new FacetFieldValuesProvider(model, Integer.MAX_VALUE, FieldValueOrderSelector.NAME_SORT, fieldValueConverterProvider) { 92 97 93 98 @Override … … 226 231 } 227 232 228 229 233 private class UpdateOptionsFormBehavior extends OnChangeAjaxBehavior { 230 234 -
vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetValuesPanel.java
r6002 r6005 28 28 import eu.clarin.cmdi.vlo.wicket.pages.AllFacetValuesPage; 29 29 import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldValuesProvider; 30 import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider; 30 31 import java.util.Collection; 31 32 import java.util.Collections; … … 54 55 import org.apache.wicket.model.PropertyModel; 55 56 import org.apache.wicket.request.cycle.RequestCycle; 57 import org.apache.wicket.spring.injection.annot.SpringBean; 56 58 57 59 /** … … 72 74 private final IModel<String> fieldNameModel; 73 75 76 @SpringBean 77 private FieldValueConverterProvider fieldValueConverterProvider; 74 78 /** 75 79 * Creates a new panel with selectable values for a single facet … … 150 154 */ 151 155 private DataView createValuesView(String id) { 152 final FacetFieldValuesProvider valuesProvider = new FacetFieldValuesProvider(getModel(), MAX_NUMBER_OF_FACETS_TO_SHOW, LOW_PRIORITY_VALUES ){156 final FacetFieldValuesProvider valuesProvider = new FacetFieldValuesProvider(getModel(), MAX_NUMBER_OF_FACETS_TO_SHOW, LOW_PRIORITY_VALUES, fieldValueConverterProvider){ 153 157 154 158 @Override -
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() { -
vlo/trunk/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProviderTest.java
r5129 r6005 23 23 import java.util.Iterator; 24 24 import java.util.Locale; 25 import java.util.Locale;26 25 import org.apache.solr.client.solrj.response.FacetField; 27 26 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; 28 27 import org.apache.wicket.model.IModel; 29 28 import org.apache.wicket.model.Model; 29 import org.apache.wicket.util.convert.ConversionException; 30 import org.apache.wicket.util.convert.converter.AbstractConverter; 31 import org.jmock.Expectations; 32 import org.jmock.Mockery; 33 import org.jmock.integration.junit4.JUnit4Mockery; 34 import org.junit.Assert; 30 35 import static org.junit.Assert.*; 31 36 import org.junit.Before; … … 40 45 public final static Collection<String> LOW_PRIORITY_VALUES = ImmutableSet.of("Xlow priority"); 41 46 47 private final Mockery context = new JUnit4Mockery(); 42 48 private FacetField facetField; 49 private FieldValueConverterProvider valueConverterProvider; 43 50 44 51 @Before … … 50 57 facetField.add("third value", 103); 51 58 facetField.add("FOURTH value", 104); //intentional upper case, sort and filter should be case insensitive 59 60 valueConverterProvider = context.mock(FieldValueConverterProvider.class); 61 context.checking(new Expectations() { 62 { 63 allowing(valueConverterProvider).getConverter(with(any(String.class))); 64 will(returnValue(new AbstractConverter<String>() { 65 66 @Override 67 protected Class<String> getTargetType() { 68 return String.class; 69 } 70 71 @Override 72 public String convertToObject(String value, Locale locale) throws ConversionException { 73 Assert.fail("convertToObject should not get called on the Field Value converter"); 74 return null; 75 } 76 })); 77 } 78 }); 52 79 } 53 80 … … 57 84 @Test 58 85 public void testIteratorCountOrder() { 59 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, true) );86 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, true), valueConverterProvider); 60 87 61 88 long first = 0; … … 93 120 @Test 94 121 public void testIteratorCountOrderDescending() { 95 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false) );122 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false), valueConverterProvider); 96 123 97 124 long first = 0; … … 129 156 @Test 130 157 public void testIteratorCountOrderDefaultPriority() { 131 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false) );158 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false), valueConverterProvider); 132 159 133 160 long first = 0; … … 164 191 @Test 165 192 public void testIteratorNameOrderDescending() { 166 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false) );193 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false), valueConverterProvider); 167 194 168 195 final long first = 0; … … 206 233 facetField.add("één nederlandse waarde", 1); 207 234 208 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, true) ) {235 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, true), valueConverterProvider) { 209 236 210 237 @Override … … 246 273 @Test 247 274 public void testIteratorOffset() { 248 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, true) );275 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, true), valueConverterProvider); 249 276 250 277 final long first = 2; … … 265 292 // potential is lower than limit 266 293 { 267 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false) );294 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false), valueConverterProvider); 268 295 // actual number is returned 269 296 assertEquals(5, instance.size()); … … 271 298 // potential is higher than limit 272 299 { 273 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 2, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false) );300 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 2, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false), valueConverterProvider); 274 301 // maximum number is returned (result is capped) 275 302 assertEquals(2, instance.size()); … … 285 312 filterModel.getObject().setName("th"); 286 313 287 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, true) ) {314 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, true), valueConverterProvider) { 288 315 289 316 @Override … … 308 335 309 336 assertFalse(result.hasNext()); 310 337 311 338 instance.detach(); 312 339 // add minimal occurences condition to filter
Note: See TracChangeset
for help on using the changeset viewer.