1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.workbench.list;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.objectfactory.ComponentProvider;
38 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
39 import info.magnolia.ui.vaadin.integration.contentconnector.JcrContentConnector;
40 import info.magnolia.ui.workbench.AbstractContentPresenter;
41 import info.magnolia.ui.workbench.column.definition.ColumnDefinition;
42 import info.magnolia.ui.workbench.container.AbstractJcrContainer;
43 import info.magnolia.ui.workbench.container.Refreshable;
44 import info.magnolia.ui.workbench.definition.ContentPresenterDefinition;
45 import info.magnolia.ui.workbench.definition.WorkbenchDefinition;
46
47 import java.util.ArrayList;
48 import java.util.Iterator;
49 import java.util.List;
50
51 import javax.inject.Inject;
52
53 import com.vaadin.data.Container;
54
55
56
57
58 public class ListPresenter extends AbstractContentPresenter implements ListView.Listener {
59
60 protected final ListView view;
61
62 @Inject
63 public ListPresenter(final ListView view, final ComponentProvider componentProvider) {
64 super(componentProvider);
65 this.view = view;
66 }
67
68 @Override
69 public ListView start(WorkbenchDefinition workbenchDefinition, EventBus eventBus, String viewTypeName, ContentConnector contentConnector) {
70 super.start(workbenchDefinition, eventBus, viewTypeName, contentConnector);
71 this.container = initializeContainer();
72 view.setListener(this);
73 view.setContainer(container);
74 view.clearColumns();
75
76
77 Iterator<ColumnDefinition> it = getColumnsIterator();
78
79 while (it.hasNext()) {
80 ColumnDefinition column = it.next();
81
82 if (workbenchDefinition.isDialogWorkbench() && !column.isDisplayInChooseDialog()) {
83 continue;
84 }
85
86 String propertyId = column.getPropertyName();
87 String title = column.getLabel();
88
89 if (column.getWidth() > 0) {
90 view.addColumn(propertyId, title, column.getWidth());
91 } else if (column.getExpandRatio() > 0) {
92 view.addColumn(propertyId, title, column.getExpandRatio());
93 } else {
94 view.addColumn(propertyId, column.getLabel());
95 }
96
97 if (column.getFormatterClass() != null) {
98 view.setColumnFormatter(propertyId, getComponentProvider().newInstance(column.getFormatterClass(), column));
99 }
100 }
101
102 return view;
103 }
104
105 @Override
106 public void select(List<Object> itemIds) {
107 List<Object> objectIds = new ArrayList<Object>();
108 for (Object itemId : itemIds) {
109
110 if (!itemId.equals(contentConnector.getDefaultItemId())) {
111 objectIds.add(itemId);
112 }
113 }
114 view.select(objectIds);
115 }
116
117 @Override
118 public void refresh() {
119
120 if (container instanceof Refreshable) {
121 ((Refreshable) container).refresh();
122 }
123 }
124
125 @Override
126 protected Container initializeContainer() {
127 Container container = createContainer();
128 configureContainer(getPresenterDefinition(), container);
129 return container;
130 }
131
132 protected Container createContainer() {
133 return new FlatJcrContainer(((JcrContentConnector) contentConnector).getContentConnectorDefinition());
134 }
135
136 protected void configureContainer(ContentPresenterDefinition presenterDefinition, Container container) {
137 for (ColumnDefinition column : presenterDefinition.getColumns()) {
138 String propertyId = column.getPropertyName();
139 container.addContainerProperty(propertyId, column.getType(), null);
140
141
142 if (container instanceof AbstractJcrContainer) {
143 ((AbstractJcrContainer) container).addSortableProperty(propertyId);
144 }
145 }
146 }
147 }