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.action;
35
36 import info.magnolia.i18nsystem.I18nizer;
37 import info.magnolia.objectfactory.Components;
38 import info.magnolia.ui.ValueContext;
39 import info.magnolia.ui.api.action.AbstractAction;
40 import info.magnolia.ui.api.action.ActionExecutionException;
41 import info.magnolia.ui.api.app.AppDescriptor;
42 import info.magnolia.ui.chooser.definition.ChooserDefinition;
43 import info.magnolia.ui.contentapp.Datasource;
44 import info.magnolia.ui.dialog.DialogDefinitionRegistry;
45 import info.magnolia.ui.framework.overlay.ChooserController;
46
47 import java.util.List;
48 import java.util.Optional;
49 import java.util.stream.Collectors;
50 import java.util.stream.Stream;
51
52 import javax.inject.Inject;
53
54 import org.apache.commons.lang3.StringUtils;
55
56 import com.vaadin.shared.ui.grid.DropLocation;
57
58
59
60
61 public class MoveAction<T> extends AbstractAction<MoveActionDefinition<T>> {
62
63 private final ChooserController chooserController;
64 private final Datasource<T> datasource;
65 private final ValueContext<T> valueContext;
66 private final DialogDefinitionRegistry dialogDefinitionRegistry;
67 private final I18nizer i18nizer;
68
69 @Inject
70 MoveAction(MoveActionDefinition<T> actionDefinition, ChooserController chooserController, Datasource<T> datasource, ValueContext<T> valueContext, DialogDefinitionRegistry dialogDefinitionRegistry, I18nizer i18nizer) {
71 super(actionDefinition);
72 this.chooserController = chooserController;
73 this.datasource = datasource;
74 this.valueContext = valueContext;
75 this.dialogDefinitionRegistry = dialogDefinitionRegistry;
76 this.i18nizer = i18nizer;
77 }
78
79
80
81
82 @Deprecated
83 public MoveAction(MoveActionDefinition<T> actionDefinition, ChooserController chooserController, Datasource<T> datasource, ValueContext<T> valueContext, AppDescriptor appDescriptor) {
84 this(actionDefinition, chooserController, datasource, valueContext, Components.getComponent(DialogDefinitionRegistry.class), Components.getComponent(I18nizer.class));
85 }
86
87 @Override
88 public void execute() throws ActionExecutionException {
89 ChooserDefinition<T, ?> chooser = (ChooserDefinition<T, ?>) getDefinition().getChooser();
90 if (chooser == null) {
91 chooser = (ChooserDefinition<T, ?>) i18nizer.decorate(dialogDefinitionRegistry.getProvider(getDefinition().getDialogId()).get());
92 }
93
94 final ChooserController.OnItemChosen<T> onItemChosen = chooserController.openChooser(chooser);
95 onItemChosen
96 .whenComplete((chooseResult, err) -> {
97 if (err != null) {
98 throw new RuntimeException(err);
99 }
100 final List<T> items = valueContext.get().collect(Collectors.toList());
101 final T target = chooseResult.getChoice().orElseThrow(IllegalArgumentException::new);
102 final DropLocation dropLocation = Optional.of(onItemChosen.getAction())
103 .flatMap(action -> Stream.of(DropLocation.values()).filter(location -> StringUtils.equalsIgnoreCase(location.name(), action)).findFirst())
104 .orElse(DropLocation.ON_TOP);
105 datasource.moveItems(items, target, dropLocation);
106 });
107 }
108 }