
com.adobe.forms.foundation.service.handlers.FormsAbstractOmniSearchHandler Maven / Gradle / Ivy
/*************************************************************************
*
* ADOBE CONFIDENTIAL
* __________________
*
* Copyright 2016 Adobe Systems Incorporated
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe Systems Incorporated and its suppliers,
* if any. The intellectual and technical concepts contained
* herein are proprietary to Adobe Systems Incorporated and its
* suppliers and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe Systems Incorporated.
**************************************************************************/
/**
* Created by jalagari on 1/11/2016.
*/
package com.adobe.forms.foundation.service.handlers;
import com.adobe.granite.confmgr.Conf;
import com.adobe.granite.omnisearch.commons.AbstractOmniSearchHandler;
import com.day.cq.search.Predicate;
import com.day.cq.search.PredicateGroup;
import com.day.cq.search.Query;
import com.day.cq.search.QueryBuilder;
import com.day.cq.search.eval.PathPredicateEvaluator;
import com.day.cq.search.result.SearchResult;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.sling.api.resource.*;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Session;
import javax.jcr.observation.EventIterator;
import java.util.HashMap;
import java.util.Map;
@Component(immediate = true)
public abstract class FormsAbstractOmniSearchHandler extends AbstractOmniSearchHandler{
private final String TYPE_PREDICATE_PARAMETER="type";
private final String PATH_PREDICATE_PARAMETER = "path";
private final String HANDLER_SEARCH_PATHS_PREDICATE_PARAMETER = "handlerSearchPaths";
protected final String OMNI_SEARCH_SUB_SERVICE_USER = "omnisearch-subservice";
private final static Logger logger = LoggerFactory.getLogger(FormsAbstractOmniSearchHandler.class);
@Reference
private QueryBuilder queryBuilder;
@Reference
private ResourceResolverFactory resolverFactory;
public SearchResult getResults(ResourceResolver resolver, Map predicateParameters, long limit, long offset){
Resource moduleConfig = getModuleConfig(resolver);
if(moduleConfig == null) {
return null;
}
PredicateGroup pathPredicateGroup = null;
if( !predicateParameters.containsKey(TYPE_PREDICATE_PARAMETER)) {
predicateParameters.put(TYPE_PREDICATE_PARAMETER,getResourceType());
}
if( !predicateParameters.containsKey(PATH_PREDICATE_PARAMETER)) {
// Check if any handlerSearchPaths is configured and set paths based on it
String[] paths = null;
if( !predicateParameters.containsKey(HANDLER_SEARCH_PATHS_PREDICATE_PARAMETER)) {
ValueMap configValueMap = moduleConfig.adaptTo(ValueMap.class);
paths = configValueMap.get(HANDLER_SEARCH_PATHS_PREDICATE_PARAMETER, String[].class);
}
if(paths != null && paths.length > 0) {
pathPredicateGroup = new PredicateGroup();
pathPredicateGroup.setAllRequired(false);
Predicate pathPredicate = null;
for (int index = 0; index < paths.length; index++) {
pathPredicate = new Predicate(PathPredicateEvaluator.PATH);
pathPredicate.set(PathPredicateEvaluator.PATH, paths[index]);
pathPredicateGroup.add(pathPredicate);
}
}
else {
predicateParameters.put(PATH_PREDICATE_PARAMETER, getDefaultSearchPath());
}
}
try {
PredicateGroup predicates = PredicateGroup.create(predicateParameters);
if(pathPredicateGroup != null)
predicates.add(pathPredicateGroup);
PredicateGroup[] predicateGroup = getPredicates();
if (predicateGroup != null) {
for (int i = 0; i < predicateGroup.length; i++) {
if (predicateGroup[i] != null) {
predicates.add(predicateGroup[i]);
}
}
}
Query query = queryBuilder.createQuery(predicates, resolver.adaptTo(Session.class));
if (limit != 0) {
query.setHitsPerPage(limit);
}
if(offset != 0) {
query.setStart(offset);
}
SearchResult queryResult = query.getResult ();
return queryResult;
} catch (Exception e) {
logger.error("Error in generating search result", e);
}
return null;
}
@Override
protected Resource getPredicateRootResource(ResourceResolver resolver) {
Conf conf = resolver.getResource("/content").adaptTo(Conf.class);
return conf.getItemResource(getPredicatePath());
}
/**
* Provide the ResourceResolver
for service user
* @return ResourceResolver
instance
* @throws LoginException
*/
private ResourceResolver getResourceResolver() throws LoginException {
Map param = new HashMap();
param.put(ResourceResolverFactory.SUBSERVICE, OMNI_SEARCH_SUB_SERVICE_USER);
return resolverFactory.getServiceResourceResolver(param);
}
public void onEvent(EventIterator eventIterator){
try {
init(getResourceResolver());
} catch (Exception e) {
logger.error("Error during updation", e);
}
}
protected PredicateGroup[] getPredicates(){
return null;
}
// --------------------------------------------------------------< OSGi component activation >
protected void activate(ComponentContext componentContext) throws LoginException{
init(getResourceResolver());
}
protected void deactivate(ComponentContext componentContext) throws LoginException{
destroy(getResourceResolver());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy