From 540fff37e161d693e8f9168a3ddac1ff4866c33a Mon Sep 17 00:00:00 2001 From: "Determe, Sebastien (sd378r)" Date: Tue, 27 Mar 2018 18:19:32 +0200 Subject: Add blueprint input Add blueprint json input support for DCAE call Issue-ID: CLAMP-142 Change-Id: I52657ff7ead38681eae2744a30271f0a1b825bb6 Signed-off-by: Determe, Sebastien (sd378r) --- .../clamp/clds/client/DcaeDispatcherServices.java | 8 +++- .../model/properties/AbstractModelElement.java | 28 +++++++++--- .../onap/clamp/clds/model/properties/Global.java | 31 ++++++++++---- .../org/onap/clamp/clds/service/CldsService.java | 50 +++++++++++----------- 4 files changed, 77 insertions(+), 40 deletions(-) (limited to 'src/main') diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java index f20668e5..26281dad 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java @@ -25,6 +25,7 @@ package org.onap.clamp.clds.client; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import java.util.Date; @@ -152,16 +153,19 @@ public class DcaeDispatcherServices { * The deployment ID * @param serviceTypeId * Service type ID - * @param blueprintInput + * @param blueprintInputJson * The value for each blueprint parameters in a flat JSON * @return The status URL */ - public String createNewDeployment(String deploymentId, String serviceTypeId) { + public String createNewDeployment(String deploymentId, String serviceTypeId, JsonNode blueprintInputJson) { Date startTime = new Date(); LoggingUtils.setTargetContext("DCAE", "createNewDeployment"); try { ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("dcae.deployment.template"); rootNode.put("serviceTypeId", serviceTypeId); + if (blueprintInputJson != null) { + rootNode.put("inputs", blueprintInputJson); + } String apiBodyString = rootNode.toString(); logger.info("Dcae api Body String - " + apiBodyString); String url = refProp.getStringValue(DCAE_URL_PROPERTY_NAME) + DCAE_URL_PREFIX + deploymentId; diff --git a/src/main/java/org/onap/clamp/clds/model/properties/AbstractModelElement.java b/src/main/java/org/onap/clamp/clds/model/properties/AbstractModelElement.java index 9b8d9d9c..118059d5 100644 --- a/src/main/java/org/onap/clamp/clds/model/properties/AbstractModelElement.java +++ b/src/main/java/org/onap/clamp/clds/model/properties/AbstractModelElement.java @@ -26,29 +26,26 @@ package org.onap.clamp.clds.model.properties; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; + import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Provide base ModelElement functionality. Perform base parsing of properties - * for a ModelElement (such as, VesCollector, Policy, Tca, Holmes, - * ...) + * for a ModelElement (such as, VesCollector, Policy, Tca, Holmes, ...) */ public abstract class AbstractModelElement { protected static final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractModelElement.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private final String type; private final ModelBpmn modelBpmn; private final String id; protected String topicPublishes; protected final JsonNode modelElementJsonNode; private boolean isFound; - private final ModelProperties modelProp; - private static final String LOG_ELEMENT_NOT_FOUND = "Value '{}' for key 'name' not found in JSON"; private static final String LOG_ELEMENT_NOT_FOUND_IN_JSON = "Value '{}' for key 'name' not found in JSON {}"; @@ -117,6 +114,27 @@ public abstract class AbstractModelElement { return value; } + /** + * Return the Json value field of the json node element that has a name + * field equals to the given name. + */ + public static JsonNode getJsonNodeByName(JsonNode nodeIn, String name) { + JsonNode vnode = null; + if (nodeIn != null) { + for (JsonNode node : nodeIn) { + if (node.path("name").asText().equals(name)) { + vnode = node.path("value"); + } + } + } + if (vnode == null) { + logger.warn(LOG_ELEMENT_NOT_FOUND, name); + } else { + logger.debug(LOG_ELEMENT_NOT_FOUND_IN_JSON, name, nodeIn.toString()); + } + return vnode; + } + /** * Return the value field of the json node element that has a name field * that equals the given name. diff --git a/src/main/java/org/onap/clamp/clds/model/properties/Global.java b/src/main/java/org/onap/clamp/clds/model/properties/Global.java index ef36fef9..c4532b2e 100644 --- a/src/main/java/org/onap/clamp/clds/model/properties/Global.java +++ b/src/main/java/org/onap/clamp/clds/model/properties/Global.java @@ -23,12 +23,12 @@ package org.onap.clamp.clds.model.properties; -import java.util.List; - import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; +import java.util.List; + /** * Parse global json properties. *

@@ -38,14 +38,15 @@ import com.fasterxml.jackson.databind.JsonNode; * ,"kings_mountain","Secaucus","lisle","concord","houston","akron"]}] */ public class Global { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(Global.class); - protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private String service; - private String actionSet; - private List resourceVf; - private List resourceVfc; - private List location; + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(Global.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + private String service; + private String actionSet; + private List resourceVf; + private List resourceVfc; + private JsonNode deployParameters; + private List location; /** * Parse global given json node. @@ -58,6 +59,7 @@ public class Global { actionSet = AbstractModelElement.getValueByName(globalNode, "actionSet"); resourceVf = AbstractModelElement.getValuesByName(globalNode, "vf"); resourceVfc = AbstractModelElement.getValuesByName(globalNode, "vfc"); + deployParameters = AbstractModelElement.getJsonNodeByName(globalNode, "deployParameters"); location = AbstractModelElement.getValuesByName(globalNode, "location"); } @@ -83,6 +85,10 @@ public class Global { return actionSet; } + public void setActionSet(String actionSet) { + this.actionSet = actionSet; + } + /** * @return the resourceVf */ @@ -128,4 +134,11 @@ public class Global { this.location = location; } + public JsonNode getDeployParameters() { + return deployParameters; + } + + public void setDeployParameters(JsonNode deployParameters) { + this.deployParameters = deployParameters; + } } diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java index e828f844..2b6862dc 100644 --- a/src/main/java/org/onap/clamp/clds/service/CldsService.java +++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java @@ -377,6 +377,20 @@ public class CldsService extends SecureServiceBase { return names; } + private void fillInCldsModel(CldsModel model) { + if (model.getTemplateName() != null) { + CldsTemplate template = cldsDao.getTemplate(model.getTemplateName()); + if (template != null) { + model.setTemplateId(template.getId()); + model.setDocText(template.getPropText()); + // This is to provide the Bpmn XML when Template part in UI + // is + // disabled + model.setBpmnText(template.getBpmnText()); + } + } + } + /** * REST service that saves and processes an action for a CLDS model by name. * @@ -400,7 +414,7 @@ public class CldsService extends SecureServiceBase { @Produces(MediaType.APPLICATION_JSON) public Response putModelAndProcessAction(@PathParam("action") String action, @PathParam("modelName") String modelName, @QueryParam("test") String test, CldsModel model) - throws TransformerException, ParseException, GeneralSecurityException, DecoderException { + throws TransformerException, ParseException { Date startTime = new Date(); CldsModel retrievedModel = null; Boolean errorCase = false; @@ -412,9 +426,7 @@ public class CldsService extends SecureServiceBase { isAuthorized(permisionManage); isAuthorizedForVf(model); String userId = getUserId(); - String actionStateCd = CldsEvent.ACTION_STATE_INITIATED; logger.info("PUT actionCd={}", actionCd); - logger.info("PUT actionStateCd={}", actionStateCd); logger.info("PUT modelName={}", modelName); logger.info("PUT test={}", test); logger.info("PUT bpmnText={}", model.getBpmnText()); @@ -422,17 +434,7 @@ public class CldsService extends SecureServiceBase { logger.info("PUT userId={}", userId); logger.info("PUT getTypeId={}", model.getTypeId()); logger.info("PUT deploymentId={}", model.getDeploymentId()); - if (model.getTemplateName() != null) { - CldsTemplate template = cldsDao.getTemplate(model.getTemplateName()); - if (template != null) { - model.setTemplateId(template.getId()); - model.setDocText(template.getPropText()); - // This is to provide the Bpmn XML when Template part in UI - // is - // disabled - model.setBpmnText(template.getBpmnText()); - } - } + this.fillInCldsModel(model); // save model to db model.setName(modelName); model.save(cldsDao, getUserId()); @@ -568,9 +570,8 @@ public class CldsService extends SecureServiceBase { Date startTime = new Date(); LoggingUtils.setRequestContext("CldsService: GET sdc services", getPrincipalName()); String retStr; - String responseStr = sdcCatalogServices.getSdcServicesInformation(null); try { - retStr = createUiServiceFormatJson(responseStr); + retStr = createUiServiceFormatJson(sdcCatalogServices.getSdcServicesInformation(null)); } catch (IOException e) { logger.error("IOException during SDC communication", e); throw new SdcCommunicationException("IOException during SDC communication", e); @@ -814,12 +815,12 @@ public class CldsService extends SecureServiceBase { LoggingUtils.setRequestContext("CldsService: Deploy model", getPrincipalName()); Boolean errorCase = false; try { - try { - checkForDuplicateServiceVf(modelName, model.getPropText()); - } catch (IOException | BadRequestException e) { - errorCase = true; - logger.error("Exception occured during duplicate check for service and VF", e); - } + fillInCldsModel(model); + String bpmnJson = cldsBpmnTransformer.doXslTransformToString(model.getBpmnText()); + logger.info("PUT bpmnJson={}", bpmnJson); + ModelProperties modelProp = new ModelProperties(modelName, model.getControlName(), CldsEvent.ACTION_DEPLOY, + false, bpmnJson, model.getPropText()); + checkForDuplicateServiceVf(modelName, model.getPropText()); String deploymentId = ""; // If model is already deployed then pass same deployment id if (model.getDeploymentId() != null && !model.getDeploymentId().isEmpty()) { @@ -828,7 +829,7 @@ public class CldsService extends SecureServiceBase { deploymentId = "closedLoop_" + UUID.randomUUID() + "_deploymentId"; } String createNewDeploymentStatusUrl = dcaeDispatcherServices.createNewDeployment(deploymentId, - model.getTypeId()); + model.getTypeId(), modelProp.getGlobal().getDeployParameters()); String operationStatus = "processing"; long waitingTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(10); while ("processing".equalsIgnoreCase(operationStatus)) { @@ -930,7 +931,8 @@ public class CldsService extends SecureServiceBase { if (service != null && resourceVf != null && !resourceVf.isEmpty()) { List cldsModelPropList = cldsDao.getDeployedModelProperties(); for (CldsModelProp cldsModelProp : cldsModelPropList) { - JsonNode currentNode = JacksonUtils.getObjectMapperInstance().readTree(cldsModelProp.getPropText()).get("global"); + JsonNode currentNode = JacksonUtils.getObjectMapperInstance().readTree(cldsModelProp.getPropText()) + .get("global"); String currentService = AbstractModelElement.getValueByName(currentNode, "service"); List currentVf = AbstractModelElement.getValuesByName(currentNode, "vf"); if (currentVf != null && !currentVf.isEmpty()) { -- cgit 1.2.3-korg