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.tree;
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.column.definition.ColumnDefinition;
41 import info.magnolia.ui.workbench.definition.ContentPresenterDefinition;
42 import info.magnolia.ui.workbench.definition.WorkbenchDefinition;
43 import info.magnolia.ui.workbench.event.ActionEvent;
44 import info.magnolia.ui.workbench.list.ListPresenter;
45 import info.magnolia.ui.workbench.tree.drop.DropConstraint;
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 org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
55
56 import com.vaadin.data.Container;
57 import com.vaadin.data.Property;
58
59
60
61
62 public class TreePresenter extends ListPresenter implements TreeView.Listener {
63
64 private static final String SAVE_ACTION_NAME = "saveItemProperty";
65 private static final Logger log = LoggerFactory.getLogger(TreePresenter.class);
66
67 @Inject
68 public TreePresenter(TreeView view, ComponentProvider componentProvider) {
69 super(view, componentProvider);
70 }
71
72 @Override
73 public TreeView start(WorkbenchDefinition workbenchDefinition, EventBus eventBus, String viewTypeName, ContentConnector contentConnector) {
74 TreeView view = (TreeView) super.start(workbenchDefinition, eventBus, viewTypeName, contentConnector);
75 boolean sortable = false;
76 for (ContentPresenterDefinition definition : workbenchDefinition.getContentViews()) {
77 if (TreePresenterDefinition.VIEW_TYPE.equals(definition.getViewType()) && definition instanceof TreePresenterDefinition) {
78 sortable = ((TreePresenterDefinition) definition).isSortable();
79 break;
80 }
81 }
82 if (view instanceof TreeViewImpl) {
83 ((TreeViewImpl) view).setSortable(sortable);
84 }
85
86
87 if (workbenchDefinition.isEditable()) {
88
89 List<Object> editableColumns = new ArrayList<Object>();
90
91 Iterator<ColumnDefinition> it = getColumnsIterator();
92 while (it.hasNext()) {
93 ColumnDefinition column = it.next();
94
95 String propertyId = column.getPropertyName();
96 if (column.isEditable()) {
97 editableColumns.add(propertyId);
98 }
99 }
100 view.setEditableColumns(editableColumns.toArray());
101 view.setEditable(true);
102 }
103
104
105 Class<? extends DropConstraint> dropConstraintClass = workbenchDefinition.getDropConstraintClass();
106 if (dropConstraintClass != null) {
107 final DropConstraint constraint = getComponentProvider().newInstance(dropConstraintClass);
108 final MoveHandler moveHandler = getComponentProvider().newInstance(MoveHandler.class, view.asVaadinComponent(), constraint);
109 view.setDragAndDropHandler(moveHandler.asDropHandler());
110 log.debug("Set following drop container {} to the treeTable", dropConstraintClass.getName());
111 }
112
113 return view;
114 }
115
116
117 public void disableDragAndDrop() {
118 ((TreeView) view).setDragAndDropHandler(null);
119 }
120
121
122
123 @Override
124 public void onItemEdited(Object itemId, Object propertyId, Property<?> propertyDataSource) {
125 if (itemId != null && propertyId != null) {
126 eventBus.fireEvent(new ActionEvent(SAVE_ACTION_NAME, itemId, propertyId, propertyDataSource));
127 }
128
129
130 refresh();
131 }
132
133 @Override
134 public void expand(Object itemId) {
135 view.expand(itemId);
136 }
137
138 @Override
139 protected Container.Hierarchical createContainer() {
140 return new HierarchicalJcrContainer(((JcrContentConnector)contentConnector).getContentConnectorDefinition());
141 }
142 }