aboutsummaryrefslogtreecommitdiffstats
path: root/appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer
diff options
context:
space:
mode:
Diffstat (limited to 'appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer')
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/ArtificatTransformer.java87
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessor.java68
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java43
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java401
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/onap/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java48
5 files changed, 647 insertions, 0 deletions
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<Parameter> 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 = "&equals;";
+ private static final String COLONENCODING = "&colon;";
+ private static final String COMMAENCODING = "&comma;";
+ private static final String GREATERTHANENCODING = "&gt;";
+ private static final String LESSTHANENCODING = "&lt;";
+
+ @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<String, NodeType> nodeTypeMap = serviceTemplate.getNode_types();
+ Map<String, NodeTemplate> nodeTemplateMap = serviceTemplate.getTopology_template().getNode_templates();
+
+ String nodeTemplateName = nodeTemplateMap.keySet().toArray(new String[0])[0];
+ NodeTemplate nodeTemplate = nodeTemplateMap.get(nodeTemplateName);
+ Map<String, Object> 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<Parameter> parameterList = new LinkedList<>();
+
+ Map<String, org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition> 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<RequestKey> requestKeys = readRequestKeys(requestExpression);
+ List<ResponseKey> 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<ResponseKey> readResponseKeys(String responseExpression) throws ArtifactProcessorException {
+ Log.info("Entered into readResponseKeys.");
+ List<ResponseKey> 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<RequestKey> readRequestKeys(String requestExpression) {
+ Log.info("Entered into readRequestKeys.");
+ List<RequestKey> 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<String> 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<String, org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition> 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<String,NodeType> 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<String,Object> 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<String,NodeTemplate> nodeTemplateMap = new HashMap<>();
+ nodeTemplateMap.put(artifact.getKind()+"_Template",nodeTemplate);
+ toscaTemplate.getTopology_template().setNode_templates(nodeTemplateMap);
+ }
+
+ private void addTemplateProperty(Map<String,Object> 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<ResponseKey> responseKeys)
+ {
+ StringBuilder propertyBuilder = new StringBuilder();
+ propertyBuilder.append("<response-keys = ");
+ if(responseKeys!=null) {
+ Iterator<ResponseKey> 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<RequestKey> requestKeys)
+ {
+ StringBuilder propertyBuilder = new StringBuilder();
+ propertyBuilder.append("<request-keys = ");
+ if(requestKeys!=null) {
+ Iterator<RequestKey> 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("<source-system = ");
+ sourceBuilder.append(StringUtils.isBlank(encode(source))?"":encode(source));
+ sourceBuilder.append(">");
+ return sourceBuilder.toString();
+ }
+
+ protected String encode(String string)
+ {
+ String encodedString = null;
+ if(string!=null) {
+ encodedString = string.trim().replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll(":","&colon;").replaceAll(",","&comma;").replaceAll("=","&equals;");
+ }
+ 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);
+ }
+}