From 161df8a94bb3b0c34ed16fd4fdba078bd1eeef9a Mon Sep 17 00:00:00 2001 From: Patrick Brady Date: Wed, 13 Dec 2017 11:14:21 -0800 Subject: Second part of onap rename This is the second commit of the rename. The folder structure is renamed for appc-adapters and appc-config in this commit. Change-Id: Iaa2b8c937ff1ca1b5d1178128961fb115ee65d9b Signed-off-by: Patrick Brady Issue-ID: APPC-13 --- .../sdnc/config/params/ParamsHandlerActivator.java | 70 ++++ .../sdnc/config/params/ParamsHandlerConstant.java | 55 +++ .../onap/sdnc/config/params/data/Parameter.java | 126 +++++++ .../config/params/data/PropertyDefinition.java | 56 +++ .../onap/sdnc/config/params/data/RequestKey.java | 51 +++ .../onap/sdnc/config/params/data/ResponseKey.java | 57 +++ .../params/parser/PropertyDefinitionNode.java | 251 +++++++++++++ .../params/transformer/ArtificatTransformer.java | 87 +++++ .../transformer/tosca/ArtifactProcessor.java | 68 ++++ .../tosca/ArtifactProcessorFactory.java | 43 +++ .../transformer/tosca/ArtifactProcessorImpl.java | 401 +++++++++++++++++++++ .../exceptions/ArtifactProcessorException.java | 48 +++ 12 files changed, 1313 insertions(+) create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/ParamsHandlerActivator.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/ParamsHandlerConstant.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/Parameter.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/PropertyDefinition.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/RequestKey.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/ResponseKey.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/parser/PropertyDefinitionNode.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/ArtificatTransformer.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessor.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java create mode 100644 appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java (limited to 'appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc') diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/ParamsHandlerActivator.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/ParamsHandlerActivator.java new file mode 100644 index 000000000..dd4515cca --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/ParamsHandlerActivator.java @@ -0,0 +1,70 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params; + +import java.util.LinkedList; +import java.util.List; + +import org.openecomp.sdnc.config.params.parser.PropertyDefinitionNode; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +public class ParamsHandlerActivator implements BundleActivator{ + + private List registrations = new LinkedList(); + + + private static final EELFLogger log = EELFManager.getInstance().getLogger(ParamsHandlerActivator.class); + + @Override + public void start(BundleContext ctx) throws Exception + { + + try { + PropertyDefinitionNode propertyDefinitionNode = new PropertyDefinitionNode(); + log.info("Registering service "+ propertyDefinitionNode.getClass().getName()); + registrations.add(ctx.registerService(propertyDefinitionNode.getClass().getName(), propertyDefinitionNode, null)); + log.info("Registering service sccessful for "+ propertyDefinitionNode.getClass().getName()); + } catch (Exception e) { + e.printStackTrace(); + } + + } + @Override + public void stop(BundleContext arg0) throws Exception + { + for (ServiceRegistration registration: registrations) + { + registration.unregister(); + registration = null; + } + + } + +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/ParamsHandlerConstant.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/ParamsHandlerConstant.java new file mode 100644 index 000000000..65b93d738 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/ParamsHandlerConstant.java @@ -0,0 +1,55 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params; + +public class ParamsHandlerConstant { + + public static String STRING_ENCODING = "utf-8"; + public static String Y = "Y"; + public static String N = "N"; + public static String DATA_TYPE_TEXT = "TEXT"; + public static String DATA_TYPE_JSON = "JSON"; + public static String DATA_TYPE_XML = "XML"; + public static String DATA_TYPE_SQL = "SQL"; + + + public static String INPUT_PARAM_PD_CONTENT = "pdContent"; + public static String INPUT_PARAM_SYSTEM_NAME = "systemName"; + public static String INPUT_PARAM_JSON_DATA = "jsonData"; + public static String INPUT_PARAM_MERGE__JSON_DATA = "mergeJsonData"; + + + public static String INPUT_PARAM_REQUEST_DATA = "requestData"; + public static String INPUT_PARAM_RESPONSE_PRIFIX = "responsePrefix"; + public static String OUTPUT_PARAM_CONFIGURATION_PARAMETER = "configuration-parameters"; + + + + public static String OUTPUT_PARAM_STATUS = "status"; + public static String OUTPUT_PARAM_ERROR_MESSAGE = "error-message"; + public static String OUTPUT_STATUS_SUCCESS = "success"; + public static String OUTPUT_STATUS_FAILURE = "failure"; + +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/Parameter.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/Parameter.java new file mode 100644 index 000000000..aaa457645 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/Parameter.java @@ -0,0 +1,126 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.data; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class Parameter { + private String name; + private String description; + private String type; + private boolean required; + private String source; + + @JsonProperty("rule-type") + private String ruleType; + + @JsonProperty("default") + private String defaultValue; + + @JsonProperty("request-keys") + private List requestKeys; + + @JsonProperty("response-keys") + private List responseKeys; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean isRequired() { + return required; + } + + public void setRequired(boolean required) { + this.required = required; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getRuleType() { + return ruleType; + } + + public void setRuleType(String ruleType) { + this.ruleType = ruleType; + } + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public List getRequestKeys() { + return requestKeys; + } + + public void setRequestKeys(List requestKeys) { + this.requestKeys = requestKeys; + } + + public List getResponseKeys() { + return responseKeys; + } + + public void setResponseKeys(List responseKeys) { + this.responseKeys = responseKeys; + } + + + + + +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/PropertyDefinition.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/PropertyDefinition.java new file mode 100644 index 000000000..d33fd9589 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/PropertyDefinition.java @@ -0,0 +1,56 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.data; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class PropertyDefinition { + public String kind = "Property Definition"; + public String version = "V1"; + + @JsonProperty("vnf-parameter-list") + public List parameters; + public String getKind() { + return kind; + } + public void setKind(String kind) { + this.kind = kind; + } + public String getVersion() { + return version; + } + public void setVersion(String version) { + this.version = version; + } + public List getParameters() { + return parameters; + } + public void setParameters(List parameters) { + this.parameters = parameters; + } + +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/RequestKey.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/RequestKey.java new file mode 100644 index 000000000..0589afcc3 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/RequestKey.java @@ -0,0 +1,51 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.data; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class RequestKey{ + @JsonProperty("key-name") + private String keyName; + @JsonProperty("key-value") + private String keyValue; + + public String getKeyName() { + return keyName; + } + public void setKeyName(String keyName) { + this.keyName = keyName; + } + public String getKeyValue() { + return keyValue; + } + public void setKeyValue(String keyValue) { + this.keyValue = keyValue; + } + + + + +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/ResponseKey.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/ResponseKey.java new file mode 100644 index 000000000..5277699e1 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/data/ResponseKey.java @@ -0,0 +1,57 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.data; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ResponseKey{ + @JsonProperty("unique-key-name") + private String uniqueKeyName; + @JsonProperty("unique-key-value") + private String uniqueKeyValue; + @JsonProperty("field-key-name") + private String fieldKeyName; + + public String getUniqueKeyName() { + return uniqueKeyName; + } + public void setUniqueKeyName(String uniqueKeyName) { + this.uniqueKeyName = uniqueKeyName; + } + public String getUniqueKeyValue() { + return uniqueKeyValue; + } + public void setUniqueKeyValue(String uniqueKeyValue) { + this.uniqueKeyValue = uniqueKeyValue; + } + public String getFieldKeyName() { + return fieldKeyName; + } + public void setFieldKeyName(String fieldKeyName) { + this.fieldKeyName = fieldKeyName; + } + + +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/parser/PropertyDefinitionNode.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/parser/PropertyDefinitionNode.java new file mode 100644 index 000000000..4916c46a8 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/parser/PropertyDefinitionNode.java @@ -0,0 +1,251 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.parser; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.openecomp.sdnc.config.params.ParamsHandlerConstant; +import org.openecomp.sdnc.config.params.data.Parameter; +import org.openecomp.sdnc.config.params.data.PropertyDefinition; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; + +public class PropertyDefinitionNode implements SvcLogicJavaPlugin{ + + + private static final EELFLogger log = EELFManager.getInstance().getLogger(PropertyDefinitionNode.class); + + public void processMissingParamKeys(Map inParams, SvcLogicContext ctx) throws SvcLogicException { + log.info("Received processParamKeys call with params : " + inParams); + String responsePrefix = inParams.get(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX); + try{ + responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : ""; + + String requestParamJson = inParams.get(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA); + String pdContent = inParams.get(ParamsHandlerConstant.INPUT_PARAM_PD_CONTENT); + + if(StringUtils.isBlank(pdContent)){ + throw new Exception("Request Param (pdContent) is Missing .."); + } + + if(StringUtils.isBlank(requestParamJson)){ + throw new Exception("Request Param (jsonData) is Missing .."); + } + + PropertyDefinition propertyDefinition = parsePDContent(pdContent); + if(propertyDefinition != null){ + requestParamJson = mergeMissingRequestParamFromPD(propertyDefinition, requestParamJson); + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_CONFIGURATION_PARAMETER, requestParamJson); + } + + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS); + } catch (Exception e) { + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_FAILURE); + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage()); + log.error("Failed in merging data to template " + e.getMessage()); + throw new SvcLogicException(e.getMessage()); + } + } + + public void processExternalSystemParamKeys(Map inParams, SvcLogicContext ctx) throws SvcLogicException { + log.info("Received processExternalSystemParamKeys call with params : " + inParams); + String responsePrefix = inParams.get(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX); + try{ + responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : ""; + + String requestParamJson = inParams.get(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA); + String pdContent = inParams.get(ParamsHandlerConstant.INPUT_PARAM_PD_CONTENT); + String systemName = inParams.get(ParamsHandlerConstant.INPUT_PARAM_SYSTEM_NAME); + + + if(StringUtils.isBlank(pdContent)){ + throw new Exception("Request Param (pdContent) is Missing .."); + } + + if(StringUtils.isBlank(requestParamJson)){ + throw new Exception("Request Param (jsonData) is Missing .."); + } + + if(StringUtils.isBlank(systemName)){ + throw new Exception("Request Param (systemName) is Missing .."); + } + + PropertyDefinition propertyDefinition = parsePDContent(pdContent); + if(propertyDefinition != null){ + getSystemRequestParamInfoFromPD(propertyDefinition, requestParamJson, systemName, ctx); + } + + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS); + } catch (Exception e) { + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_FAILURE); + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage()); + log.error("Failed in merging data to template " + e.getMessage()); + throw new SvcLogicException(e.getMessage()); + } + } + + + public void mergeJsonData(Map inParams, SvcLogicContext ctx) throws SvcLogicException { + log.info("Received mergeJsonData call with params : " + inParams); + String responsePrefix = inParams.get(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX); + try{ + responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : ""; + + String requestParamJson = inParams.get(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA); + String mergeJsonData = inParams.get(ParamsHandlerConstant.INPUT_PARAM_MERGE__JSON_DATA); + + if(StringUtils.isBlank(requestParamJson)){ + throw new Exception("Request Param (jsonData) is Missing .."); + } + + if(StringUtils.isBlank(mergeJsonData)){ + throw new Exception("Request Param (mergeJsonData) is Missing .."); + } + + requestParamJson = mergeJson(requestParamJson, mergeJsonData); + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_CONFIGURATION_PARAMETER, requestParamJson); + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS); + } catch (Exception e) { + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_FAILURE); + ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage()); + log.error("Failed in merging data to template " + e.getMessage()); + throw new SvcLogicException(e.getMessage()); + } + } + + + /* */ + + private PropertyDefinition parsePDContent(String pdContent) throws JsonParseException, JsonMappingException, IOException{ + PropertyDefinition propertyDefinition = null; + if(StringUtils.isNotBlank(pdContent)){ + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + propertyDefinition = mapper.readValue(pdContent, PropertyDefinition.class); + } + return propertyDefinition; + } + + + private String mergeMissingRequestParamFromPD(PropertyDefinition propertyDefinition, String requestParamJson) throws Exception{ + + if(propertyDefinition == null){ + throw new Exception("PropertyDefinition is Missing .."); + } + + if(StringUtils.isBlank(requestParamJson)){ + throw new Exception("Request Param is Missing .."); + } + + ObjectMapper mapper = new ObjectMapper(); + Map requestParamMap = mapper.readValue(requestParamJson, HashMap.class); + if(requestParamMap != null){ + List parameters = propertyDefinition.getParameters(); + for (Parameter parameter : parameters) { + if(parameter != null){ + + log.info("Checking Key " + parameter.getName() + ":: Source :" +parameter.getSource()); + // Add Only non external system keys,If it is not present in request Params + if( !requestParamMap.containsKey(parameter.getName()) + && StringUtils.isBlank(parameter.getSource()) + ){ + log.info("Adding New Key " + parameter.getName()); + requestParamMap.put(parameter.getName(), parameter.getDefaultValue()); + } + } + } + requestParamJson = mapper.writeValueAsString(requestParamMap); + log.info("Processed Request Param " + requestParamJson); + } + + return requestParamJson; + } + + private void getSystemRequestParamInfoFromPD(PropertyDefinition propertyDefinition, String requestParamJson, String systemName, SvcLogicContext ctx) throws Exception{ + + if(propertyDefinition == null){ + throw new Exception("PropertyDefinition is Missing .."); + } + + if(StringUtils.isBlank(requestParamJson)){ + throw new Exception("Request Param is Missing .."); + } + + ObjectMapper mapper = new ObjectMapper(); + Map requestParamMap = mapper.readValue(requestParamJson, HashMap.class); + if(requestParamMap != null){ + List parameters = propertyDefinition.getParameters(); + + List externalSystemKeys = new ArrayList(); + for (Parameter parameter : parameters) { + if(parameter != null){ + if( !requestParamMap.containsKey(parameter.getName()) && StringUtils.isNotBlank(parameter.getSource()) && !StringUtils.equalsIgnoreCase(parameter.getSource(),"Manual") ){ + log.info("Adding New System Key " + parameter.getName() + ":"+ mapper.writeValueAsString(parameter)); + externalSystemKeys.add(parameter.getName()); + ctx.setAttribute(systemName +"."+parameter.getName(), mapper.writeValueAsString(parameter)); + } + } + } + + String systemKeys = systemName+".keys"; + ctx.setAttribute(systemKeys, mapper.writeValueAsString(externalSystemKeys)); + } + } + + + private String mergeJson(String requestParamJson, String systemParamJson) throws Exception { + ObjectMapper mapper = new ObjectMapper(); + Map requestParamMap = mapper.readValue(requestParamJson, HashMap.class); + if(requestParamMap != null){ + Map systemParamMap = mapper.readValue(systemParamJson, HashMap.class); + if(systemParamMap != null){ + for (String systemParamKey : systemParamMap.keySet()) { + log.trace("Megging System Key Values " + systemParamKey); + requestParamMap.put( systemParamKey , systemParamMap.get(systemParamKey)); + } + } + requestParamJson = mapper.writeValueAsString(requestParamMap); + log.info("Processed Request Param " + requestParamJson); + } + + return requestParamJson; + } + + + + +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/ArtificatTransformer.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/ArtificatTransformer.java new file mode 100644 index 000000000..8498b6375 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/ArtificatTransformer.java @@ -0,0 +1,87 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.transformer; + +import java.io.IOException; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.openecomp.sdnc.config.params.data.Parameter; +import org.openecomp.sdnc.config.params.data.PropertyDefinition; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; + +public class ArtificatTransformer { + + + public String convertPDToYaml(PropertyDefinition propertyDefinition) throws JsonParseException, JsonMappingException, IOException{ + String yamlContent = null; + if(propertyDefinition != null){ + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + yamlContent = mapper.writeValueAsString(propertyDefinition); + } + return yamlContent; + } + + public String transformYamlToJson(String yaml) throws JsonParseException, JsonMappingException, IOException { + ObjectMapper yamlReader = new ObjectMapper(new YAMLFactory()); + Object obj = yamlReader.readValue(yaml, Object.class); + ObjectMapper jsonWriter = new ObjectMapper(); + jsonWriter.enable(SerializationFeature.INDENT_OUTPUT); + return jsonWriter.writeValueAsString(obj); + } + + public PropertyDefinition convertYAMLToPD(String pdContent) throws JsonParseException, JsonMappingException, IOException{ + PropertyDefinition propertyDefinition = null; + if(StringUtils.isNotBlank(pdContent)){ + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + propertyDefinition = mapper.readValue(pdContent, PropertyDefinition.class); + } + return propertyDefinition; + } + + public String convertYAMLToParams(String pdContent) throws JsonParseException, JsonMappingException, IOException{ + String paramJson = null; + if(StringUtils.isNotBlank(pdContent)){ + paramJson = convertPdToParams(convertYAMLToPD(pdContent)); + } + return paramJson; + } + + public String convertPdToParams(PropertyDefinition propertyDefinition) throws JsonParseException, JsonMappingException, IOException{ + String paramJson = null; + if(propertyDefinition != null && propertyDefinition.getParameters() != null){ + List parameters = propertyDefinition.getParameters(); + + } + return paramJson; + } + +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessor.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessor.java new file mode 100644 index 000000000..cb4f1e0f7 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessor.java @@ -0,0 +1,68 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.transformer.tosca; + +import org.openecomp.sdnc.config.params.data.PropertyDefinition; +import org.openecomp.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException; + +import java.io.OutputStream; + +public interface ArtifactProcessor +{ + /** + * Generates Tosca artifact from PropertyDefinition object. + * + * @param artifact + * PropertyDefinition object which is to be converted to Tosca. + * @param stream + * Stream to which the generated Tosca is to be written. + * @throws ArtifactProcessorException + * If the Tosca Generation failed + */ + void generateArtifact(PropertyDefinition artifact, OutputStream stream) throws ArtifactProcessorException; + + /** + * Generates Tosca artifact from PropertyDefinition string. + * + * @param artifact + * PropertyDefinition string which is to be converted to Tosca. + * @param stream + * Stream to which the generated Tosca is to be written. + * @throws ArtifactProcessorException + * If the Tosca Generation failed + */ + void generateArtifact(String artifact, OutputStream stream) throws ArtifactProcessorException; + + /** + * Generates the PropertyDefinition object from a Tosca artifact. + * + * @param toscaArtifact + * Tosca artifact which is to be converted. + * @return PropertyDefinition object generated from Tosca + * @throws ArtifactProcessorException + * If the PropertyDefinition Generation failed + */ + PropertyDefinition readArtifact(String toscaArtifact) throws ArtifactProcessorException; +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java new file mode 100644 index 000000000..9ec80c9a4 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java @@ -0,0 +1,43 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.transformer.tosca; + +/** + * Created by pranavdi on 3/29/2017. + */ +public class ArtifactProcessorFactory +{ + private static class InstanceHolder + { + private static ArtifactProcessorImpl instance = new ArtifactProcessorImpl(); + } + + private ArtifactProcessorFactory(){} + + public static ArtifactProcessor getArtifactProcessor() + { + return InstanceHolder.instance; + } +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java new file mode 100644 index 000000000..e3dd5dc41 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java @@ -0,0 +1,401 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.transformer.tosca; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.apache.commons.lang.StringUtils; + +import org.openecomp.sdc.tosca.datatypes.model.*; +import org.openecomp.sdc.tosca.services.YamlUtil; +import org.openecomp.sdnc.config.params.data.Parameter; +import org.openecomp.sdnc.config.params.data.PropertyDefinition; +import org.openecomp.sdnc.config.params.data.RequestKey; +import org.openecomp.sdnc.config.params.data.ResponseKey; +import org.openecomp.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException; +import org.slf4j.MDC; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME; + +public class ArtifactProcessorImpl implements ArtifactProcessor +{ + private static final String DERIVEDFROM = "org.openecomp.genericvnf"; + private static final EELFLogger Log = EELFManager.getInstance().getLogger(ArtifactProcessorImpl.class); + private static final String EQUALSENCODING = "="; + private static final String COLONENCODING = ":"; + private static final String COMMAENCODING = ","; + private static final String GREATERTHANENCODING = ">"; + private static final String LESSTHANENCODING = "<"; + + @Override + public void generateArtifact(PropertyDefinition artifact, OutputStream stream) throws ArtifactProcessorException + { + MDC.clear(); + MDC.put(MDC_SERVICE_NAME,"ArtifactGenerator"); + Log.info("Entered into generateArtifact"); + if(!StringUtils.isBlank(artifact.getKind())) { + logArtifact(artifact); + ServiceTemplate serviceTemplate = new ServiceTemplate(); + + addNodeType(artifact, serviceTemplate); + + TopologyTemplate topologyTemplate = new TopologyTemplate(); + serviceTemplate.setTopology_template(topologyTemplate); + addNodeTemplate(artifact, serviceTemplate); + + String tosca = new YamlUtil().objectToYaml(serviceTemplate); + OutputStreamWriter writer = new OutputStreamWriter(stream); + try { + writer.write(tosca); + writer.flush(); + } catch (IOException e) { + Log.error("Error writing to outputstream", e); + throw new ArtifactProcessorException(e); + } finally { + try { + writer.close(); + } catch (IOException e) { + Log.error("Error while closing outputstream writer", e); + } + MDC.clear(); + } + } + else + { + Log.error("Kind in PropertyDefinition is blank or null"); + throw new ArtifactProcessorException("Kind in PropertyDefinition is blank or null"); + } + } + + @Override + public void generateArtifact(String artifact, OutputStream stream) throws ArtifactProcessorException + { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + try { + PropertyDefinition pd = mapper.readValue(artifact, PropertyDefinition.class); + generateArtifact(pd, stream); + } + catch (IOException e) + { + Log.error("Error parsing property definition content = "+ artifact,e); + throw new ArtifactProcessorException(e); + } + } + + @Override + public PropertyDefinition readArtifact(String toscaArtifact) throws ArtifactProcessorException{ + Log.info("Entered into readArtifact."); + Log.info("Received ToscaArtifact:\n" + toscaArtifact); + + PropertyDefinition propertyDefinitionObj = new PropertyDefinition(); + ServiceTemplate serviceTemplate = new YamlUtil().yamlToObject(toscaArtifact, ServiceTemplate.class); + + //mapping parameters + Map nodeTypeMap = serviceTemplate.getNode_types(); + Map nodeTemplateMap = serviceTemplate.getTopology_template().getNode_templates(); + + String nodeTemplateName = nodeTemplateMap.keySet().toArray(new String[0])[0]; + NodeTemplate nodeTemplate = nodeTemplateMap.get(nodeTemplateName); + Map nodeTemplateProperties = nodeTemplate.getProperties(); + + String kind = nodeTypeMap.keySet().toArray(new String[0])[0]; + NodeType nodeType = nodeTypeMap.get(kind); + String version = nodeType.getVersion(); + Log.info("ReadArtifact for "+ kind + " with version "+version); + propertyDefinitionObj.setKind(kind); + propertyDefinitionObj.setVersion(version); + + List parameterList = new LinkedList<>(); + + Map propertyDefinitionFromTOSCA = nodeType.getProperties(); + if(null != propertyDefinitionFromTOSCA){ + for (String propertyName : propertyDefinitionFromTOSCA.keySet()) { + org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition propertyDefinition = propertyDefinitionFromTOSCA.get(propertyName); + + Parameter parameter = new Parameter(); + parameter.setName(propertyName); + + if (propertyDefinition.get_default() != null) { + parameter.setDefaultValue(propertyDefinition.get_default().toString()); + } + parameter.setDescription(propertyDefinition.getDescription()); + if (null != propertyDefinition.getRequired()) { + parameter.setRequired(propertyDefinition.getRequired()); + } else { + parameter.setRequired(false); + } + + if (StringUtils.isNotEmpty(propertyDefinition.getType())) { + parameter.setType(propertyDefinition.getType()); + } + + String propertValueExpr = (String) nodeTemplateProperties.get(propertyName); + String[] stringTokens = parsePropertyValueExpression(propertValueExpr); + String ruleType = stringTokens[0].substring(stringTokens[0].indexOf('=')+1,stringTokens[0].length()).replaceAll(">","").trim(); + String responseExpression = stringTokens[1].substring(stringTokens[1].indexOf('=')+1,stringTokens[1].length()); + String source = stringTokens[2].substring(stringTokens[2].indexOf('=')+1,stringTokens[2].length()).replaceAll(">","").trim(); + String requestExpression = stringTokens[3].substring(stringTokens[3].indexOf('=')+1,stringTokens[3].length()); + + List requestKeys = readRequestKeys(requestExpression); + List responseKeys = readResponseKeys(responseExpression); + + parameter.setRuleType(ruleType); + parameter.setSource(source); + parameter.setRequestKeys(requestKeys); + parameter.setResponseKeys(responseKeys); + + parameterList.add(parameter); + + } + } + propertyDefinitionObj.setParameters(parameterList); + Log.info("Exiting from readArtifact. "); + return propertyDefinitionObj; + } + + private List readResponseKeys(String responseExpression) throws ArtifactProcessorException { + Log.info("Entered into readResponseKeys."); + List responseKeyList = null; + String expression; + expression = responseExpression.replaceAll("<", "").replaceAll(">", "").trim(); + if (StringUtils.isNotEmpty(expression)) { + responseKeyList = new ArrayList<>(); + + String[] responseKeys = expression.split(","); + for (String responseKeyStr : responseKeys) { + ResponseKey responseKey = new ResponseKey(); + try { + responseKey.setUniqueKeyName(responseKeyStr.split(":")[0].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING, ":").replaceAll(COMMAENCODING, ",").replaceAll(EQUALSENCODING,"=").trim()); + responseKey.setUniqueKeyValue(responseKeyStr.split(":")[1].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING, ":").replaceAll(COMMAENCODING, ",").replaceAll(EQUALSENCODING,"=").trim()); + responseKey.setFieldKeyName(responseKeyStr.split(":")[2].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING, ":").replaceAll(COMMAENCODING, ",").replaceAll(EQUALSENCODING,"=").trim()); + } catch (ArrayIndexOutOfBoundsException e) { + Log.error("Invalid response attribute found :" + responseKeyStr + "due to "+e); + throw new ArtifactProcessorException("Invalid response attribute found :" + responseKeyStr); + } + responseKeyList.add(responseKey); + } + } + Log.info("Exiting from readResponseKeys."); + return responseKeyList; + } + + private List readRequestKeys(String requestExpression) { + Log.info("Entered into readRequestKeys."); + List requestKeyList = null; + String expression; + expression = requestExpression.replaceAll("<","").replaceAll(">","").trim(); + if(StringUtils.isNotEmpty(expression)){ + requestKeyList = new ArrayList<>(); + String[] requestKeys = expression.split(","); + for(String responseKeyStr :requestKeys){ + RequestKey requestKey = new RequestKey(); + requestKey.setKeyName(responseKeyStr.split(":")[0].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING,":").replaceAll(COMMAENCODING,",").replaceAll(EQUALSENCODING,"=").trim()); + requestKey.setKeyValue(responseKeyStr.split(":")[1].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING,":").replaceAll(COMMAENCODING,",").replaceAll(EQUALSENCODING,"=").trim()); + requestKeyList.add(requestKey); + } + } + Log.info("Exiting from readRequestKeys."); + return requestKeyList; + } + + private String[] parsePropertyValueExpression(String propertValueExpr) throws ArtifactProcessorException{ + Log.info("Entered into parsePropertyValueExpression."); + String nodeRegex = "<(.*?)>"; + Pattern pattern = Pattern.compile(nodeRegex, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(propertValueExpr); + List stringTokens = new ArrayList<>(); + while(matcher.find()){ + stringTokens.add(matcher.group(0)); + } + String[] propertiesArr = new String[stringTokens.size()]; + propertiesArr = stringTokens.toArray(propertiesArr); + if(propertiesArr.length!=4){ + throw new ArtifactProcessorException("Invalid input found " + propertValueExpr); + } + Log.info("Exiting from parsePropertyValueExpression."); + return propertiesArr; + } + + private void addNodeType(PropertyDefinition artifact, ServiceTemplate toscaTemplate) throws ArtifactProcessorException { + //Add basic fields for the node + NodeType toscaNodeType = new NodeType(); + toscaNodeType.setDerived_from(DERIVEDFROM); + toscaNodeType.setVersion(artifact.getVersion()); + toscaNodeType.setDescription(""); + if(artifact.getParameters()!=null) { + Map toscaPropertyMap = new HashMap<>(); + toscaNodeType.setProperties(toscaPropertyMap); + + //Add properties from parameters of PD + for (Parameter pdParameter : artifact.getParameters()) { + addProperty(toscaNodeType, pdParameter); + } + } + + // This is where it adds node in node Map and adds the map in tosca template + Map toscaNodeMap = new HashMap<>(); + toscaNodeMap.put(artifact.getKind(),toscaNodeType); + toscaTemplate.setNode_types(toscaNodeMap); + } + + private void addProperty(NodeType toscaNodeType, Parameter pdParameter) throws ArtifactProcessorException { + if(!StringUtils.isBlank(pdParameter.getName())&& !pdParameter.getName().matches(".*\\s+.*")) { + Log.info("Adding parameter " + pdParameter.getName() + " in node type"); + org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition toscaProperty = new org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition(); + + toscaProperty.setType(StringUtils.isBlank(pdParameter.getType()) ? "string" : pdParameter.getType()); + toscaProperty.set_default(pdParameter.getDefaultValue()); + + toscaProperty.setDescription(pdParameter.getDescription()); + toscaProperty.setRequired(pdParameter.isRequired()); + + toscaNodeType.getProperties().put(pdParameter.getName(), toscaProperty); + } + else + { + String message ="Parameter name is empty,null or contains whitespace"; + Log.error(message); + throw new ArtifactProcessorException(message); + } + } + + private void addNodeTemplate(PropertyDefinition artifact, ServiceTemplate toscaTemplate) + { + NodeTemplate nodeTemplate = new NodeTemplate(); + nodeTemplate.setType(artifact.getKind()); + Map templateProperties = new HashMap<>(); + //Add properties from parameters of PD + if(artifact.getParameters()!=null) { + for (Parameter pdParameter : artifact.getParameters()) { + addTemplateProperty(templateProperties, pdParameter); + } + nodeTemplate.setProperties(templateProperties); + } + Map nodeTemplateMap = new HashMap<>(); + nodeTemplateMap.put(artifact.getKind()+"_Template",nodeTemplate); + toscaTemplate.getTopology_template().setNode_templates(nodeTemplateMap); + } + + private void addTemplateProperty(Map templateProperties, Parameter pdParameter) + { + Log.info("Adding parameter "+ pdParameter.getName() + " in node templates"); + String responseKeys = buildResponseKeyExpression(pdParameter.getResponseKeys()); + String requestKeys = buildRequestKeyExpression(pdParameter.getRequestKeys()); + String ruleType = buildRuleType(pdParameter.getRuleType()); + String source = buildSourceSystem(pdParameter.getSource()); + String properties = ruleType + " " + responseKeys + " " + source + " " + requestKeys; + templateProperties.put(pdParameter.getName(),properties); + } + + protected String buildResponseKeyExpression(List responseKeys) + { + StringBuilder propertyBuilder = new StringBuilder(); + propertyBuilder.append(" itr = responseKeys.iterator(); + while (itr.hasNext()) { + ResponseKey res = itr.next(); + if(res!=null) + propertyBuilder.append(encode(res.getUniqueKeyName()) + ":" + encode(res.getUniqueKeyValue()) + ":" + encode(res.getFieldKeyName())); + if (itr.hasNext()) + propertyBuilder.append(" , "); + } + } + propertyBuilder.append(">"); + return propertyBuilder.toString(); + } + + protected String buildRequestKeyExpression(List requestKeys) + { + StringBuilder propertyBuilder = new StringBuilder(); + propertyBuilder.append(" itr = requestKeys.iterator(); + while (itr.hasNext()) { + RequestKey res = itr.next(); + if(res!=null) + propertyBuilder.append(encode(res.getKeyName()) + ":" + encode(res.getKeyValue())); + if (itr.hasNext()) + propertyBuilder.append(" , "); + } + } + propertyBuilder.append(">"); + return propertyBuilder.toString(); + } + + protected String buildRuleType(String classType) + { + StringBuilder propertyBuilder = new StringBuilder(); + String encodedClassType = StringUtils.isBlank(encode(classType))?"":encode(classType); + propertyBuilder.append("<"); + propertyBuilder.append("rule-type = "+encodedClassType); + propertyBuilder.append(">"); + return propertyBuilder.toString(); + } + + protected String buildSourceSystem(String source) + { + StringBuilder sourceBuilder = new StringBuilder(); + sourceBuilder.append(""); + return sourceBuilder.toString(); + } + + protected String encode(String string) + { + String encodedString = null; + if(string!=null) { + encodedString = string.trim().replaceAll("<", "<").replaceAll(">", ">").replaceAll(":",":").replaceAll(",",",").replaceAll("=","="); + } + return encodedString; + } + + private void logArtifact(PropertyDefinition artifact) + { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + String stringArtifact=null; + try + { + stringArtifact = mapper.writeValueAsString(artifact); + Log.info("Received PropertyDefinition:\n" + stringArtifact); + } + catch (JsonProcessingException e) + { + Log.error("Exception while logging artifact:",e); + } + + } +} diff --git a/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java new file mode 100644 index 000000000..e788fbf88 --- /dev/null +++ b/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java @@ -0,0 +1,48 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdnc.config.params.transformer.tosca.exceptions; + +/** + * Created by pranavdi on 3/17/2017. + */ +public class ArtifactProcessorException extends Exception +{ + public ArtifactProcessorException() {} + + public ArtifactProcessorException(String message) + { + super(message); + } + + public ArtifactProcessorException(Throwable cause) + { + super(cause); + } + + public ArtifactProcessorException(String message, Throwable cause) + { + super(message,cause); + } +} -- cgit 1.2.3-korg