Changeset 5126
- Timestamp:
- 05/02/14 14:15:54 (10 years ago)
- Location:
- vlo/branches/vlo-3.0
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
vlo/branches/vlo-3.0
- Property svn:mergeinfo changed
/vlo/trunk merged: 5125
- Property svn:mergeinfo changed
-
vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProvider.java
r5121 r5126 44 44 * SOLR) present on a {@link FacetField}, sortable by either count or name 45 45 * 46 * TODO: cache values list/size47 *48 46 * @see FieldValuesOrder 49 47 * @author twagoo … … 55 53 private final int maxNumberOfItems; 56 54 private final Collection<String> lowPriorityValues; 55 56 /** 57 * cached result size 58 */ 59 private Long size; 60 /** 61 * cached filtered values 62 */ 63 private Iterable<Count> filtered; 57 64 58 65 /** … … 108 115 @Override 109 116 public Iterator<? extends FacetField.Count> iterator(long first, long count) { 110 // get all the values 111 final List<FacetField.Count> values = model.getObject().getValues(); 112 // filter results 113 final Iterable<Count> filtered = filter(values); 117 final Iterable<Count> filtered = getFilteredValues(); 114 118 // sort what remains 115 119 final ImmutableList sorted = getOrdering().immutableSortedCopy(filtered); … … 124 128 @Override 125 129 public long size() { 126 if (hasFilter()) { 127 final List<FacetField.Count> values = model.getObject().getValues(); 128 return Math.min(maxNumberOfItems, Iterables.size(filter(values))); 129 } else { 130 // Use value count from Solr, faster. 131 // 132 // Actual value count might be higher than what we want to show 133 // so get minimum. 134 return Math.min(maxNumberOfItems, model.getObject().getValueCount()); 135 } 130 if (size == null) { 131 size = getSize(); 132 } 133 return size; 136 134 } 137 135 … … 141 139 } 142 140 143 @Override 144 public void detach() { 145 model.detach(); 146 } 147 141 /* 142 * CACHING AND FILTERING 143 */ 148 144 private Iterable<FacetField.Count> filter(List<FacetField.Count> list) { 149 145 if (hasFilter()) { … … 159 155 } 160 156 157 private Iterable<Count> getFilteredValues() { 158 if (filtered == null) { 159 // get all the values 160 final List<FacetField.Count> values = model.getObject().getValues(); 161 filtered = filter(values); 162 } 163 return filtered; 164 } 165 166 private long getSize() { 167 if (hasFilter()) { 168 return Math.min(maxNumberOfItems, Iterables.size(getFilteredValues())); 169 } else { 170 // Use value count from Solr, faster. 171 // 172 // Actual value count might be higher than what we want to show 173 // so get minimum. 174 return Math.min(maxNumberOfItems, model.getObject().getValueCount()); 175 } 176 } 177 161 178 private boolean hasFilter() { 162 179 return getFilterModel() != null && getFilterModel().getObject() != null && !getFilterModel().getObject().isEmpty(); 163 180 } 164 181 182 /* 183 * ORDERING 184 */ 165 185 private Ordering getOrdering() { 166 186 if (lowPriorityValues != null && getSort().getProperty() == FieldValuesOrder.COUNT) { … … 256 276 257 277 }; 278 279 @Override 280 public void detach() { 281 model.detach(); 282 // invalidate cache variables 283 size = null; 284 filtered = null; 285 } 258 286 }
Note: See TracChangeset
for help on using the changeset viewer.