Project

General

Profile

Download (10.2 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
import java.util.UUID;
16

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

    
19
import com.vaadin.data.Item;
20
import com.vaadin.data.util.BeanContainer;
21
import com.vaadin.data.util.GeneratedPropertyContainer;
22
import com.vaadin.data.util.PropertyValueGenerator;
23
import com.vaadin.navigator.View;
24
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
25
import com.vaadin.server.Page;
26
import com.vaadin.spring.annotation.SpringView;
27
import com.vaadin.ui.AbstractSelect;
28
import com.vaadin.ui.Alignment;
29
import com.vaadin.ui.Component;
30
import com.vaadin.ui.CssLayout;
31
import com.vaadin.ui.HorizontalLayout;
32
import com.vaadin.ui.Label;
33
import com.vaadin.ui.ListSelect;
34
import com.vaadin.ui.Notification;
35
import com.vaadin.ui.TextField;
36
import com.vaadin.ui.VerticalLayout;
37
import com.vaadin.ui.themes.ValoTheme;
38

    
39
import eu.etaxonomy.cdm.api.service.dto.RegistrationDTO;
40
import eu.etaxonomy.cdm.api.service.pager.Pager;
41
import eu.etaxonomy.cdm.api.utility.RoleProber;
42
import eu.etaxonomy.cdm.model.name.Registration;
43
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
44
import eu.etaxonomy.cdm.service.UserHelperAccess;
45
import eu.etaxonomy.cdm.vaadin.component.PagerComponent;
46
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
47
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
48
import eu.etaxonomy.cdm.vaadin.event.PagingEvent;
49
import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
50
import eu.etaxonomy.cdm.vaadin.event.UpdateResultsEvent;
51
import eu.etaxonomy.cdm.vaadin.permission.AccessRestrictedView;
52
import eu.etaxonomy.cdm.vaadin.permission.RolesAndPermissions;
53
import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
54

    
55
/**
56
 * @author a.kohlbecker
57
 * @since Mar 2, 2017
58
 *
59
 */
60
@SpringView(name=ListViewBean.NAME)
61
public class ListViewBean extends AbstractPageView<ListPresenter> implements ListView, View, AccessRestrictedView {
62

    
63

    
64
    private static final long serialVersionUID = 3543300933072824713L;
65

    
66
    public static final String NAME = "list";
67

    
68
    Mode viewMode = Mode.all;
69

    
70
    private CssLayout listContainer;
71

    
72
    private HorizontalLayout toolBar;
73

    
74
    private PagerComponent pagerTop;
75

    
76
    private Label filterInstructionLabel = new Label("Filter the registrations by");
77

    
78
    private ListSelect registrationStatusFilter = null;
79

    
80
    private ListSelect submitterFilter = null; // must be null, the presenter relies on this
81

    
82
    private TextField identifierFilter = new TextFieldNFix("Identifier");
83

    
84
    private TextField taxonNameFilter = new TextFieldNFix("Name");
85

    
86
    private TextField referenceFilter = new TextFieldNFix("Publication");
87

    
88
    private AbstractSelect statusTypeFilter;
89

    
90
    public ListViewBean() {
91
        super();
92
    }
93

    
94
    @Override
95
    protected void initContent() {
96

    
97
        getLayout().setId(NAME);
98
        toolBar = new HorizontalLayout();
99

    
100
        toolBar.addComponent(filterInstructionLabel);
101

    
102
        boolean userIsCurator = UserHelperAccess.userHelper().userIs(new RoleProber(RolesAndPermissions.ROLE_CURATION));
103
        boolean userIsAdmin = UserHelperAccess.userHelper().userIsAdmin();
104
        if(userIsCurator || userIsAdmin){
105
            submitterFilter = new ListSelect("Submitter");
106
            submitterFilter.setRows(1);
107
            submitterFilter.addValueChangeListener(e -> updateResults(null, null));
108
            toolBar.addComponent(submitterFilter);
109
        }
110

    
111
        if(viewMode.equals(Mode.all)){
112
            registrationStatusFilter = new ListSelect("Registration status", Arrays.asList(RegistrationStatus.values()));
113
            registrationStatusFilter.setNullSelectionAllowed(true);
114
            registrationStatusFilter.setRows(1);
115
            registrationStatusFilter.addValueChangeListener(e -> updateResults(null, null));
116
            toolBar.addComponent(registrationStatusFilter);
117
        }
118

    
119
        statusTypeFilter = new ListSelect("Type Status");
120
        ((ListSelect)statusTypeFilter).setRows(3);
121
        statusTypeFilter.setMultiSelect(true);
122
        statusTypeFilter.setNullSelectionAllowed(true);
123
        statusTypeFilter.addValueChangeListener(e -> updateResults(null, null));
124
        statusTypeFilter.setDescription("Strg + Click to unselect");
125

    
126
        toolBar.addComponents(identifierFilter, taxonNameFilter, statusTypeFilter);
127
        int textChangeTimeOut = 200;
128
        identifierFilter.addTextChangeListener(e -> updateResults(identifierFilter, e.getText()));
129
        identifierFilter.setTextChangeTimeout(textChangeTimeOut);
130
        taxonNameFilter.addTextChangeListener(e -> updateResults(taxonNameFilter, e.getText()));
131
        identifierFilter.setTextChangeTimeout(textChangeTimeOut);
132

    
133
        toolBar.setSpacing(true);
134
        toolBar.iterator().forEachRemaining( c -> c.addStyleName(ValoTheme.LABEL_TINY));
135
        addContentComponent(toolBar, null);
136

    
137
        pagerTop =  new PagerComponent(new PagerComponent.PagerClickListener() {
138

    
139
            @Override
140
            public void pageIndexClicked(Integer index) {
141
                getViewEventBus().publish(ListViewBean.this, new PagingEvent(ListViewBean.this, index));
142

    
143
            }
144
        });
145
        addContentComponent(pagerTop, null);
146
        ((VerticalLayout)getLayout()).setComponentAlignment(pagerTop, Alignment.MIDDLE_CENTER);
147

    
148
        listContainer = new CssLayout();
149
        listContainer.setId("registration-list");
150
        listContainer.setWidth(100, Unit.PERCENTAGE);
151
        addContentComponent(listContainer, 1f);
152

    
153
    }
154

    
155
    /**
156
     * @return
157
     */
158
    private void updateResults(TextField field, String newText) {
159
        getViewEventBus().publish(this, new UpdateResultsEvent(field, newText, this));
160
    }
161

    
162
    @Override
163
    protected String getHeaderText() {
164
        return "Registrations";
165
    }
166

    
167
    @Override
168
    protected String getSubHeaderText() {
169
        return "This is the list of all your registrations in progress.";
170
    }
171

    
172

    
173
    /**
174
     * {@inheritDoc}
175
     */
176
    @Override
177
    public void enter(ViewChangeEvent event) {
178
        getPresenter().onViewEnter();
179
    }
180

    
181
    @Override
182
    public void populate(Pager<RegistrationDTO> regDtoPager) {
183

    
184
        ArrayList<RegistrationDTO> regDtos = new ArrayList<RegistrationDTO>(regDtoPager.getRecords());
185

    
186
        pagerTop.updatePager(regDtoPager);
187

    
188
        populateList(regDtos);
189
    }
190

    
191
    public void populateList(Collection<RegistrationDTO> registrations) {
192

    
193
        listContainer.removeAllComponents();
194
        boolean isCurator = UserHelperAccess.userHelper().userIs(new RoleProber(RolesAndPermissions.ROLE_CURATION)) || UserHelperAccess.userHelper().userIsAdmin();
195
        for(RegistrationDTO regDto : registrations) {
196
            RegistrationItem item = new RegistrationItem(regDto, this);
197
            item.getSubmitterLabel().setVisible(isCurator);
198
            item.setWidth(100, Unit.PERCENTAGE);
199
            item.getBlockedByButton().addClickListener(e -> getViewEventBus().publish(
200
                    this,
201
                    new ShowDetailsEvent<Registration, UUID>(
202
                            e, Registration.class, regDto.getUuid(), "blockedBy"
203
                            )
204
                    ));
205
            listContainer.addComponent(item);
206
        }
207
    }
208

    
209
    @Override
210
    public void openDetailsPopup(String caption, List<String> messages){
211
        StringBuffer sb = new StringBuffer();
212
        sb.append("<div class=\"details-popup-content\">");
213
        messages.forEach(s -> sb.append(s).append("</br>"));
214
        sb.append("</div>");
215
        new Notification(caption, sb.toString(), Notification.Type.HUMANIZED_MESSAGE, true).show(Page.getCurrent());
216
    }
217

    
218
    /**
219
     * @param registrationItems
220
     * @return
221
     */
222
    @Deprecated
223
    private GeneratedPropertyContainer buildGeneratedProperties(
224
            BeanContainer<String, RegistrationDTO> registrationItems) {
225
        GeneratedPropertyContainer gpContainer = new GeneratedPropertyContainer(registrationItems);
226

    
227
        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
228

    
229
            @Override
230
            public String getValue(Item item, Object itemId, Object propertyId) {
231
                return "Open";
232
            }
233

    
234
            @Override
235
            public Class<String> getType() {
236
                return String.class;
237
            }
238
          });
239

    
240
        return gpContainer;
241
    }
242

    
243
    /**
244
     * {@inheritDoc}
245
     */
246
    @Override
247
    public boolean allowAnonymousAccess() {
248
        return false;
249
    }
250

    
251
    /**
252
     * {@inheritDoc}
253
     */
254
    @Override
255
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
256
        return null;
257
    }
258

    
259
    /**
260
     * @return the identifierFilter
261
     */
262
    @Override
263
    public TextField getIdentifierFilter() {
264
        return identifierFilter;
265
    }
266

    
267
    /**
268
     * @return the taxonNameFilter
269
     */
270
    @Override
271
    public TextField getTaxonNameFilter() {
272
        return taxonNameFilter;
273
    }
274

    
275
    /**
276
     * @return the referenceFilter
277
     */
278
    @Override
279
    public TextField getReferenceFilter() {
280
        return referenceFilter;
281
    }
282

    
283
    /**
284
     * @return the registrationStatusFilter
285
     */
286
    @Override
287
    public ListSelect getRegistrationStatusFilter() {
288
        return registrationStatusFilter;
289
    }
290

    
291
    /**
292
     * @return the submitterFilter
293
     */
294
    @Override
295
    public ListSelect getSubmitterFilter() {
296
        return submitterFilter;
297
    }
298

    
299
    /**
300
     * {@inheritDoc}
301
     */
302
    @Override
303
    public void setViewMode(Mode mode) {
304
        viewMode = mode;
305
    }
306

    
307

    
308
    @Override
309
    public Mode getViewMode() {
310
        return viewMode;
311
    }
312

    
313
    @Override
314
    public RegistrationItem getRegistrationItem(UUID registrationUuid){
315
        for(Component c : listContainer){
316
            RegistrationItem item = (RegistrationItem)c;
317
            if(registrationUuid.equals(item.getRegistrationUuid())){
318
                return item;
319
            }
320
        }
321
        return null;
322
    }
323

    
324
    /**
325
     * @return the statusTypeFilter for the TypeDesignation.statusType
326
     */
327
    @Override
328
    public AbstractSelect getStatusTypeFilter() {
329
        return statusTypeFilter;
330
    }
331
}
(4-4/19)