Project

General

Profile

« Previous | Next » 

Revision 09a9df91

Added by Andreas Kohlbecker over 5 years ago

ref #7572 also searching the institute titleCache when looking up for collections

View differences:

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