Fixed issues found in delete integration testing
[so.git] / adapters / mso-vnfm-adapter / mso-vnfm-etsi-adapter / src / main / java / org / onap / so / adapters / vnfmadapter / extclients / aai / AaiHelper.java
index 7795106..1374e89 100644 (file)
@@ -21,6 +21,9 @@
 package org.onap.so.adapters.vnfmadapter.extclients.aai;
 
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 import org.onap.aai.domain.yang.EsrSystemInfo;
 import org.onap.aai.domain.yang.EsrSystemInfoList;
 import org.onap.aai.domain.yang.EsrVnfm;
@@ -29,13 +32,14 @@ import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.RelationshipData;
 import org.onap.aai.domain.yang.RelationshipList;
-import org.onap.aai.domain.yang.Tenant;
 import org.onap.aai.domain.yang.Vserver;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.LcnVnfLcmOperationOccurrenceNotificationAffectedVnfcs;
+import org.onap.so.adapters.vnfmadapter.rest.exceptions.TenantNotFoundException;
 import org.onap.so.adapters.vnfmadapter.rest.exceptions.VnfmNotFoundException;
 import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIVersion;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
+import org.onap.vnfmadapter.v1.model.Tenant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +53,7 @@ public class AaiHelper {
 
     private static final Logger logger = LoggerFactory.getLogger(AaiHelper.class);
     private final AaiServiceProvider aaiServiceProvider;
+    private final Map<String, OamIpAddressSource> mapOfVnfIdToOamIpAddressHolder = new HashMap<>();
 
     @Autowired
     public AaiHelper(final AaiServiceProvider aaiServiceProvider) {
@@ -68,7 +73,6 @@ public class AaiHelper {
         final RelationshipList vnfmRelationshiplist = vnf.getRelationshipList();
         vnfmRelationshiplist.getRelationship().add(createRelationshipToVnfm(vnfmId));
 
-        aaiServiceProvider.invokePutGenericVnf(vnf);
     }
 
     private Relationship createRelationshipToVnfm(final String vnfmId) {
@@ -107,7 +111,7 @@ public class AaiHelper {
      */
     public String getIdOfAssignedVnfm(final GenericVnf vnf) {
         final Relationship relationship = getRelationship(vnf, "esr-vnfm");
-        return getRelationshipKey(relationship, "esr-vnfm.vnfm-id");
+        return getRelationshipData(relationship, "esr-vnfm.vnfm-id");
     }
 
     /**
@@ -118,11 +122,14 @@ public class AaiHelper {
      */
     public Tenant getAssignedTenant(final GenericVnf vnf) {
         final Relationship relationship = getRelationship(vnf, "tenant");
-        final String cloudOwner = getRelationshipKey(relationship, "cloud-region.cloud-owner");
-        final String cloudRegion = getRelationshipKey(relationship, "cloud-region.cloud-region-id");
-        final String tenantId = getRelationshipKey(relationship, "tenant.tenant-id");
-        return cloudOwner == null || cloudRegion == null || tenantId == null ? null
-                : aaiServiceProvider.invokeGetTenant(cloudOwner, cloudRegion, tenantId);
+        final String cloudOwner = getRelationshipData(relationship, "cloud-region.cloud-owner");
+        final String cloudRegion = getRelationshipData(relationship, "cloud-region.cloud-region-id");
+        final String tenantId = getRelationshipData(relationship, "tenant.tenant-id");
+        if (cloudOwner == null || cloudRegion == null || tenantId == null) {
+            throw new TenantNotFoundException("No matching Tenant found in AAI. VNFID: " + vnf.getVnfId());
+        } else {
+            return new Tenant().cloudOwner(cloudOwner).regionName(cloudRegion).tenantId(tenantId);
+        }
     }
 
     private Relationship getRelationship(final GenericVnf vnf, final String relationshipRelatedToValue) {
@@ -135,10 +142,17 @@ public class AaiHelper {
         return null;
     }
 
-    private String getRelationshipKey(final Relationship relationship, final String relationshipKey) {
+    /**
+     * Get the value of the relationship data with the given key in the given relationship.
+     *
+     * @param relationship the relationship
+     * @param relationshipDataKey the key for the relationship data
+     * @return the value of the relationship data for the given key
+     */
+    public String getRelationshipData(final Relationship relationship, final String relationshipDataKey) {
         if (relationship != null) {
             for (final RelationshipData relationshipData : relationship.getRelationshipData()) {
-                if (relationshipData.getRelationshipKey().equals(relationshipKey)) {
+                if (relationshipData.getRelationshipKey().equals(relationshipDataKey)) {
                     return relationshipData.getRelationshipValue();
                 }
             }
@@ -147,8 +161,34 @@ public class AaiHelper {
     }
 
     /**
-     * Select a VNFM to use for the given generic VNF. Should only be used when no VNFM has already been
-     * assigned to the VNF.
+     * Delete from the given VNF the relationship matching the given criteria.
+     *
+     * @param vnf the VNF
+     * @param relationshipRelatedToValue the related-to value for the relationship
+     * @param dataKey the relationship data key to match on
+     * @param dataValue the value the relationship data with the given key must match
+     * @return the deleted relationship or <code>null</code> if none found matching the given criteria
+     */
+    public Relationship deleteRelationshipWithDataValue(final GenericVnf vnf, final String relationshipRelatedToValue,
+            final String dataKey, final String dataValue) {
+        final Iterator<Relationship> relationships =
+                vnf.getRelationshipList() == null ? Collections.<Relationship>emptyList().iterator()
+                        : vnf.getRelationshipList().getRelationship().iterator();
+
+        while (relationships.hasNext()) {
+            final Relationship relationship = relationships.next();
+            if (relationship.getRelatedTo().equals(relationshipRelatedToValue)
+                    && dataValue.equals(getRelationshipData(relationship, dataKey))) {
+                relationships.remove();
+                return relationship;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Select a VNFM to use for the given generic VNF. Should only be used when no VNFM has already been assigned to the
+     * VNF.
      *
      * @param vnf the generic VNF
      * @return the VNFM to use
@@ -223,4 +263,40 @@ public class AaiHelper {
         return relationship;
     }
 
+    public void setOamIpAddressSource(final String vnfId, final OamIpAddressSource oamIpAddressSource) {
+        mapOfVnfIdToOamIpAddressHolder.put(vnfId, oamIpAddressSource);
+    }
+
+    public OamIpAddressSource getOamIpAddressSource(final String vnfId) {
+        return mapOfVnfIdToOamIpAddressHolder.get(vnfId);
+    }
+
+    /**
+     * Add a relationship to the given tenant to the given VNF.
+     *
+     * @param vnf the generic vnf
+     * @param tenant the Tenant
+     */
+
+    public void addRelationshipFromGenericVnfToTenant(final GenericVnf vnf, final Tenant tenant) {
+        if (vnf.getRelationshipList() == null) {
+            vnf.setRelationshipList(new RelationshipList());
+        }
+        final RelationshipList vnfmRelationshiplist = vnf.getRelationshipList();
+        vnfmRelationshiplist.getRelationship().add(createRelationshipToTenant(tenant));
+    }
+
+    private Relationship createRelationshipToTenant(final Tenant tenant) {
+        final Relationship relationship = new Relationship();
+        relationship.setRelatedTo("tenant");
+        relationship.setRelatedLink("/aai/" + AAIVersion.LATEST + AAIUriFactory.createResourceUri(AAIObjectType.TENANT,
+                tenant.getCloudOwner(), tenant.getRegionName(), tenant.getTenantId()).build().toString());
+        relationship.getRelationshipData()
+                .add(createRelationshipData("cloud-region.cloud-owner", tenant.getCloudOwner()));
+        relationship.getRelationshipData()
+                .add(createRelationshipData("cloud-region.cloud-region-id", tenant.getRegionName()));
+        relationship.getRelationshipData().add(createRelationshipData("tenant.tenant-id", tenant.getTenantId()));
+        return relationship;
+    }
+
 }