@Override
public Future<RpcResult<Void>> addPortFunction(AddPortFunctionInput input) {
final PortFunction function = input.getPortFunction();
FabricId fabricId = input.getFabricId();
TpId tpid = input.getLogicalPort();
NodeId ldev = input.getLogicalDevice();
final FabricInstance fabricObj = FabricInstanceCache.INSTANCE.retrieveFabric(fabricId);
if (fabricObj == null) {
return Futures.immediateFailedFuture(
new IllegalArgumentException(String.format("fabric %s does not exist", fabricId)));
}
final InstanceIdentifier<PortFunction> fncIId = MdSalUtils.createLogicPortIId(fabricId, ldev, tpid)
.augmentation(LogicalPortAugment.class)
.child(LportAttribute.class)
.child(PortFunction.class);
WriteTransaction trans = dataBroker.newWriteOnlyTransaction();
trans.merge(LogicalDatastoreType.OPERATIONAL,fncIId, function, false);
return Futures.transform(trans.submit(), new AsyncFunction<Void, RpcResult<Void>>() {
@Override
public ListenableFuture<RpcResult<Void>> apply(Void submitResult) throws Exception {
fabricObj.notifyPortFuncUpdated(fncIId, function, false);
return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
}
}, executor);
}