/*
* *************************************************************************************
* 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.dataflow.util;
import com.espertech.esper.client.dataflow.EPDataFlowSignalFinalMarker;
import com.espertech.esper.dataflow.annotations.DataFlowContext;
import com.espertech.esper.dataflow.annotations.DataFlowOpProvideSignal;
import com.espertech.esper.dataflow.interfaces.*;
import java.util.concurrent.CountDownLatch;
@DataFlowOpProvideSignal
public class DefaultSupportSourceOp implements DataFlowSourceOperator {
public Object[] instructions;
public DefaultSupportSourceOp() {
this.instructions = new Object[0];
}
public DefaultSupportSourceOp(Object[] instructions) {
this.instructions = instructions;
}
@DataFlowContext
private EPDataFlowEmitter graphContext;
private int currentCount = -1;
public int getCurrentCount() {
return currentCount;
}
public void next() throws InterruptedException {
currentCount++;
if (instructions.length <= currentCount) {
graphContext.submitSignal(new EPDataFlowSignalFinalMarker() {});
return;
}
Object next = instructions[currentCount];
if (next instanceof CountDownLatch) {
CountDownLatch latch = (CountDownLatch) next;
latch.await();
}
else if (next instanceof Long) {
long sleepTime = (Long) next;
Thread.sleep(sleepTime);
}
else if (next instanceof RuntimeException) {
RuntimeException ex = (RuntimeException) next;
throw new RuntimeException("Support-graph-source generated exception: " + ex.getMessage(), ex);
}
else {
graphContext.submit(next);
}
}
public DataFlowOpInitializeResult initialize(DataFlowOpInitializateContext context) throws Exception {
return null;
}
public void open(DataFlowOpOpenContext openContext) {
}
public void close(DataFlowOpCloseContext openContext) {
}
}