Package com.espertech.esper.core.context.factory

Source Code of com.espertech.esper.core.context.factory.StatementAgentInstancePostLoadSelect

/*
* *************************************************************************************
*  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.core.context.factory;

import com.espertech.esper.client.EventBean;
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.epl.join.base.JoinSetComposerDesc;
import com.espertech.esper.epl.named.NamedWindowTailViewInstance;
import com.espertech.esper.filter.FilterSpecCompiled;
import com.espertech.esper.view.HistoricalEventViewable;
import com.espertech.esper.view.Viewable;

import java.lang.annotation.Annotation;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class StatementAgentInstancePostLoadSelect implements StatementAgentInstancePostLoad {
    private final Viewable[] streamViews;
    private final JoinSetComposerDesc joinSetComposer;
    private final NamedWindowTailViewInstance[] namedWindowTailViews;
    private final FilterSpecCompiled[] namedWindowPostloadFilters;
    private final List<ExprNode>[] namedWindowFilters;
    private final Annotation[] annotations;
    private final ExprEvaluatorContext exprEvaluatorContext;

    public StatementAgentInstancePostLoadSelect(Viewable[] streamViews, JoinSetComposerDesc joinSetComposer, NamedWindowTailViewInstance[] namedWindowTailViews, FilterSpecCompiled[] namedWindowPostloadFilters, List<ExprNode>[] namedWindowFilters, Annotation[] annotations, ExprEvaluatorContext exprEvaluatorContext) {
        this.streamViews = streamViews;
        this.joinSetComposer = joinSetComposer;
        this.namedWindowTailViews = namedWindowTailViews;
        this.namedWindowPostloadFilters = namedWindowPostloadFilters;
        this.namedWindowFilters = namedWindowFilters;
        this.annotations = annotations;
        this.exprEvaluatorContext = exprEvaluatorContext;
    }

    public void executePostLoad() {
        if (joinSetComposer == null) {
            return;
        }
        EventBean[][] events = new EventBean[streamViews.length][];
        for (int stream = 0; stream < streamViews.length; stream++) {
            Viewable streamView = streamViews[stream];
            if (streamView instanceof HistoricalEventViewable) {
                continue;
            }

            Collection<EventBean> eventsInWindow;
            if (namedWindowTailViews[stream] != null) {
                NamedWindowTailViewInstance nwtail = namedWindowTailViews[stream];
                Collection<EventBean> snapshot = nwtail.snapshotNoLock(namedWindowPostloadFilters[stream], annotations);
                if (namedWindowFilters[stream] != null) {
                    eventsInWindow = new ArrayList<EventBean>(snapshot.size());
                    ExprNodeUtility.applyFilterExpressionsIterable(snapshot, namedWindowFilters[stream], exprEvaluatorContext, eventsInWindow);
                }
                else {
                    eventsInWindow = snapshot;
                }
            }
            else if (namedWindowFilters[stream] != null && !namedWindowFilters[stream].isEmpty()) {
                eventsInWindow = new ArrayDeque<EventBean>();
                ExprNodeUtility.applyFilterExpressionsIterable(streamViews[stream], namedWindowFilters[stream], exprEvaluatorContext, eventsInWindow);
            }
            else {
                eventsInWindow = new ArrayDeque<EventBean>();
                for (EventBean aConsumerView : streamViews[stream]) {
                    eventsInWindow.add(aConsumerView);
                }
            }
            events[stream] = eventsInWindow.toArray(new EventBean[eventsInWindow.size()]);
        }
        joinSetComposer.getJoinSetComposer().init(events);
    }
}
TOP

Related Classes of com.espertech.esper.core.context.factory.StatementAgentInstancePostLoadSelect

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.