/* * ************************************************************************************* * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * * ************************************************************************************* */ package com.espertech.esper.view.internal; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.EventType; import com.espertech.esper.core.service.EPStatementHandle; import com.espertech.esper.core.service.ExprEvaluatorContextStatement; import com.espertech.esper.core.service.InternalEventRouter; import com.espertech.esper.core.service.StatementContext; import com.espertech.esper.epl.core.ResultSetProcessor; import com.espertech.esper.epl.expression.ExprEvaluatorContext; import com.espertech.esper.epl.expression.ExprNode; import com.espertech.esper.epl.expression.ExprNodeUtility; import com.espertech.esper.util.CollectionUtil; import com.espertech.esper.view.ViewSupport; import java.util.Iterator; /** * View for processing split-stream syntax. */ public class RouteResultView extends ViewSupport { private final EventType eventType; private RouteResultViewHandler handler; private ExprEvaluatorContext exprEvaluatorContext; /** * Ctor. * @param isFirst true for the first-where clause, false for all where-clauses * @param eventType output type * @param epStatementHandle handle * @param internalEventRouter routining output events * @param processors processors for select clauses * @param whereClauses where expressions * @param statementContext statement context */ public RouteResultView(boolean isFirst, EventType eventType, EPStatementHandle epStatementHandle, InternalEventRouter internalEventRouter, boolean[] isNamedWindowInsert, ResultSetProcessor[] processors, ExprNode[] whereClauses, StatementContext statementContext) { if (whereClauses.length != processors.length) { throw new IllegalArgumentException("Number of where-clauses and processors does not match"); } this.exprEvaluatorContext = new ExprEvaluatorContextStatement(statementContext); this.eventType = eventType; if (isFirst) { handler = new RouteResultViewHandlerFirst(epStatementHandle, internalEventRouter, isNamedWindowInsert, processors, ExprNodeUtility.getEvaluators(whereClauses), statementContext); } else { handler = new RouteResultViewHandlerAll(epStatementHandle, internalEventRouter, isNamedWindowInsert, processors, ExprNodeUtility.getEvaluators(whereClauses), statementContext); } } public void update(EventBean[] newData, EventBean[] oldData) { if (newData == null) { return; } for (EventBean bean : newData) { boolean isHandled = handler.handle(bean, exprEvaluatorContext); if (!isHandled) { updateChildren(new EventBean[] {bean}, null); } } } public EventType getEventType() { return eventType; } public Iterator<EventBean> iterator() { return CollectionUtil.NULL_EVENT_ITERATOR; } }