use of org.wso2.siddhi.core.partition.executor.PartitionExecutor in project siddhi by wso2.
the class PartitionStreamReceiver method receive.
@Override
public void receive(Event[] events) {
if (partitionExecutors.size() == 0) {
StreamEvent currentEvent;
StreamEvent firstEvent = eventPool.borrowEvent();
streamEventConverter.convertEvent(events[0], firstEvent);
currentEvent = firstEvent;
for (int i = 1; i < events.length; i++) {
StreamEvent nextEvent = eventPool.borrowEvent();
streamEventConverter.convertEvent(events[i], nextEvent);
currentEvent.setNext(nextEvent);
currentEvent = nextEvent;
}
send(firstEvent);
eventPool.returnEvents(firstEvent);
} else {
String key = null;
StreamEvent firstEvent = null;
StreamEvent currentEvent = null;
for (Event event : events) {
StreamEvent nextEvent = eventPool.borrowEvent();
streamEventConverter.convertEvent(event, nextEvent);
for (PartitionExecutor partitionExecutor : partitionExecutors) {
String currentKey = partitionExecutor.execute(nextEvent);
if (currentKey != null) {
if (key == null) {
key = currentKey;
firstEvent = nextEvent;
} else if (!currentKey.equals(key)) {
send(key, firstEvent);
eventPool.returnEvents(firstEvent);
key = currentKey;
firstEvent = nextEvent;
} else {
currentEvent.setNext(nextEvent);
}
currentEvent = nextEvent;
}
}
}
send(key, firstEvent);
eventPool.returnEvents(firstEvent);
}
}
Aggregations