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.cms.core.version.VersionInfo;
37 import info.magnolia.ui.CloseHandler;
38 import info.magnolia.ui.api.action.AbstractAction;
39 import info.magnolia.ui.api.location.LocationController;
40 import info.magnolia.ui.ValueContext;
41 import info.magnolia.ui.contentapp.detail.ContentDetailSubApp;
42 import info.magnolia.ui.editor.FormView;
43 import info.magnolia.ui.datasource.ItemResolver;
44
45 import java.util.Optional;
46
47 import javax.inject.Inject;
48
49
50
51
52 public class ShowVersionAction<T> extends AbstractAction<ShowVersionActionDefinition> {
53
54 private final FormView<T> form;
55 private final ValueContext<T> valueContext;
56 private final ItemResolver<T> itemResolver;
57 private final LocationController locationController;
58 private final CloseHandler closeHandler;
59
60 @Inject
61 public ShowVersionAction(ShowVersionActionDefinition definition, FormView<T> form, ValueContext<T> valueContext, ItemResolver<T> itemResolver, LocationController locationController, CloseHandler closeHandler) {
62 super(definition);
63 this.form = form;
64 this.valueContext = valueContext;
65 this.itemResolver = itemResolver;
66 this.locationController = locationController;
67 this.closeHandler = closeHandler;
68 }
69
70 @Override
71 public void execute() {
72 getVersion().ifPresent(version -> {
73 closeHandler.close();
74 locationController.goTo(new ContentDetailSubApp.DetailLocation(
75 getDefinition().getAppName(),
76 getDefinition().getSubAppName(),
77 getDefinition().getViewType(),
78 itemResolver.getId(valueContext.getSingleOrThrow()),
79 version));
80 });
81 }
82
83 private Optional<String> getVersion() {
84 return form.<VersionInfo>getPropertyValue("versions").map(VersionInfo::getVersionName);
85 }
86 }