/* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except * in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.wso2.siddhi.core.event.stream; import org.wso2.siddhi.core.event.MetaComplexEvent; import org.wso2.siddhi.core.util.SiddhiConstants; import org.wso2.siddhi.query.api.definition.AbstractDefinition; import org.wso2.siddhi.query.api.definition.Attribute; import org.wso2.siddhi.query.api.definition.StreamDefinition; import java.util.ArrayList; import java.util.List; /** * Class to hold meta info about StreamEvent. * This is also used to update variable positions on executors */ public class MetaStreamEvent implements MetaComplexEvent { private List<Attribute> beforeWindowData = new ArrayList<Attribute>(); private List<Attribute> onAfterWindowData = null; private List<Attribute> outputData = null; private List<AbstractDefinition> inputDefinitions = new ArrayList<AbstractDefinition>(); private String inputReferenceId; private StreamDefinition outputStreamDefinition; private boolean tableEvent = false; private boolean windowEvent = false; public List<Attribute> getBeforeWindowData() { return beforeWindowData; } public List<Attribute> getOnAfterWindowData() { if (onAfterWindowData != null) { return onAfterWindowData; } else { return new ArrayList<Attribute>(); //return empty arraylist to avoid NPE } } public List<Attribute> getOutputData() { if (outputData != null) { return outputData; } else { return new ArrayList<Attribute>(); //return empty arraylist to avoid NPE } } public void initializeAfterWindowData() { if (onAfterWindowData == null) { onAfterWindowData = new ArrayList<Attribute>(); } } /** * Universal method to add data to MetaStream event. * Will make sure event will be added to corresponding array by * initializing them accordingly. * * @param attribute attribute * @return attribute position */ public int addData(Attribute attribute) { if (onAfterWindowData != null) { if (!onAfterWindowData.contains(attribute)) { onAfterWindowData.add(attribute); return SiddhiConstants.ON_AFTER_WINDOW_DATA_INDEX; } } else { if (!beforeWindowData.contains(attribute)) { beforeWindowData.add(attribute); return SiddhiConstants.BEFORE_WINDOW_DATA_INDEX; } } return SiddhiConstants.UNKNOWN_STATE; } public void addOutputData(Attribute attribute) { if (outputData == null) { outputData = new ArrayList<Attribute>(); } outputData.add(attribute); } public List<AbstractDefinition> getInputDefinitions() { return inputDefinitions; } public void addInputDefinition(AbstractDefinition inputDefinition) { this.inputDefinitions.add(inputDefinition); } public String getInputReferenceId() { return inputReferenceId; } public void setInputReferenceId(String inputReferenceId) { this.inputReferenceId = inputReferenceId; } @Override public void setOutputDefinition(StreamDefinition streamDefinition) { outputStreamDefinition = streamDefinition; } @Override public StreamDefinition getOutputStreamDefinition() { return outputStreamDefinition; } public boolean isTableEvent() { return tableEvent; } public void setTableEvent(boolean tableEvent) { this.tableEvent = tableEvent; } public boolean isWindowEvent() { return windowEvent; } public void setWindowEvent(boolean windowEvent) { this.windowEvent = windowEvent; } public AbstractDefinition getLastInputDefinition() { return inputDefinitions.get(inputDefinitions.size() - 1); } }