2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.vaadin
.view
.registration
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Collection
;
13 import java
.util
.List
;
15 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
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
.Component
;
29 import com
.vaadin
.ui
.CssLayout
;
30 import com
.vaadin
.ui
.Grid
;
31 import com
.vaadin
.ui
.Grid
.Column
;
32 import com
.vaadin
.ui
.Grid
.SelectionMode
;
33 import com
.vaadin
.ui
.Notification
;
34 import com
.vaadin
.ui
.renderers
.ButtonRenderer
;
35 import com
.vaadin
.ui
.renderers
.DateRenderer
;
36 import com
.vaadin
.ui
.renderers
.HtmlRenderer
;
38 import eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationItem
;
39 import eu
.etaxonomy
.cdm
.vaadin
.security
.annotation
.RequireAuthentication
;
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
;
46 * @author a.kohlbecker
50 @SpringView(name
=ListViewBean
.NAME
)
51 @RequireAuthentication
52 public class ListViewBean
extends AbstractPageView
<ListPresenter
> implements ListView
, View
{
54 private static final long serialVersionUID
= 3543300933072824713L;
56 public static final String NAME
= "list";
58 private CssLayout listContainer
;
62 private CssLayout toolBar
;
64 public ListViewBean() {
68 toolBar
= new CssLayout();
69 toolBar
.setWidth(100, Unit
.PERCENTAGE
);
70 toolBar
.addComponent(new Button("As grid", e
-> toggleListType(e
)));
71 getLayout().addComponent(toolBar
);
80 protected String
getHeaderText() {
81 return "Registrations";
85 protected String
getSubHeaderText() {
86 return "This is the list of all your registrations in progress.";
89 private void buildList() {
90 listContainer
= new CssLayout();
91 listContainer
.setId("registration-list");
92 listContainer
.setWidth(100, Unit
.PERCENTAGE
);
95 private void buildGrid() {
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();});
111 private Object
toggleListType(ClickEvent e
) {
112 Button button
= e
.getButton();
113 if(button
.getCaption().equals("As grid")){
114 button
.setCaption("As list");
117 button
.setCaption("As grid");
123 private void showList() {
125 getLayout().removeComponent(grid
);
127 getLayout().addComponent(listContainer
);
130 private void showGrid() {
131 if(listContainer
!= null){
132 getLayout().removeComponent(listContainer
);
134 getLayout().addComponent(grid
);
142 public void enter(ViewChangeEvent event
) {
143 getPresenter().onViewEnter();
151 protected void injectPresenter(ListPresenter presenter
) {
152 setPresenter(presenter
);
156 public void populate(Collection
<RegistrationDTO
> registrations
) {
158 registrations
= new ArrayList
<RegistrationDTO
>(registrations
).subList(0, 10);
160 populateGrid(registrations
);
161 populateList(registrations
);
165 public void populateGrid(Collection
<RegistrationDTO
> registrations
) {
167 BeanContainer
<String
, RegistrationDTO
> registrationItems
= new BeanContainer
<String
, RegistrationDTO
>(RegistrationDTO
.class);
168 registrationItems
.setBeanIdProperty("specificIdentifier");
169 registrationItems
.addAll(registrations
);
171 grid
.setContainerDataSource(buildGeneratedProperties(registrationItems
));
173 grid
.removeAllColumns();
175 Column typeColumn
= grid
.addColumn("registrationType");
176 typeColumn
.setRenderer(new HtmlRenderer(), new RegistrationTypeConverter());
177 typeColumn
.setHeaderCaption("");
179 Column statusColumn
= grid
.addColumn("status");
181 Column citationColumn
= grid
.addColumn("citation");
182 citationColumn
.setHeaderCaption("Publication");
185 Column summaryColumn
= grid
.addColumn("summary");
187 Column regidColumn
= grid
.addColumn("identifier");
188 regidColumn
.setHeaderCaption("Id");
189 regidColumn
.setRenderer(new HtmlRenderer(), new UrlStringConverter("http://pyhcobank.org/"));
191 Column createdColumn
= grid
.addColumn("created");
192 createdColumn
.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
193 createdColumn
.setHidable(true);
194 createdColumn
.setHidden(true);
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);
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()
209 buttonColumn
.setSortable(false);
211 grid
.setFrozenColumnCount(1);
216 public void populateList(Collection
<RegistrationDTO
> registrations
) {
218 for(RegistrationDTO regDto
: registrations
) {
219 Component item
= new RegistrationItem(regDto
, this);
220 item
.setWidth(100, Unit
.PERCENTAGE
);
221 listContainer
.addComponent(item
);
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>"));
231 new Notification(caption
, sb
.toString(), Notification
.Type
.HUMANIZED_MESSAGE
, true).show(Page
.getCurrent());
235 * @param registrationItems
238 private GeneratedPropertyContainer
buildGeneratedProperties(
239 BeanContainer
<String
, RegistrationDTO
> registrationItems
) {
240 GeneratedPropertyContainer gpContainer
= new GeneratedPropertyContainer(registrationItems
);
242 gpContainer
.addGeneratedProperty("operation", new PropertyValueGenerator
<String
>() {
245 public String
getValue(Item item
, Object itemId
, Object propertyId
) {
250 public Class
<String
> getType() {