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