package org.fastcatsearch.ir.search.clause; import java.io.IOException; import java.io.PrintStream; import java.io.Writer; import org.fastcatsearch.ir.query.RankInfo; import org.fastcatsearch.ir.query.RowExplanation; /** * */ public class DefaultOperatedClause extends OperatedClause { private OperatedClause operatedClause; private String description; public DefaultOperatedClause(OperatedClause operatedClause, String description) { super("DEFAULT"); this.operatedClause = operatedClause; this.description = description; } @Override protected boolean nextDoc(RankInfo docInfo) { if(operatedClause == null){ return false; } if(operatedClause.next(docInfo)){ if(docInfo.rowExplanations() != null) { docInfo.rowExplanations().add(new RowExplanation(id, docInfo.score(), description)); } return true; } return false; } @Override public void close() { if(operatedClause != null){ operatedClause.close(); } } @Override protected void initClause(boolean explain) { operatedClause.init(explanation != null ? explanation.createSubExplanation() : null); } @Override public OperatedClause[] children() { return new OperatedClause[] { this.operatedClause }; } @Override public void printTrace(Writer writer, int indent, int depth) throws IOException { String indentSpace = ""; if(depth > 0){ for (int i = 0; i < (depth - 1) * indent; i++) { indentSpace += " "; } for (int i = (depth - 1) * indent, p = 0; i < depth * indent; i++, p++) { if(p == 0){ indentSpace += "|"; }else{ indentSpace += "-"; } } } writer.append(indentSpace).append("[").append(description).append("]\n"); if(operatedClause != null) { operatedClause.printTrace(writer, indent, depth + 1); } } public DefaultOperatedClause clone(OperatedClause clause) { return new DefaultOperatedClause(clause, this.description); } }