Project

General

Profile

Download (9.89 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.model.name.Registration;
42
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
43
import eu.etaxonomy.cdm.vaadin.component.PagerComponent;
44
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
45
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
46
import eu.etaxonomy.cdm.vaadin.event.PagingEvent;
47
import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
48
import eu.etaxonomy.cdm.vaadin.event.UpdateResultsEvent;
49
import eu.etaxonomy.cdm.vaadin.permission.AccessRestrictedView;
50
import eu.etaxonomy.cdm.vaadin.permission.UserHelper;
51
import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
52

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

    
61

    
62
    private static final long serialVersionUID = 3543300933072824713L;
63

    
64
    public static final String NAME = "list";
65

    
66
    Mode viewMode = Mode.all;
67

    
68
    private CssLayout listContainer;
69

    
70
    private HorizontalLayout toolBar;
71

    
72
    private PagerComponent pagerTop;
73

    
74
    private Label filterInstructionLabel = new Label("Filter the registrations by");
75

    
76
    private ListSelect registrationStatusFilter = null;
77

    
78
    private ListSelect submitterFilter = null; // must be null, the presenter relies on this
79

    
80
    private TextField identifierFilter = new TextFieldNFix("Identifier");
81

    
82
    private TextField taxonNameFilter = new TextFieldNFix("Name");
83

    
84
    private TextField referenceFilter = new TextFieldNFix("Publication");
85

    
86
    private AbstractSelect statusTypeFilter;
87

    
88
    public ListViewBean() {
89
        super();
90
    }
91

    
92
    @Override
93
    protected void initContent() {
94

    
95
        getLayout().setId(NAME);
96
        toolBar = new HorizontalLayout();
97

    
98
        toolBar.addComponent(filterInstructionLabel);
99

    
100
        if(UserHelper.fromSession().userIsRegistrationCurator() || UserHelper.fromSession().userIsAdmin()){
101

    
102
            submitterFilter = new ListSelect("Submitter");
103
            submitterFilter.setRows(1);
104
            submitterFilter.addValueChangeListener(e -> updateResults(null, null));
105
            toolBar.addComponent(submitterFilter);
106
        }
107

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

    
116
        statusTypeFilter = new ListSelect("Type Status");
117
        ((ListSelect)statusTypeFilter).setRows(3);
118
        statusTypeFilter.setMultiSelect(true);
119
        statusTypeFilter.setNullSelectionAllowed(true);
120
        statusTypeFilter.addValueChangeListener(e -> updateResults(null, null));
121

    
122
        toolBar.addComponents(identifierFilter, taxonNameFilter, statusTypeFilter);
123
        int textChangeTimeOut = 200;
124
        identifierFilter.addTextChangeListener(e -> updateResults(identifierFilter, e.getText()));
125
        identifierFilter.setTextChangeTimeout(textChangeTimeOut);
126
        taxonNameFilter.addTextChangeListener(e -> updateResults(taxonNameFilter, e.getText()));
127
        identifierFilter.setTextChangeTimeout(textChangeTimeOut);
128

    
129
        toolBar.setSpacing(true);
130
        toolBar.iterator().forEachRemaining( c -> c.addStyleName(ValoTheme.LABEL_TINY));
131
        addContentComponent(toolBar, null);
132

    
133
        pagerTop =  new PagerComponent(new PagerComponent.PagerClickListener() {
134

    
135
            @Override
136
            public void pageIndexClicked(Integer index) {
137
                getViewEventBus().publish(ListViewBean.this, new PagingEvent(ListViewBean.this, index));
138

    
139
            }
140
        });
141
        addContentComponent(pagerTop, null);
142
        ((VerticalLayout)getLayout()).setComponentAlignment(pagerTop, Alignment.MIDDLE_CENTER);
143

    
144
        listContainer = new CssLayout();
145
        listContainer.setId("registration-list");
146
        listContainer.setWidth(100, Unit.PERCENTAGE);
147
        addContentComponent(listContainer, 1f);
148

    
149
    }
150

    
151
    /**
152
     * @return
153
     */
154
    private void updateResults(TextField field, String newText) {
155
        getViewEventBus().publish(this, new UpdateResultsEvent(field, newText, this));
156
    }
157

    
158
    @Override
159
    protected String getHeaderText() {
160
        return "Registrations";
161
    }
162

    
163
    @Override
164
    protected String getSubHeaderText() {
165
        return "This is the list of all your registrations in progress.";
166
    }
167

    
168

    
169
    /**
170
     * {@inheritDoc}
171
     */
172
    @Override
173
    public void enter(ViewChangeEvent event) {
174
        getPresenter().onViewEnter();
175
    }
176

    
177
    @Override
178
    public void populate(Pager<RegistrationDTO> regDtoPager) {
179

    
180
        ArrayList<RegistrationDTO> regDtos = new ArrayList<RegistrationDTO>(regDtoPager.getRecords());
181

    
182
        pagerTop.updatePager(regDtoPager);
183

    
184
        populateList(regDtos);
185
    }
186

    
187
    public void populateList(Collection<RegistrationDTO> registrations) {
188

    
189
        listContainer.removeAllComponents();
190
        boolean isCurator = UserHelper.fromSession().userIsRegistrationCurator() || UserHelper.fromSession().userIsAdmin();
191
        for(RegistrationDTO regDto : registrations) {
192
            RegistrationItem item = new RegistrationItem(regDto, this);
193
            item.getSubmitterLabel().setVisible(isCurator);
194
            item.setWidth(100, Unit.PERCENTAGE);
195
            item.getBlockedByButton().addClickListener(e -> getViewEventBus().publish(
196
                    this,
197
                    new ShowDetailsEvent<Registration, UUID>(
198
                            e, Registration.class, regDto.getUuid(), "blockedBy"
199
                            )
200
                    ));
201
            listContainer.addComponent(item);
202
        }
203
    }
204

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

    
214
    /**
215
     * @param registrationItems
216
     * @return
217
     */
218
    @Deprecated
219
    private GeneratedPropertyContainer buildGeneratedProperties(
220
            BeanContainer<String, RegistrationDTO> registrationItems) {
221
        GeneratedPropertyContainer gpContainer = new GeneratedPropertyContainer(registrationItems);
222

    
223
        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
224

    
225
            @Override
226
            public String getValue(Item item, Object itemId, Object propertyId) {
227
                return "Open";
228
            }
229

    
230
            @Override
231
            public Class<String> getType() {
232
                return String.class;
233
            }
234
          });
235

    
236
        return gpContainer;
237
    }
238

    
239
    /**
240
     * {@inheritDoc}
241
     */
242
    @Override
243
    public boolean allowAnonymousAccess() {
244
        return false;
245
    }
246

    
247
    /**
248
     * {@inheritDoc}
249
     */
250
    @Override
251
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
252
        return null;
253
    }
254

    
255
    /**
256
     * @return the identifierFilter
257
     */
258
    @Override
259
    public TextField getIdentifierFilter() {
260
        return identifierFilter;
261
    }
262

    
263
    /**
264
     * @return the taxonNameFilter
265
     */
266
    @Override
267
    public TextField getTaxonNameFilter() {
268
        return taxonNameFilter;
269
    }
270

    
271
    /**
272
     * @return the referenceFilter
273
     */
274
    @Override
275
    public TextField getReferenceFilter() {
276
        return referenceFilter;
277
    }
278

    
279
    /**
280
     * @return the registrationStatusFilter
281
     */
282
    @Override
283
    public ListSelect getRegistrationStatusFilter() {
284
        return registrationStatusFilter;
285
    }
286

    
287
    /**
288
     * @return the submitterFilter
289
     */
290
    @Override
291
    public ListSelect getSubmitterFilter() {
292
        return submitterFilter;
293
    }
294

    
295
    /**
296
     * {@inheritDoc}
297
     */
298
    @Override
299
    public void setViewMode(Mode mode) {
300
        viewMode = mode;
301
    }
302

    
303

    
304
    @Override
305
    public Mode getViewMode() {
306
        return viewMode;
307
    }
308

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

    
320
    /**
321
     * @return the statusTypeFilter for the TypeDesignation.statusType
322
     */
323
    @Override
324
    public AbstractSelect getStatusTypeFilter() {
325
        return statusTypeFilter;
326
    }
327
}
(4-4/19)