Project

General

Profile

Download (8.23 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.beans.factory.annotation.Autowired;
16
import org.springframework.security.core.GrantedAuthority;
17

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

    
39
import eu.etaxonomy.cdm.vaadin.component.registration.RegistrationItem;
40
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
41
import eu.etaxonomy.cdm.vaadin.util.converter.JodaDateTimeConverter;
42
import eu.etaxonomy.cdm.vaadin.util.converter.UrlStringConverter;
43
import eu.etaxonomy.cdm.vaadin.view.AbstractPageView;
44
import eu.etaxonomy.vaadin.ui.navigation.NavigationEvent;
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
    private static final long serialVersionUID = 3543300933072824713L;
55

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

    
58
    private CssLayout listContainer;
59

    
60
    private Grid grid;
61

    
62
    private CssLayout toolBar;
63

    
64
    public ListViewBean() {
65

    
66
        super();
67

    
68
        toolBar = new CssLayout();
69
        toolBar.setWidth(100, Unit.PERCENTAGE);
70
        toolBar.addComponent(new Button("As grid", e -> toggleListType(e)));
71
        getLayout().addComponent(toolBar);
72

    
73
        buildList();
74
        buildGrid();
75

    
76
        showList();
77
    }
78

    
79
    @Override
80
    protected String getHeaderText() {
81
        return "Registrations";
82
    }
83

    
84
    @Override
85
    protected String getSubHeaderText() {
86
        return "This is the list of all your registrations in progress.";
87
    }
88

    
89
    private void buildList() {
90
        listContainer = new CssLayout();
91
        listContainer.setId("registration-list");
92
        listContainer.setWidth(100, Unit.PERCENTAGE);
93
    }
94

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

    
107
    /**
108
     * @param e
109
     * @return
110
     */
111
    private Object toggleListType(ClickEvent e) {
112
        Button button = e.getButton();
113
        if(button.getCaption().equals("As grid")){
114
            button.setCaption("As list");
115
            showGrid();
116
        } else {
117
            button.setCaption("As grid");
118
            showList();
119
        }
120
        return null;
121
    }
122

    
123
    private void showList() {
124
        if(grid != null){
125
            getLayout().removeComponent(grid);
126
        }
127
        getLayout().addComponent(listContainer);
128
    }
129

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

    
137

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

    
146
    /**
147
     * {@inheritDoc}
148
     */
149
    @Override
150
    @Autowired
151
    protected void injectPresenter(ListPresenter presenter) {
152
        setPresenter(presenter);
153
    }
154

    
155
    @Override
156
    public void populate(Collection<RegistrationDTO> registrations) {
157

    
158
        registrations = new ArrayList<RegistrationDTO>(registrations).subList(0, 10);
159

    
160
        populateGrid(registrations);
161
        populateList(registrations);
162
    }
163

    
164

    
165
    public void populateGrid(Collection<RegistrationDTO> registrations) {
166

    
167
        BeanContainer<String, RegistrationDTO> registrationItems = new BeanContainer<String, RegistrationDTO>(RegistrationDTO.class);
168
        registrationItems.setBeanIdProperty("specificIdentifier");
169
        registrationItems.addAll(registrations);
170

    
171
        grid.setContainerDataSource(buildGeneratedProperties(registrationItems));
172

    
173
        grid.removeAllColumns();
174

    
175
        Column typeColumn = grid.addColumn("registrationType");
176
        typeColumn.setRenderer(new HtmlRenderer(), new RegistrationTypeConverter());
177
        typeColumn.setHeaderCaption("");
178

    
179
        Column statusColumn = grid.addColumn("status");
180

    
181
        Column citationColumn = grid.addColumn("citation");
182
        citationColumn.setHeaderCaption("Publication");
183

    
184

    
185
        Column summaryColumn = grid.addColumn("summary");
186

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

    
191
        Column createdColumn = grid.addColumn("created");
192
        createdColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
193
        createdColumn.setHidable(true);
194
        createdColumn.setHidden(true);
195

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

    
202

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

    
211
        grid.setFrozenColumnCount(1);
212

    
213
    }
214

    
215

    
216
    public void populateList(Collection<RegistrationDTO> registrations) {
217

    
218
        for(RegistrationDTO regDto : registrations) {
219
            Component item = new RegistrationItem(regDto, this);
220
            item.setWidth(100, Unit.PERCENTAGE);
221
            listContainer.addComponent(item);
222
        }
223
    }
224

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

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

    
242
        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
243

    
244
            @Override
245
            public String getValue(Item item, Object itemId, Object propertyId) {
246
                return "Open";
247
            }
248

    
249
            @Override
250
            public Class<String> getType() {
251
                return String.class;
252
            }
253
          });
254

    
255
        return gpContainer;
256
    }
257

    
258
    /**
259
     * {@inheritDoc}
260
     */
261
    @Override
262
    public boolean allowAnonymousAccess() {
263
        return false;
264
    }
265

    
266
    /**
267
     * {@inheritDoc}
268
     */
269
    @Override
270
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
271
        return null;
272
    }
273

    
274

    
275

    
276
}
(4-4/14)