Draft of op policy
[clamp.git] / src / main / java / org / onap / clamp / loop / LoopCsarInstaller.java
index 0124aa7..41d34a2 100644 (file)
@@ -25,7 +25,6 @@ package org.onap.clamp.loop;
 
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
-import com.google.gson.Gson;
 import com.google.gson.JsonObject;
 
 import java.io.IOException;
@@ -51,9 +50,13 @@ import org.onap.clamp.clds.util.drawing.SvgFacade;
 import org.onap.clamp.policy.Policy;
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.onap.clamp.policy.operational.OperationalPolicy;
-import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
+import org.onap.sdc.tosca.parser.api.IEntityDetails;
+import org.onap.sdc.tosca.parser.elements.queries.EntityQuery;
+import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery;
+import org.onap.sdc.tosca.parser.enums.EntityTemplateType;
 import org.onap.sdc.tosca.parser.enums.SdcTypes;
 import org.onap.sdc.toscaparser.api.NodeTemplate;
+import org.onap.sdc.toscaparser.api.Property;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
@@ -96,10 +99,10 @@ public class LoopCsarInstaller implements CsarInstaller {
         boolean alreadyInstalled = true;
         for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
             alreadyInstalled = alreadyInstalled
-                && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(),
-                    csar.getSdcNotification().getServiceVersion(),
-                    blueprint.getValue().getResourceAttached().getResourceInstanceName(),
-                    blueprint.getValue().getBlueprintArtifactName()));
+                    && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(),
+                            csar.getSdcNotification().getServiceVersion(),
+                            blueprint.getValue().getResourceAttached().getResourceInstanceName(),
+                            blueprint.getValue().getBlueprintArtifactName()));
         }
         return alreadyInstalled;
     }
@@ -107,7 +110,7 @@ public class LoopCsarInstaller implements CsarInstaller {
     @Override
     @Transactional(propagation = Propagation.REQUIRED)
     public void installTheCsar(CsarHandler csar)
-        throws SdcArtifactInstallerException, InterruptedException, PolicyModelException {
+            throws SdcArtifactInstallerException, InterruptedException, PolicyModelException {
         try {
             logger.info("Installing the CSAR " + csar.getFilePath());
             for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
@@ -123,53 +126,53 @@ public class LoopCsarInstaller implements CsarInstaller {
     }
 
     private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact)
-        throws IOException, ParseException, InterruptedException {
+            throws IOException, ParseException, InterruptedException {
         Loop newLoop = new Loop();
         newLoop.setBlueprint(blueprintArtifact.getDcaeBlueprint());
         newLoop.setName(Loop.generateLoopName(csar.getSdcNotification().getServiceName(),
-            csar.getSdcNotification().getServiceVersion(),
-            blueprintArtifact.getResourceAttached().getResourceInstanceName(),
-            blueprintArtifact.getBlueprintArtifactName()));
+                csar.getSdcNotification().getServiceVersion(),
+                blueprintArtifact.getResourceAttached().getResourceInstanceName(),
+                blueprintArtifact.getBlueprintArtifactName()));
         newLoop.setLastComputedState(LoopState.DESIGN);
 
         List<MicroService> microServicesChain = chainGenerator
-            .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint()));
+                .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint()));
         if (microServicesChain.isEmpty()) {
             microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint());
         }
-
-        newLoop
-            .setMicroServicePolicies(createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop));
+        newLoop.setModelPropertiesJson(createModelPropertiesJson(csar));
+        newLoop.setMicroServicePolicies(
+                createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop));
         newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop));
 
         newLoop.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain));
         newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(blueprintArtifact, newLoop));
-        newLoop.setModelPropertiesJson(createModelPropertiesJson(csar));
+
         DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact);
         newLoop.setDcaeBlueprintId(dcaeResponse.getTypeId());
         return newLoop;
     }
 
     private HashSet<OperationalPolicy> createOperationalPolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact,
-        Loop newLoop) {
+            Loop newLoop) {
         return new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL",
-            csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(),
-            blueprintArtifact.getResourceAttached().getResourceInstanceName(),
-            blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject())));
+                csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(),
+                blueprintArtifact.getResourceAttached().getResourceInstanceName(),
+                blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject())));
     }
 
     private HashSet<MicroServicePolicy> createMicroServicePolicies(List<MicroService> microServicesChain,
-        CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException {
+            CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException {
         HashSet<MicroServicePolicy> newSet = new HashSet<>();
 
         for (MicroService microService : microServicesChain) {
             MicroServicePolicy microServicePolicy = new MicroServicePolicy(
-                Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(),
-                    csar.getSdcNotification().getServiceVersion(),
-                    blueprintArtifact.getResourceAttached().getResourceInstanceName(),
-                    blueprintArtifact.getBlueprintArtifactName()),
-                microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false,
-                new HashSet<>(Arrays.asList(newLoop)));
+                    Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(),
+                            csar.getSdcNotification().getServiceVersion(),
+                            blueprintArtifact.getResourceAttached().getResourceInstanceName(),
+                            blueprintArtifact.getBlueprintArtifactName()),
+                    microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false,
+                    new HashSet<>(Arrays.asList(newLoop)));
 
             newSet.add(microServicePolicy);
             microService.setMappedNameJpa(microServicePolicy.getName());
@@ -183,22 +186,49 @@ public class LoopCsarInstaller implements CsarInstaller {
         return globalProperties;
     }
 
-    private JsonObject createModelPropertiesJson(CsarHandler csar) {
-        JsonObject modelProperties = new JsonObject();
-        Gson gson = new Gson();
-        ISdcCsarHelper csarHelper = csar.getSdcCsarHelper();
-        modelProperties.add("serviceDetails",
-            gson.fromJson(gson.toJson(csarHelper.getServiceMetadataAllProperties()), JsonObject.class));
+    private static JsonObject createVfModuleProperties(CsarHandler csar) {
+        JsonObject vfModuleProps = new JsonObject();
+        // Loop on all Groups defined in the service (VFModule entries type:
+        // org.openecomp.groups.VfModule)
+        for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity(
+                EntityQuery.newBuilder(EntityTemplateType.GROUP).build(),
+                TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) {
+            // Get all metadata info
+            JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties());
+            vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps);
+            // now append the properties section so that we can also have isBase,
+            // volume_group, etc ... fields under the VFmodule name
+            for (Entry<String, Property> additionalProp : entity.getProperties().entrySet()) {
+                allVfProps.add(additionalProp.getValue().getName(),
+                        JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue()));
+            }
+        }
+        return vfModuleProps;
+    }
 
+    private static JsonObject createServicePropertiesByType(CsarHandler csar) {
         JsonObject resourcesProp = new JsonObject();
+        // Iterate on all types defined in the tosca lib
         for (SdcTypes type : SdcTypes.values()) {
             JsonObject resourcesPropByType = new JsonObject();
-            for (NodeTemplate nodeTemplate : csarHelper.getServiceNodeTemplateBySdcType(type)) {
-                resourcesPropByType.add(nodeTemplate.getName(), JsonUtils.GSON_JPA_MODEL
-                    .fromJson(new Gson().toJson(nodeTemplate.getMetaData().getAllProperties()), JsonObject.class));
+            // For each type, get the metadata of each nodetemplate
+            for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) {
+                resourcesPropByType.add(nodeTemplate.getName(),
+                        JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties()));
             }
             resourcesProp.add(type.getValue(), resourcesPropByType);
         }
+        return resourcesProp;
+    }
+
+    private static JsonObject createModelPropertiesJson(CsarHandler csar) {
+        JsonObject modelProperties = new JsonObject();
+        // Add service details
+        modelProperties.add("serviceDetails", JsonUtils.GSON.fromJson(
+                JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class));
+        // Add properties details for each type, VfModule, VF, VFC, ....
+        JsonObject resourcesProp = createServicePropertiesByType(csar);
+        resourcesProp.add("VFModule", createVfModuleProperties(csar));
         modelProperties.add("resourceDetails", resourcesProp);
         return modelProperties;
     }
@@ -207,7 +237,7 @@ public class LoopCsarInstaller implements CsarInstaller {
         JsonObject node = new JsonObject();
         Yaml yaml = new Yaml();
         Map<String, Object> inputsNodes = ((Map<String, Object>) ((Map<String, Object>) yaml
-            .load(blueprintArtifact.getDcaeBlueprint())).get("inputs"));
+                .load(blueprintArtifact.getDcaeBlueprint())).get("inputs"));
         inputsNodes.entrySet().stream().filter(e -> !e.getKey().contains("policy_id")).forEach(elem -> {
             Object defaultValue = ((Map<String, Object>) elem.getValue()).get("default");
             if (defaultValue != null) {
@@ -228,10 +258,10 @@ public class LoopCsarInstaller implements CsarInstaller {
      * @return The DcaeInventoryResponse object containing the dcae values
      */
     private DcaeInventoryResponse queryDcaeToGetServiceTypeId(BlueprintArtifact blueprintArtifact)
-        throws IOException, ParseException, InterruptedException {
+            throws IOException, ParseException, InterruptedException {
         return dcaeInventoryService.getDcaeInformation(blueprintArtifact.getBlueprintArtifactName(),
-            blueprintArtifact.getBlueprintInvariantServiceUuid(),
-            blueprintArtifact.getResourceAttached().getResourceInvariantUUID());
+                blueprintArtifact.getBlueprintInvariantServiceUuid(),
+                blueprintArtifact.getResourceAttached().getResourceInvariantUUID());
     }
 
     private void addPropertyToNode(JsonObject node, String key, Object value) {