package uk.ac.imperial.lsds.streamsql.operator; import java.util.List; import java.util.Queue; import uk.ac.imperial.lsds.seep.api.largestateimpls.SeepMap; import uk.ac.imperial.lsds.seep.comm.serialization.DataTuple; import uk.ac.imperial.lsds.seep.operator.StatefulOperator; import uk.ac.imperial.lsds.seep.state.StateWrapper; import uk.ac.imperial.lsds.streamsql.util.Util; import uk.ac.imperial.lsds.streamsql.visitors.OperatorVisitor; import uk.ac.imperial.lsds.streamsql.windows.Window; public class Distinct implements StatefulOperator, IStreamSQLOperator, WindowOperator { private static final long serialVersionUID = 1L; private SeepMap<String, String> state; private Window window; public Distinct(Window window) { this.window = window; } @Override public void setUp() { state = new SeepMap<>(); this.window.registerCallback(this); } @Override public void processData(DataTuple data) { this.window.updateWindow(data); } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("Distinct"); return sb.toString(); } @Override public void processData(List<DataTuple> dataList) { this.window.updateWindow(dataList); } @Override public void evaluateWindow(Queue<DataTuple> dataList) { // String key = Util.generateTupleString(data); // // /* // * Check whether tuple was observed already // */ // if (!state.containsKey(key)) // /* // * Send the respective tuple // */ // api.send(data); } @Override public StateWrapper getState() { return new StateWrapper(1, 1, this.state); } @SuppressWarnings("unchecked") @Override public void replaceState(StateWrapper state) { this.state = (SeepMap<String, String>) state.getStateImpl(); } @Override public void accept(OperatorVisitor ov) { ov.visit(this); } }