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.Collection;
13
import java.util.List;
14

    
15
import org.springframework.security.core.GrantedAuthority;
16

    
17
import com.vaadin.data.Item;
18
import com.vaadin.data.util.BeanContainer;
19
import com.vaadin.data.util.GeneratedPropertyContainer;
20
import com.vaadin.data.util.PropertyValueGenerator;
21
import com.vaadin.navigator.View;
22
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
23
import com.vaadin.server.Page;
24
import com.vaadin.shared.ui.grid.HeightMode;
25
import com.vaadin.spring.annotation.SpringView;
26
import com.vaadin.ui.Button;
27
import com.vaadin.ui.Button.ClickEvent;
28
import com.vaadin.ui.CssLayout;
29
import com.vaadin.ui.Grid;
30
import com.vaadin.ui.Grid.Column;
31
import com.vaadin.ui.Grid.SelectionMode;
32
import com.vaadin.ui.Notification;
33
import com.vaadin.ui.renderers.ButtonRenderer;
34
import com.vaadin.ui.renderers.DateRenderer;
35
import com.vaadin.ui.renderers.HtmlRenderer;
36

    
37
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
38
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
39
import eu.etaxonomy.cdm.vaadin.security.UserHelper;
40
import eu.etaxonomy.cdm.vaadin.util.converter.JodaDateTimeConverter;
41
import eu.etaxonomy.cdm.vaadin.util.converter.UrlStringConverter;
42
import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
43
import eu.etaxonomy.vaadin.ui.navigation.NavigationEvent;
44

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

    
53
    private static final long serialVersionUID = 3543300933072824713L;
54

    
55
    public static final String NAME = "list";
56

    
57
    public static final String OPTION_ALL = "all";
58

    
59
    public static final String OPTION_IN_PROGRESS = "inprogress";
60

    
61
    private CssLayout listContainer;
62

    
63
    private Grid grid;
64

    
65
    private CssLayout toolBar;
66

    
67
    public ListViewBean() {
68
        super();
69
    }
70

    
71
    @Override
72
    protected void initContent() {
73
        toolBar = new CssLayout();
74
        toolBar.setWidth(100, Unit.PERCENTAGE);
75
        toolBar.addComponent(new Button("As grid", e -> toggleListType(e)));
76
        getLayout().addComponent(toolBar);
77

    
78
        buildList();
79
        buildGrid();
80

    
81
        showList();
82

    
83
    }
84

    
85
    @Override
86
    protected String getHeaderText() {
87
        return "Registrations";
88
    }
89

    
90
    @Override
91
    protected String getSubHeaderText() {
92
        return "This is the list of all your registrations in progress.";
93
    }
94

    
95
    private void buildList() {
96
        listContainer = new CssLayout();
97
        listContainer.setId("registration-list");
98
        listContainer.setWidth(100, Unit.PERCENTAGE);
99
    }
100

    
101
    private void buildGrid() {
102
        grid = new Grid();
103
        grid.setSizeFull();
104
        grid.setEditorEnabled(false);
105
        grid.setId("registration-list");
106
        grid.setCellStyleGenerator(cellRef -> cellRef.getPropertyId().toString());
107
        grid.setSelectionMode(SelectionMode.NONE);
108
        grid.setHeightMode(HeightMode.CSS);
109
        // add status as class  attribute to the rows to allow styling with css
110
        grid.setRowStyleGenerator(rowRef -> {return "status-" + rowRef.getItem().getItemProperty("status").getValue().toString();});
111
    }
112

    
113
    /**
114
     * @param e
115
     * @return
116
     */
117
    private Object toggleListType(ClickEvent e) {
118
        Button button = e.getButton();
119
        if(button.getCaption().equals("As grid")){
120
            button.setCaption("As list");
121
            showGrid();
122
        } else {
123
            button.setCaption("As grid");
124
            showList();
125
        }
126
        return null;
127
    }
128

    
129
    private void showList() {
130
        if(grid != null){
131
            getLayout().removeComponent(grid);
132
        }
133
        getLayout().addComponent(listContainer);
134
    }
135

    
136
    private void showGrid() {
137
        if(listContainer != null){
138
            getLayout().removeComponent(listContainer);
139
        }
140
        getLayout().addComponent(grid);
141
    }
142

    
143

    
144
    /**
145
     * {@inheritDoc}
146
     */
147
    @Override
148
    public void enter(ViewChangeEvent event) {
149
        getPresenter().onViewEnter();
150
    }
151

    
152
    @Override
153
    public void populate(Collection<RegistrationDTO> registrations) {
154

    
155
        registrations = new ArrayList<RegistrationDTO>(registrations);
156

    
157
        populateGrid(registrations);
158
        populateList(registrations);
159
    }
160

    
161

    
162
    public void populateGrid(Collection<RegistrationDTO> registrations) {
163

    
164
        BeanContainer<String, RegistrationDTO> registrationItems = new BeanContainer<String, RegistrationDTO>(RegistrationDTO.class);
165
        registrationItems.setBeanIdProperty("specificIdentifier");
166
        registrationItems.addAll(registrations);
167

    
168
        grid.setContainerDataSource(buildGeneratedProperties(registrationItems));
169

    
170
        grid.removeAllColumns();
171

    
172
        Column typeColumn = grid.addColumn("registrationType");
173
        typeColumn.setRenderer(new HtmlRenderer(), new RegistrationTypeConverter());
174
        typeColumn.setHeaderCaption("");
175

    
176
        Column statusColumn = grid.addColumn("status");
177

    
178
        Column citationColumn = grid.addColumn("citation");
179
        citationColumn.setHeaderCaption("Publication");
180

    
181

    
182
        Column summaryColumn = grid.addColumn("summary");
183

    
184
        Column regidColumn = grid.addColumn("identifier");
185
        regidColumn.setHeaderCaption("Id");
186
        regidColumn.setRenderer(new HtmlRenderer(), new UrlStringConverter("http://pyhcobank.org/"));
187

    
188
        Column createdColumn = grid.addColumn("created");
189
        createdColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
190
        createdColumn.setHidable(true);
191
        createdColumn.setHidden(true);
192

    
193
        Column regDateColumn = grid.addColumn("registrationDate");
194
        // regDateColumn.setHeaderCaption("Date");
195
        regDateColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
196
        regDateColumn.setHidable(true);
197
        regDateColumn.setHidden(true);
198

    
199

    
200
        Column buttonColumn = grid.addColumn("operation");
201
        buttonColumn.setRenderer(new ButtonRenderer(e -> eventBus.publishEvent(new NavigationEvent(
202
                RegistrationWorkflowViewBean.NAME,
203
                RegistrationWorkflowViewBean.ACTION_EDIT,
204
                e.getItemId().toString()
205
                ))));
206
        buttonColumn.setSortable(false);
207

    
208
        grid.setFrozenColumnCount(1);
209
    }
210

    
211
    public void populateList(Collection<RegistrationDTO> registrations) {
212

    
213
        boolean isCurator = UserHelper.userIsRegistrationCurator() || UserHelper.userIsAdmin();
214
        for(RegistrationDTO regDto : registrations) {
215
            RegistrationItem item = new RegistrationItem(regDto, this);
216
            item.getSubmitterLabel().setVisible(isCurator);
217
            item.setWidth(100, Unit.PERCENTAGE);
218
            listContainer.addComponent(item);
219
        }
220
    }
221

    
222
    @Override
223
    public void openDetailsPopup(String caption, List<String> messages){
224
        StringBuffer sb = new StringBuffer();
225
        sb.append("<div class=\"details-popup-content\">");
226
        messages.forEach(s -> sb.append(s).append("</br>"));
227
        sb.append("</div>");
228
        new Notification(caption, sb.toString(), Notification.Type.HUMANIZED_MESSAGE, true).show(Page.getCurrent());
229
    }
230

    
231
    /**
232
     * @param registrationItems
233
     * @return
234
     */
235
    private GeneratedPropertyContainer buildGeneratedProperties(
236
            BeanContainer<String, RegistrationDTO> registrationItems) {
237
        GeneratedPropertyContainer gpContainer = new GeneratedPropertyContainer(registrationItems);
238

    
239
        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
240

    
241
            @Override
242
            public String getValue(Item item, Object itemId, Object propertyId) {
243
                return "Open";
244
            }
245

    
246
            @Override
247
            public Class<String> getType() {
248
                return String.class;
249
            }
250
          });
251

    
252
        return gpContainer;
253
    }
254

    
255
    /**
256
     * {@inheritDoc}
257
     */
258
    @Override
259
    public boolean allowAnonymousAccess() {
260
        return false;
261
    }
262

    
263
    /**
264
     * {@inheritDoc}
265
     */
266
    @Override
267
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
268
        return null;
269
    }
270

    
271

    
272

    
273
}
(4-4/17)