OrdersOmniSearchHandler.java 5.52 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.omnisearch.commons.AbstractOmniSearchHandler
 *  com.adobe.granite.omnisearch.spi.core.OmniSearchHandler
 *  com.day.cq.search.PredicateConverter
 *  com.day.cq.search.PredicateGroup
 *  com.day.cq.search.Query
 *  com.day.cq.search.QueryBuilder
 *  com.day.cq.search.result.SearchResult
 *  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.commerce.impl.omnisearch;

import com.adobe.granite.omnisearch.commons.AbstractOmniSearchHandler;
import com.adobe.granite.omnisearch.spi.core.OmniSearchHandler;
import com.day.cq.search.PredicateConverter;
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.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)
@Service(value={OmniSearchHandler.class})
public class OrdersOmniSearchHandler
extends AbstractOmniSearchHandler {
    private static final Logger LOGGER = LoggerFactory.getLogger(OrdersOmniSearchHandler.class);
    private static final String TYPE = "order";
    private static final String ORDER_NODE_NAME = "order";
    private static final String TYPE_PREDICATE_PARAMETER = "type";
    private static final String PATH_PREDICATE_PARAMETER = "path";
    private static final String FULLTEXT_PREDICATE_PARAMETER = "fulltext";
    private static final String NODENAME_PREDICATE_PARAMETER = "nodename";
    @Reference
    private ResourceResolverFactory resolverFactory = null;
    @Reference
    private QueryBuilder queryBuilder = null;

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

    public void onEvent(EventIterator eventIterator) {
        try {
            this.init(this.getResourceResolver());
        }
        catch (LoginException e) {
            LOGGER.error("Error initializing!", (Throwable)e);
        }
    }

    public SearchResult getResults(ResourceResolver resolver, Map<String, Object> 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());
        }
        if (!predicateParameters.containsKey("nodename")) {
            predicateParameters.put("nodename", "order");
        }
        if (predicateParameters.containsKey("fulltext")) {
            Object fulltext = predicateParameters.remove("fulltext");
            predicateParameters.put("group.p.or", "true");
            predicateParameters.put("group.1_fulltext", fulltext);
            predicateParameters.put("group.2_fulltext", fulltext);
            predicateParameters.put("group.2_fulltext.relPath", "order-details");
        }
        PredicateGroup predicates = PredicateConverter.createPredicates(predicateParameters);
        Query query = this.queryBuilder.createQuery(predicates, (Session)resolver.adaptTo(Session.class));
        if (limit != 0) {
            query.setHitsPerPage(limit);
        }
        if (offset != 0) {
            query.setStart(offset);
        }
        return query.getResult();
    }

    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);
    }

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

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

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

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

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

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