Project

General

Profile

Download (10.4 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.ICdmUuidCacher;
43
import eu.etaxonomy.cdm.model.name.Registration;
44
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
45
import eu.etaxonomy.cdm.service.UserHelperAccess;
46
import eu.etaxonomy.cdm.vaadin.component.PagerComponent;
47
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
48
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
49
import eu.etaxonomy.cdm.vaadin.event.PagingEvent;
50
import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
51
import eu.etaxonomy.cdm.vaadin.event.UpdateResultsEvent;
52
import eu.etaxonomy.cdm.vaadin.permission.AccessRestrictedView;
53
import eu.etaxonomy.cdm.vaadin.permission.RolesAndPermissions;
54
import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
55
import eu.etaxonomy.cdm.vaadin.view.name.CachingPresenter;
56

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

    
65

    
66
    private static final long serialVersionUID = 3543300933072824713L;
67

    
68
    public static final String NAME = "list";
69

    
70
    Mode viewMode = Mode.all;
71

    
72
    private CssLayout listContainer;
73

    
74
    private HorizontalLayout toolBar;
75

    
76
    private PagerComponent pagerTop;
77

    
78
    private Label filterInstructionLabel = new Label("Filter the registrations by");
79

    
80
    private ListSelect registrationStatusFilter = null;
81

    
82
    private ListSelect submitterFilter = null; // must be null, the presenter relies on this
83

    
84
    private TextField identifierFilter = new TextFieldNFix("Identifier");
85

    
86
    private TextField taxonNameFilter = new TextFieldNFix("Name");
87

    
88
    private TextField referenceFilter = new TextFieldNFix("Publication");
89

    
90
    private AbstractSelect statusTypeFilter;
91

    
92
    public ListViewBean() {
93
        super();
94
    }
95

    
96
    @Override
97
    protected void initContent() {
98

    
99
        getLayout().setId(NAME);
100
        toolBar = new HorizontalLayout();
101

    
102
        toolBar.addComponent(filterInstructionLabel);
103

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

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

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

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

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

    
139
        pagerTop =  new PagerComponent(new PagerComponent.PagerClickListener() {
140

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

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

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

    
155
    }
156

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

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

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

    
174

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

    
183
    @Override
184
    public void populate(Pager<RegistrationDTO> regDtoPager) {
185

    
186
        ArrayList<RegistrationDTO> regDtos = new ArrayList<RegistrationDTO>(regDtoPager.getRecords());
187

    
188
        pagerTop.updatePager(regDtoPager);
189

    
190
        populateList(regDtos);
191
    }
192

    
193
    public void populateList(Collection<RegistrationDTO> registrations) {
194

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

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

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

    
229
        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
230

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

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

    
242
        return gpContainer;
243
    }
244

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

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

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

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

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

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

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

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

    
309

    
310
    @Override
311
    public Mode getViewMode() {
312
        return viewMode;
313
    }
314

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

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