ProjectOmniSearchHandler.java 5.42 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.confmgr.Conf
 *  com.adobe.granite.omnisearch.commons.AbstractOmniSearchHandler
 *  com.adobe.granite.omnisearch.spi.core.OmniSearchHandler
 *  com.day.cq.dam.commons.util.GQLConverter
 *  com.day.cq.search.PredicateGroup
 *  com.day.cq.search.Query
 *  com.day.cq.search.QueryBuilder
 *  com.day.cq.search.result.SearchResult
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.jcr.observation.EventIterator
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.LoginException
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceResolverFactory
 *  org.osgi.service.component.ComponentContext
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.projects.impl.omnisearch;

import com.adobe.granite.confmgr.Conf;
import com.adobe.granite.omnisearch.commons.AbstractOmniSearchHandler;
import com.adobe.granite.omnisearch.spi.core.OmniSearchHandler;
import com.day.cq.dam.commons.util.GQLConverter;
import com.day.cq.search.PredicateGroup;
import com.day.cq.search.Query;
import com.day.cq.search.QueryBuilder;
import com.day.cq.search.result.SearchResult;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.observation.EventIterator;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(immediate=1, metatype=0)
@Service(value={OmniSearchHandler.class})
public class ProjectOmniSearchHandler
extends AbstractOmniSearchHandler {
    private final String TYPE = "project";
    private final String TYPE_PREDICATE_PARAMETER = "type";
    private final String PATH_PREDICATE_PARAMETER = "path";
    private static final Logger log = LoggerFactory.getLogger(ProjectOmniSearchHandler.class);
    @Reference
    private QueryBuilder queryBuilder;
    @Reference
    private ResourceResolverFactory resolverFactory;

    public String getID() {
        return "project";
    }

    public SearchResult getResults(ResourceResolver resolver, Map predicateParameters, long limit, long offset) {
        Resource moduleConfig = this.getModuleConfig(resolver);
        if (moduleConfig == null) {
            return null;
        }
        if (!predicateParameters.containsKey("type")) {
            predicateParameters.put("type", this.getResourceType());
        }
        if (!predicateParameters.containsKey("path")) {
            predicateParameters.put("path", this.getDefaultSearchPath());
        }
        try {
            PredicateGroup predicates = GQLConverter.buildQuery((Map)predicateParameters, (ResourceResolver)resolver);
            Query query = this.queryBuilder.createQuery(predicates, (Session)resolver.adaptTo(Session.class));
            if (limit != 0) {
                query.setHitsPerPage(limit);
            }
            if (offset != 0) {
                query.setStart(offset);
            }
            SearchResult queryResult = query.getResult();
            return queryResult;
        }
        catch (RepositoryException e) {
            log.error("Error while converting  requestParameterMap into PredicateGroup", (Throwable)e);
            return null;
        }
    }

    protected Resource getPredicateRootResource(ResourceResolver resolver) {
        Conf conf = (Conf)resolver.getResource("/content").adaptTo(Conf.class);
        return conf.getItemResource(this.getPredicatePath());
    }

    private ResourceResolver getResourceResolver() throws LoginException {
        HashMap<String, String> param = new HashMap<String, String>();
        param.put("sling.service.subservice", "omnisearch-service");
        return this.resolverFactory.getServiceResourceResolver(param);
    }

    public void onEvent(EventIterator eventIterator) {
        try {
            this.init(this.getResourceResolver());
        }
        catch (LoginException e) {
            log.error("Error during updation", (Throwable)e);
        }
    }

    protected void activate(ComponentContext componentContext) throws LoginException {
        this.init(this.getResourceResolver());
    }

    protected void deactivate(ComponentContext componentContext) throws LoginException {
        this.destroy(this.getResourceResolver());
    }

    protected void bindQueryBuilder(QueryBuilder queryBuilder) {
        this.queryBuilder = queryBuilder;
    }

    protected void unbindQueryBuilder(QueryBuilder queryBuilder) {
        if (this.queryBuilder == queryBuilder) {
            this.queryBuilder = null;
        }
    }

    protected void bindResolverFactory(ResourceResolverFactory resourceResolverFactory) {
        this.resolverFactory = resourceResolverFactory;
    }

    protected void unbindResolverFactory(ResourceResolverFactory resourceResolverFactory) {
        if (this.resolverFactory == resourceResolverFactory) {
            this.resolverFactory = null;
        }
    }
}