Project

General

Profile

Download (7.5 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2017 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.vaadin.view.registration;
10

    
11
import java.util.ArrayList;
12
import java.util.EnumSet;
13
import java.util.List;
14
import java.util.Set;
15
import java.util.UUID;
16

    
17
import org.apache.commons.lang3.StringUtils;
18
import org.springframework.beans.factory.annotation.Autowired;
19
import org.springframework.security.core.Authentication;
20
import org.vaadin.spring.events.EventScope;
21
import org.vaadin.spring.events.annotation.EventBusListenerMethod;
22

    
23
import com.vaadin.navigator.Navigator;
24
import com.vaadin.spring.annotation.SpringComponent;
25
import com.vaadin.spring.annotation.ViewScope;
26
import com.vaadin.ui.TextField;
27

    
28
import eu.etaxonomy.cdm.api.service.dto.RegistrationDTO;
29
import eu.etaxonomy.cdm.api.service.pager.Pager;
30
import eu.etaxonomy.cdm.model.common.User;
31
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
32
import eu.etaxonomy.cdm.model.reference.Reference;
33
import eu.etaxonomy.cdm.service.IRegistrationWorkingSetService;
34
import eu.etaxonomy.cdm.vaadin.component.CdmBeanItemContainerFactory;
35
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
36
import eu.etaxonomy.cdm.vaadin.event.EntityChangeEvent;
37
import eu.etaxonomy.cdm.vaadin.event.PagingEvent;
38
import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
39
import eu.etaxonomy.cdm.vaadin.event.UpdateResultsEvent;
40
import eu.etaxonomy.vaadin.mvp.AbstractPresenter;
41
import eu.etaxonomy.vaadin.ui.navigation.NavigationEvent;
42

    
43
/**
44
 *
45
 * @author a.kohlbecker
46
 * @since Mar 3, 2017
47
 *
48
 */
49
@SpringComponent
50
@ViewScope
51
public class ListPresenter extends AbstractPresenter<ListView> {
52

    
53
    private static final EnumSet<RegistrationStatus> inProgressStatus = EnumSet.of(
54
            RegistrationStatus.PREPARATION,
55
            RegistrationStatus.CURATION,
56
            RegistrationStatus.READY
57
            );
58

    
59
    private static final long serialVersionUID = 5419947244621450665L;
60

    
61
    @Autowired
62
    private IRegistrationWorkingSetService workingSetService;
63

    
64
    private Integer pageIndex = 0;
65
    private Integer pageSize = null;
66

    
67
    /**
68
     * @return the workingSetService
69
     */
70
    public IRegistrationWorkingSetService getWorkingSetService() {
71
        return workingSetService;
72
    }
73

    
74

    
75
    @Override
76
    public void handleViewEntered() {
77

    
78
        List<String> viewParameters = getNavigationManager().getCurrentViewParameters();
79
        if(viewParameters.get(0).equals(ListView.Mode.inProgress.name())){
80
            getView().setViewMode(ListViewBean.Mode.inProgress);
81
            getView().getStatusFilter().setVisible(false);
82
        } else {
83
            getView().setViewMode(ListViewBean.Mode.all);
84
        }
85
        if(viewParameters.size() > 1){
86
            // expecting the second param to be the page index
87
            try {
88
                pageIndex = Integer.parseInt(viewParameters.get(1));
89
            } catch (NumberFormatException e) {
90
                // only log and display the page 0
91
                logger.error("Invalid page index parameter " + viewParameters.get(1) + " in " + ((Navigator)getNavigationManager()).getState());
92
            }
93
        }
94

    
95
        CdmBeanItemContainerFactory selectFieldFactory = new CdmBeanItemContainerFactory(getRepo());
96

    
97
        if(getView().getSubmitterFilter() != null){
98
            getView().getSubmitterFilter().setContainerDataSource(selectFieldFactory.buildBeanItemContainer(User.class));
99
            getView().getSubmitterFilter().setItemCaptionPropertyId("username");
100
        }
101

    
102
        getView().populate(pageRegistrations(null, null));
103
    }
104

    
105
    /**
106
     * FIXME write test !!!!!!!!!!!!!!!!!
107
     *
108
     * @return
109
     */
110
    private Pager<RegistrationDTO> pageRegistrations(TextField textFieldOverride, String alternativeText) {
111

    
112
        // list all if the authenticated user is having the role CURATION of if it is an admin
113
        Authentication authentication = currentSecurityContext().getAuthentication();
114

    
115
        // prepare the filters
116
        String identifierFilter;
117
        if(textFieldOverride != null && textFieldOverride == getView().getIdentifierFilter()){
118
            identifierFilter = alternativeText;
119
        } else {
120
            identifierFilter = getView().getIdentifierFilter().getValue();
121
        }
122
        String nameFilter;
123
        if(textFieldOverride != null && textFieldOverride == getView().getTaxonNameFilter()){
124
            nameFilter = alternativeText;
125
        } else {
126
            nameFilter = getView().getTaxonNameFilter().getValue();
127
        }
128
        User submitter = null;
129
        if(getView().getSubmitterFilter() != null){
130
            Object o = getView().getSubmitterFilter().getValue();
131
            if(o != null){
132
                submitter = (User)o;
133
            }
134
        } else {
135
            submitter = (User) authentication.getPrincipal();
136
        }
137
        EnumSet<RegistrationStatus> includeStatus = inProgressStatus;
138
        if(getView().getViewMode().equals(ListView.Mode.all)){
139
            includeStatus = null;
140
            Object o = getView().getStatusFilter().getValue();
141
            if(o != null){
142
                includeStatus = EnumSet.of((RegistrationStatus)o);
143
            }
144
        }
145

    
146
        Pager<RegistrationDTO> dtoPager = getWorkingSetService().pageDTOs(
147
                submitter,
148
                includeStatus,
149
                StringUtils.trimToNull(identifierFilter),
150
                StringUtils.trimToNull(nameFilter),
151
                pageSize,
152
                pageIndex);
153
        return dtoPager;
154
    }
155

    
156
    @EventBusListenerMethod
157
    public void onShowDetailsEvent(ShowDetailsEvent<RegistrationDTO, UUID> event) {
158

    
159
        // FIXME check from own view!!!
160
        if(getView() == null){
161
            return;
162
        }
163

    
164
        UUID registrationUuid = event.getIdentifier();
165

    
166
        RegistrationDTO regDto = getWorkingSetService().loadDtoByUuid(registrationUuid);
167
        if(event.getProperty().equals("messages")){
168

    
169
            getView().openDetailsPopup("Messages", regDto.getValidationProblems());
170

    
171
        } else if(event.getProperty().equals("blockedBy")){
172

    
173
            Set<RegistrationDTO> blockingRegs = getWorkingSetService().loadBlockingRegistrations(registrationUuid);
174
            RegistrationItem regItem = getView().getRegistrationItem(registrationUuid);
175
            regItem.showBlockingRegistrations(blockingRegs);
176
        }
177

    
178
    }
179

    
180
    @EventBusListenerMethod
181
    public void onEntityChangeEvent(EntityChangeEvent event){
182
        if(event.getEntityType().isAssignableFrom(Reference.class)){
183
            // TODO update component showing the according reference, is there a Vaadin event supporting this?
184
        }
185
    }
186

    
187
    @EventBusListenerMethod
188
    public void onUpdateResultsEvent(UpdateResultsEvent event){
189
        getView().populate(pageRegistrations(event.getField(), event.getNewText()));
190
    }
191

    
192
    @EventBusListenerMethod
193
    public void onPagingEvent(PagingEvent event){
194

    
195
        if(!event.getSourceView().equals(getView())){
196
            return;
197
        }
198
        String viewName = getNavigationManager().getCurrentViewName();
199
        List<String> viewNameParams = new ArrayList(getNavigationManager().getCurrentViewParameters());
200
        if(viewNameParams.size() > 1){
201
            viewNameParams.set(1, event.getPageIndex().toString());
202
        } else {
203
            viewNameParams.add(event.getPageIndex().toString());
204
        }
205
        viewEventBus.publish(EventScope.UI, this, new NavigationEvent(viewName, viewNameParams.toArray(new String[viewNameParams.size()])));
206
    }
207

    
208
}
(2-2/20)