Project

General

Profile

Download (7.56 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.Arrays;
13
import java.util.Collection;
14
import java.util.List;
15

    
16
import org.springframework.security.core.GrantedAuthority;
17

    
18
import com.vaadin.data.Item;
19
import com.vaadin.data.util.BeanContainer;
20
import com.vaadin.data.util.GeneratedPropertyContainer;
21
import com.vaadin.data.util.PropertyValueGenerator;
22
import com.vaadin.navigator.View;
23
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
24
import com.vaadin.server.Page;
25
import com.vaadin.spring.annotation.SpringView;
26
import com.vaadin.ui.CssLayout;
27
import com.vaadin.ui.HorizontalLayout;
28
import com.vaadin.ui.Label;
29
import com.vaadin.ui.ListSelect;
30
import com.vaadin.ui.Notification;
31
import com.vaadin.ui.TextField;
32

    
33
import eu.etaxonomy.cdm.api.service.pager.Pager;
34
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
35
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
36
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
37
import eu.etaxonomy.cdm.vaadin.event.UpdateResultsEvent;
38
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
39
import eu.etaxonomy.cdm.vaadin.security.UserHelper;
40
import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
41

    
42
/**
43
 * @author a.kohlbecker
44
 * @since Mar 2, 2017
45
 *
46
 */
47
@SpringView(name=ListViewBean.NAME)
48
public class ListViewBean extends AbstractPageView<ListPresenter> implements ListView, View, AccessRestrictedView {
49

    
50

    
51
    private static final long serialVersionUID = 3543300933072824713L;
52

    
53
    public static final String NAME = "list";
54

    
55
    Mode viewMode = Mode.all;
56

    
57
    private CssLayout listContainer;
58

    
59
    private HorizontalLayout toolBar;
60

    
61
    private Label filterInstructionLabel = new Label("Filter the registrations by");
62

    
63
    private ListSelect statusFilter = null;
64

    
65
    private ListSelect submitterFilter = null; // must be null, the presenter relies on this
66

    
67
    private TextField identifierFilter = new TextFieldNFix("Identifier");
68

    
69
    private TextField taxonNameFilter = new TextFieldNFix("Name");
70

    
71
    private TextField referenceFilter = new TextFieldNFix("Publication");
72

    
73
    public ListViewBean() {
74
        super();
75
    }
76

    
77
    @Override
78
    protected void initContent() {
79

    
80
        getLayout().setId(NAME);
81
        toolBar = new HorizontalLayout();
82

    
83
        toolBar.addComponent(filterInstructionLabel);
84

    
85
        if(UserHelper.fromSession().userIsRegistrationCurator() || UserHelper.fromSession().userIsAdmin()){
86

    
87
            submitterFilter = new ListSelect("Submitter");
88
            submitterFilter.setRows(1);
89
            submitterFilter.addValueChangeListener(e -> updateResults(null, null));
90
            toolBar.addComponent(submitterFilter);
91
        }
92

    
93
        if(viewMode.equals(Mode.all)){
94
            statusFilter = new ListSelect("Status", Arrays.asList(RegistrationStatus.values()));
95
            statusFilter.setNullSelectionAllowed(true);
96
            statusFilter.setRows(1);
97
            statusFilter.addValueChangeListener(e -> updateResults(null, null));
98
            toolBar.addComponent(statusFilter);
99
        }
100

    
101
        toolBar.addComponents(identifierFilter, taxonNameFilter);
102
        int textChangeTimeOut = 200;
103
        identifierFilter.addTextChangeListener(e -> updateResults(identifierFilter, e.getText()));
104
        identifierFilter.setTextChangeTimeout(textChangeTimeOut);
105
        taxonNameFilter.addTextChangeListener(e -> updateResults(taxonNameFilter, e.getText()));
106
        identifierFilter.setTextChangeTimeout(textChangeTimeOut);
107

    
108
        toolBar.setSpacing(true);
109
        addContentComponent(toolBar, null);
110

    
111
        listContainer = new CssLayout();
112
        listContainer.setId("registration-list");
113
        listContainer.setWidth(100, Unit.PERCENTAGE);
114
        addContentComponent(listContainer, 1f);
115

    
116
    }
117

    
118
    /**
119
     * @return
120
     */
121
    private void updateResults(TextField field, String newText) {
122
        getViewEventBus().publish(this, new UpdateResultsEvent(field, newText, this));
123
    }
124

    
125
    @Override
126
    protected String getHeaderText() {
127
        return "Registrations";
128
    }
129

    
130
    @Override
131
    protected String getSubHeaderText() {
132
        return "This is the list of all your registrations in progress.";
133
    }
134

    
135

    
136
    /**
137
     * {@inheritDoc}
138
     */
139
    @Override
140
    public void enter(ViewChangeEvent event) {
141
        getPresenter().onViewEnter();
142
    }
143

    
144
    @Override
145
    public void populate(Pager<RegistrationDTO> regDtoPager) {
146

    
147
        ArrayList<RegistrationDTO> regDtos = new ArrayList<RegistrationDTO>(regDtoPager.getRecords());
148

    
149
        populateList(regDtos);
150
    }
151

    
152
    public void populateList(Collection<RegistrationDTO> registrations) {
153

    
154
        listContainer.removeAllComponents();
155
        boolean isCurator = UserHelper.fromSession().userIsRegistrationCurator() || UserHelper.fromSession().userIsAdmin();
156
        for(RegistrationDTO regDto : registrations) {
157
            RegistrationItem item = new RegistrationItem(regDto, this);
158
            item.getSubmitterLabel().setVisible(isCurator);
159
            item.setWidth(100, Unit.PERCENTAGE);
160
            listContainer.addComponent(item);
161
        }
162
    }
163

    
164
    @Override
165
    public void openDetailsPopup(String caption, List<String> messages){
166
        StringBuffer sb = new StringBuffer();
167
        sb.append("<div class=\"details-popup-content\">");
168
        messages.forEach(s -> sb.append(s).append("</br>"));
169
        sb.append("</div>");
170
        new Notification(caption, sb.toString(), Notification.Type.HUMANIZED_MESSAGE, true).show(Page.getCurrent());
171
    }
172

    
173
    /**
174
     * @param registrationItems
175
     * @return
176
     */
177
    @Deprecated
178
    private GeneratedPropertyContainer buildGeneratedProperties(
179
            BeanContainer<String, RegistrationDTO> registrationItems) {
180
        GeneratedPropertyContainer gpContainer = new GeneratedPropertyContainer(registrationItems);
181

    
182
        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
183

    
184
            @Override
185
            public String getValue(Item item, Object itemId, Object propertyId) {
186
                return "Open";
187
            }
188

    
189
            @Override
190
            public Class<String> getType() {
191
                return String.class;
192
            }
193
          });
194

    
195
        return gpContainer;
196
    }
197

    
198
    /**
199
     * {@inheritDoc}
200
     */
201
    @Override
202
    public boolean allowAnonymousAccess() {
203
        return false;
204
    }
205

    
206
    /**
207
     * {@inheritDoc}
208
     */
209
    @Override
210
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
211
        return null;
212
    }
213

    
214
    /**
215
     * @return the identifierFilter
216
     */
217
    @Override
218
    public TextField getIdentifierFilter() {
219
        return identifierFilter;
220
    }
221

    
222
    /**
223
     * @return the taxonNameFilter
224
     */
225
    @Override
226
    public TextField getTaxonNameFilter() {
227
        return taxonNameFilter;
228
    }
229

    
230
    /**
231
     * @return the referenceFilter
232
     */
233
    @Override
234
    public TextField getReferenceFilter() {
235
        return referenceFilter;
236
    }
237

    
238
    /**
239
     * @return the statusFilter
240
     */
241
    @Override
242
    public ListSelect getStatusFilter() {
243
        return statusFilter;
244
    }
245

    
246
    /**
247
     * @return the submitterFilter
248
     */
249
    @Override
250
    public ListSelect getSubmitterFilter() {
251
        return submitterFilter;
252
    }
253

    
254
    /**
255
     * {@inheritDoc}
256
     */
257
    @Override
258
    public void setViewMode(Mode mode) {
259
        viewMode = mode;
260
    }
261

    
262

    
263
    @Override
264
    public Mode getViewMode() {
265
        return viewMode;
266
    }
267

    
268

    
269

    
270

    
271

    
272

    
273

    
274
}
(4-4/19)