package org.opendaylight.unimgr.mef.nrp.impl.ext;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+
import java.text.MessageFormat;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.unimgr.mef.nrp.api.TapiConstants;
import org.opendaylight.unimgr.mef.nrp.common.NrpDao;
import org.opendaylight.unimgr.mef.nrp.common.TapiUtils;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev171221.ServiceInterfacePoint1;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev171221.ServiceInterfacePoint1Builder;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev171221.nrp.sip.attrs.NrpCarrierEthEnniNResourceBuilder;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev171221.nrp.sip.attrs.NrpCarrierEthInniNResourceBuilder;
-import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev171221.nrp.sip.attrs.NrpCarrierEthUniNResourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.ServiceInterfacePoint1;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.ServiceInterfacePoint1Builder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.sip.attrs.NrpCarrierEthEnniNResourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.sip.attrs.NrpCarrierEthInniNResourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.sip.attrs.NrpCarrierEthUniNResourceBuilder;
import org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.AddSipInput;
+import org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.AddSipOutput;
import org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.UnimgrExtService;
import org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.add.sip.input.SipType;
import org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.add.sip.input.sip.type.EnniSpec;
import org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.add.sip.input.sip.type.InniSpec;
import org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.add.sip.input.sip.type.UniSpec;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.common.rev171113.ETH;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.common.rev171113.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.common.rev171113.context.attrs.ServiceInterfacePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.common.rev171113.service._interface.point.LayerProtocolBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.node.OwnedNodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.node.OwnedNodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.node.OwnedNodeEdgePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.topology.rev171113.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.tapi.context.ServiceInterfacePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.node.OwnedNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.node.OwnedNodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.node.OwnedNodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.node.edge.point.MappedServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev180307.topology.NodeKey;
import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import com.google.common.base.Optional;
-
/**
+ * Implementation of unimgr specific rpc calls.
* @author bartosz.michalik@amartus.com
*/
public class UnimgrExtServiceImpl implements UnimgrExtService {
- private final ExecutorService executor = new ThreadPoolExecutor(1, 4,
+ private ListeningExecutorService executor = MoreExecutors.listeningDecorator(
+ new ThreadPoolExecutor(1, 4,
10, TimeUnit.MINUTES,
- new LinkedBlockingQueue<>());
+ new LinkedBlockingQueue<>()));
private final DataBroker broker;
}
@Override
- public Future<RpcResult<Void>> addSip(AddSipInput input) {
+ public ListenableFuture<RpcResult<AddSipOutput>> addSip(AddSipInput input) {
final Uuid nepId = input.getNepId();
final Uuid nodeId = input.getNodeId();
Objects.requireNonNull(nepId);
return executor.submit(() -> {
ReadWriteTransaction tx = broker.newReadWriteTransaction();
- Optional<OwnedNodeEdgePoint> nep = tx.read(LogicalDatastoreType.OPERATIONAL, NrpDao.topo(TapiConstants.PRESTO_SYSTEM_TOPO)
+ Optional<OwnedNodeEdgePoint> nep = tx
+ .read(LogicalDatastoreType.OPERATIONAL, NrpDao.topo(TapiConstants.PRESTO_SYSTEM_TOPO)
.child(Node.class, new NodeKey(nodeId))
.child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepId))
).checkedGet();
Uuid sipId = new Uuid("sip:" + nepId.getValue());
- List<Uuid> sips = nep.get().getMappedServiceInterfacePoint();
+ List<MappedServiceInterfacePoint> sips = nep.get().getMappedServiceInterfacePoint();
if (sips != null && !sips.isEmpty()) {
return withError("sip for NEP with id {0} for node {1} already defined", nepId, nodeId);
}
ServiceInterfacePointBuilder sipBuilder = new ServiceInterfacePointBuilder()
.setUuid(sipId)
.addAugmentation(ServiceInterfacePoint1.class, sip1)
- .setLayerProtocol(Collections.singletonList(TapiUtils.toSipPN(ETH.class)));
+ .setLayerProtocolName(Collections.singletonList(LayerProtocolName.ETH));
nrpDao.addSip(
sipBuilder
.build());
nrpDao.updateNep(nodeId, new OwnedNodeEdgePointBuilder(nep.get())
- .setMappedServiceInterfacePoint(Collections.singletonList(sipId))
+ .setMappedServiceInterfacePoint(
+ Collections.singletonList(TapiUtils.toSipRef(sipId, MappedServiceInterfacePoint.class)))
.build()
);
tx.submit().checkedGet();
-
- return success();
+ return RpcResultBuilder.<AddSipOutput>success().build();
});
}
ServiceInterfacePoint1 sip = null;
if (sipType instanceof InniSpec) {
- org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.add.sip.input.sip.type.inni.spec.InniSpec spec = ((InniSpec) sipType).getInniSpec();
+ org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531
+ .add.sip.input.sip.type.inni.spec.InniSpec spec = ((InniSpec) sipType).getInniSpec();
if (spec != null) {
sip = new ServiceInterfacePoint1Builder()
.setNrpCarrierEthInniNResource(new NrpCarrierEthInniNResourceBuilder(spec).build()).build();
}
} else if (sipType instanceof EnniSpec) {
- org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.add.sip.input.sip.type.enni.spec.EnniSpec spec = ((EnniSpec) sipType).getEnniSpec();
+ org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531
+ .add.sip.input.sip.type.enni.spec.EnniSpec spec = ((EnniSpec) sipType).getEnniSpec();
if (spec != null) {
sip = new ServiceInterfacePoint1Builder()
.setNrpCarrierEthEnniNResource(new NrpCarrierEthEnniNResourceBuilder(spec).build()).build();
}
} else if (sipType instanceof UniSpec) {
- org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531.add.sip.input.sip.type.uni.spec.UniSpec spec = ((UniSpec) sipType).getUniSpec();
+ org.opendaylight.yang.gen.v1.urn.odl.unimgr.yang.unimgr.ext.rev170531
+ .add.sip.input.sip.type.uni.spec.UniSpec spec = ((UniSpec) sipType).getUniSpec();
if (spec != null) {
sip = new ServiceInterfacePoint1Builder()
.setNrpCarrierEthUniNResource(new NrpCarrierEthUniNResourceBuilder(spec).build()).build();
return RpcResultBuilder.<Void>success().build();
}
- private static RpcResult<Void> withError(String error, Object ... params) {
- RpcResultBuilder<Void> failed = RpcResultBuilder.<Void>failed();
+ private static RpcResult<AddSipOutput> withError(String error, Object ... params) {
+ RpcResultBuilder<AddSipOutput> failed = RpcResultBuilder.failed();
if (error != null) {
if (params.length > 0) {
error = MessageFormat.format(error, params);