LuceneIndexDefinition.java 3.66 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.google.common.collect.ImmutableMap
 *  com.google.common.collect.ImmutableMap$Builder
 *  org.apache.jackrabbit.oak.plugins.index.lucene.IndexFormatVersion
 *  org.apache.sling.api.resource.PersistenceException
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.dam.index.builder;

import com.adobe.cq.dam.index.builder.AggregationRule;
import com.adobe.cq.dam.index.builder.IndexRule;
import com.adobe.cq.dam.index.builder.api.IndexDefinition;
import com.google.common.collect.ImmutableMap;
import java.util.List;
import java.util.Map;
import org.apache.jackrabbit.oak.plugins.index.lucene.IndexFormatVersion;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LuceneIndexDefinition
implements IndexDefinition {
    private static Logger log = LoggerFactory.getLogger(LuceneIndexDefinition.class);
    String indexName;
    List<IndexRule> indexRules;
    List<AggregationRule> aggregationRules;

    public LuceneIndexDefinition(String indexName, List<AggregationRule> aggregationRules, List<IndexRule> indexRules) {
        this.indexName = indexName;
        this.aggregationRules = aggregationRules;
        this.indexRules = indexRules;
    }

    @Override
    public boolean build(Resource resource) {
        return this.build(resource, false);
    }

    @Override
    public boolean build(Resource resource, boolean reindex) {
        if (resource == null) {
            log.warn("LuceneIndexDefinition build failed due to null resource");
            return false;
        }
        ResourceResolver resolver = resource.getResourceResolver();
        try {
            Resource oakIndexNode = resolver.getResource(resource, "oak:index");
            if (oakIndexNode == null) {
                oakIndexNode = resolver.create(resource, "oak:index", (Map)new ImmutableMap.Builder().put((Object)"jcr:primaryType", (Object)"nt:unstructured").build());
            }
            log.info(oakIndexNode.getPath());
            if (resolver.getResource(oakIndexNode, this.indexName) != null) {
                resolver.delete(resolver.getResource(oakIndexNode, this.indexName));
            }
            Resource indexDefNode = resolver.create(oakIndexNode, this.indexName, (Map)new ImmutableMap.Builder().put((Object)"jcr:primaryType", (Object)"oak:QueryIndexDefinition").put((Object)"async", (Object)"async").put((Object)"compatVersion", (Object)IndexFormatVersion.V2.getVersion()).put((Object)"type", (Object)"lucene").put((Object)"evaluatePathRestrictions", (Object)true).put((Object)"reindex", (Object)reindex).build());
            Resource aggregatesNode = resolver.create(indexDefNode, "aggregates", (Map)ImmutableMap.of((Object)"jcr:primaryType", (Object)"nt:unstructured"));
            for (AggregationRule aggRule : this.aggregationRules) {
                aggRule.build(aggregatesNode);
            }
            Resource indexRulesNode = resolver.create(indexDefNode, "indexRules", (Map)ImmutableMap.of((Object)"jcr:primaryType", (Object)"nt:unstructured"));
            for (IndexRule indexRule : this.indexRules) {
                indexRule.build(indexRulesNode);
            }
            resolver.commit();
            return true;
        }
        catch (PersistenceException e) {
            log.error("Error while creating LuceneIndexDefinition at {}", (Object)resource.getPath(), (Object)e);
            return false;
        }
    }
}