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.dam.app.assets.field;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.event.EventBus;
38 import info.magnolia.jcr.util.NodeTypes;
39 import info.magnolia.jcr.util.NodeUtil;
40 import info.magnolia.ui.api.action.ActionDefinition;
41 import info.magnolia.ui.api.event.ChooseDialogEventBus;
42 import info.magnolia.ui.api.view.View;
43 import info.magnolia.ui.dialog.actionarea.ActionListener;
44 import info.magnolia.ui.dialog.actionarea.renderer.DefaultEditorActionRenderer;
45 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeItemId;
46 import info.magnolia.ui.workbench.event.SelectionChangedEvent;
47
48 import java.util.Set;
49
50 import javax.inject.Inject;
51 import javax.inject.Named;
52 import javax.jcr.RepositoryException;
53
54 import com.vaadin.ui.Button;
55
56
57
58
59
60 public class UploadAndEditActionRenderer extends DefaultEditorActionRenderer {
61
62 private final EventBus chooseDialogEventBus;
63
64 @Inject
65 public UploadAndEditActionRenderer(@Named(ChooseDialogEventBus.NAME) EventBus chooseDialogEventBus) {
66 this.chooseDialogEventBus = chooseDialogEventBus;
67 }
68
69 @Override
70 public View start(ActionDefinition definition, ActionListener listener) {
71 View view = super.start(definition, listener);
72 final Button button = (Button) view.asVaadinComponent();
73 chooseDialogEventBus.addHandler(SelectionChangedEvent.class, new SelectionChangedEvent.Handler() {
74
75 @Override
76 public void onSelectionChanged(SelectionChangedEvent event) {
77
78 Set<Object> itemIds = event.getItemIds();
79 if (itemIds == null || itemIds.isEmpty()) {
80 return;
81 }
82 try {
83 JcrNodeItemId nodeItemId = (JcrNodeItemId) itemIds.iterator().next();
84 javax.jcr.Node node = MgnlContext.getJCRSession(nodeItemId.getWorkspace()).getNodeByIdentifier(nodeItemId.getUuid());
85 boolean uploadAllowed = itemIds.size() == 1;
86 if (uploadAllowed) {
87 uploadAllowed &= NodeUtil.isNodeType(node, NodeTypes.Folder.NAME) || NodeUtil.getAncestors(node).isEmpty();
88 }
89 button.setEnabled(uploadAllowed);
90 } catch (RepositoryException e) {
91 button.setEnabled(false);
92 }
93 }
94 });
95 return view;
96 }
97
98 }