X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Fpolicy%2Foperational%2FOperationalPolicyRepresentationBuilder.java;h=0381f0a2a8d0477259c13fab7e0441fea26b9385;hb=536db7b811eba341aef48a745b495da068d170eb;hp=57d13ef17d556155a9cc011d1fdd51eeb655bbd6;hpb=472dc126eb9f30c09df344357db2c62f20d0b92c;p=clamp.git diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java index 57d13ef1..0381f0a2 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java @@ -36,7 +36,7 @@ import java.util.Map.Entry; import java.util.Set; import org.onap.clamp.clds.util.JsonUtils; -import org.onap.clamp.clds.util.ResourceFileUtil; +import org.onap.clamp.clds.util.ResourceFileUtils; import org.onap.clamp.loop.service.Service; public class OperationalPolicyRepresentationBuilder { @@ -45,8 +45,20 @@ public class OperationalPolicyRepresentationBuilder { EELFManager.getInstance().getLogger(OperationalPolicyRepresentationBuilder.class); public static final String PROPERTIES = "properties"; + public static final String ITEMS = "items"; + public static final String ANY_OF = "anyOf"; + public static final String TITLE = "title"; + public static final String RECIPE = "recipe"; + public static final String DEFAULT = "default"; + public static final String STRING = "string"; public static final String TYPE = "type"; public static final String TYPE_LIST = "list"; + public static final String TYPE_OBJECT = "object"; + public static final String TYPE_ARRAY = "array"; + + private OperationalPolicyRepresentationBuilder() { + throw new IllegalStateException("This is Utility class, not supposed to be initiated."); + } /** * This method generates the operational policy json representation that will be @@ -62,24 +74,24 @@ public class OperationalPolicyRepresentationBuilder { JsonObject jsonSchema = null; try { jsonSchema = JsonUtils.GSON.fromJson( - ResourceFileUtil + ResourceFileUtils .getResourceAsString("clds/json-schema/operational_policies/operational_policy.json"), JsonObject.class); - jsonSchema.get("properties").getAsJsonObject() - .get("operational_policy").getAsJsonObject().get("properties").getAsJsonObject().get("policies") - .getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject().get("target") - .getAsJsonObject().get("anyOf").getAsJsonArray().addAll(createAnyOfArray(modelJson, true)); + jsonSchema.get(PROPERTIES).getAsJsonObject() + .get("operational_policy").getAsJsonObject().get(PROPERTIES).getAsJsonObject().get("policies") + .getAsJsonObject().get(ITEMS).getAsJsonObject().get(PROPERTIES).getAsJsonObject().get("target") + .getAsJsonObject().get(ANY_OF).getAsJsonArray().addAll(createAnyOfArray(modelJson, true)); // update CDS recipe and payload information to schema - JsonArray actors = jsonSchema.get("properties").getAsJsonObject() - .get("operational_policy").getAsJsonObject().get("properties").getAsJsonObject().get("policies") - .getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject().get("actor") - .getAsJsonObject().get("anyOf").getAsJsonArray(); + JsonArray actors = jsonSchema.get(PROPERTIES).getAsJsonObject() + .get("operational_policy").getAsJsonObject().get(PROPERTIES).getAsJsonObject().get("policies") + .getAsJsonObject().get(ITEMS).getAsJsonObject().get(PROPERTIES).getAsJsonObject().get("actor") + .getAsJsonObject().get(ANY_OF).getAsJsonArray(); for (JsonElement actor : actors) { - if ("CDS".equalsIgnoreCase(actor.getAsJsonObject().get("title").getAsString())) { - actor.getAsJsonObject().get("properties").getAsJsonObject().get("recipe").getAsJsonObject() - .get("anyOf").getAsJsonArray() + if ("CDS".equalsIgnoreCase(actor.getAsJsonObject().get(TITLE).getAsString())) { + actor.getAsJsonObject().get(PROPERTIES).getAsJsonObject().get(RECIPE).getAsJsonObject() + .get(ANY_OF).getAsJsonArray() .addAll(createAnyOfArrayForCdsRecipe(modelJson)); } } @@ -93,9 +105,9 @@ public class OperationalPolicyRepresentationBuilder { private static JsonObject createSchemaProperty(String title, String type, String defaultValue, String readOnlyFlag, String[] enumArray) { JsonObject property = new JsonObject(); - property.addProperty("title", title); - property.addProperty("type", type); - property.addProperty("default", defaultValue); + property.addProperty(TITLE, title); + property.addProperty(TYPE, type); + property.addProperty(DEFAULT, defaultValue); property.addProperty("readOnly", readOnlyFlag); if (enumArray != null) { @@ -114,59 +126,68 @@ public class OperationalPolicyRepresentationBuilder { for (Entry entry : modelVnfs.entrySet()) { JsonObject vnfOneOfSchema = new JsonObject(); - vnfOneOfSchema.addProperty("title", "VNF" + "-" + entry.getKey()); + vnfOneOfSchema.addProperty(TITLE, "VNF" + "-" + entry.getKey()); JsonObject properties = new JsonObject(); if (generateType) { - properties.add("type", createSchemaProperty("Type", "string", "VNF", "True", null)); + properties.add(TYPE, createSchemaProperty("Type", STRING, "VNF", "True", null)); } - properties.add("resourceID", createSchemaProperty("Resource ID", "string", - modelVnfs.get(entry.getKey()).getAsJsonObject().get("name").getAsString(), "True", null)); + properties.add("resourceID", createSchemaProperty("Resource ID", STRING, + modelVnfs.get(entry.getKey()).getAsJsonObject().get("invariantUUID").getAsString(), "True", null)); - vnfOneOfSchema.add("properties", properties); + vnfOneOfSchema.add(PROPERTIES, properties); vnfSchemaArray.add(vnfOneOfSchema); } return vnfSchemaArray; } + private static JsonArray createBlankEntry() { + JsonArray result = new JsonArray(); + JsonObject blankObject = new JsonObject(); + blankObject.addProperty("title", "User defined"); + blankObject.add("properties", new JsonObject()); + result.add(blankObject); + return result; + } + private static JsonArray createVfModuleSchema(Service modelService, boolean generateType) { JsonArray vfModuleOneOfSchemaArray = new JsonArray(); JsonObject modelVfModules = modelService.getResourceByType("VFModule"); for (Entry entry : modelVfModules.entrySet()) { JsonObject vfModuleOneOfSchema = new JsonObject(); - vfModuleOneOfSchema.addProperty("title", "VFMODULE" + "-" + entry.getKey()); + vfModuleOneOfSchema.addProperty(TITLE, "VFMODULE" + "-" + entry.getKey()); JsonObject properties = new JsonObject(); if (generateType) { - properties.add("type", createSchemaProperty("Type", "string", "VFMODULE", "True", null)); + properties.add(TYPE, createSchemaProperty("Type", STRING, "VFMODULE", "True", null)); } properties.add("resourceID", - createSchemaProperty("Resource ID", "string", + createSchemaProperty("Resource ID", STRING, modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelName").getAsString(), "True", null)); properties.add("modelInvariantId", - createSchemaProperty("Model Invariant Id (ModelInvariantUUID)", "string", + createSchemaProperty("Model Invariant Id (ModelInvariantUUID)", STRING, modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelInvariantUUID") .getAsString(), "True", null)); properties.add("modelVersionId", - createSchemaProperty("Model Version Id (ModelUUID)", "string", + createSchemaProperty("Model Version Id (ModelUUID)", STRING, modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelUUID").getAsString(), "True", null)); properties.add("modelName", - createSchemaProperty("Model Name", "string", + createSchemaProperty("Model Name", STRING, modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelName").getAsString(), "True", null)); - properties.add("modelVersion", createSchemaProperty("Model Version", "string", + properties.add("modelVersion", createSchemaProperty("Model Version", STRING, modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelVersion").getAsString(), "True", null)); properties .add("modelCustomizationId", - createSchemaProperty("Customization ID", "string", + createSchemaProperty("Customization ID", STRING, modelVfModules.get(entry.getKey()).getAsJsonObject() .get("vfModuleModelCustomizationUUID").getAsString(), "True", null)); - vfModuleOneOfSchema.add("properties", properties); + vfModuleOneOfSchema.add(PROPERTIES, properties); vfModuleOneOfSchemaArray.add(vfModuleOneOfSchema); } return vfModuleOneOfSchemaArray; @@ -180,6 +201,8 @@ public class OperationalPolicyRepresentationBuilder { */ public static JsonArray createAnyOfArray(Service modelJson, boolean generateType) { JsonArray targetOneOfStructure = new JsonArray(); + // First entry must be user defined + targetOneOfStructure.addAll(createBlankEntry()); targetOneOfStructure.addAll(createVnfSchema(modelJson, generateType)); targetOneOfStructure.addAll(createVfModuleSchema(modelJson, generateType)); return targetOneOfStructure; @@ -198,13 +221,13 @@ public class OperationalPolicyRepresentationBuilder { JsonObject controllerProperties = entry.getValue().getAsJsonObject() .getAsJsonObject("controllerProperties"); - if (controllerProperties != null) { + if (controllerProperties != null && controllerProperties.getAsJsonObject("workflows") != null) { JsonObject workflows = controllerProperties.getAsJsonObject("workflows"); for (Entry workflowsEntry : workflows.entrySet()) { JsonObject obj = new JsonObject(); - obj.addProperty("title", workflowsEntry.getKey()); - obj.addProperty("type", "object"); - obj.add("properties", createPayloadProperty(workflowsEntry.getValue().getAsJsonObject(), + obj.addProperty(TITLE, workflowsEntry.getKey()); + obj.addProperty(TYPE, "object"); + obj.add(PROPERTIES, createPayloadProperty(workflowsEntry.getValue().getAsJsonObject(), controllerProperties, workflowsEntry.getKey())); schemaArray.add(obj); } @@ -217,21 +240,21 @@ public class OperationalPolicyRepresentationBuilder { private static JsonObject createPayloadProperty(JsonObject workFlow, JsonObject controllerProperties, String workFlowName) { JsonObject payload = new JsonObject(); - payload.addProperty("title", "Payload"); - payload.addProperty("type", "object"); - payload.add("properties", createInputPropertiesForPayload(workFlow, - controllerProperties)); + payload.addProperty(TITLE, "Payload"); + payload.addProperty(TYPE, "object"); + payload.add(PROPERTIES, createInputPropertiesForPayload(workFlow, controllerProperties, + workFlowName)); JsonObject properties = new JsonObject(); - properties.add("recipe", createRecipeForCdsWorkflow(workFlowName)); + properties.add(RECIPE, createRecipeForCdsWorkflow(workFlowName)); properties.add("payload", payload); return properties; } private static JsonObject createRecipeForCdsWorkflow(String workflow) { JsonObject recipe = new JsonObject(); - recipe.addProperty("title", "recipe"); - recipe.addProperty("type", "string"); - recipe.addProperty("default", workflow); + recipe.addProperty(TITLE, RECIPE); + recipe.addProperty(TYPE, STRING); + recipe.addProperty(DEFAULT, workflow); JsonObject options = new JsonObject(); options.addProperty("hidden", true); recipe.add("options", options); @@ -244,47 +267,49 @@ public class OperationalPolicyRepresentationBuilder { * @param workFlow cds work flows to update payload * @param controllerProperties cds properties to get blueprint name and * version + * @param workFlowName work flow name * @return returns the properties of payload */ public static JsonObject createInputPropertiesForPayload(JsonObject workFlow, - JsonObject controllerProperties) { + JsonObject controllerProperties, + String workFlowName) { String artifactName = controllerProperties.get("sdnc_model_name").getAsString(); String artifactVersion = controllerProperties.get("sdnc_model_version").getAsString(); JsonObject inputs = workFlow.getAsJsonObject("inputs"); JsonObject jsonObject = new JsonObject(); jsonObject.add("artifact_name", createSchemaProperty( - "artifact name", "string", artifactName, "True", null)); + "artifact name", STRING, artifactName, "True", null)); jsonObject.add("artifact_version", createSchemaProperty( - "artifact version", "string", artifactVersion, "True", null)); + "artifact version", STRING, artifactVersion, "True", null)); jsonObject.add("mode", createCdsInputProperty( - "mode", "string", "async" ,null)); - jsonObject.add("data", createDataProperty(inputs)); + "mode", STRING, "async" ,null)); + jsonObject.add("data", createDataProperty(inputs, workFlowName)); return jsonObject; } - private static JsonObject createDataProperty(JsonObject inputs) { + private static JsonObject createDataProperty(JsonObject inputs, String workflowName) { JsonObject data = new JsonObject(); - data.addProperty("title", "data"); + data.addProperty(TITLE, "data"); JsonObject dataObj = new JsonObject(); - addDataFields(inputs, dataObj); + addDataFields(inputs, dataObj, workflowName); data.add(PROPERTIES, dataObj); return data; } private static void addDataFields(JsonObject inputs, - JsonObject dataObj) { + JsonObject dataObj, + String workFlowName) { Set> entrySet = inputs.entrySet(); for (Map.Entry entry : entrySet) { String key = entry.getKey(); JsonObject inputProperty = inputs.getAsJsonObject(key); - if (inputProperty.get(TYPE) == null) { - addDataFields(entry.getValue().getAsJsonObject(), dataObj); + if (key.equalsIgnoreCase(workFlowName + "-properties")) { + addDataFields(entry.getValue().getAsJsonObject().get("properties").getAsJsonObject(), + dataObj, workFlowName); } else { dataObj.add(entry.getKey(), - createCdsInputProperty(key, - inputProperty.get(TYPE).getAsString(), - null, - entry.getValue().getAsJsonObject())); + createCdsInputProperty(key, inputProperty.get(TYPE).getAsString(),null, + entry.getValue().getAsJsonObject())); } } } @@ -294,25 +319,34 @@ public class OperationalPolicyRepresentationBuilder { String defaultValue, JsonObject cdsProperty) { JsonObject property = new JsonObject(); - property.addProperty("title", title); + property.addProperty(TITLE, title); if (TYPE_LIST.equalsIgnoreCase(type)) { - property.addProperty(TYPE, "array"); - if (cdsProperty.get(PROPERTIES) != null) { - JsonObject dataObject = new JsonObject(); - addDataFields(cdsProperty.get(PROPERTIES).getAsJsonObject(), - dataObject); + property.addProperty(TYPE, TYPE_ARRAY); + if (cdsProperty != null && cdsProperty.get(PROPERTIES) != null) { JsonObject listProperties = new JsonObject(); - listProperties.add(PROPERTIES, dataObject); - property.add("items", listProperties); + listProperties.add(PROPERTIES, getProperties(cdsProperty.get(PROPERTIES).getAsJsonObject())); + property.add(ITEMS, listProperties); } + } else if (TYPE_OBJECT.equalsIgnoreCase(type)) { + property.addProperty(TYPE, TYPE_OBJECT); + property.add(PROPERTIES, getProperties(cdsProperty.get(PROPERTIES).getAsJsonObject())); } else { property.addProperty(TYPE, type); } if (defaultValue != null) { - property.addProperty("default", defaultValue); + property.addProperty(DEFAULT, defaultValue); } return property; } + + private static JsonObject getProperties(JsonObject inputProperties) { + if (inputProperties == null) { + return null; + } + JsonObject dataObject = new JsonObject(); + addDataFields(inputProperties, dataObject, null); + return dataObject; + } }