Reversion yang model
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronSecurityGroupInterface.java
index 4f20a7262a640d3712d1c388d8305b150bfc7247..133f1a9e70f3aca7436d3f30585e91c1a531e8fd 100644 (file)
 /*
- * Copyright (C) 2014 Red Hat, Inc.
+ * Copyright (c) 2014, 2015 Red Hat, Inc. 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,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
  */
 
 package org.opendaylight.neutron.transcriber;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Map.Entry;
 import java.util.List;
+import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronSecurityGroupCRUD;
+import org.opendaylight.neutron.spi.INeutronSecurityRuleCRUD;
+import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
 import org.opendaylight.neutron.spi.NeutronSecurityGroup;
+import org.opendaylight.neutron.spi.NeutronSecurityRule;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.groups.attributes.SecurityGroups;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.groups.attributes.security.groups.SecurityGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.groups.attributes.security.groups.SecurityGroupBuilder;
+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 NeutronSecurityGroupInterface implements INeutronSecurityGroupCRUD {
-    private static final Logger logger = LoggerFactory.getLogger(NeutronSecurityGroupInterface.class);
-    private ConcurrentMap<String, NeutronSecurityGroup> securityGroupDB  = new ConcurrentHashMap<String, NeutronSecurityGroup>();
-
-
-
-    // this method uses reflection to update an object from it's delta.
+public class NeutronSecurityGroupInterface extends AbstractNeutronInterface<SecurityGroup, SecurityGroups, NeutronSecurityGroup> implements INeutronSecurityGroupCRUD {
+    private static final Logger LOGGER = LoggerFactory.getLogger(NeutronSecurityGroupInterface.class);
 
-    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;
+    NeutronSecurityGroupInterface(ProviderContext providerContext) {
+        super(providerContext);
     }
 
     @Override
     public boolean neutronSecurityGroupExists(String uuid) {
-        return securityGroupDB.containsKey(uuid);
+        return exists(uuid);
     }
 
     @Override
     public NeutronSecurityGroup getNeutronSecurityGroup(String uuid) {
-        if (!neutronSecurityGroupExists(uuid)) {
-            logger.debug("No Security Groups Have Been Defined");
-            return null;
-        }
-        return securityGroupDB.get(uuid);
+        return get(uuid);
+    }
+
+    @Override
+    protected List<SecurityGroup> getDataObjectList(SecurityGroups groups) {
+        return groups.getSecurityGroup();
     }
 
     @Override
     public List<NeutronSecurityGroup> getAllNeutronSecurityGroups() {
-        Set<NeutronSecurityGroup> allSecurityGroups = new HashSet<NeutronSecurityGroup>();
-        for (Entry<String, NeutronSecurityGroup> entry : securityGroupDB.entrySet()) {
-            NeutronSecurityGroup securityGroup = entry.getValue();
-            allSecurityGroups.add(securityGroup);
-        }
-        logger.debug("Exiting getSecurityGroups, Found {} OpenStackSecurityGroup", allSecurityGroups.size());
-        List<NeutronSecurityGroup> ans = new ArrayList<NeutronSecurityGroup>();
-        ans.addAll(allSecurityGroups);
-        return ans;
+        return getAll();
     }
 
     @Override
     public boolean addNeutronSecurityGroup(NeutronSecurityGroup input) {
-        if (neutronSecurityGroupExists(input.getSecurityGroupUUID())) {
-            return false;
-        }
-        securityGroupDB.putIfAbsent(input.getSecurityGroupUUID(), input);
-        return true;
+        return add(input);
     }
 
     @Override
     public boolean removeNeutronSecurityGroup(String uuid) {
-        if (!neutronSecurityGroupExists(uuid)) {
-            return false;
-        }
-        securityGroupDB.remove(uuid);
-        return true;
+        return remove(uuid);
     }
 
     @Override
     public boolean updateNeutronSecurityGroup(String uuid, NeutronSecurityGroup delta) {
-        if (!neutronSecurityGroupExists(uuid)) {
-            return false;
-        }
-        NeutronSecurityGroup target = securityGroupDB.get(uuid);
-        return overwrite(target, delta);
+        return update(uuid, delta);
     }
 
     @Override
     public boolean neutronSecurityGroupInUse(String securityGroupUUID) {
-        return !neutronSecurityGroupExists(securityGroupUUID);
+        return !exists(securityGroupUUID);
+    }
+
+    protected NeutronSecurityGroup fromMd(SecurityGroup group) {
+        NeutronSecurityGroup answer = new NeutronSecurityGroup();
+        if (group.getName() != null) {
+            answer.setSecurityGroupName(group.getName());
+        }
+        if (group.getDescription() != null) {
+            answer.setSecurityGroupDescription(group.getDescription());
+        }
+        if (group.getTenantId() != null) {
+            answer.setTenantID(group.getTenantId());
+        }
+        if (group.getSecurityRules() != null) {
+            NeutronCRUDInterfaces interfaces = new NeutronCRUDInterfaces()
+                .fetchINeutronSecurityRuleCRUD(this);
+            INeutronSecurityRuleCRUD srCrud = interfaces.getSecurityRuleInterface();
+
+            List<NeutronSecurityRule> rules = new ArrayList<NeutronSecurityRule>();
+            for (Uuid uuid: group.getSecurityRules()) {
+                 rules.add(srCrud.getNeutronSecurityRule(uuid.getValue()));
+            }
+            answer.setSecurityRules(rules);
+        }
+        if (group.getUuid() != null) {
+            answer.setID(group.getUuid().getValue());
+        } 
+        return answer;
+    }
+
+    @Override
+    protected SecurityGroup toMd(NeutronSecurityGroup securityGroup) {
+        SecurityGroupBuilder securityGroupBuilder = new SecurityGroupBuilder();
+        if (securityGroup.getSecurityGroupName() != null) {
+            securityGroupBuilder.setName(securityGroup.getSecurityGroupName());
+        }
+        if (securityGroup.getSecurityGroupDescription() != null) {
+            securityGroupBuilder.setDescription(securityGroup.getSecurityGroupDescription());
+        }
+        if (securityGroup.getTenantID() != null) {
+            securityGroupBuilder.setTenantId(toUuid(securityGroup.getTenantID()));
+        }
+        if (securityGroup.getSecurityRules() != null) {
+            List<Uuid> neutronSecurityRule = new ArrayList<Uuid>();
+            for (NeutronSecurityRule securityRule : securityGroup.getSecurityRules()) {
+                if (securityRule.getID() != null) {
+                    neutronSecurityRule.add(toUuid(securityRule.getID()));
+                }
+            }
+            securityGroupBuilder.setSecurityRules(neutronSecurityRule);
+        }
+        if (securityGroup.getID() != null) {
+            securityGroupBuilder.setUuid(toUuid(securityGroup.getID()));
+        } else {
+            LOGGER.warn("Attempting to write neutron securityGroup without UUID");
+        }
+
+        return securityGroupBuilder.build();
+    }
+
+    @Override
+    protected InstanceIdentifier<SecurityGroup> createInstanceIdentifier(SecurityGroup securityGroup) {
+        return InstanceIdentifier.create(Neutron.class)
+            .child(SecurityGroups.class).child(SecurityGroup.class,
+                                               securityGroup.getKey());
+    }
+
+    @Override
+    protected InstanceIdentifier<SecurityGroups> createInstanceIdentifier() {
+        return InstanceIdentifier.create(Neutron.class)
+            .child(SecurityGroups.class);
+    }
+
+    @Override
+    protected SecurityGroup toMd(String uuid) {
+        SecurityGroupBuilder securityGroupBuilder = new SecurityGroupBuilder();
+        securityGroupBuilder.setUuid(toUuid(uuid));
+        return securityGroupBuilder.build();
     }
 
+    public static void registerNewInterface(BundleContext context,
+                                            ProviderContext providerContext,
+                                            List<ServiceRegistration<?>> registrations) {
+        NeutronSecurityGroupInterface neutronSecurityGroupInterface = new NeutronSecurityGroupInterface(providerContext);
+        ServiceRegistration<INeutronSecurityGroupCRUD> neutronSecurityGroupInterfaceRegistration = context.registerService(INeutronSecurityGroupCRUD.class, neutronSecurityGroupInterface, null);
+        if(neutronSecurityGroupInterfaceRegistration != null) {
+            registrations.add(neutronSecurityGroupInterfaceRegistration);
+        }
+    }
 }