@Override public FtsSearchResult search(String searchTerm, String entityName) { List<String> entityNames = ftsService.collectEntityHierarchyNames(entityName); SearchResult searchResult = ftsService.search(searchTerm.toLowerCase(), entityNames); List ids = new ArrayList<>(); Map<Object, String> resultHitInfos = new HashMap<>(); for (String entity : searchResult.getEntityNames()) { for (SearchResultEntry entry : searchResult.getEntries(entity)) { ids.add(entry.getId()); HitInfo hitInfo = searchResult.getHitInfo(entry.getId(), entityName); if (hitInfo != null) { StringBuilder sb = new StringBuilder(); for (Map.Entry<String, String> hitEntry : hitInfo.getHits().entrySet()) { sb.append(ftsService.getHitPropertyCaption(entity, hitEntry.getKey())) .append(": ") .append(hitEntry.getValue()) .append("<br/>"); } resultHitInfos.put(entry.getId(), sb.toString()); } } } int queryKey = getNextQueryKey(); queryResultsService.insert(queryKey, ids); FtsSearchResult ftsSearchResult = new FtsSearchResult(); ftsSearchResult.setQueryKey(queryKey); ftsSearchResult.setHitInfos(resultHitInfos); return ftsSearchResult; }
protected void displayInstances(SearchResult searchResult, String entityName, CssLayout instancesLayout) { Set<SearchResultEntry> entries = searchResult.getEntries(entityName); for (SearchResultEntry entry : entries) { Button instanceBtn = createInstanceButton(entityName, entry); instanceBtn.setAlignment(Alignment.MIDDLE_LEFT); instanceBtn.addStyleName("c-fts-entity"); instancesLayout.add(instanceBtn); HitInfo hi = searchResult.getHitInfo(entry.getId(), entityName); if (hi != null) { List<String> list = new ArrayList<>(hi.getHits().size()); for (Map.Entry<String, String> hitEntry : hi.getHits().entrySet()) { String hitProperty = hitEntry.getKey(); list.add(ftsService.getHitPropertyCaption(entityName, hitProperty) + ": " + hitEntry.getValue()); } Collections.sort(list); for (String caption : list) { Label hitLabel = createHitLabel(caption); hitLabel.addStyleName("c-fts-hit"); hitLabel.addStyleName("fts-hit"); hitLabel.setAlignment(Alignment.MIDDLE_LEFT); instancesLayout.add(hitLabel); } } } }