/*******************************************************************************
* Copyright (c) 2014 Imperial College London
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Raul Castro Fernandez - initial API and implementation
******************************************************************************/
package uk.ac.imperial.lsds.seep.operator.compose;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import uk.ac.imperial.lsds.seep.comm.serialization.DataTuple;
import uk.ac.imperial.lsds.seep.operator.CommunicationPrimitives;
import uk.ac.imperial.lsds.seep.operator.OperatorCode;
public class MultiOperator implements OperatorCode, ComposedOperator, CommunicationPrimitives{
private static final long serialVersionUID = 1L;
private final int id;
private Set<SubOperator> subOperators;
private SubOperator mostUpstream;
private MultiOperator(Set<SubOperator> subOperators, int multiOpId){
this.id = multiOpId;
if(checkConstraints(subOperators)){
this.subOperators = subOperators;
}
else{
//TODO throw error
}
}
private boolean checkConstraints(Set<SubOperator> subOperators){
// TODO:
// - constains:
// - 1 single upstream and 1 single downstream
// - ...
return true;
}
/** Implementation of OperatorCode interface **/
@Override
public void processData(DataTuple data) {
// just call the first op to start processing data
mostUpstream.processData(data);
}
@Override
public void processData(List<DataTuple> dataList) {
mostUpstream.processData(dataList);
}
@Override
public void setUp() {
for(SubOperator so : subOperators){
so.setMultiOperator(this);
so.setUp();
}
}
/** Implementation of ComposedOperator interface **/
public int getMultiOpId(){
return id;
}
public static MultiOperator synthesizeFrom(Set<SubOperator> subOperators, int multiOpId){
return new MultiOperator(subOperators, multiOpId);
}
@Override
public int getNumberOfSubOperators() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isComposedOperatorStateful() {
// TODO Auto-generated method stub
return false;
}
@Override
public void send(DataTuple dt) {
api.send(dt);
}
@Override
public void send_toStreamId(DataTuple dt, int streamId) {
api.send_toStreamId(dt, streamId);
}
@Override
public void send_all(DataTuple dt) {
// TODO Auto-generated method stub
}
@Override
public void send_splitKey(DataTuple dt, int key) {
// TODO Auto-generated method stub
}
@Override
public void send_toIndex(DataTuple dt, int idx) {
// TODO Auto-generated method stub
}
@Override
public void send_toStreamId_splitKey(DataTuple dt, int streamId, int key) {
// TODO Auto-generated method stub
}
@Override
public void send_toStreamId_toAll(DataTuple dt, int streamId) {
// TODO Auto-generated method stub
}
@Override
public void send_toStreamId_toAll_threadPool(DataTuple dt, int streamId) {
}
@Override
public void send_all_threadPool(DataTuple dt) {
}
@Override
public void send_to_OpId(DataTuple dt, int opId) {
}
@Override
public void send_to_OpIds(DataTuple[] dt, int[] opId) {
}
@Override
public void send_toIndices(DataTuple[] dts, int[] indices) {
}
}