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.context.MgnlContext;
40 import info.magnolia.periscope.operation.Operation;
41 import info.magnolia.periscope.operation.OperationResult;
42 import info.magnolia.periscope.operation.request.AppNavigationRequest;
43 import info.magnolia.ui.api.app.AppDescriptor;
44 import info.magnolia.ui.api.app.launcherlayout.AppLauncherGroupEntry;
45 import info.magnolia.ui.api.app.launcherlayout.AppLauncherLayout;
46 import info.magnolia.ui.api.app.launcherlayout.AppLauncherLayoutManager;
47 import info.magnolia.ui.api.ioc.AdmincentralScoped;
48 import info.magnolia.ui.api.location.DefaultLocation;
49 import info.magnolia.ui.api.location.Location;
50 import info.magnolia.ui.api.location.LocationController;
51
52 import java.util.Optional;
53
54 import javax.inject.Inject;
55
56 import org.apache.commons.lang3.StringUtils;
57
58
59
60
61 @AdmincentralScoped
62 public class AppNavigationOperation implements Operation<AppNavigationRequest> {
63
64 private final LocationController locationController;
65 private final ViewportLayout viewportLayout;
66 private AppLauncherLayoutManager appLauncherLayoutManager;
67
68 @Inject
69 public AppNavigationOperation(LocationController locationController, ViewportLayout viewportLayout, AppLauncherLayoutManager appLauncherLayoutManager) {
70 this.locationController = locationController;
71 this.viewportLayout = viewportLayout;
72 this.appLauncherLayoutManager = appLauncherLayoutManager;
73 }
74
75 @Override
76 public OperationResult execute(AppNavigationRequest request) {
77 AppLauncherLayout userLayout = appLauncherLayoutManager.getLayoutForUser(MgnlContext.getUser());
78
79 Optional<AppDescriptor> appDescriptor = userLayout.getGroups().stream()
80 .flatMap(group -> group.getApps().stream())
81 .map(AppLauncherGroupEntry::getAppDescriptor)
82 .filter(descriptor -> StringUtils.containsIgnoreCase(descriptor.getLabel(), request.getApp())
83 || StringUtils.containsIgnoreCase(descriptor.getName(), request.getApp()))
84 .findFirst();
85
86 if (!appDescriptor.isPresent()) {
87 return new OperationResult(false, "Request app could not be found.");
88 }
89
90 DefaultLocation appLocation = new DefaultLocation(Location.LOCATION_TYPE_APP, appDescriptor.get().getName());
91
92
93 if (request.getApp().equals(locationController.getWhere().getAppName())) {
94 viewportLayout.showApp(locationController.getWhere().getAppName());
95 return successfulResult();
96 }
97
98 locationController.goTo(appLocation);
99 return successfulResult();
100 }
101 }