Merge dev/fluorine work across to master
[unimgr.git] / impl / src / main / java / org / opendaylight / unimgr / mef / nrp / impl / ext / UnimgrExtServiceImpl.java
index 7e99d77d3a6a4a5a2270cd11fcb264105222df4d..5255e280a3c01d7920e44d980c7126976082e500 100644 (file)
@@ -8,55 +8,60 @@
 
 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;
 
@@ -65,7 +70,7 @@ public class UnimgrExtServiceImpl implements UnimgrExtService {
     }
 
     @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);
@@ -74,7 +79,8 @@ public class UnimgrExtServiceImpl implements UnimgrExtService {
 
         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();
@@ -84,7 +90,7 @@ public class UnimgrExtServiceImpl implements UnimgrExtService {
 
             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);
             }
@@ -95,20 +101,20 @@ public class UnimgrExtServiceImpl implements UnimgrExtService {
             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();
         });
     }
 
@@ -117,21 +123,24 @@ public class UnimgrExtServiceImpl implements UnimgrExtService {
         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();
@@ -145,8 +154,8 @@ public class UnimgrExtServiceImpl implements UnimgrExtService {
         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);