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.periscope.operation.Operation;
39 import info.magnolia.periscope.operation.OperationResult;
40 import info.magnolia.periscope.operation.request.AppNavigationRequest;
41 import info.magnolia.ui.api.app.AppDescriptor;
42 import info.magnolia.ui.api.app.registry.AppDescriptorRegistry;
43 import info.magnolia.ui.api.ioc.AdmincentralScoped;
44 import info.magnolia.ui.api.location.DefaultLocation;
45 import info.magnolia.ui.api.location.Location;
46 import info.magnolia.ui.api.location.LocationController;
47
48 import java.util.Optional;
49
50 import javax.inject.Inject;
51
52
53
54
55 @AdmincentralScoped
56 public class AppNavigationOperation implements Operation<AppNavigationRequest> {
57
58 private final LocationController locationController;
59 private final AppDescriptorRegistry appDescriptorRegistry;
60
61 @Inject
62 public AppNavigationOperation(LocationController locationController, AppDescriptorRegistry appDescriptorRegistry) {
63 this.locationController = locationController;
64 this.appDescriptorRegistry = appDescriptorRegistry;
65 }
66
67 @Override
68 public OperationResult execute(AppNavigationRequest request) {
69 Optional<AppDescriptor> appDescriptor = appDescriptorRegistry.getAllDefinitions().stream()
70 .filter(definition -> definition.getName().equalsIgnoreCase(request.getApp()))
71 .findFirst();
72
73 if (!appDescriptor.isPresent()) {
74 return new OperationResult(false, "Request app could not be found.");
75 }
76
77 locationController.goTo(new DefaultLocation(Location.LOCATION_TYPE_APP, request.getApp()));
78 return successfulResult();
79 }
80 }