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.contentapp.movedialog.action;
35
36 import info.magnolia.objectfactory.ComponentProvider;
37 import info.magnolia.ui.api.action.AbstractAction;
38 import info.magnolia.ui.api.action.ActionExecutionException;
39 import info.magnolia.ui.api.app.AppContext;
40 import info.magnolia.ui.api.overlay.OverlayCloser;
41 import info.magnolia.ui.contentapp.browser.BrowserSubAppDescriptor;
42 import info.magnolia.ui.contentapp.movedialog.MoveActionCallback;
43 import info.magnolia.ui.contentapp.movedialog.MoveDialogPresenter;
44 import info.magnolia.ui.dialog.DialogCloseHandler;
45 import info.magnolia.ui.dialog.DialogView;
46 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
47 import info.magnolia.ui.workbench.tree.MoveLocation;
48
49 import java.util.Arrays;
50 import java.util.List;
51
52 import com.vaadin.v7.data.Item;
53
54
55
56
57 public class OpenMoveDialogAction extends AbstractAction<OpenMoveDialogActionDefinition> {
58
59 private AppContext appContext;
60
61 private ComponentProvider componentProvider;
62
63 private JcrNodeAdapter sourceNodeAdapter;
64
65 private List<Item> sourceNodeAdapters;
66
67 private MoveDialogPresenter moveDialogPresenter;
68
69 private OverlayCloser closeHandle;
70
71 public OpenMoveDialogAction(
72 OpenMoveDialogActionDefinition definition,
73 AppContext appContext,
74 ComponentProvider componentProvider,
75 Item sourceNodeAdapter,
76 MoveDialogPresenter moveDialogPresenter) {
77 this(definition, appContext, componentProvider, moveDialogPresenter, Arrays.asList(sourceNodeAdapter));
78 }
79
80 public OpenMoveDialogAction(
81 OpenMoveDialogActionDefinition definition,
82 AppContext appContext,
83 ComponentProvider componentProvider,
84 MoveDialogPresenter moveDialogPresenter,
85 List<Item> sourceNodeAdapters) {
86 super(definition);
87 this.appContext = appContext;
88 this.componentProvider = componentProvider;
89 this.sourceNodeAdapters = sourceNodeAdapters;
90 this.moveDialogPresenter = moveDialogPresenter;
91 }
92
93 @Override
94 public void execute() throws ActionExecutionException {
95 if (appContext.getActiveSubAppContext().getSubAppDescriptor() instanceof BrowserSubAppDescriptor) {
96 BrowserSubAppDescriptor descriptor = (BrowserSubAppDescriptor) appContext.getActiveSubAppContext().getSubAppDescriptor();
97 DialogView moveDialog = moveDialogPresenter.start(descriptor, sourceNodeAdapters, new MoveActionCallback() {
98 @Override
99 public void onMoveCancelled() {
100 closeHandle.close();
101 }
102
103 @Override
104 public void onMovePerformed(Item newHost, MoveLocation moveLocation) {
105 closeHandle.close();
106 }
107 });
108
109 this.closeHandle = appContext.openOverlay(moveDialog, moveDialog.getModalityLevel());
110 moveDialog.addDialogCloseHandler(new DialogCloseHandler() {
111 @Override
112 public void onDialogClose(DialogView dialogView) {
113 closeHandle.close();
114 }
115 });
116 }
117 }
118 }