Project

General

Profile

Download (7.33 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.phycobank;
10

    
11
import java.util.Collection;
12

    
13
import org.springframework.beans.factory.annotation.Autowired;
14

    
15
import com.vaadin.data.Item;
16
import com.vaadin.data.util.BeanContainer;
17
import com.vaadin.data.util.GeneratedPropertyContainer;
18
import com.vaadin.data.util.PropertyValueGenerator;
19
import com.vaadin.lazyloadwrapper.LazyLoadWrapper;
20
import com.vaadin.navigator.View;
21
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
22
import com.vaadin.shared.ui.MarginInfo;
23
import com.vaadin.shared.ui.grid.HeightMode;
24
import com.vaadin.spring.annotation.SpringView;
25
import com.vaadin.ui.Alignment;
26
import com.vaadin.ui.Component;
27
import com.vaadin.ui.Grid;
28
import com.vaadin.ui.Grid.Column;
29
import com.vaadin.ui.Grid.SelectionMode;
30
import com.vaadin.ui.Label;
31
import com.vaadin.ui.Panel;
32
import com.vaadin.ui.VerticalLayout;
33
import com.vaadin.ui.renderers.ButtonRenderer;
34
import com.vaadin.ui.renderers.DateRenderer;
35
import com.vaadin.ui.renderers.HtmlRenderer;
36
import com.vaadin.ui.themes.ValoTheme;
37

    
38
import eu.etaxonomy.cdm.vaadin.component.phycobank.RegistrationItem;
39
import eu.etaxonomy.cdm.vaadin.presenter.phycobank.ListPresenter;
40
import eu.etaxonomy.cdm.vaadin.presenter.phycobank.RegistrationDTO;
41
import eu.etaxonomy.cdm.vaadin.util.JodaDateTimeConverter;
42
import eu.etaxonomy.cdm.vaadin.util.UrlStringConverter;
43
import eu.etaxonomy.vaadin.mvp.AbstractView;
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 AbstractView<ListPresenter> implements ListView, View {
53

    
54
    private static final long serialVersionUID = 3543300933072824713L;
55

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

    
58
    private VerticalLayout layout;
59

    
60
    private Grid grid;
61

    
62
    private Panel panel;
63

    
64
    public ListViewBean() {
65
        layout = new VerticalLayout();
66
        layout.setSpacing(true);
67
        layout.setSizeFull();
68

    
69
        Label title = new Label("Registrations");
70
        title.setStyleName(ValoTheme.LABEL_HUGE);
71
        title.setWidthUndefined();
72
        layout.addComponent(title);
73
        layout.setComponentAlignment(title, Alignment.TOP_CENTER);
74

    
75
        Label hint = new Label("This is the list of all your registrations in progress.");
76
        hint.setWidthUndefined();
77
        layout.addComponent(hint);
78
        layout.setComponentAlignment(hint, Alignment.MIDDLE_CENTER);
79

    
80
//        grid = buildGrid();
81
//        layout.addComponent(grid);
82
//        layout.setExpandRatio(grid, 1);
83

    
84
        buildPanel();
85

    
86
        setCompositionRoot(layout);
87
        this.setSizeFull();
88
    }
89

    
90
    /**
91
     *
92
     */
93
    private void buildPanel() {
94
        panel = new Panel();
95
        panel.setSizeFull();
96
        panel.setId("registration-list");
97
        layout.addComponent(panel);
98
        layout.setExpandRatio(panel, 1);
99
    }
100

    
101
    private Grid buildGrid() {
102
        Grid 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
        return grid;
112
    }
113

    
114
    /**
115
     * {@inheritDoc}
116
     */
117
    @Override
118
    public void enter(ViewChangeEvent event) {
119
        getPresenter().onViewEnter();
120

    
121
    }
122

    
123
    /**
124
     * {@inheritDoc}
125
     */
126
    @Override
127
    @Autowired
128
    protected void injectPresenter(ListPresenter presenter) {
129
        setPresenter(presenter);
130

    
131
    }
132

    
133
    static final String[] visiblCols = new String[]{"status, summary", "registrationId"};
134
    /**
135
     * {@inheritDoc}
136
     */
137
    @Override
138
    public void populateTable(Collection<RegistrationDTO> registrations) {
139

    
140
        BeanContainer<String, RegistrationDTO> registrationItems = new BeanContainer<String, RegistrationDTO>(RegistrationDTO.class);
141
        registrationItems.setBeanIdProperty("specificIdentifier");
142
        registrationItems.addAll(registrations);
143

    
144
        grid.setContainerDataSource(buildGeneratedProperties(registrationItems));
145

    
146
        grid.removeAllColumns();
147

    
148
        Column typeColumn = grid.addColumn("registrationType");
149
        typeColumn.setRenderer(new HtmlRenderer(), new RegistrationTypeConverter());
150
        typeColumn.setHeaderCaption("");
151

    
152
        Column statusColumn = grid.addColumn("status");
153

    
154
        Column citationColumn = grid.addColumn("citation");
155
        citationColumn.setHeaderCaption("Publication");
156

    
157

    
158
        Column summaryColumn = grid.addColumn("summary");
159

    
160
        Column regidColumn = grid.addColumn("registrationId");
161
        regidColumn.setHeaderCaption("Id");
162
        regidColumn.setRenderer(new HtmlRenderer(), new UrlStringConverter("http://pyhcobank.org/"));
163

    
164
        Column createdColumn = grid.addColumn("created");
165
        createdColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
166
        createdColumn.setHidable(true);
167
        createdColumn.setHidden(true);
168

    
169
        Column regDateColumn = grid.addColumn("registrationDate");
170
        // regDateColumn.setHeaderCaption("Date");
171
        regDateColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
172
        regDateColumn.setHidable(true);
173
        regDateColumn.setHidden(true);
174

    
175

    
176
        Column buttonColumn = grid.addColumn("operation");
177
        buttonColumn.setRenderer(new ButtonRenderer(e -> eventBus.publishEvent(new NavigationEvent(
178
                RegistrationWorkflowViewBean.NAME,
179
                RegistrationWorkflowViewBean.ACTION_EDIT,
180
                e.getItemId().toString()
181
                ))));
182
        buttonColumn.setSortable(false);
183

    
184
        grid.setFrozenColumnCount(1);
185

    
186
    }
187

    
188
    /**
189
     * {@inheritDoc}
190
     */
191
    @Override
192
    public void populateList(Collection<RegistrationDTO> registrations) {
193
        VerticalLayout list = new VerticalLayout();
194
        list.setMargin(new MarginInfo(false, true));
195
        list.setSpacing(true);
196
        for(RegistrationDTO regDto : registrations) {
197

    
198
            Component lazyItem = new LazyLoadWrapper(new RegistrationItem(regDto, this));
199
            list.addComponent(lazyItem);
200
//            if(list.getComponentCount() > 10){
201
//                break;
202
//            }
203
        }
204
        panel.setContent(list);
205

    
206
    }
207

    
208
    /**
209
     * @param registrationItems
210
     * @return
211
     */
212
    private GeneratedPropertyContainer buildGeneratedProperties(
213
            BeanContainer<String, RegistrationDTO> registrationItems) {
214
        GeneratedPropertyContainer gpContainer = new GeneratedPropertyContainer(registrationItems);
215

    
216
        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
217

    
218
            @Override
219
            public String getValue(Item item, Object itemId, Object propertyId) {
220
                return "Open";
221
            }
222

    
223
            @Override
224
            public Class<String> getType() {
225
                return String.class;
226
            }
227
          });
228

    
229
        return gpContainer;
230
    }
231

    
232

    
233

    
234
}
(3-3/9)