All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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