Example usage for org.apache.lucene.search BooleanQuery getMaxClauseCount

List of usage examples for org.apache.lucene.search BooleanQuery getMaxClauseCount

Introduction

In this page you can find the example usage for org.apache.lucene.search BooleanQuery getMaxClauseCount.

Prototype

public static int getMaxClauseCount() 

Source Link

Document

Return the maximum number of clauses permitted, 1024 by default.

Usage

From source file:org.elasticsearch.index.query.xcontent.BoolQueryParser.java

License:Apache License

@Inject
public BoolQueryParser(Index index, @IndexSettings Settings settings) {
    super(index, settings);
    BooleanQuery.setMaxClauseCount(/*from   w w  w .  ja  v a 2 s .c om*/
            settings.getAsInt("index.query.bool.max_clause_count", BooleanQuery.getMaxClauseCount()));
}

From source file:org.elasticsearch.xpack.graph.test.GraphTests.java

License:Open Source License

public void testLargeNumberTermsStartCrawl() {
    GraphExploreRequestBuilder grb = new GraphExploreRequestBuilder(client(), GraphExploreAction.INSTANCE)
            .setIndices("test");
    Hop hop1 = grb.createNextHop(null);// www .  j av a  2  s. c o  m
    VertexRequest peopleNames = hop1.addVertexRequest("people").minDocCount(1);
    peopleNames.addInclude("john", 1);

    for (int i = 0; i < BooleanQuery.getMaxClauseCount() + 1; i++) {
        peopleNames.addInclude("unknown" + i, 1);
    }

    grb.createNextHop(null).addVertexRequest("people").size(100).minDocCount(1); // friends of members of beatles

    GraphExploreResponse response = grb.get();

    checkVertexDepth(response, 0, "john");
    checkVertexDepth(response, 1, "yoko");
}

From source file:org.eu.bitzone.Leia.java

License:Apache License

private void _explainStructure(final Object parent, final Query q) {
    String clazz = q.getClass().getName();
    if (clazz.startsWith("org.apache.lucene.")) {
        clazz = "lucene." + q.getClass().getSimpleName();
    } else if (clazz.startsWith("org.apache.solr.")) {
        clazz = "solr." + q.getClass().getSimpleName();
    }//from www  .  jav  a 2  s  .c o  m
    final float boost = q.getBoost();
    final Object n = create("node");
    add(parent, n);
    String msg = clazz;
    if (boost != 1.0f) {
        msg += ": boost=" + df.format(boost);
    }
    setFont(n, getFont().deriveFont(Font.BOLD));
    setString(n, "text", msg);
    if (clazz.equals("lucene.TermQuery")) {
        final Object n1 = create("node");
        final Term t = ((TermQuery) q).getTerm();
        setString(n1, "text", "Term: field='" + t.field() + "' text='" + t.text() + "'");
        add(n, n1);
    } else if (clazz.equals("lucene.BooleanQuery")) {
        final BooleanQuery bq = (BooleanQuery) q;
        final BooleanClause[] clauses = bq.getClauses();
        final int max = BooleanQuery.getMaxClauseCount();
        Object n1 = create("node");
        String descr = "clauses=" + clauses.length + ", maxClauses=" + max;
        if (bq.isCoordDisabled()) {
            descr += ", coord=false";
        }
        if (bq.getMinimumNumberShouldMatch() > 0) {
            descr += ", minShouldMatch=" + bq.getMinimumNumberShouldMatch();
        }
        setString(n1, "text", descr);
        add(n, n1);
        for (int i = 0; i < clauses.length; i++) {
            n1 = create("node");
            String occur;
            final Occur occ = clauses[i].getOccur();
            if (occ.equals(Occur.MUST)) {
                occur = "MUST";
            } else if (occ.equals(Occur.MUST_NOT)) {
                occur = "MUST_NOT";
            } else if (occ.equals(Occur.SHOULD)) {
                occur = "SHOULD";
            } else {
                occur = occ.toString();
            }
            setString(n1, "text", "Clause " + i + ": " + occur);
            add(n, n1);
            _explainStructure(n1, clauses[i].getQuery());
        }
    } else if (clazz.equals("lucene.PrefixQuery")) {
        Object n1 = create("node");
        final PrefixQuery pq = (PrefixQuery) q;
        final Term t = pq.getPrefix();
        setString(n1, "text", "Prefix: field='" + t.field() + "' text='" + t.text() + "'");
        add(n, n1);
        try {
            addTermsEnum(n, PrefixQuery.class, pq.getField(), pq);
        } catch (final Exception e) {
            e.printStackTrace();
            n1 = create("node");
            setString(n1, "text", "TermEnum: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (clazz.equals("lucene.PhraseQuery")) {
        final PhraseQuery pq = (PhraseQuery) q;
        setString(n, "text", getString(n, "text") + ", slop=" + pq.getSlop());
        final int[] pos = pq.getPositions();
        final Term[] terms = pq.getTerms();
        Object n1 = create("node");
        final StringBuffer sb = new StringBuffer("pos: [");
        for (int i = 0; i < pos.length; i++) {
            if (i > 0) {
                sb.append(',');
            }
            sb.append("" + pos[i]);
        }
        sb.append("]");
        setString(n1, "text", sb.toString());
        add(n, n1);
        for (int i = 0; i < terms.length; i++) {
            n1 = create("node");
            setString(n1, "text",
                    "Term " + i + ": field='" + terms[i].field() + "' text='" + terms[i].text() + "'");
            add(n, n1);
        }
    } else if (clazz.equals("lucene.MultiPhraseQuery")) {
        final MultiPhraseQuery pq = (MultiPhraseQuery) q;
        setString(n, "text", getString(n, "text") + ", slop=" + pq.getSlop());
        final int[] pos = pq.getPositions();
        Object n1 = create("node");
        final StringBuffer sb = new StringBuffer("pos: [");
        for (int i = 0; i < pos.length; i++) {
            if (i > 0) {
                sb.append(',');
            }
            sb.append("" + pos[i]);
        }
        sb.append("]");
        setString(n1, "text", sb.toString());
        add(n, n1);
        n1 = create("node");
        System.err.println("MultiPhraseQuery is missing the public getTermArrays() :-(");
        setString(n1, "text", "toString: " + pq.toString());
        add(n, n1);
    } else if (clazz.equals("lucene.FuzzyQuery")) {
        final FuzzyQuery fq = (FuzzyQuery) q;
        Object n1 = create("node");
        setString(n1, "text", "field=" + fq.getField() + ", prefixLen=" + fq.getPrefixLength() + ", maxEdits="
                + df.format(fq.getMaxEdits()));
        add(n, n1);
        try {
            addTermsEnum(n, FuzzyQuery.class, fq.getField(), fq);
        } catch (final Exception e) {
            e.printStackTrace();
            n1 = create("node");
            setString(n1, "text", "TermEnum: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (clazz.equals("lucene.WildcardQuery")) {
        final WildcardQuery wq = (WildcardQuery) q;
        final Term t = wq.getTerm();
        setString(n, "text", getString(n, "text") + ", term=" + t);
        final Automaton a = WildcardQuery.toAutomaton(t);
        addAutomaton(n, a);
    } else if (clazz.equals("lucene.TermRangeQuery")) {
        final TermRangeQuery rq = (TermRangeQuery) q;
        setString(n, "text", getString(n, "text") + ", inclLower=" + rq.includesLower() + ", inclUpper="
                + rq.includesUpper());
        Object n1 = create("node");
        setString(n1, "text", "lowerTerm=" + rq.getField() + ":" + rq.getLowerTerm() + "'");
        add(n, n1);
        n1 = create("node");
        setString(n1, "text", "upperTerm=" + rq.getField() + ":" + rq.getUpperTerm() + "'");
        add(n, n1);
        try {
            addTermsEnum(n, TermRangeQuery.class, rq.getField(), rq);
        } catch (final Exception e) {
            e.printStackTrace();
            n1 = create("node");
            setString(n1, "text", "TermEnum: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (q instanceof AutomatonQuery) {
        final AutomatonQuery aq = (AutomatonQuery) q;
        setString(n, "text", getString(n, "text") + ", " + aq.toString());
        // get automaton
        try {
            final java.lang.reflect.Field aField = AutomatonQuery.class.getDeclaredField("automaton");
            aField.setAccessible(true);
            final Automaton a = (Automaton) aField.get(aq);
            addAutomaton(n, a);
        } catch (final Exception e) {
            e.printStackTrace();
            final Object n1 = create("node");
            setString(n1, "text", "Automaton: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (q instanceof MultiTermQuery) {
        final MultiTermQuery mq = (MultiTermQuery) q;
        final Set<Term> terms = new HashSet<Term>();
        mq.extractTerms(terms);
        setString(n, "text", getString(n, "text") + ", terms: " + terms);
        try {
            addTermsEnum(n, TermRangeQuery.class, mq.getField(), mq);
        } catch (final Exception e) {
            e.printStackTrace();
            final Object n1 = create("node");
            setString(n1, "text", "TermEnum: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (q instanceof ConstantScoreQuery) {
        final ConstantScoreQuery cq = (ConstantScoreQuery) q;
        setString(n, "text", getString(n, "text") + ", " + cq.toString());
        final Object n1 = create("node");
        add(n, n1);
        if (cq.getFilter() != null) {
            setString(n1, "text", "Filter: " + cq.getFilter().toString());
        } else if (cq.getQuery() != null) {
            _explainStructure(n, cq.getQuery());
        }
    } else if (q instanceof FilteredQuery) {
        final FilteredQuery fq = (FilteredQuery) q;
        final Object n1 = create("node");
        setString(n1, "text", "Filter: " + fq.getFilter().toString());
        add(n, n1);
        _explainStructure(n, fq.getQuery());
    } else if (q instanceof SpanQuery) {
        final SpanQuery sq = (SpanQuery) q;
        final Class sqlass = sq.getClass();
        setString(n, "text", getString(n, "text") + ", field=" + sq.getField());
        if (sqlass == SpanOrQuery.class) {
            final SpanOrQuery soq = (SpanOrQuery) sq;
            setString(n, "text", getString(n, "text") + ", " + soq.getClauses().length + " clauses");
            for (final SpanQuery sq1 : soq.getClauses()) {
                _explainStructure(n, sq1);
            }
        } else if (sqlass == SpanFirstQuery.class) {
            final SpanFirstQuery sfq = (SpanFirstQuery) sq;
            setString(n, "text", getString(n, "text") + ", end=" + sfq.getEnd() + ", match:");
            _explainStructure(n, sfq.getMatch());
        } else if (q instanceof SpanNearQuery) { // catch also known subclasses
            final SpanNearQuery snq = (SpanNearQuery) sq;
            setString(n, "text", getString(n, "text") + ", slop=" + snq.getSlop());
            if (snq instanceof PayloadNearQuery) {
                try {
                    final java.lang.reflect.Field function = PayloadNearQuery.class
                            .getDeclaredField("function");
                    function.setAccessible(true);
                    final Object func = function.get(snq);
                    setString(n, "text", getString(n, "text") + ", func=" + func.getClass().getSimpleName());
                } catch (final Exception e) {
                    e.printStackTrace();
                }
            }
            for (final SpanQuery sq1 : snq.getClauses()) {
                _explainStructure(n, sq1);
            }
        } else if (sqlass == SpanNotQuery.class) {
            final SpanNotQuery snq = (SpanNotQuery) sq;
            Object n1 = create("node");
            add(n, n1);
            setString(n1, "text", "Include:");
            _explainStructure(n1, snq.getInclude());
            n1 = create("node");
            add(n, n1);
            setString(n1, "text", "Exclude:");
            _explainStructure(n1, snq.getExclude());
        } else if (q instanceof SpanTermQuery) {
            final SpanTermQuery stq = (SpanTermQuery) sq;
            setString(n, "text", getString(n, "text") + ", term=" + stq.getTerm());
            if (stq instanceof PayloadTermQuery) {
                try {
                    final java.lang.reflect.Field function = PayloadTermQuery.class
                            .getDeclaredField("function");
                    function.setAccessible(true);
                    final Object func = function.get(stq);
                    setString(n, "text", getString(n, "text") + ", func=" + func.getClass().getSimpleName());
                } catch (final Exception e) {
                    e.printStackTrace();
                }
            }
        } else {
            final String defField = getDefaultField(find("srchOptTabs"));
            setString(n, "text", "class=" + q.getClass().getName() + ", " + getString(n, "text") + ", toString="
                    + q.toString(defField));
            final HashSet<Term> terms = new HashSet<Term>();
            sq.extractTerms(terms);
            Object n1 = null;
            if (terms != null) {
                n1 = create("node");
                setString(n1, "text", "Matched terms (" + terms.size() + "):");
                add(n, n1);
                final Iterator<Term> it = terms.iterator();
                while (it.hasNext()) {
                    final Object n2 = create("node");
                    final Term t = it.next();
                    setString(n2, "text", "field='" + t.field() + "' text='" + t.text() + "'");
                    add(n1, n2);
                }
            } else {
                n1 = create("node");
                setString(n1, "text", "<no terms matched>");
                add(n, n1);
            }
        }
        if (ir != null) {
            final Object n1 = null;
            /*
             * in Lucene 4.0 this requires traversal of sub- and leaf readers, which is cumbersome to do here. try { Spans
             * spans = sq.getSpans(ir); if (spans != null) { n1 = create("node"); int cnt = 0; while (spans.next()) { Object
             * n2 = create("node"); setString(n2, "text", "doc=" + spans.doc() + ", start=" + spans.start() + ", end=" +
             * spans.end()); add(n1, n2); cnt++; } if (cnt > 0) { add(n, n1); setString(n1, "text", "Spans (" + cnt + "):");
             * setBoolean(n1, "expanded", false); } } } catch (Exception e) { e.printStackTrace(); n1 = create("node");
             * setString(n1, "text", "Spans Exception: " + e.getMessage()); add(n, n1); }
             */
        }
    } else {
        Object n1 = create("node");
        final String defField = getDefaultField(find("srchOptTabs"));
        final Set<Term> terms = new HashSet<Term>();
        q.extractTerms(terms);
        setString(n1, "text", q.getClass().getName() + ": " + q.toString(defField));
        add(n, n1);
        if (!terms.isEmpty()) {
            n1 = create("node");
            setString(n1, "text", "terms: " + terms);
            add(n, n1);
        }
    }
}

From source file:org.exoplatform.services.jcr.api.namespaces.TestNamespaceRegistry.java

License:Open Source License

public void testTooManyFields() {
    try {/*from  w  ww. j  a  v  a  2  s  .  c o  m*/
        namespaceRegistry.registerNamespace("tmf", "http://www.tmf.org/jcr");

        int defClausesCount = BooleanQuery.getMaxClauseCount();
        Node tr = root.addNode("testRoot");
        for (int i = 0; i < defClausesCount + 10; i++) {
            tr.setProperty("prop" + i, i);
        }
        session.save();
        // ok
    } catch (RepositoryException e) {
        e.printStackTrace();
        fail();
    }
    try {
        namespaceRegistry.unregisterNamespace("tmf");
    } catch (NamespaceException e) {
        e.printStackTrace();
        fail();
    } catch (RepositoryException e) {
        e.printStackTrace();
        fail();
    }
}

From source file:org.exoplatform.services.jcr.impl.core.query.SearchManager.java

License:Apache License

/**
 * Return set of uuid of nodes. Contains in names prefixes maped to the
 * given uri// w  w  w .  j a  v a 2  s  .c om
 * 
 * @param prefix
 * @return
 * @throws RepositoryException
 */
public Set<String> getNodesByUri(final String uri) throws RepositoryException {
    Set<String> result;
    final int defaultClauseCount = BooleanQuery.getMaxClauseCount();
    try {

        // final LocationFactory locationFactory = new
        // LocationFactory(this);
        final ValueFactoryImpl valueFactory = new ValueFactoryImpl(new LocationFactory(nsReg), cleanerHolder);
        BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
        BooleanQuery query = new BooleanQuery();

        final String prefix = nsReg.getNamespacePrefixByURI(uri);
        query.add(new WildcardQuery(new Term(FieldNames.LABEL, prefix + ":*")), Occur.SHOULD);
        // name of the property
        query.add(new WildcardQuery(new Term(FieldNames.PROPERTIES_SET, prefix + ":*")), Occur.SHOULD);

        result = getNodes(query);

        // value of the property

        try {
            final Set<String> props = getFieldNames();

            query = new BooleanQuery();
            for (final String fieldName : props) {
                if (!FieldNames.PROPERTIES_SET.equals(fieldName)) {
                    query.add(new WildcardQuery(new Term(fieldName, "*" + prefix + ":*")), Occur.SHOULD);
                }
            }
        } catch (final IndexException e) {
            throw new RepositoryException(e.getLocalizedMessage(), e);
        }

        final Set<String> propSet = getNodes(query);
        // Manually check property values;
        for (final String uuid : propSet) {
            if (isPrefixMatch(valueFactory, uuid, prefix)) {
                result.add(uuid);
            }
        }
    } finally {
        BooleanQuery.setMaxClauseCount(defaultClauseCount);
    }

    return result;
}

From source file:org.getopt.luke.Luke.java

License:Apache License

private void _explainStructure(Object parent, Query q) {
    String clazz = q.getClass().getName();
    if (clazz.startsWith("org.apache.lucene.")) {
        clazz = "lucene." + q.getClass().getSimpleName();
    } else if (clazz.startsWith("org.apache.solr.")) {
        clazz = "solr." + q.getClass().getSimpleName();
    }//from  w w w.  j  a v  a 2 s.c om
    float boost = q.getBoost();
    Object n = create("node");
    add(parent, n);
    String msg = clazz;
    if (boost != 1.0f) {
        msg += ": boost=" + df.format(boost);
    }
    setFont(n, getFont().deriveFont(Font.BOLD));
    setString(n, "text", msg);
    if (clazz.equals("lucene.TermQuery")) {
        Object n1 = create("node");
        Term t = ((TermQuery) q).getTerm();
        setString(n1, "text", "Term: field='" + t.field() + "' text='" + t.text() + "'");
        add(n, n1);
    } else if (clazz.equals("lucene.BooleanQuery")) {
        BooleanQuery bq = (BooleanQuery) q;
        BooleanClause[] clauses = bq.getClauses();
        int max = bq.getMaxClauseCount();
        Object n1 = create("node");
        String descr = "clauses=" + clauses.length + ", maxClauses=" + max;
        if (bq.isCoordDisabled()) {
            descr += ", coord=false";
        }
        if (bq.getMinimumNumberShouldMatch() > 0) {
            descr += ", minShouldMatch=" + bq.getMinimumNumberShouldMatch();
        }
        setString(n1, "text", descr);
        add(n, n1);
        for (int i = 0; i < clauses.length; i++) {
            n1 = create("node");
            String occur;
            Occur occ = clauses[i].getOccur();
            if (occ.equals(Occur.MUST)) {
                occur = "MUST";
            } else if (occ.equals(Occur.MUST_NOT)) {
                occur = "MUST_NOT";
            } else if (occ.equals(Occur.SHOULD)) {
                occur = "SHOULD";
            } else {
                occur = occ.toString();
            }
            setString(n1, "text", "Clause " + i + ": " + occur);
            add(n, n1);
            _explainStructure(n1, clauses[i].getQuery());
        }
    } else if (clazz.equals("lucene.PrefixQuery")) {
        Object n1 = create("node");
        PrefixQuery pq = (PrefixQuery) q;
        Term t = pq.getPrefix();
        setString(n1, "text", "Prefix: field='" + t.field() + "' text='" + t.text() + "'");
        add(n, n1);
        try {
            addTermsEnum(n, PrefixQuery.class, pq.getField(), pq);
        } catch (Exception e) {
            e.printStackTrace();
            n1 = create("node");
            setString(n1, "text", "TermEnum: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (clazz.equals("lucene.PhraseQuery")) {
        PhraseQuery pq = (PhraseQuery) q;
        setString(n, "text", getString(n, "text") + ", slop=" + pq.getSlop());
        int[] pos = pq.getPositions();
        Term[] terms = pq.getTerms();
        Object n1 = create("node");
        StringBuffer sb = new StringBuffer("pos: [");
        for (int i = 0; i < pos.length; i++) {
            if (i > 0)
                sb.append(',');
            sb.append("" + pos[i]);
        }
        sb.append("]");
        setString(n1, "text", sb.toString());
        add(n, n1);
        for (int i = 0; i < terms.length; i++) {
            n1 = create("node");
            setString(n1, "text",
                    "Term " + i + ": field='" + terms[i].field() + "' text='" + terms[i].text() + "'");
            add(n, n1);
        }
    } else if (clazz.equals("lucene.MultiPhraseQuery")) {
        MultiPhraseQuery pq = (MultiPhraseQuery) q;
        setString(n, "text", getString(n, "text") + ", slop=" + pq.getSlop());
        int[] pos = pq.getPositions();
        Object n1 = create("node");
        StringBuffer sb = new StringBuffer("pos: [");
        for (int i = 0; i < pos.length; i++) {
            if (i > 0)
                sb.append(',');
            sb.append("" + pos[i]);
        }
        sb.append("]");
        setString(n1, "text", sb.toString());
        add(n, n1);
        n1 = create("node");
        System.err.println("MultiPhraseQuery is missing the public getTermArrays() :-(");
        setString(n1, "text", "toString: " + pq.toString());
        add(n, n1);
    } else if (clazz.equals("lucene.FuzzyQuery")) {
        FuzzyQuery fq = (FuzzyQuery) q;
        Object n1 = create("node");
        setString(n1, "text", "field=" + fq.getField() + ", prefixLen=" + fq.getPrefixLength() + ", maxEdits="
                + df.format(fq.getMaxEdits()));
        add(n, n1);
        try {
            addTermsEnum(n, FuzzyQuery.class, fq.getField(), fq);
        } catch (Exception e) {
            e.printStackTrace();
            n1 = create("node");
            setString(n1, "text", "TermEnum: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (clazz.equals("lucene.WildcardQuery")) {
        WildcardQuery wq = (WildcardQuery) q;
        Term t = wq.getTerm();
        setString(n, "text", getString(n, "text") + ", term=" + t);
        Automaton a = WildcardQuery.toAutomaton(t);
        addAutomaton(n, a);
    } else if (clazz.equals("lucene.TermRangeQuery")) {
        TermRangeQuery rq = (TermRangeQuery) q;
        setString(n, "text", getString(n, "text") + ", inclLower=" + rq.includesLower() + ", inclUpper="
                + rq.includesUpper());
        Object n1 = create("node");
        setString(n1, "text", "lowerTerm=" + rq.getField() + ":" + rq.getLowerTerm() + "'");
        add(n, n1);
        n1 = create("node");
        setString(n1, "text", "upperTerm=" + rq.getField() + ":" + rq.getUpperTerm() + "'");
        add(n, n1);
        try {
            addTermsEnum(n, TermRangeQuery.class, rq.getField(), rq);
        } catch (Exception e) {
            e.printStackTrace();
            n1 = create("node");
            setString(n1, "text", "TermEnum: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (q instanceof AutomatonQuery) {
        AutomatonQuery aq = (AutomatonQuery) q;
        setString(n, "text", getString(n, "text") + ", " + aq.toString());
        // get automaton
        try {
            java.lang.reflect.Field aField = AutomatonQuery.class.getDeclaredField("automaton");
            aField.setAccessible(true);
            Automaton a = (Automaton) aField.get(aq);
            addAutomaton(n, a);
        } catch (Exception e) {
            e.printStackTrace();
            Object n1 = create("node");
            setString(n1, "text", "Automaton: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (q instanceof MultiTermQuery) {
        MultiTermQuery mq = (MultiTermQuery) q;
        Set<Term> terms = new HashSet<Term>();
        mq.extractTerms(terms);
        setString(n, "text", getString(n, "text") + ", terms: " + terms);
        try {
            addTermsEnum(n, TermRangeQuery.class, mq.getField(), mq);
        } catch (Exception e) {
            e.printStackTrace();
            Object n1 = create("node");
            setString(n1, "text", "TermEnum: Exception " + e.getMessage());
            add(n, n1);
        }
    } else if (q instanceof ConstantScoreQuery) {
        ConstantScoreQuery cq = (ConstantScoreQuery) q;
        setString(n, "text", getString(n, "text") + ", " + cq.toString());
        Object n1 = create("node");
        add(n, n1);
        if (cq.getFilter() != null) {
            setString(n1, "text", "Filter: " + cq.getFilter().toString());
        } else if (cq.getQuery() != null) {
            _explainStructure(n, cq.getQuery());
        }
    } else if (q instanceof FilteredQuery) {
        FilteredQuery fq = (FilteredQuery) q;
        Object n1 = create("node");
        setString(n1, "text", "Filter: " + fq.getFilter().toString());
        add(n, n1);
        _explainStructure(n, fq.getQuery());
    } else if (q instanceof SpanQuery) {
        SpanQuery sq = (SpanQuery) q;
        Class sqlass = sq.getClass();
        setString(n, "text", getString(n, "text") + ", field=" + sq.getField());
        if (sqlass == SpanOrQuery.class) {
            SpanOrQuery soq = (SpanOrQuery) sq;
            setString(n, "text", getString(n, "text") + ", " + soq.getClauses().length + " clauses");
            for (SpanQuery sq1 : soq.getClauses()) {
                _explainStructure(n, sq1);
            }
        } else if (sqlass == SpanFirstQuery.class) {
            SpanFirstQuery sfq = (SpanFirstQuery) sq;
            setString(n, "text", getString(n, "text") + ", end=" + sfq.getEnd() + ", match:");
            _explainStructure(n, sfq.getMatch());
        } else if (q instanceof SpanNearQuery) { // catch also known subclasses
            SpanNearQuery snq = (SpanNearQuery) sq;
            setString(n, "text", getString(n, "text") + ", slop=" + snq.getSlop());
            if (snq instanceof PayloadNearQuery) {
                try {
                    java.lang.reflect.Field function = PayloadNearQuery.class.getDeclaredField("function");
                    function.setAccessible(true);
                    Object func = function.get(snq);
                    setString(n, "text", getString(n, "text") + ", func=" + func.getClass().getSimpleName());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            for (SpanQuery sq1 : snq.getClauses()) {
                _explainStructure(n, sq1);
            }
        } else if (sqlass == SpanNotQuery.class) {
            SpanNotQuery snq = (SpanNotQuery) sq;
            Object n1 = create("node");
            add(n, n1);
            setString(n1, "text", "Include:");
            _explainStructure(n1, snq.getInclude());
            n1 = create("node");
            add(n, n1);
            setString(n1, "text", "Exclude:");
            _explainStructure(n1, snq.getExclude());
        } else if (q instanceof SpanTermQuery) {
            SpanTermQuery stq = (SpanTermQuery) sq;
            setString(n, "text", getString(n, "text") + ", term=" + stq.getTerm());
            if (stq instanceof PayloadTermQuery) {
                try {
                    java.lang.reflect.Field function = PayloadTermQuery.class.getDeclaredField("function");
                    function.setAccessible(true);
                    Object func = function.get(stq);
                    setString(n, "text", getString(n, "text") + ", func=" + func.getClass().getSimpleName());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } else {
            String defField = getDefaultField(find("srchOptTabs"));
            setString(n, "text", "class=" + q.getClass().getName() + ", " + getString(n, "text") + ", toString="
                    + q.toString(defField));
            HashSet<Term> terms = new HashSet<Term>();
            sq.extractTerms(terms);
            Object n1 = null;
            if (terms != null) {
                n1 = create("node");
                setString(n1, "text", "Matched terms (" + terms.size() + "):");
                add(n, n1);
                Iterator<Term> it = terms.iterator();
                while (it.hasNext()) {
                    Object n2 = create("node");
                    Term t = it.next();
                    setString(n2, "text", "field='" + t.field() + "' text='" + t.text() + "'");
                    add(n1, n2);
                }
            } else {
                n1 = create("node");
                setString(n1, "text", "<no terms matched>");
                add(n, n1);
            }
        }
        if (ir != null) {
            Object n1 = null;
            /* in Lucene 4.0 this requires traversal of sub- and leaf readers,
             * which is cumbersome to do here.
            try {
              Spans spans = sq.getSpans(ir);
              if (spans != null) {
                n1 = create("node");
                int cnt = 0;
                while (spans.next()) {
                  Object n2 = create("node");
                  setString(n2, "text", "doc=" + spans.doc() +
              ", start=" + spans.start() + ", end=" + spans.end());
                  add(n1, n2);
                  cnt++;
                }
                if (cnt > 0) {
                  add(n, n1);
                  setString(n1, "text", "Spans (" + cnt + "):");
                  setBoolean(n1, "expanded", false);
                }
              }
            } catch (Exception e) {
              e.printStackTrace();
              n1 = create("node");
              setString(n1, "text", "Spans Exception: " + e.getMessage());
              add(n, n1);
            }
            */
        }
    } else {
        Object n1 = create("node");
        String defField = getDefaultField(find("srchOptTabs"));
        Set<Term> terms = new HashSet<Term>();
        q.extractTerms(terms);
        setString(n1, "text", q.getClass().getName() + ": " + q.toString(defField));
        add(n, n1);
        if (!terms.isEmpty()) {
            n1 = create("node");
            setString(n1, "text", "terms: " + terms);
            add(n, n1);
        }
    }
}

From source file:org.polymap.alkis.model.AlkisRepository.java

License:Open Source License

/**
 * Configure and initializing the one and only global instance.
 *///from w w w.  ja v  a2s. c om
private AlkisRepository() {
    try {
        log.info("Assembling repository...");

        //            Logging.GEOTOOLS.setLoggerFactory( "org.geotools.util.logging.CommonsLoggerFactory" );

        //
        BooleanQuery.setMaxClauseCount(MAX_RESULTS * 2);
        log.info("Maximale Anzahl Lucene-Klauseln erhht auf: " + BooleanQuery.getMaxClauseCount());

        // init fulltext
        File dataDir = new File(DATA_DIR);
        fulltextIndex = new LuceneFulltextIndex(new File(dataDir, "fulltext"));
        fulltextIndex.addTokenFilter(new LowerCaseTokenFilter());

        // store
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("dbtype", "postgis");
        params.put("host", "localhost");
        params.put("port", 5432);
        params.put("schema", "public");
        params.put("database", "ALKIS");
        params.put("user", "postgres");
        params.put("passwd", "postgres");
        params.put(JDBCDataStoreFactory.MAXCONN.key, 24);
        params.put(JDBCDataStoreFactory.MAXWAIT.key, 20);
        ds = new PostgisNGDataStoreFactory().createDataStore(params);

        // primary key: gml_id
        ((JDBCDataStore) ds).setPrimaryKeyFinder(new PrimaryKeyFinder() {
            @Override
            public PrimaryKey getPrimaryKey(JDBCDataStore store, String schema, String table, Connection cx)
                    throws SQLException {
                // Alkis_Beziehungen
                if (table.equals(Alkis_Beziehungen.TYPE.info().getNameInStore())) {
                    AutoGeneratedPrimaryKeyColumn col = new AutoGeneratedPrimaryKeyColumn("ogc_fid",
                            String.class);
                    return new PrimaryKey(table, Collections.singletonList(col));
                }
                // AX_*
                else {
                    AutoGeneratedPrimaryKeyColumn col = new AutoGeneratedPrimaryKeyColumn("gml_id",
                            String.class);
                    return new PrimaryKey(table, Collections.singletonList(col));
                }
            }
        });

        FeatureStoreAdapter store = new FeatureStoreAdapter(ds).createOrUpdateSchemas.put(false);

        // repo
        repo = EntityRepository.newConfiguration().entities.set(new Class[] { AX_Flurstueck.class,
                AX_Buchungsstelle.class, AX_Buchungsblatt.class, AX_Buchungsblattbezirk.class, AX_Person.class,
                AX_Anschrift.class, AX_LagebezeichnungMitHausnummer.class,
                AX_LagebezeichnungOhneHausnummer.class, AX_LagebezeichnungKatalog.class, AX_Namensnummer.class,
                AX_Gemarkung.class, AX_Gemeinde.class, Alkis_Beziehungen.class }).store.set(
                        //new FulltextIndexer( fulltextIndex, new TypeFilter( Waldbesitzer.class ), newArrayList( wbTransformer ),
                        store) //)
                        .create();
    } catch (RuntimeException e) {
        throw e;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

From source file:org.polymap.kaps.ui.filter.VertraegeFuerBaujahrUndGebaeudeartFilter.java

License:Open Source License

protected Query<VertragComposite> createFilterQuery(final IFilterEditorSite site,
        final KapsRepository repository) {

    List<GebaeudeArtComposite> gebaeudeArten = (List<GebaeudeArtComposite>) site.getFieldValue("gebart");
    NutzungComposite nutzung = (NutzungComposite) site.getFieldValue("nutzung");
    VertragsArtComposite art = (VertragsArtComposite) site.getFieldValue("vertragsart");

    Object[] vertragsDatum = (Object[]) site.getFieldValue("datum");
    BooleanExpression vertragsDatumExpr = null;
    if (vertragsDatum != null) {
        VertragComposite dateTemplate = QueryExpressions.templateFor(VertragComposite.class);
        BooleanExpression ge = vertragsDatum[0] != null
                ? QueryExpressions.ge(dateTemplate.vertragsDatum(), dayStart((Date) vertragsDatum[0]))
                : null;/*from  www .ja v a2  s . c o  m*/

        BooleanExpression le = vertragsDatum[1] != null
                ? QueryExpressions.le(dateTemplate.vertragsDatum(), dayEnd((Date) vertragsDatum[1]))
                : null;

        if (ge != null) {
            vertragsDatumExpr = ge;
        }
        if (le != null) {
            vertragsDatumExpr = vertragsDatumExpr == null ? le : QueryExpressions.and(ge, le);
        }
    }

    if (art != null) {
        VertragComposite vTemplate = QueryExpressions.templateFor(VertragComposite.class);
        BooleanExpression artExpr = QueryExpressions.eq(vTemplate.vertragsArt(), art);
        if (vertragsDatumExpr == null) {
            vertragsDatumExpr = artExpr;
        } else {
            vertragsDatumExpr = QueryExpressions.and(vertragsDatumExpr, artExpr);
        }
    }

    // nach Vertragsdatum vorsortieren fhrt zu StackOverflow
    Set<VertragComposite> vertraegeNachDatum = null;
    if (vertragsDatumExpr != null) {
        vertraegeNachDatum = Sets.newHashSet();
        Query<VertragComposite> vertraege = repository().findEntities(VertragComposite.class, vertragsDatumExpr,
                0, -1);
        for (VertragComposite vertrag : vertraege) {
            vertraegeNachDatum.add(vertrag);
        }
    }

    BooleanExpression fExpr = null;
    VertragComposite template = QueryExpressions.templateFor(VertragComposite.class);

    // if (gebaeude != null || nutzung != null || gemeinde != null) {
    FlurstueckComposite flurTemplate = QueryExpressions.templateFor(FlurstueckComposite.class);

    // gemeinde
    BooleanExpression gExpr = null;
    GemeindeComposite gemeinde = (GemeindeComposite) site.getFieldValue("gemeinde");
    GemarkungComposite gemarkung = (GemarkungComposite) site.getFieldValue("gemarkung");
    if (gemarkung != null) {
        gExpr = QueryExpressions.eq(flurTemplate.gemarkung(), gemarkung);
    } else if (gemeinde != null) {
        GemarkungComposite gemarkungTemplate = QueryExpressions.templateFor(GemarkungComposite.class);
        Query<GemarkungComposite> gemarkungen = repository().findEntities(GemarkungComposite.class,
                QueryExpressions.eq(gemarkungTemplate.gemeinde(), gemeinde), 0, -1);
        for (GemarkungComposite gemarkungg : gemarkungen) {
            BooleanExpression newExpr = QueryExpressions.eq(flurTemplate.gemarkung(), gemarkungg);
            if (gExpr == null) {
                gExpr = newExpr;
            } else {
                gExpr = QueryExpressions.or(gExpr, newExpr);
            }
        }
    }

    BooleanExpression qExpr = null;
    if (gebaeudeArten != null) {
        for (GebaeudeArtComposite gebaeudeArt : gebaeudeArten) {
            BooleanExpression newExpr = QueryExpressions.eq(flurTemplate.gebaeudeArt(), gebaeudeArt);
            if (qExpr == null) {
                qExpr = newExpr;
            } else {
                qExpr = QueryExpressions.or(qExpr, newExpr);
            }
        }
    }

    BooleanExpression nExpr = nutzung != null ? QueryExpressions.eq(flurTemplate.nutzung(), nutzung) : null;

    if (qExpr != null) {
        if (gExpr != null) {
            qExpr = QueryExpressions.and(qExpr, gExpr);
        }
    } else {
        qExpr = gExpr;
    }
    if (qExpr != null) {
        if (nExpr != null) {
            qExpr = QueryExpressions.and(qExpr, nExpr);
        }
    } else {
        qExpr = nExpr;
    }

    Set<VertragComposite> vertraegeNachDatumUndFlurstueck = null;
    if (qExpr != null) {
        // flurstcke eingeschrnkt, falls keine gefunden werden ist das set leer
        vertraegeNachDatumUndFlurstueck = new HashSet<VertragComposite>();
        Query<FlurstueckComposite> flurstuecke = repository().findEntities(FlurstueckComposite.class, qExpr, 0,
                -1);
        for (FlurstueckComposite fc : flurstuecke) {
            // mehrere Flurstcke knnen einem Vertrag angehren
            VertragComposite vertrag = fc.vertrag().get();
            if (vertrag != null) {
                if (vertraegeNachDatum == null || vertraegeNachDatum.contains(vertrag)) {
                    vertraegeNachDatumUndFlurstueck.add(vertrag);
                }
            }
        }
    } else {
        // ansonsten flurstcke nicht weiter eingeschrnkt, nimm alle nach Datum
        vertraegeNachDatumUndFlurstueck = vertraegeNachDatum;
    }

    Object[] jahre = (Object[]) site.getFieldValue("baujahr");
    Set<VertragComposite> vertraegeNachDatumUndFlurstueckUndBaujahr = null;
    if (jahre != null) {
        vertraegeNachDatumUndFlurstueckUndBaujahr = new HashSet<VertragComposite>();
        VertragsdatenBaulandComposite dateTemplate = QueryExpressions
                .templateFor(VertragsdatenBaulandComposite.class);
        BooleanExpression expr2 = null;

        BooleanExpression ge = jahre[0] != null
                ? QueryExpressions.ge(dateTemplate.baujahr(), Integer.parseInt((String) jahre[0]))
                : null;

        BooleanExpression le = jahre[1] != null
                ? QueryExpressions.le(dateTemplate.baujahr(), Integer.parseInt((String) jahre[1]))
                : null;

        if (ge != null) {
            expr2 = ge;
        }
        if (le != null) {
            expr2 = expr2 == null ? le : QueryExpressions.and(ge, le);
        }
        if (expr2 != null) {
            Query<VertragsdatenBaulandComposite> daten = repository()
                    .findEntities(VertragsdatenBaulandComposite.class, expr2, 0, -1);
            for (VertragsdatenBaulandComposite kv : daten) {
                VertragComposite v = kv.vertrag().get();
                if (vertraegeNachDatumUndFlurstueck == null || vertraegeNachDatumUndFlurstueck.contains(v)) {
                    // ist schon in Menge vorhanden, also auch hier rein
                    vertraegeNachDatumUndFlurstueckUndBaujahr.add(v);
                }
            }
        }
    } else {
        vertraegeNachDatumUndFlurstueckUndBaujahr = vertraegeNachDatumUndFlurstueck;
    }

    if (vertraegeNachDatumUndFlurstueckUndBaujahr != null) {
        if (vertraegeNachDatumUndFlurstueckUndBaujahr.size() > 5000) {

            sessionDisplay().asyncExec(new Runnable() {

                public void run() {
                    MessageDialog.openError(PolymapWorkbench.getShellToParentOn(), "Zu viele Ergebnisse",
                            "Es wurden ber 5000 Ergebnisse gefunden. Bitte schrnken Sie die Suche weiter ein.");
                }
            });
            return repository().findEntities(VertragComposite.class,
                    QueryExpressions.eq(template.identity(), "unknown"), 0, -1);
        }
        for (VertragComposite vertrag : vertraegeNachDatumUndFlurstueckUndBaujahr) {
            BooleanExpression newExpr = QueryExpressions.eq(template.identity(), vertrag.id());
            if (fExpr == null) {
                fExpr = newExpr;
            } else {
                fExpr = QueryExpressions.or(fExpr, newExpr);
            }
        }
    }

    String urkunde = (String) site.getFieldValue("urkunde");
    if (urkunde != null && !urkunde.trim().isEmpty()) {
        BooleanExpression newExpr = QueryExpressions.eq(template.urkundenNummer(), urkunde.trim());
        if (fExpr == null) {
            fExpr = newExpr;
        } else {
            fExpr = QueryExpressions.and(fExpr, newExpr);
        }
    }
    String notariat = (String) site.getFieldValue("notariat");
    if (notariat != null && !notariat.trim().isEmpty()) {
        BooleanExpression newExpr = QueryExpressions.eq(template.notariat(), notariat.trim());
        if (fExpr == null) {
            fExpr = newExpr;
        } else {
            fExpr = QueryExpressions.and(fExpr, newExpr);
        }
    }
    // wenn keine gefunden, ungltige Query erzeugen, damit auch keine
    // Vertrge gefunden werden
    if (fExpr == null) {
        fExpr = QueryExpressions.eq(template.identity(), "unknown");
    }

    int oldMax = BooleanQuery.getMaxClauseCount();
    try {
        BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
        return repository().findEntities(VertragComposite.class, fExpr, 0, getMaxResults());
    } finally {
        BooleanQuery.setMaxClauseCount(oldMax);
    }
}

From source file:org.polymap.kaps.ui.filter.VertragsdatenAgrarAgrarFilter.java

License:Open Source License

@Override
protected Query<VertragsdatenAgrarComposite> createFilterQuery(final IFilterEditorSite site,
        final KapsRepository repository) {

    List<NutzungComposite> nutzungen = (List<NutzungComposite>) site.getFieldValue("nutzung");
    List<BodennutzungComposite> bodennutzungen = (List<BodennutzungComposite>) site
            .getFieldValue("bodennutzung");
    List<GemeindeComposite> gemeinden = (List<GemeindeComposite>) site.getFieldValue("gemeinde");
    Integer nutzungsGroesseMin = (Integer) site.getFieldValue("nutzungsGroesseMin");
    Integer nutzungsGroesseMax = (Integer) site.getFieldValue("nutzungsGroesseMax");

    Object[] vertragsDatum = (Object[]) site.getFieldValue("datum");
    BooleanExpression vertragsDatumExpr = null;
    if (vertragsDatum != null) {
        VertragComposite dateTemplate = QueryExpressions.templateFor(VertragComposite.class);
        BooleanExpression ge = vertragsDatum[0] != null
                ? QueryExpressions.ge(dateTemplate.vertragsDatum(), dayStart((Date) vertragsDatum[0]))
                : null;/*from   w  ww  . j a  v  a  2s.c o m*/
        BooleanExpression le = vertragsDatum[1] != null
                ? QueryExpressions.le(dateTemplate.vertragsDatum(), dayEnd((Date) vertragsDatum[1]))
                : null;
        if (ge != null) {
            vertragsDatumExpr = ge;
        }
        if (le != null) {
            vertragsDatumExpr = vertragsDatumExpr == null ? le : QueryExpressions.and(ge, le);
        }
    }

    BooleanExpression fExpr = null;
    VertragsdatenAgrarComposite template = QueryExpressions.templateFor(VertragsdatenAgrarComposite.class);

    FlurstueckComposite flurTemplate = QueryExpressions.templateFor(FlurstueckComposite.class);

    // nach Vertragsdatum vorsortieren fhrt zu StackOverflow
    Set<VertragComposite> vertraegeNachDatum = null;
    if (vertragsDatumExpr != null) {
        vertraegeNachDatum = Sets.newHashSet();
        Query<VertragComposite> vertraege = repository().findEntities(VertragComposite.class, vertragsDatumExpr,
                0, -1);
        for (VertragComposite vertrag : vertraege) {
            vertraegeNachDatum.add(vertrag);
        }
    }

    // gemeinde
    BooleanExpression gExpr = null;
    List<GemarkungComposite> gemarkungen = (List<GemarkungComposite>) site.getFieldValue("gemarkung");
    if (gemarkungen != null) {
        for (GemarkungComposite gemarkung : gemarkungen) {
            BooleanExpression newExpr = QueryExpressions.eq(flurTemplate.gemarkung(), gemarkung);
            if (gExpr == null) {
                gExpr = newExpr;
            } else {
                gExpr = QueryExpressions.or(gExpr, newExpr);
            }
        }
    } else if (gemeinden != null) {
        GemarkungComposite gemarkungTemplate = QueryExpressions.templateFor(GemarkungComposite.class);
        BooleanExpression gSubExpr = null;
        for (GemeindeComposite gemeinde : gemeinden) {
            BooleanExpression newExpr = QueryExpressions.eq(gemarkungTemplate.gemeinde(), gemeinde);
            if (gSubExpr == null) {
                gSubExpr = newExpr;
            } else {
                gSubExpr = QueryExpressions.or(gSubExpr, newExpr);
            }
        }
        if (gSubExpr == null) {
            gSubExpr = QueryExpressions.eq(gemarkungTemplate.identity(), "unknown");
        }
        Query<GemarkungComposite> subGemarkungen = repository().findEntities(GemarkungComposite.class, gSubExpr,
                0, -1);
        for (GemarkungComposite gemarkungg : subGemarkungen) {
            BooleanExpression newExpr = QueryExpressions.eq(flurTemplate.gemarkung(), gemarkungg);
            if (gExpr == null) {
                gExpr = newExpr;
            } else {
                gExpr = QueryExpressions.or(gExpr, newExpr);
            }
        }
        // gemeinde gewhlt, aber keine gemeinden gefunden
        if (gExpr == null) {
            gExpr = QueryExpressions.eq(flurTemplate.identity(), "unknown");
        }
    }

    // nutzungen
    BooleanExpression nExpr = null;
    if (nutzungen != null) {
        for (NutzungComposite nutzung : nutzungen) {
            BooleanExpression newExpr = QueryExpressions.eq(flurTemplate.nutzung(), nutzung);
            if (nExpr == null) {
                nExpr = newExpr;
            } else {
                nExpr = QueryExpressions.or(nExpr, newExpr);
            }
        }
    }

    if (nExpr != null) {
        if (gExpr != null) {
            nExpr = QueryExpressions.and(nExpr, gExpr);
        }
    } else {
        nExpr = gExpr;
    }

    Set<VertragComposite> vertraegeNachDatumUndFlurstueck = new HashSet<VertragComposite>();

    if (nExpr != null) {
        Query<FlurstueckComposite> flurstuecke = repository().findEntities(FlurstueckComposite.class, nExpr, 0,
                -1);

        for (FlurstueckComposite fc : flurstuecke) {
            // mehrere Flurstcke knnen einem Vertrag angehren
            VertragComposite vertrag = fc.vertrag().get();
            if (vertrag != null) {
                if ((vertraegeNachDatum == null || vertraegeNachDatum.contains(vertrag))) {
                    vertraegeNachDatumUndFlurstueck.add(vertrag);
                }
            }
        }
    }
    if (vertraegeNachDatumUndFlurstueck.size() > 5000) {
        sessionDisplay().asyncExec(new Runnable() {

            public void run() {
                MessageDialog.openError(PolymapWorkbench.getShellToParentOn(), "Zu viele Ergebnisse",
                        "Es wurden ber 5000 Ergebnisse gefunden. Bitte schrnken Sie die Suche weiter ein.");
            }
        });
        return repository().findEntities(VertragsdatenAgrarComposite.class,
                QueryExpressions.eq(template.identity(), "unknown"), 0, -1);
    }
    for (VertragComposite vertrag : vertraegeNachDatumUndFlurstueck) {
        BooleanExpression newExpr = QueryExpressions.eq(template.vertrag(), vertrag);
        if (fExpr == null) {
            fExpr = newExpr;
        } else {
            fExpr = QueryExpressions.or(fExpr, newExpr);
        }
    }
    // wenn keine vertrge gefunden, ungltige Query erzeugen, damit auch keine
    // Vertrge gefunden werden
    if (fExpr == null) {
        fExpr = QueryExpressions.eq(template.identity(), "unknown");
    }
    // }
    BooleanExpression bExpr = null;
    if (bodennutzungen != null) {
        for (BodennutzungComposite nutzung : bodennutzungen) {
            BooleanExpression newExpr = QueryExpressions.or(
                    QueryExpressions.eq(template.bodennutzung1(), nutzung),
                    QueryExpressions.eq(template.bodennutzung2(), nutzung),
                    QueryExpressions.eq(template.bodennutzung3(), nutzung),
                    QueryExpressions.eq(template.bodennutzung4(), nutzung),
                    QueryExpressions.eq(template.bodennutzung5(), nutzung),
                    QueryExpressions.eq(template.bodennutzung6(), nutzung));
            if (bExpr == null) {
                bExpr = newExpr;
            } else {
                bExpr = QueryExpressions.or(bExpr, newExpr);
            }
        }
    }
    if (bExpr != null) {
        fExpr = QueryExpressions.and(bExpr, fExpr);
    }

    BooleanExpression bodenExp1 = getBodennutzungExpression(template.bodennutzung1(), bodennutzungen);
    BooleanExpression bodenExp2 = getBodennutzungExpression(template.bodennutzung2(), bodennutzungen);
    BooleanExpression bodenExp3 = getBodennutzungExpression(template.bodennutzung3(), bodennutzungen);
    BooleanExpression bodenExp4 = getBodennutzungExpression(template.bodennutzung4(), bodennutzungen);
    BooleanExpression bodenExp5 = getBodennutzungExpression(template.bodennutzung5(), bodennutzungen);
    BooleanExpression bodenExp6 = getBodennutzungExpression(template.bodennutzung6(), bodennutzungen);

    BooleanExpression greaterEquals = null;
    if (nutzungsGroesseMin != null) {
        BooleanExpression nutzungExp1 = QueryExpressions.ge(template.flaechenAnteil1(),
                Double.valueOf(nutzungsGroesseMin));
        BooleanExpression nutzungExp2 = QueryExpressions.ge(template.flaechenAnteil2(),
                Double.valueOf(nutzungsGroesseMin));
        BooleanExpression nutzungExp3 = QueryExpressions.ge(template.flaechenAnteil3(),
                Double.valueOf(nutzungsGroesseMin));
        BooleanExpression nutzungExp4 = QueryExpressions.ge(template.flaechenAnteil4(),
                Double.valueOf(nutzungsGroesseMin));
        BooleanExpression nutzungExp5 = QueryExpressions.ge(template.flaechenAnteil5(),
                Double.valueOf(nutzungsGroesseMin));
        BooleanExpression nutzungExp6 = QueryExpressions.ge(template.flaechenAnteil6(),
                Double.valueOf(nutzungsGroesseMin));

        greaterEquals = QueryExpressions.or(
                (bodenExp1 != null ? QueryExpressions.and(nutzungExp1, bodenExp1) : nutzungExp1),
                (bodenExp2 != null ? QueryExpressions.and(nutzungExp2, bodenExp2) : nutzungExp2),
                (bodenExp3 != null ? QueryExpressions.and(nutzungExp3, bodenExp3) : nutzungExp3),
                (bodenExp4 != null ? QueryExpressions.and(nutzungExp4, bodenExp4) : nutzungExp4),
                (bodenExp5 != null ? QueryExpressions.and(nutzungExp5, bodenExp5) : nutzungExp5),
                (bodenExp6 != null ? QueryExpressions.and(nutzungExp6, bodenExp6) : nutzungExp6));
    }

    BooleanExpression flaecheExpression = null;
    BooleanExpression lowerEquals = null;
    if (nutzungsGroesseMax != null) {
        BooleanExpression nutzungExp1 = QueryExpressions.le(template.flaechenAnteil1(),
                Double.valueOf(nutzungsGroesseMax));
        BooleanExpression nutzungExp2 = QueryExpressions.le(template.flaechenAnteil2(),
                Double.valueOf(nutzungsGroesseMax));
        BooleanExpression nutzungExp3 = QueryExpressions.le(template.flaechenAnteil3(),
                Double.valueOf(nutzungsGroesseMax));
        BooleanExpression nutzungExp4 = QueryExpressions.le(template.flaechenAnteil4(),
                Double.valueOf(nutzungsGroesseMax));
        BooleanExpression nutzungExp5 = QueryExpressions.le(template.flaechenAnteil5(),
                Double.valueOf(nutzungsGroesseMax));
        BooleanExpression nutzungExp6 = QueryExpressions.le(template.flaechenAnteil6(),
                Double.valueOf(nutzungsGroesseMax));

        lowerEquals = QueryExpressions.or(
                (bodenExp1 != null ? QueryExpressions.and(nutzungExp1, bodenExp1) : nutzungExp1),
                (bodenExp2 != null ? QueryExpressions.and(nutzungExp2, bodenExp2) : nutzungExp2),
                (bodenExp3 != null ? QueryExpressions.and(nutzungExp3, bodenExp3) : nutzungExp3),
                (bodenExp4 != null ? QueryExpressions.and(nutzungExp4, bodenExp4) : nutzungExp4),
                (bodenExp5 != null ? QueryExpressions.and(nutzungExp5, bodenExp5) : nutzungExp5),
                (bodenExp6 != null ? QueryExpressions.and(nutzungExp6, bodenExp6) : nutzungExp6));
    }
    if (greaterEquals != null) {
        if (lowerEquals != null) {
            flaecheExpression = QueryExpressions.and(greaterEquals, lowerEquals);
        } else {
            flaecheExpression = greaterEquals;
        }
    } else {
        flaecheExpression = lowerEquals;
    }

    if (flaecheExpression != null) {
        fExpr = QueryExpressions.and(flaecheExpression, fExpr);
    }

    int oldMax = BooleanQuery.getMaxClauseCount();
    try {
        BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
        return repository().findEntities(VertragsdatenAgrarComposite.class, fExpr, 0, getMaxResults());
    } finally {
        BooleanQuery.setMaxClauseCount(oldMax);
    }
}

From source file:org.polymap.wbv.model.WbvRepository.java

License:Open Source License

/**
 * Configure and initializing the repository.
 */// w  ww  .  j  a va2 s  . co  m
public static void init() {
    try {
        log.info("Assembling repository...");

        //            // find service for SERVICE_ID
        //            IService service = null;
        //            URL url = RServiceExtension.toURL( DB_NAME );
        //            ICatalog catalog = CatalogPlugin.getDefault().getLocalCatalog();
        //            List<IResolve> canditates = catalog.find( url, new NullProgressMonitor() );
        //            for (IResolve resolve : canditates) {
        //                if (resolve instanceof IService) {
        //                    service = (IService)resolve;
        //                }
        //            }
        //            if (service == null) {
        //                throw new RuntimeException( "Kein Service im Katalog fr URL: " + url );
        //            }

        //
        BooleanQuery.setMaxClauseCount(8 * 1024);
        log.info("Maximale Anzahl Lucene-Klauseln erhht auf: " + BooleanQuery.getMaxClauseCount());

        // init fulltext
        @SuppressWarnings("deprecation")
        File wbvDir = new File(Polymap.getDataDir(), WbvPlugin.ID);
        fulltextIndex = new LuceneFulltextIndex(new File(wbvDir, "fulltext"));
        fulltextIndex.setTokenizer(new WbvTokenizer());
        fulltextIndex.addTokenFilter(new LowerCaseTokenFilter());

        WaldbesitzerFulltextTransformer wbTransformer = new WaldbesitzerFulltextTransformer();

        //            // find DataStore from service
        //            DataAccess ds = service.resolve( DataAccess.class, new NullProgressMonitor() );
        //            if (ds == null) {
        //                throw new RuntimeException( "Kein DataStore fr Service: " + service );
        //            }
        // create repo
        @SuppressWarnings("deprecation")
        IRecordStore store = LuceneRecordStore.newConfiguration().indexDir
                .put(new File(Polymap.getDataDir(), "recordstore/WBV")).create();
        repo = EntityRepository.newConfiguration().entities.set(new Class[] { Revier.class, Waldstueck.class,
                Waldbesitzer.class, Kontakt.class, Flurstueck.class, Gemarkung.class }).store
                        .set(new OptimisticLocking(new FulltextIndexer(fulltextIndex,
                                new TypeFilter(Waldbesitzer.class), newArrayList(wbTransformer),
                                new RecordStoreAdapter(store)))).commitLockStrategy.set(() ->
        // other strategies are not thoroughly tested
        new CommitLockStrategy.Serialize()).create();
    } catch (RuntimeException e) {
        throw e;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}