Project

General

Profile

« Previous | Next » 

Revision 1e6c448a

Added by Andreas Kohlbecker almost 6 years ago

fix #7534 storing search filter settings in session

View differences:

src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/ListPresenter.java
25 25
import com.vaadin.navigator.Navigator;
26 26
import com.vaadin.spring.annotation.SpringComponent;
27 27
import com.vaadin.spring.annotation.ViewScope;
28
import com.vaadin.ui.AbstractSelect;
28 29
import com.vaadin.ui.TextField;
30
import com.vaadin.ui.UI;
29 31

  
30 32
import eu.etaxonomy.cdm.api.service.dto.RegistrationDTO;
31 33
import eu.etaxonomy.cdm.api.service.pager.Pager;
......
57 59
@ViewScope
58 60
public class ListPresenter extends AbstractPresenter<ListView> {
59 61

  
62
    /**
63
     *
64
     */
65
    private static final String REGISTRATION_LIST_PRESENTER_SEARCH_FILTER = "registration.listPresenter.searchFilter";
66

  
60 67
    private static final EnumSet<RegistrationStatus> inProgressStatus = EnumSet.of(
61 68
            RegistrationStatus.PREPARATION,
62 69
            RegistrationStatus.CURATION,
......
87 94
        List<String> viewParameters = getNavigationManager().getCurrentViewParameters();
88 95
        if(viewParameters.get(0).equals(ListView.Mode.inProgress.name())){
89 96
            getView().setViewMode(ListViewBean.Mode.inProgress);
90
            getView().getStatusFilter().setVisible(false);
97
            getView().getRegistrationStatusFilter().setVisible(false);
91 98
        } else {
92 99
            getView().setViewMode(ListViewBean.Mode.all);
93 100
        }
......
124 131
            getView().getStatusTypeFilter().setItemCaption(dt, caption);
125 132
        }
126 133

  
134
        loadSearchFilterFromSession();
135

  
127 136
        getView().populate(pageRegistrations(null, null));
128 137
    }
129 138

  
139
    /**
140
     * {@inheritDoc}
141
     */
142
    @Override
143
    public void onViewExit() {
144
        preserveSearchFilterInSession();
145
        super.onViewExit();
146
    }
147

  
130 148
    /**
131 149
     * FIXME write test !!!!!!!!!!!!!!!!!
132 150
     *
......
138 156
        Authentication authentication = currentSecurityContext().getAuthentication();
139 157

  
140 158
        // prepare the filters
141
        String identifierFilter;
159
        SearchFilter filter = loadFilterFromView();
142 160
        if(textFieldOverride != null && textFieldOverride == getView().getIdentifierFilter()){
143
            identifierFilter = alternativeText;
144
        } else {
145
            identifierFilter = getView().getIdentifierFilter().getValue();
161
            filter.identifierPattern = alternativeText;
146 162
        }
147 163

  
148
        String nameFilter;
149 164
        if(textFieldOverride != null && textFieldOverride == getView().getTaxonNameFilter()){
150
            nameFilter = alternativeText;
151
        } else {
152
            nameFilter = getView().getTaxonNameFilter().getValue();
153
        }
154

  
155
        User submitter = null;
156
        if(getView().getSubmitterFilter() != null){
157
            Object o = getView().getSubmitterFilter().getValue();
158
            if(o != null){
159
                submitter = (User)o;
160
            }
161
        } else {
162
            submitter = (User) authentication.getPrincipal();
165
            filter.namePattern = alternativeText;
163 166
        }
164 167

  
165
        Set<TypeDesignationStatusBase> typeStatusFilter = (Set<TypeDesignationStatusBase>) getView().getStatusTypeFilter().getValue();
166
        if(typeStatusFilter.isEmpty()){
167
            typeStatusFilter = null;
168
       if(filter.typeStatus.isEmpty()){
169
           filter.typeStatus = null;
168 170
        } else {
169
            if(typeStatusFilter.contains(NULL_TYPE_STATUS)){
171
            if(filter.typeStatus.contains(NULL_TYPE_STATUS)){
170 172
               Set<TypeDesignationStatusBase> tmpSet = new HashSet<>();
171
               tmpSet.addAll(typeStatusFilter);
173
               tmpSet.addAll(filter.typeStatus);
172 174
               tmpSet.remove(NULL_TYPE_STATUS);
173 175
               tmpSet.add(null);
174
               typeStatusFilter = tmpSet;
176
               filter.typeStatus = tmpSet;
175 177
            }
176 178
        }
177 179

  
178
        EnumSet<RegistrationStatus> includeStatus = inProgressStatus;
179
        if(getView().getViewMode().equals(ListView.Mode.all)){
180
            includeStatus = null;
181
            Object o = getView().getStatusFilter().getValue();
182
            if(o != null){
183
                includeStatus = EnumSet.of((RegistrationStatus)o);
184
            }
180

  
181
        if(getView().getViewMode().equals(ListView.Mode.inProgress)){
182
            filter.registrationStatus = inProgressStatus;
185 183
        }
186 184

  
187 185
        Pager<RegistrationDTO> dtoPager = getWorkingSetService().pageDTOs(
188
                submitter,
189
                includeStatus,
190
                StringUtils.trimToNull(identifierFilter),
191
                StringUtils.trimToNull(nameFilter),
192
                typeStatusFilter ,
186
                filter.submitter,
187
                filter.registrationStatus,
188
                StringUtils.trimToNull(filter.identifierPattern),
189
                StringUtils.trimToNull(filter.namePattern),
190
                filter.typeStatus ,
193 191
                pageSize,
194 192
                pageIndex);
195 193
        return dtoPager;
......
247 245
        viewEventBus.publish(EventScope.UI, this, new NavigationEvent(viewName, viewNameParams.toArray(new String[viewNameParams.size()])));
248 246
    }
249 247

  
248

  
249
    /**
250
     *
251
     */
252
    private void preserveSearchFilterInSession() {
253

  
254
        SearchFilter filter = loadFilterFromView();
255
        UI.getCurrent().getSession().setAttribute(REGISTRATION_LIST_PRESENTER_SEARCH_FILTER, filter);
256
    }
257

  
258

  
259
    /**
260
     *
261
     */
262
    public SearchFilter loadFilterFromView() {
263
        SearchFilter filter = new SearchFilter();
264
        filter.identifierPattern = getView().getIdentifierFilter().getValue();
265
        filter.namePattern = getView().getTaxonNameFilter().getValue();
266
        if(getView().getSubmitterFilter() != null){
267
            Object o = getView().getSubmitterFilter().getValue();
268
            if(o != null){
269
                filter.submitter = (User)o;
270
            }
271
        }
272
        filter.typeStatus = (Set<TypeDesignationStatusBase>) getView().getStatusTypeFilter().getValue();
273
        EnumSet<RegistrationStatus> registrationStatusFilter = null;
274
        Object o = getView().getRegistrationStatusFilter().getValue();
275
        if(o != null){
276
            filter.registrationStatus = EnumSet.of((RegistrationStatus)o);
277
        }
278
        return filter;
279
    }
280

  
281

  
282
    /**
283
     *
284
     */
285
    private void loadSearchFilterFromSession() {
286
        Object o = UI.getCurrent().getSession().getAttribute(REGISTRATION_LIST_PRESENTER_SEARCH_FILTER);
287
        if(o != null){
288
            SearchFilter filter = (SearchFilter)o;
289
            getView().getIdentifierFilter().setValue(filter.identifierPattern);
290
            getView().getTaxonNameFilter().setValue(filter.namePattern);
291
            if(getView().getSubmitterFilter() != null){
292
                getView().getSubmitterFilter().setValue(filter.submitter);
293
            }
294
            setSelectValue(getView().getStatusTypeFilter(), filter.typeStatus);
295
            setSelectValue(getView().getRegistrationStatusFilter(), filter.registrationStatus);
296
        }
297

  
298
    }
299

  
300
    /**
301
     * @param statusTypeFilter
302
     * @param typeStatus
303
     */
304
    private void setSelectValue(AbstractSelect select, Set<?> itemsToChoose) {
305

  
306
        for(Object item : select.getContainerDataSource().getItemIds()){
307
            if(item != null){
308
                if(itemsToChoose.contains(item)){
309
                    select.select(item);
310
                }
311
            }
312
        }
313

  
314
    }
315

  
316
    class SearchFilter {
317
        String identifierPattern;
318
        String namePattern;
319
        User submitter;
320
        Set<TypeDesignationStatusBase> typeStatus;
321
        Set<RegistrationStatus> registrationStatus;
322
    }
323

  
250 324
}
src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/ListView.java
60 60
    /**
61 61
     * @return the statusFilter
62 62
     */
63
    public ListSelect getStatusFilter();
63
    public ListSelect getRegistrationStatusFilter();
64 64

  
65 65
    /**
66 66
     * @return the submitterFilter
src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/ListViewBean.java
280 280
     * @return the registrationStatusFilter
281 281
     */
282 282
    @Override
283
    public ListSelect getStatusFilter() {
283
    public ListSelect getRegistrationStatusFilter() {
284 284
        return registrationStatusFilter;
285 285
    }
286 286

  
......
313 313
            if(registrationUuid.equals(item.getRegistrationUuid())){
314 314
                return item;
315 315
            }
316

  
317 316
        }
318 317
        return null;
319 318
    }
320 319

  
321 320
    /**
322
     * @return the statusTypeFilter
321
     * @return the statusTypeFilter for the TypeDesignation.statusType
323 322
     */
324 323
    @Override
325 324
    public AbstractSelect getStatusTypeFilter() {
326 325
        return statusTypeFilter;
327 326
    }
328

  
329

  
330

  
331

  
332

  
333

  
334

  
335 327
}

Also available in: Unified diff