Project

General

Profile

Download (7.65 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
import java.util.Locale;
13

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

    
16
import com.vaadin.data.Item;
17
import com.vaadin.data.util.BeanContainer;
18
import com.vaadin.data.util.GeneratedPropertyContainer;
19
import com.vaadin.data.util.PropertyValueGenerator;
20
import com.vaadin.data.util.converter.Converter;
21
import com.vaadin.navigator.View;
22
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
23
import com.vaadin.server.FontAwesome;
24
import com.vaadin.shared.ui.grid.HeightMode;
25
import com.vaadin.spring.annotation.SpringView;
26
import com.vaadin.ui.Alignment;
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.VerticalLayout;
32
import com.vaadin.ui.renderers.ButtonRenderer;
33
import com.vaadin.ui.renderers.DateRenderer;
34
import com.vaadin.ui.renderers.HtmlRenderer;
35
import com.vaadin.ui.themes.ValoTheme;
36

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

    
53
    /**
54
     * @author a.kohlbecker
55
     * @since Mar 7, 2017
56
     *
57
     */
58
    protected final class RegistrationTypeConverter implements Converter<String, RegistrationType> {
59
        @Override
60
        public RegistrationType convertToModel(String value, Class<? extends RegistrationType> targetType,
61
                Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
62
            // not implemented
63
            return null;
64
        }
65

    
66
        @Override
67
        public String convertToPresentation(RegistrationType value, Class<? extends String> targetType,
68
                Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
69
            if(value.equals(RegistrationType.NAME)) {
70
                return FontAwesome.TAG.getHtml();
71
            }
72
            if(value.equals(RegistrationType.TYPIFICATION)) {
73
                return FontAwesome.TAGS.getHtml();
74
            }
75
            return FontAwesome.WARNING.getHtml();
76
        }
77

    
78
        @Override
79
        public Class<RegistrationType> getModelType() {
80
            return RegistrationType.class;
81
        }
82

    
83
        @Override
84
        public Class<String> getPresentationType() {
85
            return String.class;
86
        }
87
    }
88
    private static final long serialVersionUID = 3543300933072824713L;
89

    
90
    public static final String NAME = "list";
91

    
92
    private VerticalLayout layout;
93

    
94
    private Grid grid;
95

    
96
    public ListViewBean() {
97
        layout = new VerticalLayout();
98
        layout.setSpacing(true);
99
        layout.setSizeFull();
100

    
101
        Label title = new Label("Registrations");
102
        title.setStyleName(ValoTheme.LABEL_HUGE);
103
        title.setWidthUndefined();
104
        layout.addComponent(title);
105
        layout.setComponentAlignment(title, Alignment.TOP_CENTER);
106

    
107
        Label hint = new Label("This is the list of all your registrations in progress.");
108
        hint.setWidthUndefined();
109
        layout.addComponent(hint);
110
        layout.setComponentAlignment(hint, Alignment.MIDDLE_CENTER);
111

    
112
        grid = buildGrid();
113
        layout.addComponent(grid);
114
        layout.setExpandRatio(grid, 1);
115

    
116
        setCompositionRoot(layout);
117
        this.setSizeFull();
118
    }
119

    
120
    private Grid buildGrid() {
121
        Grid grid = new Grid();
122
        grid.setSizeFull();
123
        grid.setEditorEnabled(false);
124
        grid.setId("registration-list");
125
        grid.setCellStyleGenerator(cellRef -> cellRef.getPropertyId().toString());
126
        grid.setSelectionMode(SelectionMode.NONE);
127
        grid.setHeightMode(HeightMode.CSS);
128
        // add status as class  attribute to the rows to allow styling with css
129
        grid.setRowStyleGenerator(rowRef -> {return "status-" + rowRef.getItem().getItemProperty("status").getValue().toString();});
130
        return grid;
131
    }
132

    
133
    /**
134
     * {@inheritDoc}
135
     */
136
    @Override
137
    public void enter(ViewChangeEvent event) {
138
        getPresenter().onViewEnter();
139

    
140
    }
141

    
142
    /**
143
     * {@inheritDoc}
144
     */
145
    @Override
146
    @Autowired
147
    protected void injectPresenter(ListPresenter presenter) {
148
        setPresenter(presenter);
149

    
150
    }
151

    
152
    static final String[] visiblCols = new String[]{"status, summary", "registrationId"};
153
    /**
154
     * {@inheritDoc}
155
     */
156
    @Override
157
    public void populateTable(Collection<RegistrationDTO> registrations) {
158

    
159
        BeanContainer<String, RegistrationDTO> registrationItems = new BeanContainer<String, RegistrationDTO>(RegistrationDTO.class);
160
        registrationItems.setBeanIdProperty("specificIdentifier");
161
        registrationItems.addAll(registrations);
162

    
163
        grid.setContainerDataSource(buildGeneratedProperties(registrationItems));
164

    
165
        grid.removeAllColumns();
166

    
167
        Column typeColumn = grid.addColumn("registrationType");
168
        typeColumn.setRenderer(new HtmlRenderer(), new RegistrationTypeConverter());
169
        typeColumn.setHeaderCaption("");
170

    
171
        Column statusColumn = grid.addColumn("status");
172

    
173
        Column citationColumn = grid.addColumn("citation");
174
        citationColumn.setHeaderCaption("Publication");
175

    
176

    
177
        Column summaryColumn = grid.addColumn("summary");
178

    
179
        Column regidColumn = grid.addColumn("registrationId");
180
        regidColumn.setHeaderCaption("Id");
181
        regidColumn.setRenderer(new HtmlRenderer(), new UrlStringConverter("http://pyhcobank.org/"));
182

    
183
        Column createdColumn = grid.addColumn("created");
184
        createdColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
185
        createdColumn.setHidable(true);
186
        createdColumn.setHidden(true);
187

    
188
        Column regDateColumn = grid.addColumn("registrationDate");
189
        // regDateColumn.setHeaderCaption("Date");
190
        regDateColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
191
        regDateColumn.setHidable(true);
192
        regDateColumn.setHidden(true);
193

    
194

    
195
        Column buttonColumn = grid.addColumn("operation");
196
        buttonColumn.setRenderer(new ButtonRenderer(e -> eventBus.publishEvent(new NavigationEvent(
197
                RegistrationWorkflowViewBean.NAME,
198
                RegistrationWorkflowViewBean.ACTION_EDIT,
199
                e.getItemId().toString()
200
                ))));
201
        buttonColumn.setSortable(false);
202

    
203
        grid.setFrozenColumnCount(1);
204

    
205
    }
206

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

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

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

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

    
228
        return gpContainer;
229
    }
230

    
231
}
(3-3/8)