Connectivity service synchronous write.
[unimgr.git] / netvirt / src / main / java / org / opendaylight / unimgr / mef / netvirt / MefServicesUtils.java
index 810d6c3b56351fe3743af00643d116e2a2c8939b..19d28f296bbbad413e9df7ac3e291078e3b01d76 100644 (file)
@@ -17,11 +17,14 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.subnets.Subnet;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.EvcElan;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.IpvcVpn;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.IpvcVpnBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.MefServices;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefService;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefServiceKey;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.EvcChoice;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.IpvcChoice;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.Evc;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.ipvc.choice.Ipvc;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.ipvc.choice.ipvc.Unis;
@@ -46,6 +49,11 @@ public class MefServicesUtils {
         return getMefServiceInstanceIdentifier().child(Evc.class);
     }
 
+    public static InstanceIdentifier<Evc> getEvcInstanceIdentifier(RetailSvcIdType svcId) {
+        return InstanceIdentifier.create(MefServices.class).child(MefService.class, new MefServiceKey(svcId))
+                .child(Evc.class);
+    }
+
     public static InstanceIdentifier<MefService> getMefServiceInstanceIdentifier() {
         return InstanceIdentifier.create(MefServices.class).child(MefService.class);
     }
@@ -55,10 +63,10 @@ public class MefServicesUtils {
     }
 
     public static InstanceIdentifier<Ipvc> getIpvcsInstanceIdentifier() {
-        return InstanceIdentifier.create(MefServices.class).child(MefService.class).child(Ipvc.class);
+        return getMefServiceInstanceIdentifier().child(Ipvc.class);
     }
 
-    public static InstanceIdentifier<Ipvc> getIpvcsInstanceIdentifier(RetailSvcIdType svcId) {
+    public static InstanceIdentifier<Ipvc> getIpvcInstanceIdentifier(RetailSvcIdType svcId) {
         return InstanceIdentifier.create(MefServices.class).child(MefService.class, new MefServiceKey(svcId))
                 .child(Ipvc.class);
     }
@@ -93,6 +101,23 @@ public class MefServicesUtils {
         return null;
     }
 
+    public static Ipvc getIpvc(DataBroker dataBroker, InstanceIdentifier<Ipvc> identifier) {
+        Optional<Ipvc> ipvcVpn = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION, identifier);
+        if (ipvcVpn.isPresent()) {
+            return ipvcVpn.get();
+        } else {
+            return null;
+        }
+    }
+
+    public static Evc getEvc(DataBroker dataBroker, InstanceIdentifier<Evc> identifier) {
+        Optional<Evc> evcVpn = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION, identifier);
+        if (evcVpn.isPresent()) {
+            return evcVpn.get();
+        } else {
+            return null;
+        }
+    }
 
     public static IpvcVpn getOperIpvcVpn(DataBroker dataBroker, InstanceIdentifier<Ipvc> identifier) {
         InstanceIdentifier<IpvcVpn> path = identifier.augmentation(IpvcVpn.class);
@@ -105,12 +130,19 @@ public class MefServicesUtils {
     }
 
     public static void addOperIpvcVpnElan(InstanceIdentifier<Ipvc> identifier, String vpnId, WriteTransaction tx) {
+        addOperIpvcVpnElan(identifier, vpnId, null, tx);
+    }
+
+    public static void addOperIpvcVpnElan(InstanceIdentifier<Ipvc> identifier, String vpnId, String vrfId, WriteTransaction tx) {
 
         synchronized (vpnId.intern()) {
             InstanceIdentifier<IpvcVpn> path = identifier.augmentation(IpvcVpn.class);
 
             IpvcVpnBuilder ipvcVpnBuilder = new IpvcVpnBuilder();
             ipvcVpnBuilder.setVpnId(vpnId);
+            if (vrfId != null) {
+                ipvcVpnBuilder.setVrfId(vrfId);
+            }
 
             tx.merge(LogicalDatastoreType.OPERATIONAL, path, ipvcVpnBuilder.build(), true);
         }
@@ -155,8 +187,8 @@ public class MefServicesUtils {
     }
 
     public static void removeOperIpvcVpn(InstanceIdentifier<Ipvc> identifier, WriteTransaction tx) {
-        InstanceIdentifier<IpvcVpn> path = identifier.augmentation(IpvcVpn.class);
-        tx.delete(LogicalDatastoreType.OPERATIONAL, path);
+        final InstanceIdentifier<MefService> serviceId = identifier.firstIdentifierOf(MefService.class);
+        tx.delete(LogicalDatastoreType.OPERATIONAL, serviceId);
     }
 
     public static void removeOperIpvcSubnet(DataBroker dataBroker, InstanceIdentifier<Ipvc> identifier, String vpnId,
@@ -176,7 +208,8 @@ public class MefServicesUtils {
             vpnElansEx.remove(vpnElans);
             VpnElansBuilder vpnElansB = new VpnElansBuilder(vpnElans);
             List<Subnets> exSubnets = vpnElansB.getSubnets();
-            List<Subnets> newSubnets = exSubnets.stream().filter(s -> ! s.getSubnet().equals(deleteSubnet)).collect(Collectors.toList());
+            List<Subnets> newSubnets = exSubnets.stream().filter(s -> !s.getSubnet().equals(deleteSubnet))
+                    .collect(Collectors.toList());
             vpnElansB.setSubnets(newSubnets);
             vpnElansEx.add(vpnElansB.build());
         }
@@ -200,4 +233,68 @@ public class MefServicesUtils {
         MdsalUtils.syncWrite(dataBroker, LogicalDatastoreType.OPERATIONAL, path, ipvcVpnBuilder.build());
     }
 
+    public static List<RetailSvcIdType> getAllIpvcsServiceIds(DataBroker dataBroker) {
+        List<RetailSvcIdType> toReturn = new ArrayList<>();
+
+        InstanceIdentifier<MefServices> path = MefServicesUtils.getMefServicesInstanceIdentifier();
+        Optional<MefServices> mefServices = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION, path);
+        if (!mefServices.isPresent() || mefServices.get() == null) {
+            return toReturn;
+        }
+        for (MefService service : mefServices.get().getMefService()) {
+            if (service.getMefServiceChoice() instanceof IpvcChoice) {
+                toReturn.add(service.getSvcId());
+            }
+        }
+        return toReturn;
+    }
+
+    public static List<RetailSvcIdType> getAllEvcsServiceIds(DataBroker dataBroker) {
+        List<RetailSvcIdType> toReturn = new ArrayList<>();
+
+        InstanceIdentifier<MefServices> path = MefServicesUtils.getMefServicesInstanceIdentifier();
+        Optional<MefServices> mefServices = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION, path);
+        if (!mefServices.isPresent() || mefServices.get() == null) {
+            return toReturn;
+        }
+        for (MefService service : mefServices.get().getMefService()) {
+            if (service.getMefServiceChoice() instanceof EvcChoice) {
+                toReturn.add(service.getSvcId());
+            }
+        }
+        return toReturn;
+    }
+
+    public static Optional<MefService> getOpMefServiceBySvcId(DataBroker dataBroker, RetailSvcIdType svcId) {
+        InstanceIdentifier<MefService> mefServiceIdr = InstanceIdentifier.builder(MefServices.class)
+                .child(MefService.class, new MefServiceKey(svcId)).build();
+        return MdsalUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL, mefServiceIdr);
+    }
+
+    public static VpnElans getVpnElanByIpUniId(List<VpnElans> vpnElansList, String ipUniId) {
+        if (!vpnElansList.isEmpty()) {
+            for (VpnElans vpnElan : vpnElansList) {
+                if (vpnElan.getIpUniId() != null && vpnElan.getIpUniId().getValue().equals(ipUniId)) {
+                    return vpnElan;
+                }
+            }
+        }
+        return null;
+    }
+
+    public static String getNetworkIdFromOpMefService(MefService opMefService, String unimgrNetworkId) {
+        if (opMefService.getMefServiceChoice() instanceof EvcChoice) {
+            return ((EvcChoice) opMefService.getMefServiceChoice()).getEvc().getAugmentation(EvcElan.class)
+                    .getElanId();
+        } else if (opMefService.getMefServiceChoice() instanceof IpvcChoice) {
+            List<VpnElans> vpnElansList = ((IpvcChoice) opMefService.getMefServiceChoice()).getIpvc()
+                    .getAugmentation(IpvcVpn.class).getVpnElans();
+            VpnElans vpnElan = MefServicesUtils.getVpnElanByIpUniId(vpnElansList, unimgrNetworkId);
+            if (vpnElan != null) {
+                return vpnElan.getElanId();
+            }
+        }
+        return null;
+    }
+
 }