blob: 0f8c9a081e73b5d965dce9b911fbafc73fcb9e64 [file] [log] [blame]
package net.onrc.onos.core.flowmanager;
import static com.google.common.base.Preconditions.*;
import net.onrc.onos.api.flowmanager.FlowBatchHandle;
import net.onrc.onos.api.flowmanager.FlowBatchId;
import net.onrc.onos.api.flowmanager.FlowBatchOperation;
import net.onrc.onos.api.flowmanager.FlowBatchState;
public class FlowBatchHandleImpl implements FlowBatchHandle {
private final FlowBatchMap flowBatchMap;
private final FlowBatchId batchId;
/**
* Creates a handle using batch operation ID.
* <p>
* The ID is automatically generated and assigned by FlowManager, and used
* as an internal key for the flow batch operation map.
*
* @param map the {@link FlowBatchMap} object which maintains the flow batch
* operation
* @param id the Id for this batch operation
*/
public FlowBatchHandleImpl(FlowBatchMap map, FlowBatchId id) {
flowBatchMap = map;
batchId = id;
}
@Override
public FlowBatchOperation getFlowBatchOperation() {
FlowBatchOperation op = checkNotNull(flowBatchMap.get(batchId),
"The requested flow batch operation does not exist in the map.");
// TODO: should be an instance of immutable batch operation class.
return new FlowBatchOperation(op.getOperations());
}
@Override
public FlowBatchState getState() {
return flowBatchMap.getState(batchId);
}
@Override
public void purge() {
FlowBatchState state = getState();
if (state == FlowBatchState.COMPLETED || state == FlowBatchState.FAILED) {
flowBatchMap.remove(batchId);
}
}
}