Project

General

Profile

Download (5.94 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.EnumSet;
12
import java.util.Set;
13

    
14
import org.apache.commons.lang3.StringUtils;
15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.security.core.Authentication;
17
import org.vaadin.spring.events.annotation.EventBusListenerMethod;
18

    
19
import com.vaadin.spring.annotation.SpringComponent;
20
import com.vaadin.spring.annotation.ViewScope;
21
import com.vaadin.ui.TextField;
22

    
23
import eu.etaxonomy.cdm.api.service.pager.Pager;
24
import eu.etaxonomy.cdm.model.common.User;
25
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
26
import eu.etaxonomy.cdm.model.reference.Reference;
27
import eu.etaxonomy.cdm.service.IRegistrationWorkingSetService;
28
import eu.etaxonomy.cdm.vaadin.component.CdmBeanItemContainerFactory;
29
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
30
import eu.etaxonomy.cdm.vaadin.event.EntityChangeEvent;
31
import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
32
import eu.etaxonomy.cdm.vaadin.event.UpdateResultsEvent;
33
import eu.etaxonomy.vaadin.mvp.AbstractPresenter;
34

    
35
/**
36
 *
37
 * @author a.kohlbecker
38
 * @since Mar 3, 2017
39
 *
40
 */
41
@SpringComponent
42
@ViewScope
43
public class ListPresenter extends AbstractPresenter<ListView> {
44

    
45
    private static final EnumSet<RegistrationStatus> inProgressStatus = EnumSet.of(
46
            RegistrationStatus.PREPARATION,
47
            RegistrationStatus.CURATION,
48
            RegistrationStatus.READY
49
            );
50

    
51
    private static final long serialVersionUID = 5419947244621450665L;
52

    
53
    @Autowired
54
    private IRegistrationWorkingSetService workingSetService;
55

    
56
    /**
57
     * @return the workingSetService
58
     */
59
    public IRegistrationWorkingSetService getWorkingSetService() {
60
        return workingSetService;
61
    }
62

    
63

    
64
    @Override
65
    public void handleViewEntered() {
66

    
67
        if(getNavigationManager().getCurrentViewParameters().get(0).equals(ListView.Mode.inProgress.name())){
68
            getView().setViewMode(ListViewBean.Mode.inProgress);
69
            getView().getStatusFilter().setVisible(false);
70
        } else {
71
            getView().setViewMode(ListViewBean.Mode.all);
72
        }
73

    
74
        CdmBeanItemContainerFactory selectFieldFactory = new CdmBeanItemContainerFactory(getRepo());
75

    
76
        if(getView().getSubmitterFilter() != null){
77
            getView().getSubmitterFilter().setContainerDataSource(selectFieldFactory.buildBeanItemContainer(User.class));
78
            getView().getSubmitterFilter().setItemCaptionPropertyId("username");
79
        }
80

    
81
        getView().populate(pageRegistrations(null, null));
82
    }
83

    
84
    /**
85
     * FIXME write test !!!!!!!!!!!!!!!!!
86
     *
87
     * @return
88
     */
89
    private Pager<RegistrationDTO> pageRegistrations(TextField textFieldOverride, String alternativeText) {
90

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

    
94
        // prepare the filters
95
        String identifierFilter;
96
        if(textFieldOverride != null && textFieldOverride == getView().getIdentifierFilter()){
97
            identifierFilter = alternativeText;
98
        } else {
99
            identifierFilter = getView().getIdentifierFilter().getValue();
100
        }
101
        String nameFilter;
102
        if(textFieldOverride != null && textFieldOverride == getView().getTaxonNameFilter()){
103
            nameFilter = alternativeText;
104
        } else {
105
            nameFilter = getView().getTaxonNameFilter().getValue();
106
        }
107
        User submitter = null;
108
        if(getView().getSubmitterFilter() != null){
109
            Object o = getView().getSubmitterFilter().getValue();
110
            if(o != null){
111
                submitter = (User)o;
112
            }
113
        } else {
114
            submitter = (User) authentication.getPrincipal();
115
        }
116
        EnumSet<RegistrationStatus> includeStatus = inProgressStatus;
117
        if(getView().getViewMode().equals(ListView.Mode.all)){
118
            includeStatus = null;
119
            Object o = getView().getStatusFilter().getValue();
120
            if(o != null){
121
                includeStatus = EnumSet.of((RegistrationStatus)o);
122
            }
123
        }
124

    
125
        Pager<RegistrationDTO> dtoPager = getWorkingSetService().pageDTOs(
126
                submitter,
127
                includeStatus,
128
                StringUtils.trimToNull(identifierFilter),
129
                StringUtils.trimToNull(nameFilter),
130
                null,
131
                null);
132
        return dtoPager;
133
    }
134

    
135
    @EventBusListenerMethod
136
    public void onShowDetailsEvent(ShowDetailsEvent<RegistrationDTO, Integer> event) {
137

    
138
        // FIXME check from own view!!!
139
        if(getView() == null){
140
            return;
141
        }
142

    
143
        Integer registrationId = event.getIdentifier();
144

    
145
        RegistrationDTO regDto = getWorkingSetService().loadDtoById(registrationId);
146
        if(event.getProperty().equals("messages")){
147

    
148
            getView().openDetailsPopup("Messages", regDto.getValidationProblems());
149

    
150
        } else if(event.getProperty().equals("blockedBy")){
151

    
152
            Set<RegistrationDTO> blockingRegs = getWorkingSetService().loadBlockingRegistrations(registrationId);
153
            RegistrationItem regItem = getView().getRegistrationItem(registrationId);
154
            regItem.showBlockingRegistrations(blockingRegs);
155
        }
156

    
157
    }
158

    
159
    @EventBusListenerMethod
160
    public void onEntityChangeEvent(EntityChangeEvent event){
161
        if(event.getEntityType().isAssignableFrom(Reference.class)){
162
            // TODO update component showing the according reference, is there a Vaadin event supporting this?
163
        }
164
    }
165

    
166
    @EventBusListenerMethod
167
    public void onUpdateResultsEvent(UpdateResultsEvent event){
168
        getView().populate(pageRegistrations(event.getField(), event.getNewText()));
169
    }
170

    
171
}
(2-2/19)