Project

General

Profile

Download (8.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.Component;
28
import com.vaadin.ui.CssLayout;
29
import com.vaadin.ui.HorizontalLayout;
30
import com.vaadin.ui.Label;
31
import com.vaadin.ui.ListSelect;
32
import com.vaadin.ui.Notification;
33
import com.vaadin.ui.TextField;
34

    
35
import eu.etaxonomy.cdm.api.service.dto.RegistrationDTO;
36
import eu.etaxonomy.cdm.api.service.pager.Pager;
37
import eu.etaxonomy.cdm.model.name.Registration;
38
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
39
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
40
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
41
import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
42
import eu.etaxonomy.cdm.vaadin.event.UpdateResultsEvent;
43
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
44
import eu.etaxonomy.cdm.vaadin.security.UserHelper;
45
import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
46

    
47
/**
48
 * @author a.kohlbecker
49
 * @since Mar 2, 2017
50
 *
51
 */
52
@SpringView(name=ListViewBean.NAME)
53
public class ListViewBean extends AbstractPageView<ListPresenter> implements ListView, View, AccessRestrictedView {
54

    
55

    
56
    private static final long serialVersionUID = 3543300933072824713L;
57

    
58
    public static final String NAME = "list";
59

    
60
    Mode viewMode = Mode.all;
61

    
62
    private CssLayout listContainer;
63

    
64
    private HorizontalLayout toolBar;
65

    
66
    private Label filterInstructionLabel = new Label("Filter the registrations by");
67

    
68
    private ListSelect statusFilter = null;
69

    
70
    private ListSelect submitterFilter = null; // must be null, the presenter relies on this
71

    
72
    private TextField identifierFilter = new TextFieldNFix("Identifier");
73

    
74
    private TextField taxonNameFilter = new TextFieldNFix("Name");
75

    
76
    private TextField referenceFilter = new TextFieldNFix("Publication");
77

    
78
    public ListViewBean() {
79
        super();
80
    }
81

    
82
    @Override
83
    protected void initContent() {
84

    
85
        getLayout().setId(NAME);
86
        toolBar = new HorizontalLayout();
87

    
88
        toolBar.addComponent(filterInstructionLabel);
89

    
90
        if(UserHelper.fromSession().userIsRegistrationCurator() || UserHelper.fromSession().userIsAdmin()){
91

    
92
            submitterFilter = new ListSelect("Submitter");
93
            submitterFilter.setRows(1);
94
            submitterFilter.addValueChangeListener(e -> updateResults(null, null));
95
            toolBar.addComponent(submitterFilter);
96
        }
97

    
98
        if(viewMode.equals(Mode.all)){
99
            statusFilter = new ListSelect("Status", Arrays.asList(RegistrationStatus.values()));
100
            statusFilter.setNullSelectionAllowed(true);
101
            statusFilter.setRows(1);
102
            statusFilter.addValueChangeListener(e -> updateResults(null, null));
103
            toolBar.addComponent(statusFilter);
104
        }
105

    
106
        toolBar.addComponents(identifierFilter, taxonNameFilter);
107
        int textChangeTimeOut = 200;
108
        identifierFilter.addTextChangeListener(e -> updateResults(identifierFilter, e.getText()));
109
        identifierFilter.setTextChangeTimeout(textChangeTimeOut);
110
        taxonNameFilter.addTextChangeListener(e -> updateResults(taxonNameFilter, e.getText()));
111
        identifierFilter.setTextChangeTimeout(textChangeTimeOut);
112

    
113
        toolBar.setSpacing(true);
114
        addContentComponent(toolBar, null);
115

    
116
        listContainer = new CssLayout();
117
        listContainer.setId("registration-list");
118
        listContainer.setWidth(100, Unit.PERCENTAGE);
119
        addContentComponent(listContainer, 1f);
120

    
121
    }
122

    
123
    /**
124
     * @return
125
     */
126
    private void updateResults(TextField field, String newText) {
127
        getViewEventBus().publish(this, new UpdateResultsEvent(field, newText, this));
128
    }
129

    
130
    @Override
131
    protected String getHeaderText() {
132
        return "Registrations";
133
    }
134

    
135
    @Override
136
    protected String getSubHeaderText() {
137
        return "This is the list of all your registrations in progress.";
138
    }
139

    
140

    
141
    /**
142
     * {@inheritDoc}
143
     */
144
    @Override
145
    public void enter(ViewChangeEvent event) {
146
        getPresenter().onViewEnter();
147
    }
148

    
149
    @Override
150
    public void populate(Pager<RegistrationDTO> regDtoPager) {
151

    
152
        ArrayList<RegistrationDTO> regDtos = new ArrayList<RegistrationDTO>(regDtoPager.getRecords());
153

    
154
        populateList(regDtos);
155
    }
156

    
157
    public void populateList(Collection<RegistrationDTO> registrations) {
158

    
159
        listContainer.removeAllComponents();
160
        boolean isCurator = UserHelper.fromSession().userIsRegistrationCurator() || UserHelper.fromSession().userIsAdmin();
161
        for(RegistrationDTO regDto : registrations) {
162
            RegistrationItem item = new RegistrationItem(regDto, this);
163
            item.getSubmitterLabel().setVisible(isCurator);
164
            item.setWidth(100, Unit.PERCENTAGE);
165
            item.getBlockedByButton().addClickListener(e -> getViewEventBus().publish(
166
                    this,
167
                    new ShowDetailsEvent<Registration, UUID>(
168
                            e, Registration.class, regDto.getUuid(), "blockedBy"
169
                            )
170
                    ));
171
            listContainer.addComponent(item);
172
        }
173
    }
174

    
175
    @Override
176
    public void openDetailsPopup(String caption, List<String> messages){
177
        StringBuffer sb = new StringBuffer();
178
        sb.append("<div class=\"details-popup-content\">");
179
        messages.forEach(s -> sb.append(s).append("</br>"));
180
        sb.append("</div>");
181
        new Notification(caption, sb.toString(), Notification.Type.HUMANIZED_MESSAGE, true).show(Page.getCurrent());
182
    }
183

    
184
    /**
185
     * @param registrationItems
186
     * @return
187
     */
188
    @Deprecated
189
    private GeneratedPropertyContainer buildGeneratedProperties(
190
            BeanContainer<String, RegistrationDTO> registrationItems) {
191
        GeneratedPropertyContainer gpContainer = new GeneratedPropertyContainer(registrationItems);
192

    
193
        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
194

    
195
            @Override
196
            public String getValue(Item item, Object itemId, Object propertyId) {
197
                return "Open";
198
            }
199

    
200
            @Override
201
            public Class<String> getType() {
202
                return String.class;
203
            }
204
          });
205

    
206
        return gpContainer;
207
    }
208

    
209
    /**
210
     * {@inheritDoc}
211
     */
212
    @Override
213
    public boolean allowAnonymousAccess() {
214
        return false;
215
    }
216

    
217
    /**
218
     * {@inheritDoc}
219
     */
220
    @Override
221
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
222
        return null;
223
    }
224

    
225
    /**
226
     * @return the identifierFilter
227
     */
228
    @Override
229
    public TextField getIdentifierFilter() {
230
        return identifierFilter;
231
    }
232

    
233
    /**
234
     * @return the taxonNameFilter
235
     */
236
    @Override
237
    public TextField getTaxonNameFilter() {
238
        return taxonNameFilter;
239
    }
240

    
241
    /**
242
     * @return the referenceFilter
243
     */
244
    @Override
245
    public TextField getReferenceFilter() {
246
        return referenceFilter;
247
    }
248

    
249
    /**
250
     * @return the statusFilter
251
     */
252
    @Override
253
    public ListSelect getStatusFilter() {
254
        return statusFilter;
255
    }
256

    
257
    /**
258
     * @return the submitterFilter
259
     */
260
    @Override
261
    public ListSelect getSubmitterFilter() {
262
        return submitterFilter;
263
    }
264

    
265
    /**
266
     * {@inheritDoc}
267
     */
268
    @Override
269
    public void setViewMode(Mode mode) {
270
        viewMode = mode;
271
    }
272

    
273

    
274
    @Override
275
    public Mode getViewMode() {
276
        return viewMode;
277
    }
278

    
279
    @Override
280
    public RegistrationItem getRegistrationItem(UUID registrationUuid){
281
        for(Component c : listContainer){
282
            RegistrationItem item = (RegistrationItem)c;
283
            if(registrationUuid.equals(item.getRegistrationUuid())){
284
                return item;
285
            }
286

    
287
        }
288
        return null;
289
    }
290

    
291

    
292

    
293

    
294

    
295

    
296

    
297
}
(4-4/20)