Add VPNaaS related test cases
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronVPNServiceInterface.java
index d25d9753355697252ccf64e7ed6ecf39c24eeda3..108ee054b8e1f9946dfe903160a73769573d41a6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright Tata Consultancy Services, 2015.  All rights reserved.
+ * Copyright (c) 2015 Tata Consultancy Services and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
@@ -8,7 +8,6 @@
 
 package org.opendaylight.neutron.transcriber;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -20,68 +19,47 @@ import java.util.concurrent.ConcurrentMap;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronVPNServiceCRUD;
 import org.opendaylight.neutron.spi.NeutronVPNService;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnservices.attributes.VpnServices;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnservices.attributes.vpn.services.Vpnservice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnservices.attributes.vpn.services.VpnserviceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NeutronVPNServiceInterface extends AbstractNeutronInterface implements INeutronVPNServiceCRUD {
-    private static final Logger logger = LoggerFactory.getLogger(NeutronVPNServiceInterface.class);
-    private ConcurrentMap<String, NeutronVPNService> VPNServiceDB = new ConcurrentHashMap<String, NeutronVPNService>();
+public class NeutronVPNServiceInterface extends AbstractNeutronInterface<Vpnservice,NeutronVPNService> implements INeutronVPNServiceCRUD {
+    private static final Logger LOGGER = LoggerFactory.getLogger(NeutronVPNServiceInterface.class);
+    private ConcurrentMap<String, NeutronVPNService> vpnServiceDB = new ConcurrentHashMap<String, NeutronVPNService>();
 
 
     NeutronVPNServiceInterface(ProviderContext providerContext) {
         super(providerContext);
     }
 
-    // this method uses reflection to update an object from it's delta.
-
-    private boolean overwrite(Object target, Object delta) {
-        Method[] methods = target.getClass().getMethods();
-
-        for (Method toMethod : methods) {
-            if (toMethod.getDeclaringClass().equals(target.getClass()) && toMethod.getName().startsWith("set")) {
-
-                String toName = toMethod.getName();
-                String fromName = toName.replace("set", "get");
-
-                try {
-                    Method fromMethod = delta.getClass().getMethod(fromName);
-                    Object value = fromMethod.invoke(delta, (Object[]) null);
-                    if (value != null) {
-                        toMethod.invoke(target, value);
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
     @Override
     public boolean neutronVPNServiceExists(String uuid) {
-        return VPNServiceDB.containsKey(uuid);
+        return vpnServiceDB.containsKey(uuid);
     }
 
     @Override
     public NeutronVPNService getVPNService(String uuid) {
         if (!neutronVPNServiceExists(uuid)) {
-            logger.debug("No VPNService Have Been Defined");
+            LOGGER.debug("No VPNService Have Been Defined");
             return null;
         }
-        return VPNServiceDB.get(uuid);
+        return vpnServiceDB.get(uuid);
     }
 
     @Override
     public List<NeutronVPNService> getAllVPNService() {
         Set<NeutronVPNService> allVPNService = new HashSet<NeutronVPNService>();
-        for (Entry<String, NeutronVPNService> entry : VPNServiceDB.entrySet()) {
+        for (Entry<String, NeutronVPNService> entry : vpnServiceDB.entrySet()) {
             NeutronVPNService VPNService = entry.getValue();
             allVPNService.add(VPNService);
         }
-        logger.debug("Exiting getVPNService, Found {} OpenStackVPNService", allVPNService.size());
+        LOGGER.debug("Exiting getVPNService, Found {} OpenStackVPNService", allVPNService.size());
         List<NeutronVPNService> ans = new ArrayList<NeutronVPNService>();
         ans.addAll(allVPNService);
         return ans;
@@ -92,7 +70,8 @@ public class NeutronVPNServiceInterface extends AbstractNeutronInterface impleme
         if (neutronVPNServiceExists(input.getID())) {
             return false;
         }
-        VPNServiceDB.putIfAbsent(input.getID(), input);
+        vpnServiceDB.putIfAbsent(input.getID(), input);
+        addMd(input);
         return true;
     }
 
@@ -101,7 +80,8 @@ public class NeutronVPNServiceInterface extends AbstractNeutronInterface impleme
         if (!neutronVPNServiceExists(uuid)) {
             return false;
         }
-        VPNServiceDB.remove(uuid);
+        vpnServiceDB.remove(uuid);
+        removeMd(toMd(uuid));
         return true;
     }
 
@@ -110,8 +90,12 @@ public class NeutronVPNServiceInterface extends AbstractNeutronInterface impleme
         if (!neutronVPNServiceExists(uuid)) {
             return false;
         }
-        NeutronVPNService target = VPNServiceDB.get(uuid);
-        return overwrite(target, delta);
+        NeutronVPNService target = vpnServiceDB.get(uuid);
+        boolean rc = overwrite(target, delta);
+        if (rc) {
+            updateMd(vpnServiceDB.get(uuid));
+        }
+        return rc;
     }
 
     @Override
@@ -120,21 +104,56 @@ public class NeutronVPNServiceInterface extends AbstractNeutronInterface impleme
     }
 
     @Override
-    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
-        // TODO Auto-generated method stub
-        return null;
+    protected Vpnservice toMd(NeutronVPNService vpnService) {
+        VpnserviceBuilder vpnServiceBuilder = new VpnserviceBuilder();
+        if (vpnService.getName() != null) {
+            vpnServiceBuilder.setName(vpnService.getName());
+        }
+        if (vpnService.getTenantID() != null) {
+            vpnServiceBuilder.setTenantId(toUuid(vpnService.getTenantID()));
+        }
+        if (vpnService.getStatus() != null) {
+            vpnServiceBuilder.setStatus(vpnService.getStatus());
+        }
+        if (vpnService.getDescription() != null) {
+            vpnServiceBuilder.setDescr(vpnService.getDescription());
+        }
+        if (vpnService.getSubnetUUID() != null) {
+            vpnServiceBuilder.setSubnetId(toUuid(vpnService.getSubnetUUID()));
+        }
+        if (vpnService.getRouterUUID() != null) {
+            vpnServiceBuilder.setRouterId(toUuid(vpnService.getRouterUUID()));
+        }
+        vpnServiceBuilder.setAdminStateUp(vpnService.getAdminStateUp());
+        if (vpnService.getID() != null) {
+            vpnServiceBuilder.setUuid(toUuid(vpnService.getID()));
+        } else {
+            LOGGER.warn("Attempting to write neutron vpnService without UUID");
+        }
+        return vpnServiceBuilder.build();
     }
 
     @Override
-    protected DataObject toMd(Object neutronObject) {
-        // TODO Auto-generated method stub
-        return null;
+    protected InstanceIdentifier<Vpnservice> createInstanceIdentifier(Vpnservice vpnService) {
+        return InstanceIdentifier.create(Neutron.class)
+                 .child(VpnServices.class)
+                 .child(Vpnservice.class, vpnService.getKey());
     }
 
     @Override
-    protected DataObject toMd(String uuid) {
-        // TODO Auto-generated method stub
-        return null;
+    protected Vpnservice toMd(String uuid) {
+        VpnserviceBuilder vpnServiceBuilder = new VpnserviceBuilder();
+        vpnServiceBuilder.setUuid(toUuid(uuid));
+        return vpnServiceBuilder.build();
     }
 
+    public static void registerNewInterface(BundleContext context,
+                                            ProviderContext providerContext,
+                                            List<ServiceRegistration<?>> registrations) {
+        NeutronVPNServiceInterface neutronVPNServiceInterface = new NeutronVPNServiceInterface(providerContext);
+        ServiceRegistration<INeutronVPNServiceCRUD> neutronVPNServiceInterfaceRegistration = context.registerService(INeutronVPNServiceCRUD.class, neutronVPNServiceInterface, null);
+        if(neutronVPNServiceInterfaceRegistration != null) {
+            registrations.add(neutronVPNServiceInterfaceRegistration);
+        }
+    }
 }