org.drools.workbench.screens.enums.backend.server.indexing.IndexEnumEntriesTest.java Source code

Java tutorial

Introduction

Here is the source code for org.drools.workbench.screens.enums.backend.server.indexing.IndexEnumEntriesTest.java

Source

/*
 * Copyright 2014 JBoss, by Red Hat, Inc
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.drools.workbench.screens.enums.backend.server.indexing;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopScoreDocCollector;
import org.drools.workbench.screens.enums.type.EnumResourceTypeDefinition;
import org.junit.Test;
import org.kie.workbench.common.services.refactoring.backend.server.BaseIndexingTest;
import org.kie.workbench.common.services.refactoring.backend.server.TestIndexer;
import org.kie.workbench.common.services.refactoring.backend.server.indexing.RuleAttributeNameAnalyzer;
import org.kie.workbench.common.services.refactoring.backend.server.query.QueryBuilder;
import org.kie.workbench.common.services.refactoring.model.index.terms.RuleAttributeIndexTerm;
import org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueFieldIndexTerm;
import org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueTypeIndexTerm;
import org.uberfire.ext.metadata.backend.lucene.index.LuceneIndex;
import org.uberfire.ext.metadata.backend.lucene.util.KObjectUtil;
import org.uberfire.ext.metadata.engine.Index;
import org.uberfire.ext.metadata.model.KObject;
import org.uberfire.java.nio.file.Path;

import static org.apache.lucene.util.Version.*;
import static org.junit.Assert.*;

public class IndexEnumEntriesTest extends BaseIndexingTest<EnumResourceTypeDefinition> {

    @Test
    public void testIndexEnumEntries() throws IOException, InterruptedException {
        //Add test files
        final Path path1 = basePath.resolve("enum1.enumeration");
        final String dsl1 = loadText("enum1.enumeration");
        ioService().write(path1, dsl1);
        final Path path2 = basePath.resolve("enum2.enumeration");
        final String dsl2 = loadText("enum2.enumeration");
        ioService().write(path2, dsl2);

        Thread.sleep(5000); //wait for events to be consumed from jgit -> (notify changes -> watcher -> index) -> lucene index

        final Index index = getConfig().getIndexManager()
                .get(org.uberfire.ext.metadata.io.KObjectUtil.toKCluster(basePath.getFileSystem()));

        //Enumerations using org.drools.workbench.screens.enums.backend.server.indexing.classes.Applicant
        {
            final IndexSearcher searcher = ((LuceneIndex) index).nrtSearcher();
            final TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
            final Query query = new QueryBuilder()
                    .addTerm(new ValueTypeIndexTerm(
                            "org.drools.workbench.screens.enums.backend.server.indexing.classes.Applicant"))
                    .build();

            searcher.search(query, collector);
            final ScoreDoc[] hits = collector.topDocs().scoreDocs;
            assertEquals(2, hits.length);

            final List<KObject> results = new ArrayList<KObject>();
            for (int i = 0; i < hits.length; i++) {
                results.add(KObjectUtil.toKObject(searcher.doc(hits[i].doc)));
            }
            assertContains(results, path1);
            assertContains(results, path2);

            ((LuceneIndex) index).nrtRelease(searcher);
        }

        //Enumerations using org.drools.workbench.screens.enums.backend.server.indexing.classes.Mortgage
        {
            final IndexSearcher searcher = ((LuceneIndex) index).nrtSearcher();
            final TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
            final Query query = new QueryBuilder().addTerm(new ValueTypeIndexTerm(
                    "org.drools.workbench.screens.enums.backend.server.indexing.classes.Mortgage")).build();

            searcher.search(query, collector);
            final ScoreDoc[] hits = collector.topDocs().scoreDocs;
            assertEquals(1, hits.length);

            final List<KObject> results = new ArrayList<KObject>();
            for (int i = 0; i < hits.length; i++) {
                results.add(KObjectUtil.toKObject(searcher.doc(hits[i].doc)));
            }
            assertContains(results, path2);

            ((LuceneIndex) index).nrtRelease(searcher);
        }

        //Enumerations using org.drools.workbench.screens.enums.backend.server.indexing.classes.Mortgage#amount
        {
            final IndexSearcher searcher = ((LuceneIndex) index).nrtSearcher();
            final TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
            final Query query = new QueryBuilder()
                    .addTerm(new ValueTypeIndexTerm(
                            "org.drools.workbench.screens.enums.backend.server.indexing.classes.Mortgage"))
                    .addTerm(new ValueFieldIndexTerm("amount")).build();

            searcher.search(query, collector);
            final ScoreDoc[] hits = collector.topDocs().scoreDocs;
            assertEquals(1, hits.length);

            final List<KObject> results = new ArrayList<KObject>();
            for (int i = 0; i < hits.length; i++) {
                results.add(KObjectUtil.toKObject(searcher.doc(hits[i].doc)));
            }
            assertContains(results, path2);

            ((LuceneIndex) index).nrtRelease(searcher);
        }

        //Enumerations using java.lang.Integer
        {
            final IndexSearcher searcher = ((LuceneIndex) index).nrtSearcher();
            final TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
            final Query query = new QueryBuilder().addTerm(new ValueTypeIndexTerm("java.lang.Integer")).build();

            searcher.search(query, collector);
            final ScoreDoc[] hits = collector.topDocs().scoreDocs;
            assertEquals(2, hits.length);

            final List<KObject> results = new ArrayList<KObject>();
            for (int i = 0; i < hits.length; i++) {
                results.add(KObjectUtil.toKObject(searcher.doc(hits[i].doc)));
            }
            assertContains(results, path1);
            assertContains(results, path2);

            ((LuceneIndex) index).nrtRelease(searcher);
        }

    }

    @Override
    protected TestIndexer getIndexer() {
        return new TestEnumFileIndexer();
    }

    @Override
    public Map<String, Analyzer> getAnalyzers() {
        return new HashMap<String, Analyzer>() {
            {
                put(RuleAttributeIndexTerm.TERM, new RuleAttributeNameAnalyzer(LUCENE_40));
            }
        };
    }

    @Override
    protected EnumResourceTypeDefinition getResourceTypeDefinition() {
        return new EnumResourceTypeDefinition();
    }

    @Override
    protected String getRepositoryName() {
        return this.getClass().getSimpleName();
    }

}