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.ui.ValueContext;
37 import info.magnolia.ui.api.action.AbstractAction;
38 import info.magnolia.ui.api.location.LocationController;
39 import info.magnolia.ui.contentapp.detail.ContentDetailSubApp;
40 import info.magnolia.ui.datasource.ItemResolver;
41
42 import java.util.Optional;
43
44 import javax.inject.Inject;
45
46
47
48
49
50
51
52
53 public class OpenDetailSubappAction<T> extends AbstractAction<OpenDetailSubappActionDefinition> {
54
55 private final ValueContext<T> valueContext;
56 private final LocationController locationController;
57 private final ItemResolver<T> itemResolver;
58
59 @Inject
60 protected OpenDetailSubappAction(
61 OpenDetailSubappActionDefinition definition,
62 ValueContext<T> valueContext,
63 LocationController locationController,
64 ItemResolver<T> itemResolver) {
65 super(definition);
66 this.valueContext = valueContext;
67 this.locationController = locationController;
68 this.itemResolver = itemResolver;
69 }
70
71 @Override
72 public void execute() {
73 locationController.goTo(getLocation(valueContext.getSingle(), itemResolver));
74 }
75
76 protected ContentDetailSubApp.DetailLocation getLocation(Optional<T> item, ItemResolver<T> itemResolver) {
77 return new ContentDetailSubApp.DetailLocation(
78 getDefinition().getAppName(),
79 getDefinition().getSubAppName(),
80 getDefinition().getViewType(),
81 item.map(itemResolver::getId).orElse(""),
82 "");
83 }
84
85 protected ValueContext<T> getValueContext() {
86 return valueContext;
87 }
88 }