summaryrefslogtreecommitdiffstats
path: root/appc-config/appc-config-params/provider/src/main/java/org
diff options
context:
space:
mode:
authorAnand Chaturvedi <ac204h@att.com>2017-08-12 01:31:10 -0400
committerAnand Chaturvedi <ac204h@att.com>2017-08-14 16:11:44 -0400
commit0df7ab4f7ef0bfb21797775ec41fcdfb94e2270c (patch)
tree403ebc2806491d70aa8b494b0f2a92e5f1ae6a74 /appc-config/appc-config-params/provider/src/main/java/org
parent4971579332666d84721c2635b6d978f31b1ea5e9 (diff)
Initial commit for appc-config-params
Change-Id: I5805591892184b4456dd30639417d783d353a6a3 Signed-off-by: Anand Chaturvedi <ac204h@att.com> Issue-Id:APPC-9
Diffstat (limited to 'appc-config/appc-config-params/provider/src/main/java/org')
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerActivator.java68
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerConstant.java53
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/Parameter.java124
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/PropertyDefinition.java54
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/RequestKey.java49
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/ResponseKey.java55
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/parser/PropertyDefinitionNode.java249
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/ArtificatTransformer.java85
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessor.java66
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java41
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java399
-rw-r--r--appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java46
12 files changed, 1289 insertions, 0 deletions
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerActivator.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerActivator.java
new file mode 100644
index 000000000..f248159de
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerActivator.java
@@ -0,0 +1,68 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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<ServiceRegistration> registrations = new LinkedList<ServiceRegistration>();
+
+
+ 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/openecomp/sdnc/config/params/ParamsHandlerConstant.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerConstant.java
new file mode 100644
index 000000000..4b541982c
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerConstant.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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/openecomp/sdnc/config/params/data/Parameter.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/Parameter.java
new file mode 100644
index 000000000..6a03eddb3
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/Parameter.java
@@ -0,0 +1,124 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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<RequestKey> requestKeys;
+
+ @JsonProperty("response-keys")
+ private List<ResponseKey> 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<RequestKey> getRequestKeys() {
+ return requestKeys;
+ }
+
+ public void setRequestKeys(List<RequestKey> requestKeys) {
+ this.requestKeys = requestKeys;
+ }
+
+ public List<ResponseKey> getResponseKeys() {
+ return responseKeys;
+ }
+
+ public void setResponseKeys(List<ResponseKey> responseKeys) {
+ this.responseKeys = responseKeys;
+ }
+
+
+
+
+
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/PropertyDefinition.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/PropertyDefinition.java
new file mode 100644
index 000000000..0fd1b92c8
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/PropertyDefinition.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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<Parameter> 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<Parameter> getParameters() {
+ return parameters;
+ }
+ public void setParameters(List<Parameter> parameters) {
+ this.parameters = parameters;
+ }
+
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/RequestKey.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/RequestKey.java
new file mode 100644
index 000000000..c1cf0e19a
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/RequestKey.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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/openecomp/sdnc/config/params/data/ResponseKey.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/ResponseKey.java
new file mode 100644
index 000000000..9e394e465
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/ResponseKey.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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/openecomp/sdnc/config/params/parser/PropertyDefinitionNode.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/parser/PropertyDefinitionNode.java
new file mode 100644
index 000000000..a19c2b927
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/parser/PropertyDefinitionNode.java
@@ -0,0 +1,249 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.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<String, String> 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<String, String> 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<String, String> 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<String, String> requestParamMap = mapper.readValue(requestParamJson, HashMap.class);
+ if(requestParamMap != null){
+ List<Parameter> 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<String, String> requestParamMap = mapper.readValue(requestParamJson, HashMap.class);
+ if(requestParamMap != null){
+ List<Parameter> parameters = propertyDefinition.getParameters();
+
+ List<String> externalSystemKeys = new ArrayList<String>();
+ for (Parameter parameter : parameters) {
+ if(parameter != null){
+ if( !requestParamMap.containsKey(parameter.getName()) && StringUtils.isNotBlank(parameter.getSource()) ){
+ 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<String, String> requestParamMap = mapper.readValue(requestParamJson, HashMap.class);
+ if(requestParamMap != null){
+ Map<String, String> 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/openecomp/sdnc/config/params/transformer/ArtificatTransformer.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/ArtificatTransformer.java
new file mode 100644
index 000000000..c646d9bd6
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/ArtificatTransformer.java
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessor.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessor.java
new file mode 100644
index 000000000..b4c688075
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessor.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java
new file mode 100644
index 000000000..65da0c4f6
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java
new file mode 100644
index 000000000..754676c26
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java
@@ -0,0 +1,399 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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/openecomp/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java
new file mode 100644
index 000000000..e4ce87976
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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);
+ }
+}