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.detail.action;
35
36 import info.magnolia.ui.CloseHandler;
37 import info.magnolia.ui.ValueContext;
38 import info.magnolia.ui.api.action.ActionExecutionException;
39 import info.magnolia.ui.api.app.AppContext;
40 import info.magnolia.ui.api.location.LocationController;
41 import info.magnolia.ui.contentapp.ContentBrowserSubApp;
42 import info.magnolia.ui.contentapp.Datasource;
43 import info.magnolia.ui.contentapp.action.CommitAction;
44 import info.magnolia.ui.datasource.ItemResolver;
45 import info.magnolia.ui.editor.EditorView;
46 import info.magnolia.ui.observation.DatasourceObservation;
47
48 import javax.inject.Inject;
49
50 import com.vaadin.data.BinderValidationStatus;
51
52
53
54
55 public class SaveDetailSubAppAction<T> extends CommitAction<T> {
56
57 private final SaveDetailSubAppActionDefinition definition;
58 private final LocationController locationController;
59 private final AppContext appContext;
60 private final ItemResolver<T> itemResolver;
61
62 @Inject
63 protected SaveDetailSubAppAction(SaveDetailSubAppActionDefinition definition, CloseHandler closeHandler, ValueContext<T> valueContext, EditorView<T> form, Datasource<T> datasource, DatasourceObservation.Manual datasourceObservation, LocationController locationController, AppContext appContext, ItemResolver<T> itemResolver) {
64 super(definition, closeHandler, valueContext, form, datasource, datasourceObservation);
65 this.locationController = locationController;
66 this.appContext = appContext;
67 this.itemResolver = itemResolver;
68 this.definition = definition;
69 }
70
71 @Override
72 public void execute() throws ActionExecutionException {
73 super.execute();
74 if (!definition.getBrowserName().isEmpty()) {
75 if (getForm().validate().stream().allMatch(BinderValidationStatus::isOk)) {
76 locationController.goTo(new ContentBrowserSubApp.BrowserLocation(
77 appContext.getName(),
78 definition.getBrowserName(),
79 getValueContext().getSingle()
80 .map(itemResolver::getId)
81 .orElse("")
82 ));
83 }
84 }
85 }
86 }