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.search.apps;
35
36 import info.magnolia.periscope.operation.request.AppNavigationRequest;
37 import info.magnolia.periscope.search.SearchException;
38 import info.magnolia.periscope.search.SearchQuery;
39 import info.magnolia.periscope.search.SearchResult;
40 import info.magnolia.periscope.search.SearchResultSupplier;
41 import info.magnolia.periscope.search.SearchResultSupplierDefinition;
42 import info.magnolia.ui.api.app.launcherlayout.AppLauncherLayout;
43 import info.magnolia.ui.api.app.launcherlayout.AppLauncherLayoutManager;
44 import info.magnolia.ui.api.app.registry.AppDescriptorRegistry;
45
46 import java.util.stream.Stream;
47
48 import org.apache.commons.lang3.StringUtils;
49
50
51
52
53
54 public class AppSearchResultSupplier implements SearchResultSupplier {
55
56 public static final String APPS_SUPPLIER_NAME = "apps";
57
58 private final SearchResultSupplierDefinition definition;
59 private final AppDescriptorRegistry appDescriptorRegistry;
60 private final AppLauncherLayoutManager appLauncherLayoutManager;
61
62 public AppSearchResultSupplier(AppSearchResultSupplierDefinition definition, AppDescriptorRegistry appDescriptorRegistry, AppLauncherLayoutManager appLauncherLayoutManager) {
63 this.definition = definition;
64 this.appDescriptorRegistry = appDescriptorRegistry;
65 this.appLauncherLayoutManager = appLauncherLayoutManager;
66 }
67
68 @Override
69 public String getName() {
70 return APPS_SUPPLIER_NAME;
71 }
72
73 @Override
74 public Stream<SearchResult> search(SearchQuery query) throws SearchException {
75 AppLauncherLayout userLayout = appLauncherLayoutManager.getLayoutForUser(query.getCurrentUser());
76
77 return appDescriptorRegistry.getAllDefinitions().stream()
78 .filter(descriptor -> StringUtils.containsIgnoreCase(descriptor.getName(), query.getQuery().trim()))
79 .filter(descriptor -> userLayout.containsApp(descriptor.getName()))
80 .map(descriptor -> SearchResult.builder()
81 .text(descriptor.getName())
82 .operationRequest(new AppNavigationRequest(descriptor.getName()))
83 .type(StringUtils.defaultIfBlank(descriptor.getIcon(), "icon-app"))
84 .build()
85 )
86 .limit(definition.getResultLimit());
87 }
88 }