Revision 09a9df91
Added by Andreas Kohlbecker over 5 years ago
src/main/java/eu/etaxonomy/cdm/service/CdmFilterablePagingProvider.java | ||
---|---|---|
34 | 34 |
|
35 | 35 |
private static final List<String> DEFAULT_INIT_STRATEGY = Arrays.asList("$"); |
36 | 36 |
|
37 |
public static final String QUERY_STRING_PLACEHOLDER = "{query-string}"; |
|
38 |
|
|
37 | 39 |
private static final Logger logger = Logger.getLogger(CdmFilterablePagingProvider.class); |
38 | 40 |
|
39 | 41 |
private int pageSize = 20; |
... | ... | |
128 | 130 |
Integer pageIndex = firstRow / pageSize; |
129 | 131 |
Pager<V> page; |
130 | 132 |
if(!restrictions.isEmpty()){ |
133 |
List<Restriction<?>> preparedRestrictions = prepareRestrictions(filter, matchMode); |
|
131 | 134 |
page = (Pager<V>) service.findByTitleWithRestrictions( |
132 | 135 |
type, |
133 | 136 |
filter, |
134 | 137 |
matchMode, |
135 |
restrictions,
|
|
138 |
preparedRestrictions,
|
|
136 | 139 |
pageSize, |
137 | 140 |
pageIndex , |
138 | 141 |
orderHints, |
... | ... | |
168 | 171 |
|
169 | 172 |
Pager<V> page; |
170 | 173 |
if(!restrictions.isEmpty()){ |
174 |
List<Restriction<?>> preparedRestrictions = prepareRestrictions(filter, matchMode); |
|
171 | 175 |
page = (Pager<V>) service.findByTitleWithRestrictions( |
172 | 176 |
type, |
173 | 177 |
filter, |
174 | 178 |
matchMode, |
175 |
restrictions,
|
|
179 |
preparedRestrictions,
|
|
176 | 180 |
1, |
177 | 181 |
0, |
178 | 182 |
null, |
... | ... | |
197 | 201 |
return page.getCount().intValue(); |
198 | 202 |
} |
199 | 203 |
|
204 |
/** |
|
205 |
* @return |
|
206 |
*/ |
|
207 |
private List<Restriction<?>> prepareRestrictions(String filter, MatchMode matchMode) { |
|
208 |
List<Restriction<?>> prepared = new ArrayList<>(restrictions.size()); |
|
209 |
for(Restriction<?> r : restrictions) { |
|
210 |
List<Object> values = new ArrayList<>(r.getValues().size()); |
|
211 |
for(Object v : r.getValues()){ |
|
212 |
if(v instanceof String){ |
|
213 |
String expandedValue = ((String)v).replace(QUERY_STRING_PLACEHOLDER, matchMode.queryStringFrom(filter)); |
|
214 |
values.add(expandedValue); |
|
215 |
} else { |
|
216 |
values.add(v); |
|
217 |
} |
|
218 |
} |
|
219 |
prepared.add(new Restriction(r.getPropertyName(), r.getOperator(), r.getMatchMode(), values.toArray(new String[values.size()]))); |
|
220 |
} |
|
221 |
return prepared; |
|
222 |
} |
|
223 |
|
|
200 | 224 |
/** |
201 | 225 |
* |
202 | 226 |
*/ |
... | ... | |
249 | 273 |
|
250 | 274 |
/** |
251 | 275 |
* The list of restrictions is initially empty. |
276 |
* <p> |
|
277 |
* Occurrences of the {@link QUERY_STRING_PLACEHOLDER} in the value |
|
278 |
* of String type Restrictions will be replaced by the <code>filter</code> parameter passed to the paging provider. |
|
279 |
* |
|
252 | 280 |
* |
253 | 281 |
* @return the restrictions |
254 | 282 |
*/ |
... | ... | |
256 | 284 |
return restrictions; |
257 | 285 |
} |
258 | 286 |
|
287 |
/** |
|
288 |
* Occurrences of the {@link QUERY_STRING_PLACEHOLDER} in the value |
|
289 |
* of String type Restrictions will be replaced by the <code>filter</code> parameter passed to the paging provider. |
|
290 |
* |
|
291 |
* @param restriction |
|
292 |
*/ |
|
259 | 293 |
public void addRestriction(Restriction<?> restriction){ |
260 | 294 |
restrictions.add(restriction); |
261 | 295 |
} |
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/SpecimenTypeDesignationWorkingsetEditorPresenter.java | ||
---|---|---|
34 | 34 |
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation; |
35 | 35 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
36 | 36 |
import eu.etaxonomy.cdm.model.reference.Reference; |
37 |
import eu.etaxonomy.cdm.persistence.dao.common.Restriction; |
|
37 | 38 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; |
39 |
import eu.etaxonomy.cdm.persistence.query.MatchMode; |
|
38 | 40 |
import eu.etaxonomy.cdm.service.CdmFilterablePagingProvider; |
39 | 41 |
import eu.etaxonomy.cdm.service.CdmFilterablePagingProviderFactory; |
40 | 42 |
import eu.etaxonomy.cdm.service.CdmStore; |
... | ... | |
181 | 183 |
|
182 | 184 |
|
183 | 185 |
popuEditorTypeDesignationSourceRows.clear(); |
184 |
getView().getTypeDesignationsCollectionField().setEditorInstantiator(new AbstractElementCollection.Instantiator<SpecimenTypeDesignationDTORow>() { |
|
186 |
CdmFilterablePagingProvider<Collection, Collection> collectionPagingProvider = new CdmFilterablePagingProvider<Collection, Collection>(getRepo().getCollectionService()); |
|
187 |
collectionPagingProvider.getRestrictions().add(new Restriction<>("institute.titleCache", MatchMode.ANYWHERE, "{filter}")); |
|
185 | 188 |
|
186 |
CdmFilterablePagingProvider<Collection, Collection> collectionPagingProvider = new CdmFilterablePagingProvider<Collection, Collection>(getRepo().getCollectionService());
|
|
189 |
CdmFilterablePagingProvider<Reference, Reference> referencePagingProvider = pagingProviderFactory.referencePagingProvider();
|
|
187 | 190 |
|
188 |
CdmFilterablePagingProvider<Reference, Reference> referencePagingProvider = pagingProviderFactory.referencePagingProvider();
|
|
191 |
getView().getTypeDesignationsCollectionField().setEditorInstantiator(new AbstractElementCollection.Instantiator<SpecimenTypeDesignationDTORow>() {
|
|
189 | 192 |
|
190 | 193 |
@Override |
191 | 194 |
public SpecimenTypeDesignationDTORow create() { |
... | ... | |
209 | 212 |
collectionPagingProvider.getPageSize() |
210 | 213 |
); |
211 | 214 |
row.collection.getSelect().setCaptionGenerator(new CollectionCaptionGenerator()); |
212 |
row.collection.getSelect().addValueChangeListener(new ToOneRelatedEntityButtonUpdater<Collection>(row.collection));
|
|
215 |
row.collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(row.collection));
|
|
213 | 216 |
row.collection.getSelect().addValueChangeListener(new ToOneRelatedEntityReloader<Collection>(row.collection.getSelect(), |
214 | 217 |
SpecimenTypeDesignationWorkingsetEditorPresenter.this)); |
215 | 218 |
row.collection.addClickListenerAddEntity(e -> doCollectionEditorAdd(row)); |
src/main/java/eu/etaxonomy/cdm/vaadin/view/occurrence/CollectionEditorPresenter.java | ||
---|---|---|
21 | 21 |
import eu.etaxonomy.cdm.model.agent.AgentBase; |
22 | 22 |
import eu.etaxonomy.cdm.model.agent.Institution; |
23 | 23 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
24 |
import eu.etaxonomy.cdm.persistence.dao.common.Restriction; |
|
25 |
import eu.etaxonomy.cdm.persistence.dao.common.Restriction.Operator; |
|
26 |
import eu.etaxonomy.cdm.persistence.query.MatchMode; |
|
24 | 27 |
import eu.etaxonomy.cdm.service.CdmFilterablePagingProvider; |
25 | 28 |
import eu.etaxonomy.cdm.service.UserHelperAccess; |
26 | 29 |
import eu.etaxonomy.cdm.vaadin.event.CollectionEditorAction; |
... | ... | |
107 | 110 |
super.handleViewEntered(); |
108 | 111 |
|
109 | 112 |
CdmFilterablePagingProvider<Collection, Collection> collectionPagingProvider = new CdmFilterablePagingProvider<Collection, Collection>(getRepo().getCollectionService()); |
113 |
collectionPagingProvider.getRestrictions().add(new Restriction<String>("institute.titleCache", Operator.OR, MatchMode.ANYWHERE, CdmFilterablePagingProvider.QUERY_STRING_PLACEHOLDER)); |
|
110 | 114 |
getView().getSuperCollectionCombobox().getSelect().loadFrom(collectionPagingProvider, collectionPagingProvider, collectionPagingProvider.getPageSize()); |
111 | 115 |
getView().getSuperCollectionCombobox().getSelect().addValueChangeListener(new ToOneRelatedEntityReloader<Collection>(getView().getSuperCollectionCombobox(), this)); |
112 | 116 |
|
... | ... | |
189 | 193 |
} |
190 | 194 |
} |
191 | 195 |
|
192 |
} else if(boundTargetField.matchesPropertyIdPath("institution")){
|
|
196 |
} else if(boundTargetField.matchesPropertyIdPath("institute")){
|
|
193 | 197 |
if(event.isCreateOrModifiedType()){ |
194 | 198 |
|
195 | 199 |
Institution newInstitution = (Institution) event.getEntity(); |
Also available in: Unified diff
ref #7572 also searching the institute titleCache when looking up for collections