All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.espertech.esper.epl.named.NamedWindowConsumerView Maven / Gradle / Ivy

/*
 ***************************************************************************************
 *  Copyright (C) 2006 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.named;

import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.EventType;
import com.espertech.esper.client.annotation.AuditEnum;
import com.espertech.esper.collection.FilteredEventIterator;
import com.espertech.esper.collection.FlushedEventBuffer;
import com.espertech.esper.collection.OneEventCollection;
import com.espertech.esper.epl.expression.core.ExprEvaluator;
import com.espertech.esper.epl.expression.core.ExprEvaluatorContext;
import com.espertech.esper.epl.property.PropertyEvaluator;
import com.espertech.esper.event.EventBeanUtility;
import com.espertech.esper.util.AuditPath;
import com.espertech.esper.util.StopCallback;
import com.espertech.esper.view.ViewSupport;

import java.util.Iterator;

/**
 * Represents a consumer of a named window that selects from a named window via a from-clause.
 * 

* The view simply dispatches directly to child views, and keeps the last new event for iteration. */ public class NamedWindowConsumerView extends ViewSupport implements StopCallback { private final ExprEvaluator[] filterList; private final EventType eventType; private final NamedWindowConsumerCallback consumerCallback; private final ExprEvaluatorContext exprEvaluatorContext; private final PropertyEvaluator optPropertyEvaluator; private final FlushedEventBuffer optPropertyContainedBuffer; private final boolean audit; public NamedWindowConsumerView(ExprEvaluator[] filterList, PropertyEvaluator optPropertyEvaluator, EventType eventType, NamedWindowConsumerCallback consumerCallback, ExprEvaluatorContext exprEvaluatorContext, boolean audit) { this.filterList = filterList; this.optPropertyEvaluator = optPropertyEvaluator; if (optPropertyEvaluator != null) { optPropertyContainedBuffer = new FlushedEventBuffer(); } else { optPropertyContainedBuffer = null; } this.eventType = eventType; this.consumerCallback = consumerCallback; this.exprEvaluatorContext = exprEvaluatorContext; this.audit = audit; } public void update(EventBean[] newData, EventBean[] oldData) { if (audit) { if (AuditPath.isInfoEnabled()) { AuditPath.auditLog(exprEvaluatorContext.getEngineURI(), exprEvaluatorContext.getStatementName(), AuditEnum.STREAM, eventType.getName() + " insert {" + EventBeanUtility.summarize(newData) + "} remove {" + EventBeanUtility.summarize(oldData) + "}"); } } // if we have a filter for the named window, if (filterList.length != 0) { EventBean[] eventPerStream = new EventBean[1]; newData = passFilter(newData, true, exprEvaluatorContext, eventPerStream); oldData = passFilter(oldData, false, exprEvaluatorContext, eventPerStream); } if (optPropertyEvaluator != null) { newData = getUnpacked(newData); oldData = getUnpacked(oldData); } if ((newData != null) || (oldData != null)) { updateChildren(newData, oldData); } } private EventBean[] getUnpacked(EventBean[] data) { if (data == null) { return null; } if (data.length == 0) { return data; } for (int i = 0; i < data.length; i++) { EventBean[] unpacked = optPropertyEvaluator.getProperty(data[i], exprEvaluatorContext); optPropertyContainedBuffer.add(unpacked); } return optPropertyContainedBuffer.getAndFlush(); } private EventBean[] passFilter(EventBean[] eventData, boolean isNewData, ExprEvaluatorContext exprEvaluatorContext, EventBean[] eventPerStream) { if ((eventData == null) || (eventData.length == 0)) { return null; } OneEventCollection filtered = null; for (EventBean theEvent : eventData) { eventPerStream[0] = theEvent; boolean pass = true; for (ExprEvaluator filter : filterList) { Boolean result = (Boolean) filter.evaluate(eventPerStream, isNewData, exprEvaluatorContext); if (result == null || !result) { pass = false; break; } } if (pass) { if (filtered == null) { filtered = new OneEventCollection(); } filtered.add(theEvent); } } if (filtered == null) { return null; } return filtered.toArray(); } public EventType getEventType() { if (optPropertyEvaluator != null) { return optPropertyEvaluator.getFragmentEventType(); } return eventType; } public Iterator iterator() { return new FilteredEventIterator(filterList, consumerCallback.getIterator(), exprEvaluatorContext); } public void stop() { consumerCallback.stopped(this); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy