@Override public T visit(final DisjunctionMaxQuery disjunctionMaxQuery) { for (final DisjunctionMaxClause clause : disjunctionMaxQuery.getClauses()) { clause.accept(this); } return null; }
@Override public Node visit(final DisjunctionMaxQuery dmq) { final List<DisjunctionMaxClause> clauses = dmq.getClauses(); if (clauses != null && !clauses.isEmpty()) { DisjunctionMaxClause nonGeneratedClause = null; for (final DisjunctionMaxClause clause: clauses) { if (!clause.isGenerated()) { // second non-generated clause - cannot handle this if (nonGeneratedClause != null) { throw new IllegalArgumentException("cannot handle more then one non-generated DMQ clause"); } nonGeneratedClause = clause; } } if (nonGeneratedClause != null) { nonGeneratedClause.accept(this); } } return null; }
@Override public DisjunctionMaxQuery visit(final DisjunctionMaxQuery disjunctionMaxQuery) { final DisjunctionMaxQuery newDMQ = new DisjunctionMaxQuery((BooleanQuery) getNewParent(), disjunctionMaxQuery.occur, true); newParentStack.add(newDMQ); for (final DisjunctionMaxClause clause : disjunctionMaxQuery.getClauses()) { newDMQ.addClause((DisjunctionMaxClause) clause.accept(this)); } newParentStack.removeLast(); return newDMQ; }
@Override public DisjunctionMaxQuery visit(final DisjunctionMaxQuery disjunctionMaxQuery) { boolean hasPlaceHolderChild = false; final List<DisjunctionMaxClause> oldClauses = disjunctionMaxQuery.getClauses(); final List<DisjunctionMaxClause> newClauses = new ArrayList<>(oldClauses.size()); for (final DisjunctionMaxClause clause : oldClauses) { final DisjunctionMaxClause mayBeRewritten = (DisjunctionMaxClause) clause.accept(this); newClauses.add(mayBeRewritten); hasPlaceHolderChild |= (mayBeRewritten != clause); } if (hasPlaceHolderChild) { for (final DisjunctionMaxClause clause : oldClauses) { disjunctionMaxQuery.removeClause(clause); } for (final DisjunctionMaxClause clause : newClauses) { disjunctionMaxQuery.addClause(clause); } hasPlaceHolder = true; } return disjunctionMaxQuery; }
nonGeneratedClause.accept(this);