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.admincentral.findbar.operation;
35
36 import static info.magnolia.periscope.operation.OperationResult.successfulResult;
37
38 import info.magnolia.admincentral.ViewportLayout;
39 import info.magnolia.admincentral.findbar.PeriscopeAppDetailCreator;
40 import info.magnolia.admincentral.findbar.PeriscopeAppDetailCreator.AppDetail;
41 import info.magnolia.periscope.operation.Operation;
42 import info.magnolia.periscope.operation.OperationResult;
43 import info.magnolia.periscope.operation.request.InternalNavigationRequest;
44 import info.magnolia.ui.api.ioc.AdmincentralScoped;
45 import info.magnolia.ui.api.location.LocationController;
46 import info.magnolia.ui.contentapp.detail.DetailLocation;
47 import info.magnolia.ui.contentapp.detail.DetailView;
48
49 import java.util.Optional;
50
51 import javax.inject.Inject;
52
53 import org.apache.commons.lang3.StringUtils;
54
55
56
57
58 @AdmincentralScoped
59 public class InternalNavigationOperation implements Operation<InternalNavigationRequest> {
60
61 private final LocationController locationController;
62 private final PeriscopeAppDetailCreator periscopeAppDetailCreator;
63 private final ViewportLayout viewportLayout;
64
65 @Inject
66 public InternalNavigationOperation(LocationController locationController, PeriscopeAppDetailCreator periscopeAppDetailCreator, ViewportLayout viewportLayout) {
67 this.locationController = locationController;
68 this.periscopeAppDetailCreator = periscopeAppDetailCreator;
69 this.viewportLayout = viewportLayout;
70 }
71
72 @Override
73 public OperationResult execute(InternalNavigationRequest request) {
74 Optional<AppDetail> appDetailOptional = periscopeAppDetailCreator.createAppDetailForWorkspace(request.getWorkspace());
75
76 if (!appDetailOptional.isPresent()) {
77 return new OperationResult(false, String.format("App configuration cannot be found for workspace: '%s'.", request.getWorkspace()));
78 }
79
80
81 if (StringUtils.isNotBlank(request.getAppName())) {
82 DetailLocation location = new DetailLocation(request.getAppName(), appDetailOptional.get().getSubAppName(), DetailView.ViewType.EDIT, request.getPath(), null);
83 locationController.goTo(location);
84 return successfulResult();
85 }
86
87
88 AppDetail appDetail = appDetailOptional.get();
89 DetailLocation location = new DetailLocation(appDetail.getAppName(), appDetail.getSubAppName(), DetailView.ViewType.EDIT, request.getPath(), null);
90
91
92 if (location.equals(locationController.getWhere())) {
93 viewportLayout.showApp(locationController.getWhere().getAppName());
94 return successfulResult();
95 }
96
97
98 locationController.goTo(location);
99 return successfulResult();
100 }
101 }