package uk.ac.imperial.lsds.seep.comm.protocol;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import uk.ac.imperial.lsds.seep.api.DataReference;
import uk.ac.imperial.lsds.seep.comm.serialization.MapWrapper;
import uk.ac.imperial.lsds.seep.infrastructure.ControlEndPoint;
import uk.ac.imperial.lsds.seep.infrastructure.SeepEndPoint;
public class MaterializeTaskCommand implements CommandType {
private Map<Integer, ControlEndPoint> mapping;
private Map<Integer, MapWrapper> inputs;
private Map<Integer, MapWrapper> outputs;
public MaterializeTaskCommand() { }
public MaterializeTaskCommand(
Map<Integer, ControlEndPoint> mapping,
Map<Integer, Map<Integer, Set<DataReference>>> inputs,
Map<Integer, Map<Integer, Set<DataReference>>> outputs) {
this.mapping = mapping;
this.inputs = new HashMap<>();
this.outputs = new HashMap<>();
// Adapt to inner representation for serialisation/deserialisation
for(Integer key : inputs.keySet()) {
MapWrapper mw = new MapWrapper();
mw.el = inputs.get(key);
this.inputs.put(key, mw);
}
for(Integer key : outputs.keySet()) {
MapWrapper mw = new MapWrapper();
mw.el = outputs.get(key);
this.outputs.put(key, mw);
}
}
@Override
public short type() {
return MasterWorkerProtocolAPI.MATERIALIZE_TASK.type();
}
public Map<Integer, Map<Integer, Set<DataReference>>> getInputs() {
Map<Integer, Map<Integer, Set<DataReference>>> rInputs = new HashMap<>();
for(Integer key : inputs.keySet()) {
rInputs.put(key, inputs.get(key).el);
}
return rInputs;
}
public Map<Integer, Map<Integer, Set<DataReference>>> getOutputs() {
Map<Integer, Map<Integer, Set<DataReference>>> rOutputs = new HashMap<>();
for(Integer key : outputs.keySet()) {
rOutputs.put(key, outputs.get(key).el);
}
return rOutputs;
}
public Map<Integer, ControlEndPoint> getMapping() {
return mapping;
}
}