Project

General

Profile

Download (8.34 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.pager.Pager;
36
import eu.etaxonomy.cdm.model.name.Registration;
37
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
38
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
39
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
40
import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
41
import eu.etaxonomy.cdm.vaadin.event.UpdateResultsEvent;
42
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
43
import eu.etaxonomy.cdm.vaadin.security.UserHelper;
44
import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
45

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

    
54

    
55
    private static final long serialVersionUID = 3543300933072824713L;
56

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

    
59
    Mode viewMode = Mode.all;
60

    
61
    private CssLayout listContainer;
62

    
63
    private HorizontalLayout toolBar;
64

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

    
67
    private ListSelect statusFilter = null;
68

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

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

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

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

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

    
81
    @Override
82
    protected void initContent() {
83

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

    
87
        toolBar.addComponent(filterInstructionLabel);
88

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

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

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

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

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

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

    
120
    }
121

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

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

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

    
139

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

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

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

    
153
        populateList(regDtos);
154
    }
155

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

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

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

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

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

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

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

    
205
        return gpContainer;
206
    }
207

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

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

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

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

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

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

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

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

    
272

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

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

    
286
        }
287
        return null;
288
    }
289

    
290

    
291

    
292

    
293

    
294

    
295

    
296
}
(4-4/23)