import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.SettableFuture;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-
/**
* FlowForwarder
* 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}.
- *
- * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
- *
*/
public class FlowForwarder extends AbstractListeningCommiter<Flow> {
}
@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