import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.StaleFlowBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.StaleFlowKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowOutput;
/**
* FlowForwarder
- * It implements {@link org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener}}
+ * It implements {@link org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener}
* for WildCardedPath to {@link Flow} and ForwardingRulesCommiter interface for methods:
- * add, update and remove {@link Flow} processing for
- * {@link org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent}.
+ * add, update and remove {@link Flow} processing for
+ * {@link org.opendaylight.controller.md.sal.binding.api.DataTreeModification}.
*/
public class FlowForwarder extends AbstractListeningCommiter<Flow> {
private static final Logger LOG = LoggerFactory.getLogger(FlowForwarder.class);
-
private final DataBroker dataBroker;
-
private ListenerRegistration<FlowForwarder> listenerRegistration;
public FlowForwarder (final ForwardingRulesManager manager, final DataBroker db) {
}
@Override
- public void add(final InstanceIdentifier<Flow> identifier,
- final Flow addDataObj,
- final InstanceIdentifier<FlowCapableNode> nodeIdent) {
+ public Future<RpcResult<AddFlowOutput>> add(
+ final InstanceIdentifier<Flow> identifier, final Flow addDataObj,
+ final InstanceIdentifier<FlowCapableNode> nodeIdent) {
+ Future<RpcResult<AddFlowOutput>> future;
final TableKey tableKey = identifier.firstKeyOf(Table.class, TableKey.class);
if (tableIdValidationPrecondition(tableKey, addDataObj)) {
final AddFlowInputBuilder builder = new AddFlowInputBuilder(addDataObj);
builder.setFlowRef(new FlowRef(identifier));
builder.setFlowTable(new FlowTableRef(nodeIdent.child(Table.class, tableKey)));
builder.setTransactionUri(new Uri(provider.getNewTransactionId()));
- provider.getSalFlowService().addFlow(builder.build());
+ future = provider.getSalFlowService().addFlow(builder.build());
+ } else {
+ future = Futures.<RpcResult<AddFlowOutput>>immediateFuture(null);
}
+
+ return future;
}
@Override