/*
# Licensed Materials - Property of IBM
# Copyright IBM Corp. 2015
*/
package vwap;
import java.util.List;
import com.ibm.streamsx.topology.TStream;
import com.ibm.streamsx.topology.TWindow;
import com.ibm.streamsx.topology.function.BiFunction;
import com.ibm.streamsx.topology.function.Function;
public class VwapProcessing {
@SuppressWarnings("serial")
public static TStream<Bargain> bargains(TStream<Trade> trades,
TStream<Quote> quotes) {
final Function<Ticker,String> tickerKey = Ticker::getTicker;
TWindow<Trade,String> tradesWindow = trades.last(4).key(tickerKey);
TStream<VWapT> vwap = tradesWindow.aggregate(
new Function<List<Trade>, VWapT>() {
@Override
public VWapT apply(List<Trade> tuples) {
VWapT vwap = null;
for (Trade trade : tuples) {
if (vwap == null)
vwap = new VWapT(trade);
vwap.newTrade(trade);
}
return vwap == null ? null : vwap.complete();
}
});
TStream<Bargain> bargainIndex = quotes.joinLast(
tickerKey,
vwap,
tickerKey,
new BiFunction<Quote, VWapT, Bargain>() {
@Override
public Bargain apply(Quote v1, VWapT v2) {
if (v2 == null) // window is empty!
return null;
return new Bargain(v1, v2);
}
});
return bargainIndex;
}
}