[SO] Macro flow for PNF-Modify operation
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / client / orchestration / AAIPnfResources.java
index 7184bba..d042fd6 100644 (file)
 
 package org.onap.so.client.orchestration;
 
-import com.google.common.base.Strings;
 import java.util.Optional;
+import org.apache.commons.lang3.StringUtils;
 import org.onap.aai.domain.yang.RelatedToProperty;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.RelationshipData;
+import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri;
+import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory;
+import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder;
+import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types;
 import org.onap.so.bpmn.common.InjectionHelper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
-import org.onap.aaiclient.client.aai.AAIObjectType;
-import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri;
-import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.aai.mapper.AAIObjectMapper;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import com.google.common.base.Strings;
 
 @Component
 public class AAIPnfResources {
@@ -50,29 +52,94 @@ public class AAIPnfResources {
     private AAIObjectMapper aaiObjectMapper;
 
     public void createPnfAndConnectServiceInstance(Pnf pnf, ServiceInstance serviceInstance) {
-        AAIResourceUri pnfURI = AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnf.getPnfName());
+        AAIResourceUri pnfURI = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName()));
         pnf.setOrchestrationStatus(OrchestrationStatus.INVENTORIED);
-        AAIResourceUri serviceInstanceURI =
-                AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstance.getServiceInstanceId());
+        AAIResourceUri serviceInstanceURI = AAIUriFactory
+                .createResourceUri(Types.SERVICE_INSTANCE.getFragment(serviceInstance.getServiceInstanceId()));
         injectionHelper.getAaiClient().createIfNotExists(pnfURI, Optional.of(aaiObjectMapper.mapPnf(pnf)))
                 .connect(pnfURI, serviceInstanceURI);
     }
 
     public void updateOrchestrationStatusPnf(Pnf pnf, OrchestrationStatus orchestrationStatus) {
-        AAIResourceUri pnfURI = AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnf.getPnfName());
-
+        AAIResourceUri pnfURI = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName()));
         Pnf pnfCopy = pnf.shallowCopyId();
+        if (orchestrationStatus.equals(OrchestrationStatus.REGISTER)
+                || orchestrationStatus.equals(OrchestrationStatus.REGISTERED)) {
+            pnf.setInMaint(true);
+            pnfCopy.setInMaint(true);
+        } else {
+            pnf.setInMaint(false);
+            pnfCopy.setInMaint(false);
+        }
 
         pnf.setOrchestrationStatus(orchestrationStatus);
         pnfCopy.setOrchestrationStatus(orchestrationStatus);
         injectionHelper.getAaiClient().update(pnfURI, aaiObjectMapper.mapPnf(pnfCopy));
     }
 
-    public void checkIfPnfExistsInAaiAndCanBeUsed(String pnfName) throws Exception {
-        Optional<org.onap.aai.domain.yang.Pnf> pnfFromAai = injectionHelper.getAaiClient()
-                .get(org.onap.aai.domain.yang.Pnf.class, AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnfName));
+    public void checkIfPnfExistsInAaiAndCanBeUsed(Pnf pnf) throws Exception {
+        Optional<org.onap.aai.domain.yang.Pnf> pnfFromAai =
+                injectionHelper.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
+                        AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName())));
         if (pnfFromAai.isPresent()) {
             checkIfPnfCanBeUsed(pnfFromAai.get());
+            updatePnfInAAI(pnf, pnfFromAai.get());
+        }
+    }
+
+    private void updatePnfInAAI(Pnf pnf, org.onap.aai.domain.yang.Pnf pnfFromAai) {
+        updatePnfFields(pnf, pnfFromAai);
+        injectionHelper.getAaiClient().update(
+                AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName())), pnfFromAai);
+        logger.debug("updatePnfInAAI: {}", pnfFromAai);
+    }
+
+
+    public void deletePnf(Pnf pnf) {
+        AAIResourceUri pnfURI = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName()));
+        injectionHelper.getAaiClient().delete(pnfURI);
+    }
+
+    public void updateObjectPnf(Pnf pnf) {
+        Optional<org.onap.aai.domain.yang.Pnf> pnfFromAai =
+                injectionHelper.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
+                        AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName())));
+        logger.info("***in updateObjectPnf getPnfName====> {} ", pnfFromAai.get().getPnfName());
+        injectionHelper.getAaiClient().update(
+                AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName())),
+                aaiObjectMapper.mapPnf((pnf)));
+    }
+
+    /**
+     * Check inMaint flag value of PNF from AAI using pnfName
+     *
+     * @param pnfName - pnf-id required pnf
+     * @return inMaint flag value
+     */
+    public boolean checkInMaintFlag(String pnfName) {
+        org.onap.aai.domain.yang.Pnf pnf = injectionHelper.getAaiClient()
+                .get(org.onap.aai.domain.yang.Pnf.class,
+                        AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnfName)))
+                .orElse(new org.onap.aai.domain.yang.Pnf());
+        return pnf.isInMaint();
+    }
+
+    private void updatePnfFields(Pnf pnf, org.onap.aai.domain.yang.Pnf pnfFromAai) {
+        if (pnf.getModelInfoPnf() != null
+                && StringUtils.isNotBlank(pnf.getModelInfoPnf().getModelCustomizationUuid())) {
+            pnfFromAai.setModelCustomizationId(pnf.getModelInfoPnf().getModelCustomizationUuid());
+        }
+        if (pnf.getModelInfoPnf() != null && StringUtils.isNotBlank(pnf.getModelInfoPnf().getModelInvariantUuid())) {
+            pnfFromAai.setModelInvariantId(pnf.getModelInfoPnf().getModelInvariantUuid());
+        }
+        if (pnf.getModelInfoPnf() != null && StringUtils.isNotBlank(pnf.getModelInfoPnf().getModelUuid())) {
+            pnfFromAai.setModelVersionId(pnf.getModelInfoPnf().getModelUuid());
+        }
+        if (pnf.getOrchestrationStatus() != null && StringUtils.isNotBlank(pnf.getOrchestrationStatus().toString())) {
+            pnfFromAai.setOrchestrationStatus(pnf.getOrchestrationStatus().toString());
+        }
+        if (StringUtils.isNotBlank(pnf.getRole())) {
+            pnfFromAai.setNfRole(pnf.getRole());
         }
     }
 
@@ -98,7 +165,8 @@ public class AAIPnfResources {
                     pnfFromAai.getPnfName());
         } else {
             String errorMessage = String.format(
-                    "pnf with name %s already exists with orchestration status %s, only status Inventoried allows to use existing pnf",
+                    "pnf with name %s already exists with orchestration status %s, existing pnf can be used only "
+                            + "if status is not set or set as Inventoried",
                     pnfFromAai.getPnfName(), pnfFromAai.getOrchestrationStatus());
             logger.error(errorMessage);
             throw new Exception(errorMessage);