com.espertech.esper.epl.view.OutputProcessViewDirectDistinctOrAfter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of esper Show documentation
Show all versions of esper Show documentation
Complex event processing and event series analysis component
/**************************************************************************************
* Copyright (C) 2006-2015 EsperTech Inc. All rights reserved. *
* http://www.espertech.com/esper *
* 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.epl.view;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.collection.MultiKey;
import com.espertech.esper.collection.UniformPair;
import com.espertech.esper.core.context.util.AgentInstanceContext;
import com.espertech.esper.core.service.UpdateDispatchView;
import com.espertech.esper.epl.core.ResultSetProcessor;
import com.espertech.esper.epl.core.ResultSetProcessorHelperFactory;
import com.espertech.esper.epl.expression.core.ExprEvaluatorContext;
import com.espertech.esper.event.EventBeanUtility;
import com.espertech.esper.util.AuditPath;
import com.espertech.esper.util.ExecutionPathDebugLog;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.Iterator;
import java.util.Set;
/**
* Output process view that does not enforce any output policies and may simply
* hand over events to child views, but works with distinct and after-output policies
*/
public class OutputProcessViewDirectDistinctOrAfter extends OutputProcessViewBaseWAfter
{
private static final Log log = LogFactory.getLog(OutputProcessViewDirectDistinctOrAfter.class);
private final OutputProcessViewDirectDistinctOrAfterFactory parent;
public OutputProcessViewDirectDistinctOrAfter(ResultSetProcessorHelperFactory resultSetProcessorHelperFactory, AgentInstanceContext agentInstanceContext, ResultSetProcessor resultSetProcessor, Long afterConditionTime, Integer afterConditionNumberOfEvents, boolean afterConditionSatisfied, OutputProcessViewDirectDistinctOrAfterFactory parent) {
super(resultSetProcessorHelperFactory, agentInstanceContext, resultSetProcessor, afterConditionTime, afterConditionNumberOfEvents, afterConditionSatisfied);
this.parent = parent;
}
public int getNumChangesetRows() {
return 0;
}
public OutputCondition getOptionalOutputCondition() {
return null;
}
public OutputProcessViewConditionDeltaSet getOptionalDeltaSet() {
return null;
}
/**
* The update method is called if the view does not participate in a join.
* @param newData - new events
* @param oldData - old events
*/
public void update(EventBean[] newData, EventBean[] oldData)
{
if ((ExecutionPathDebugLog.isDebugEnabled) && (log.isDebugEnabled()))
{
log.debug(".update Received update, " +
" newData.length==" + ((newData == null) ? 0 : newData.length) +
" oldData.length==" + ((oldData == null) ? 0 : oldData.length));
}
boolean isGenerateSynthetic = parent.getStatementResultService().isMakeSynthetic();
boolean isGenerateNatural = parent.getStatementResultService().isMakeNatural();
UniformPair newOldEvents = resultSetProcessor.processViewResult(newData, oldData, isGenerateSynthetic);
if (!super.checkAfterCondition(newOldEvents, parent.getStatementContext()))
{
return;
}
if (parent.isDistinct() && newOldEvents != null)
{
newOldEvents.setFirst(EventBeanUtility.getDistinctByProp(newOldEvents.getFirst(), parent.getEventBeanReader()));
newOldEvents.setSecond(EventBeanUtility.getDistinctByProp(newOldEvents.getSecond(), parent.getEventBeanReader()));
}
if ((!isGenerateSynthetic) && (!isGenerateNatural))
{
if (AuditPath.isAuditEnabled) {
OutputStrategyUtil.indicateEarlyReturn(parent.getStatementContext(), newOldEvents);
}
return;
}
boolean forceOutput = false;
if ((newData == null) && (oldData == null) &&
((newOldEvents == null) || (newOldEvents.getFirst() == null && newOldEvents.getSecond() == null)))
{
forceOutput = true;
}
// Child view can be null in replay from named window
if (childView != null)
{
postProcess(forceOutput, newOldEvents, childView);
}
}
/**
* This process (update) method is for participation in a join.
* @param newEvents - new events
* @param oldEvents - old events
*/
public void process(Set> newEvents, Set> oldEvents, ExprEvaluatorContext exprEvaluatorContext)
{
if ((ExecutionPathDebugLog.isDebugEnabled) && (log.isDebugEnabled()))
{
log.debug(".process Received update, " +
" newData.length==" + ((newEvents == null) ? 0 : newEvents.size()) +
" oldData.length==" + ((oldEvents == null) ? 0 : oldEvents.size()));
}
boolean isGenerateSynthetic = parent.getStatementResultService().isMakeSynthetic();
boolean isGenerateNatural = parent.getStatementResultService().isMakeNatural();
UniformPair newOldEvents = resultSetProcessor.processJoinResult(newEvents, oldEvents, isGenerateSynthetic);
if (!checkAfterCondition(newOldEvents, parent.getStatementContext()))
{
return;
}
if (parent.isDistinct() && newOldEvents != null)
{
newOldEvents.setFirst(EventBeanUtility.getDistinctByProp(newOldEvents.getFirst(), parent.getEventBeanReader()));
newOldEvents.setSecond(EventBeanUtility.getDistinctByProp(newOldEvents.getSecond(), parent.getEventBeanReader()));
}
if ((!isGenerateSynthetic) && (!isGenerateNatural))
{
if (AuditPath.isAuditEnabled) {
OutputStrategyUtil.indicateEarlyReturn(parent.getStatementContext(), newOldEvents);
}
return;
}
if (newOldEvents == null)
{
return;
}
// Child view can be null in replay from named window
if (childView != null)
{
postProcess(false, newOldEvents, childView);
}
}
protected void postProcess(boolean force, UniformPair newOldEvents, UpdateDispatchView childView) {
OutputStrategyUtil.output(force, newOldEvents, childView);
}
public Iterator iterator() {
return OutputStrategyUtil.getIterator(joinExecutionStrategy, resultSetProcessor, parentView, parent.isDistinct());
}
public void terminated() {
// Not applicable
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy