summaryrefslogtreecommitdiffstats
path: root/appc-config/appc-config-generator/provider/src/main/java
diff options
context:
space:
mode:
authorSkip Wonnell <kw5258@att.com>2017-08-15 18:07:13 -0500
committerPatrick Brady <pb071s@att.com>2017-08-17 06:16:06 +0000
commitdbf27a48318ba76644d6e2b095358db60bf5c9b6 (patch)
tree14e1663177802203eb7cfdc18bfd0036eadb31fe /appc-config/appc-config-generator/provider/src/main/java
parent9296b7674ea71cb86fe2ea99e80d9d055267ae5b (diff)
Initial commit for config-generator bundle
This bundle contains logic for creating the configuration, reading templates, and merging the data together Issue-ID: APPC-59 Change-Id: Ifd745964f659f075250d6acaf1b5f033da28e1c4 Signed-off-by: Skip Wonnell <kw5258@att.com>
Diffstat (limited to 'appc-config/appc-config-generator/provider/src/main/java')
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/ConfigGeneratorActivator.java86
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/ConfigGeneratorConstant.java68
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/convert/ConvertNode.java189
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/merge/MergeNode.java128
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/pattern/PatternNode.java81
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/reader/ReaderNode.java62
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CheckDataTool.java84
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/Constants.java32
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CustomJsonNodeFactory.java32
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CustomTextNode.java50
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/DbServiceUtil.java75
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/EscapeUtils.java91
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/JSONTool.java157
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/LogParserTool.java94
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/MergeTool.java109
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/transform/XSLTTransformerNode.java96
-rw-r--r--appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/writer/FileWriterNode.java70
17 files changed, 1504 insertions, 0 deletions
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/ConfigGeneratorActivator.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/ConfigGeneratorActivator.java
new file mode 100644
index 000000000..f2987d2f4
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/ConfigGeneratorActivator.java
@@ -0,0 +1,86 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.openecomp.sdnc.config.generator.convert.ConvertNode;
+import org.openecomp.sdnc.config.generator.merge.MergeNode;
+import org.openecomp.sdnc.config.generator.pattern.PatternNode;
+import org.openecomp.sdnc.config.generator.reader.ReaderNode;
+import org.openecomp.sdnc.config.generator.writer.FileWriterNode;
+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 ConfigGeneratorActivator implements BundleActivator{
+
+ private List<ServiceRegistration> registrations = new LinkedList<ServiceRegistration>();
+
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(ConfigGeneratorActivator.class);
+
+ @Override
+ public void start(BundleContext ctx) throws Exception
+ {
+
+ ConvertNode convertNode = new ConvertNode();
+ log.info("Registering service "+ convertNode.getClass().getName());
+ registrations.add(ctx.registerService(convertNode.getClass().getName(), convertNode, null));
+ log.info("Registering service sccessful for "+ convertNode.getClass().getName());
+
+ MergeNode mergeNode = new MergeNode();
+ log.info("Registering service "+ mergeNode.getClass().getName());
+ registrations.add(ctx.registerService(mergeNode.getClass().getName(), mergeNode, null));
+ log.info("Registering service sccessful for "+ mergeNode.getClass().getName());
+
+ PatternNode patternNode = new PatternNode();
+ log.info("Registering service "+ patternNode.getClass().getName());
+ registrations.add(ctx.registerService(patternNode.getClass().getName(), patternNode, null));
+ log.info("Registering service sccessful for "+ patternNode.getClass().getName());
+
+ ReaderNode readerNode = new ReaderNode();
+ log.info("Registering service "+ readerNode.getClass().getName());
+ registrations.add(ctx.registerService(readerNode.getClass().getName(), readerNode, null));
+ log.info("Registering service sccessful for "+ readerNode.getClass().getName());
+
+ FileWriterNode writerNode = new FileWriterNode();
+ log.info("Registering service "+ writerNode.getClass().getName());
+ registrations.add(ctx.registerService(writerNode.getClass().getName(), writerNode, null));
+ log.info("Registering service sccessful for "+ writerNode.getClass().getName());
+
+ }
+ @Override
+ public void stop(BundleContext arg0) throws Exception
+ {
+ for (ServiceRegistration registration: registrations)
+ {
+ registration.unregister();
+ registration = null;
+ }
+
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/ConfigGeneratorConstant.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/ConfigGeneratorConstant.java
new file mode 100644
index 000000000..cdfc34229
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/ConfigGeneratorConstant.java
@@ -0,0 +1,68 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator;
+
+public class ConfigGeneratorConstant {
+
+
+ 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_JSON_DATA = "jsonData";
+ public static String INPUT_PARAM_IS_ESCAPED = "isEscaped";
+ public static String INPUT_PARAM_BLOCK_KEYS = "blockKeys";
+ public static String INPUT_PARAM_LOG_DATA = "logData";
+ public static String INPUT_PARAM_CHECK_DATA = "checkData";
+ public static String INPUT_PARAM_ESCAPE_DATA = "escapeData";
+ public static String INPUT_PARAM_UNESCAPE_DATA = "unEscapeData";
+ public static String INPUT_PARAM_DATA_TYPE = "dataType";
+ public static String INPUT_PARAM_FILE_NAME = "fileName";
+
+ public static String INPUT_PARAM_TEMPLATE_DATA = "templateData";
+ public static String INPUT_PARAM_TEMPLATE_FILE = "templateFile";
+ public static String INPUT_PARAM_TEMPLATE_TYPE = "templateType";
+ public static String INPUT_PARAM_DO_PRETTY_OUTPUT = "doPrettyOutput";
+ public static String INPUT_PARAM_REQUEST_DATA = "requestData";
+ public static String INPUT_PARAM_RESPONSE_PRIFIX = "responsePrefix";
+
+
+ public static String OUTPUT_PARAM_MERGED_DATA = "mergedData";
+ public static String OUTPUT_PARAM_TRANSFORMED_DATA = "transformedData";
+ public static String OUTPUT_PARAM_FILE_DATA = "fileData";
+ public static String OUTPUT_PARAM_PARSED_ERROR = "parsedError";
+ public static String OUTPUT_PARAM_DATA_TYPE = "dataType";
+ public static String OUTPUT_PARAM_STATUS = "status";
+ public static String OUTPUT_PARAM_ERROR_MESSAGE = "error-message";
+ public static String OUTPUT_PARAM_ESCAPE_DATA = "escapeData";
+ public static String OUTPUT_PARAM_UNESCAPE_DATA = "unEscapeData";
+
+ public static String OUTPUT_STATUS_SUCCESS = "success";
+ public static String OUTPUT_STATUS_FAILURE = "failure";
+
+ public static final Object INPUT_PARAM_CONTEXT_KEY = "contextKey";
+ public static final Object INPUT_PARAM_JSON_CONTENT = "jsonContent";
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/convert/ConvertNode.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/convert/ConvertNode.java
new file mode 100644
index 000000000..60566a40d
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/convert/ConvertNode.java
@@ -0,0 +1,189 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.convert;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdnc.config.generator.ConfigGeneratorConstant;
+import org.openecomp.sdnc.config.generator.tool.EscapeUtils;
+import org.openecomp.sdnc.config.generator.tool.JSONTool;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+
+public class ConvertNode implements SvcLogicJavaPlugin {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(ConvertNode.class);
+
+ public void convertJson2DGContext( Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.trace("Received convertJson2DGContext call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try {
+ String jsonData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_JSON_DATA);
+ String isEscaped = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_IS_ESCAPED);
+ String blockKey = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_BLOCK_KEYS);
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+
+ if(StringUtils.isNotBlank(jsonData)){
+ if(StringUtils.isNotBlank(isEscaped) && isEscaped.equalsIgnoreCase("Y")){
+ jsonData = StringEscapeUtils.unescapeJavaScript(jsonData);
+ }
+
+ List<String> blockKeys = new ArrayList<String>();
+ if(blockKey != null){
+ blockKeys = Arrays.asList(blockKey.split(","));
+ }
+
+ Map<String, String> dgContext = JSONTool.convertToProperties(jsonData, blockKeys);
+ log.trace("DG Context Populated:"+dgContext);
+
+ for (Map.Entry<String, String> entry : dgContext.entrySet()) {
+ if(entry != null && entry.getKey() != null){
+ ctx.setAttribute(entry.getKey(), entry.getValue());
+ }
+ }
+ }
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in JSON to DGContext Conversion" + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+
+ public void escapeData( Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.trace("Received escapeData call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try {
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ String unEscapeData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_UNESCAPE_DATA);
+ String dataType = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_DATA_TYPE);
+
+ if(StringUtils.isBlank(unEscapeData)){
+ throw new Exception("Unescape ("+ConfigGeneratorConstant.INPUT_PARAM_UNESCAPE_DATA +") param is missing for escapeData conversion." + unEscapeData);
+ }
+
+ if(StringUtils.isBlank(dataType)){
+ throw new Exception(" Datatype ("+ConfigGeneratorConstant.INPUT_PARAM_DATA_TYPE+")param is missing for escapeData conversion.");
+ }
+
+ String escapedData = null;
+ if(ConfigGeneratorConstant.DATA_TYPE_JSON.equalsIgnoreCase(dataType)){
+ escapedData = StringEscapeUtils.escapeJavaScript(unEscapeData);
+ }else if(ConfigGeneratorConstant.DATA_TYPE_XML.equalsIgnoreCase(dataType)){
+ escapedData = StringEscapeUtils.escapeXml(unEscapeData);
+ }else if(ConfigGeneratorConstant.DATA_TYPE_SQL.equalsIgnoreCase(dataType)){
+ escapedData = EscapeUtils.escapeSql(unEscapeData);
+ }else{
+ throw new Exception(" Datatype ("+ConfigGeneratorConstant.INPUT_PARAM_DATA_TYPE+") param value ("+dataType+")is not supported for escapeData conversion.");
+ }
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ESCAPE_DATA, escapedData);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ log.trace("Data escapeData Successfully :" + ctx.getAttributeKeySet());
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in escapeData Conversion" + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+ public void unEscapeData( Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.trace("Received unEscapeData call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try {
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ String escapeData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_ESCAPE_DATA);
+ String dataType = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_DATA_TYPE);
+
+ if(StringUtils.isBlank(escapeData)){
+ throw new Exception("Escape ("+ConfigGeneratorConstant.INPUT_PARAM_ESCAPE_DATA +") param is missing for escapeData conversion.");
+ }
+
+ if(StringUtils.isBlank(dataType)){
+ throw new Exception(" Datatype ("+ConfigGeneratorConstant.INPUT_PARAM_DATA_TYPE+")param is missing for escapeData conversion.");
+ }
+
+ String unEscapedData = null;
+ if(ConfigGeneratorConstant.DATA_TYPE_JSON.equalsIgnoreCase(dataType)){
+ unEscapedData = StringEscapeUtils.unescapeJavaScript(escapeData);
+ }else if(ConfigGeneratorConstant.DATA_TYPE_XML.equalsIgnoreCase(dataType)){
+ unEscapedData = StringEscapeUtils.unescapeXml(escapeData);
+ }else{
+ throw new Exception(" Datatype ("+ConfigGeneratorConstant.INPUT_PARAM_DATA_TYPE+") param value ("+dataType+")is not supported for unEscapeData conversion.");
+ }
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_UNESCAPE_DATA, unEscapedData);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ log.trace("Converted unEscapeData Successfully :" + ctx.getAttributeKeySet());
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in unEscapeData Conversion" + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+
+ public void convertContextToJson(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException{
+ log.trace("Received convertContextToJson call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ String contextKey = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_CONTEXT_KEY);
+ try {
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+
+ ObjectMapper mapper = new ObjectMapper();
+ ObjectNode objectNode = mapper.createObjectNode();
+
+ Set<String> keys = ctx.getAttributeKeySet();
+ for (String key : keys) {
+ if(key.startsWith(contextKey +".")){
+ String objkey= key.replaceFirst(contextKey + ".", "");
+ objectNode.put(objkey, ctx.getAttribute(key));
+
+ }
+ }
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.INPUT_PARAM_JSON_CONTENT, objectNode.toString());
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ log.trace("convertContextToJson Successful" );
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in convertContextToJson" + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/merge/MergeNode.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/merge/MergeNode.java
new file mode 100644
index 000000000..67b21ae5f
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/merge/MergeNode.java
@@ -0,0 +1,128 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.merge;
+
+import java.nio.charset.Charset;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdnc.config.generator.ConfigGeneratorConstant;
+import org.openecomp.sdnc.config.generator.tool.JSONTool;
+import org.openecomp.sdnc.config.generator.tool.MergeTool;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+public class MergeNode implements SvcLogicJavaPlugin {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(MergeNode.class);
+
+ public void mergeDataOnTemplate(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+ }
+
+ public void mergeJsonDataOnTemplate(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.info("Received mergeJsonDataOnTemplate call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try{
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ String jsonData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_JSON_DATA);
+ if(StringUtils.isBlank(jsonData)){
+ throw new Exception("JSON Data is missing");
+ }
+
+ String templateData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_DATA);
+ String templateFile = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_FILE);
+
+ if(StringUtils.isBlank(templateData) && StringUtils.isBlank(templateFile)){
+ throw new Exception("Template data or Template file is missing");
+ }
+ if(StringUtils.isBlank(templateData)){
+ String path = MergeNode.class.getClassLoader().getResource(".").toString();
+ templateData = IOUtils.toString(MergeNode.class.getClassLoader().getResourceAsStream(templateFile));
+ }
+
+ String templateType = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_TYPE);
+
+ Map<String, String> dataMap = JSONTool.convertToProperties(jsonData);
+ log.info("Data Maps created :" + dataMap);
+ if(dataMap != null){
+ String mergedData = MergeTool.mergeMap2TemplateData(templateData, dataMap);
+ if(mergedData != null){
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_MERGED_DATA,mergedData);
+ }
+ }
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ log.info("Data Merge Successful :" + ctx);
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in merging data to template " + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+ public void mergeComplexJsonDataOnTemplate(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ //log.info("Received mergeJsonComplexDataOnTemplate call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try{
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ String jsonData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_JSON_DATA);
+ if(StringUtils.isBlank(jsonData)){
+ throw new Exception("JSON Data is missing");
+ }
+
+ String templateData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_DATA);
+ String templateFile = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_FILE);
+
+ if(StringUtils.isBlank(templateData) && StringUtils.isBlank(templateFile)){
+ throw new Exception("Template data or Template file is missing");
+ }
+ if(StringUtils.isBlank(templateData)){
+ //String path = MergeNode.class.getClassLoader().getResource(".").toString();
+ templateData = IOUtils.toString(MergeNode.class.getClassLoader().getResourceAsStream(templateFile), Charset.defaultCharset());
+ }
+
+ String templateType = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_TYPE);
+ String doPrettyOutput = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_DO_PRETTY_OUTPUT);
+
+ String mergedData = MergeTool.mergeJson2TemplateData(templateData, jsonData, templateType, doPrettyOutput);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_MERGED_DATA,mergedData);
+
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ //log.info("Data Merge Successful :" + ctx);
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in merging data to template " + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+ public void mergeYamlDataOnTemplate(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/pattern/PatternNode.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/pattern/PatternNode.java
new file mode 100644
index 000000000..04b62687f
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/pattern/PatternNode.java
@@ -0,0 +1,81 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.pattern;
+
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdnc.config.generator.ConfigGeneratorConstant;
+import org.openecomp.sdnc.config.generator.tool.CheckDataTool;
+import org.openecomp.sdnc.config.generator.tool.LogParserTool;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+public class PatternNode implements SvcLogicJavaPlugin {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(PatternNode.class);
+
+ public void parseErrorLog(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.info("Received parseErroLog call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try{
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ String logData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_LOG_DATA);
+ if(StringUtils.isBlank(logData)){
+ throw new Exception("Log Data is missing");
+ }
+ LogParserTool logParserTool = new LogParserTool();
+ String parsedError = logParserTool.parseErrorLog(logData);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_PARSED_ERROR, parsedError);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in parsing error log " + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+ public void checkDataType(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.info("Received checkDataType call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try{
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ String checkData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_CHECK_DATA);
+ if(StringUtils.isBlank(checkData)){
+ throw new Exception("Check Data is missing");
+ }
+ String dataType = CheckDataTool.checkData(checkData);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_DATA_TYPE, dataType);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in checkDataType " + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/reader/ReaderNode.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/reader/ReaderNode.java
new file mode 100644
index 000000000..301e5d701
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/reader/ReaderNode.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.reader;
+
+import java.io.File;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdnc.config.generator.ConfigGeneratorConstant;
+import org.openecomp.sdnc.config.generator.merge.MergeNode;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+public class ReaderNode implements SvcLogicJavaPlugin {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(MergeNode.class);
+
+
+ public void getFileData(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.info("Received getFileData call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try{
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ String fileName = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_FILE_NAME);
+
+ String fileData = FileUtils.readFileToString(new File(fileName), ConfigGeneratorConstant.STRING_ENCODING);
+
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_FILE_DATA,fileData);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in merging data to template " + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CheckDataTool.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CheckDataTool.java
new file mode 100644
index 000000000..316e821df
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CheckDataTool.java
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+import java.io.StringReader;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+import org.openecomp.sdnc.config.generator.ConfigGeneratorConstant;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+public class CheckDataTool {
+
+ public static String checkData(String data){
+ boolean isJSON = isJSON(data);
+ if(isJSON){
+ return ConfigGeneratorConstant.DATA_TYPE_JSON;
+ }
+
+ boolean isXML = isXML(data);
+ if(isXML){
+ return ConfigGeneratorConstant.DATA_TYPE_XML;
+ }
+
+ return ConfigGeneratorConstant.DATA_TYPE_TEXT;
+ }
+
+ public static boolean isJSON(String data) {
+ try {
+ new JSONObject(data);
+ } catch (JSONException ex) {
+ try {
+ new JSONArray(data);
+ } catch (JSONException ex1) {
+ return false;
+ }
+ }
+ return true;
+
+ // try {
+ // final ObjectMapper mapper = new ObjectMapper();
+ // mapper.readTree(data);
+ // return true;
+ // } catch (IOException e) {
+ // return false;
+ // }
+ }
+
+ public static boolean isXML(String data) {
+ try {
+ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+ Document doc = dBuilder.parse(new InputSource(new StringReader(data)));
+ return true;
+ } catch (Exception ex) {
+ return false;
+ }
+
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/Constants.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/Constants.java
new file mode 100644
index 000000000..d8af571e8
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/Constants.java
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+public class Constants
+{
+
+ public static final String DBLIB_SERVICE = "org.openecomp.sdnc.sli.resource.dblib.DBResourceManager";
+ public static final String DEVICE_AUTHENTICATION="DEVICE_AUTHENTICATION";
+ public static final String SCHEMA_SDNCTL="SDNCTL";
+
+ public static final String APPC_CONFIG_DIR="/opt/app/bvc/properties";
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CustomJsonNodeFactory.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CustomJsonNodeFactory.java
new file mode 100644
index 000000000..5820cea7a
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CustomJsonNodeFactory.java
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.TextNode;
+
+public class CustomJsonNodeFactory extends JsonNodeFactory {
+
+ public TextNode textNode(String text) {
+ return new CustomTextNode(text);
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CustomTextNode.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CustomTextNode.java
new file mode 100644
index 000000000..93e252a6d
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/CustomTextNode.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+
+import com.fasterxml.jackson.core.io.CharTypes;
+import com.fasterxml.jackson.databind.node.TextNode;
+
+public class CustomTextNode extends TextNode{
+
+ public CustomTextNode(String v) {
+ super(v);
+ }
+
+ @Override
+ public String toString()
+ {
+ int len = textValue().length();
+ len = len + 2 + (len >> 4);
+ StringBuilder sb = new StringBuilder(len);
+ appendQuoted(sb, textValue());
+ return sb.toString();
+ }
+
+ protected static void appendQuoted(StringBuilder sb, String content)
+ {
+ // sb.append('"');
+ CharTypes.appendQuoted(sb, content);
+ // sb.append('"');
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/DbServiceUtil.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/DbServiceUtil.java
new file mode 100644
index 000000000..80db36816
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/DbServiceUtil.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+import java.io.File;
+import java.net.URL;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Properties;
+
+import javax.sql.rowset.CachedRowSet;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.openecomp.sdnc.sli.resource.dblib.DBResourceManager;
+import org.openecomp.sdnc.sli.resource.dblib.DbLibService;
+
+public class DbServiceUtil
+{
+ private static final Logger log = LoggerFactory
+ .getLogger(DbServiceUtil.class);
+
+ private static Properties props;
+ private static DBResourceManager jdbcDataSource = null;
+
+
+ public static boolean updateDB(String tableName, ArrayList inputArgs, String scema, String whereClause, String setCluase) throws SQLException
+ {
+ String updatePasswordString = "update " + tableName + " set " + setCluase + " where " + whereClause ;
+ boolean result = jdbcDataSource.writeData(updatePasswordString, inputArgs,Constants.SCHEMA_SDNCTL);
+ return result;
+ }
+
+
+ public static CachedRowSet getData(String tableName, ArrayList argList, String schema, String getselectData, String getDataClasue ) throws SQLException
+ {
+ String selectQuery = "select " + getselectData + "from " + tableName + " where " + getDataClasue ;
+ CachedRowSet data = jdbcDataSource.getData(selectQuery, argList, schema);
+ return data;
+ }
+
+
+ public static DBResourceManager initDbLibService() throws Exception
+ {
+ props = new Properties();
+ File file = new File("/opt/app/bvc/properties/dblib.properties");
+ URL propURL = file.toURI().toURL();
+ props.load(propURL.openStream());
+ jdbcDataSource = DBResourceManager.create(props);
+ return jdbcDataSource;
+
+ }
+
+
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/EscapeUtils.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/EscapeUtils.java
new file mode 100644
index 000000000..f783d4c69
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/EscapeUtils.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class EscapeUtils {
+
+ public EscapeUtils() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public static String escapeSql(String str) {
+ if (str == null) {
+ return null;
+ }
+ String searchList[] = new String[]{"'","\\"};
+ String replacementList[] = new String[]{ "''","\\\\"};
+ return StringUtils.replaceEach(str,searchList, replacementList);
+ }
+
+ // For Generic Purpose
+ public static String escapeSQL(String s) {
+ if (s == null) {
+ return null;
+ }
+
+ int length = s.length();
+ int newLength = length;
+ for (int i = 0; i < length; i++) {
+ char c = s.charAt(i);
+ switch (c) {
+ case '\\':
+ case '\"':
+ case '\'':
+ case '\0': {
+ newLength += 1;
+ }
+ break;
+ }
+ }
+ if (length == newLength) {
+ // nothing to escape in the string
+ return s;
+ }
+ StringBuffer sb = new StringBuffer(newLength);
+ for (int i = 0; i < length; i++) {
+ char c = s.charAt(i);
+ switch (c) {
+ case '\\': {
+ sb.append("\\\\");
+ }
+ break;
+ case '\"': {
+ sb.append("\\\"");
+ }
+ break;
+ case '\'': {
+ sb.append("\\\'");
+ }
+ break;
+ case '\0': {
+ sb.append("\\0");
+ }
+ break;
+ default: {
+ sb.append(c);
+ }
+ }
+ }
+ return sb.toString();
+ }
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/JSONTool.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/JSONTool.java
new file mode 100644
index 000000000..63fd7006e
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/JSONTool.java
@@ -0,0 +1,157 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+
+
+public class JSONTool {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(JSONTool.class);
+
+ public static Map<String, String> convertToProperties(String s) throws JSONException {
+ return convertToProperties(s, null);
+ }
+
+ public static Map<String, String> convertToProperties(String s,List<String> blockKeys) throws JSONException {
+ JSONObject json = new JSONObject(s);
+ Map<String, String> mm = new HashMap<String, String>();
+
+ Map<String, Object> wm = new HashMap<String, Object>();
+ Iterator<String> ii = json.keys();
+ while (ii.hasNext()) {
+ String key1 = ii.next();
+ wm.put(key1, json.get(key1));
+
+
+ }
+
+ while (!wm.isEmpty())
+ for (String key : new ArrayList<>(wm.keySet())) {
+ Object o = wm.get(key);
+ wm.remove(key);
+
+
+ if(blockKeys != null && blockKeys.contains(key) && o != null){
+ //log.info("Adding JSON Block Keys : " + key + "=" + o.toString());
+ mm.put("block_" +key,o.toString());
+ }
+
+ if (o instanceof Boolean || o instanceof Number || o instanceof String) {
+ mm.put(key, o.toString());
+ //log.info("Added property: " + key + ": " + o.toString());
+ }
+
+ else if (o instanceof JSONObject) {
+ JSONObject jo = (JSONObject) o;
+ Iterator<String> i = jo.keys();
+ while (i.hasNext()) {
+ String key1 = i.next();
+ wm.put(key + "." + key1, jo.get(key1));
+ }
+ }
+
+ else if (o instanceof JSONArray) {
+ JSONArray ja = (JSONArray) o;
+ mm.put("size_"+key, String.valueOf(ja.length()));
+
+ //log.info("Added property: " + key + "_length" + ": " + String.valueOf(ja.length()));
+
+ for (int i = 0; i < ja.length(); i++)
+ wm.put(key + '[' + i + ']', ja.get(i));
+ }
+ }
+
+ return mm;
+ }
+
+ /*
+ public static Map<String, String> convertToProperties1(String s,List<String> blockKeys) throws Exception {
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ JsonNode rootNode = objectMapper.readTree(s);
+
+ Map<String, String> mm = new HashMap<String, String>();
+
+ Map<String, Object> wm = new HashMap<String, Object>();
+ Iterator<String> ii = rootNode.fieldNames();
+ while (ii.hasNext()) {
+ String key1 = ii.next();
+ wm.put(key1, rootNode.get(key1));
+
+
+ }
+
+ while (!wm.isEmpty())
+ for (String key : new ArrayList<>(wm.keySet())) {
+ Object o = wm.get(key);
+ wm.remove(key);
+
+
+ if(blockKeys != null && blockKeys.contains(key) && o != null){
+ //log.info("Adding JSON Block Keys : " + key + "=" + o.toString());
+ mm.put("block_" +key,o.toString());
+ }
+
+ if (o instanceof Boolean || o instanceof Number || o instanceof String) {
+ mm.put(key, o.toString());
+ //log.info("Added property: " + key + ": " + o.toString());
+ }
+
+ else if (o instanceof JSONObject) {
+ JSONObject jo = (JSONObject) o;
+ Iterator<String> i = jo.keys();
+ while (i.hasNext()) {
+ String key1 = i.next();
+ wm.put(key + "." + key1, jo.get(key1));
+ }
+ }
+
+ else if (o instanceof JSONArray) {
+ JSONArray ja = (JSONArray) o;
+ mm.put("size_"+key, String.valueOf(ja.length()));
+
+ //log.info("Added property: " + key + "_length" + ": " + String.valueOf(ja.length()));
+
+ for (int i = 0; i < ja.length(); i++)
+ wm.put(key + '[' + i + ']', ja.get(i));
+ }
+ }
+
+ return mm;
+ }
+*/
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/LogParserTool.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/LogParserTool.java
new file mode 100644
index 000000000..54823bc17
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/LogParserTool.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class LogParserTool {
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(JSONTool.class);
+
+ private String[] singleLines;
+ private List<String> recentErrors = new ArrayList<String> ();;
+ private Date todaysDate = new Date();
+ private SimpleDateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+ private final int minMilli = 60000;
+ private final int IN_TIME = 0;
+ private final int NOT_IN_TIME = 1;
+ private final int NO_DATE = 2;
+
+ public String parseErrorLog(String data){
+ singleLines = data.split("\\r?\\n");
+ try {
+ getNearestDates();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if(recentErrors.size() == 0){
+ recentErrors.clear();
+ return "Did not find the string 'Starting orchestration of file backed up to /var/opt/MetaSwitch/orch/orch_conf.json' in the log file with timestamp within the last 5 minutes";
+ }else if(recentErrors.size() == 1){
+ recentErrors.clear();
+ return "Did not find the string ‘Error parsing orchestration file’ in the log file with timestamp within the last 5 minutes";
+ }else{
+ String error = recentErrors.get(0);
+ recentErrors.clear();
+ return "Error: "+ error.substring(error.indexOf("Error parsing orchestration file:")+34);
+ }
+ }
+
+ public void getNearestDates() throws ParseException{
+ int result;
+ for( int i = singleLines.length-1; i >= 0 ; i--){
+ if(singleLines[i].contains("Starting orchestration of file backed up to") || singleLines[i].contains("Error parsing orchestration file:")){
+ result = checkDateTime(singleLines[i]);
+ if( result == IN_TIME)
+ recentErrors.add(singleLines[i]);
+ else if(result == NOT_IN_TIME){
+ return;
+ }
+ }
+ }
+ }
+
+ private int checkDateTime(String line){
+ Date newDate;
+ try {
+ newDate = dFormat.parse(line.substring(0, 19));
+ if((todaysDate.getTime() - newDate.getTime()) <= 5*minMilli){
+ return IN_TIME;
+ }else
+ return NOT_IN_TIME;
+ } catch (ParseException e) {
+ e.printStackTrace();
+ return NO_DATE;
+ }
+ }
+
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/MergeTool.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/MergeTool.java
new file mode 100644
index 000000000..0958deebb
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/tool/MergeTool.java
@@ -0,0 +1,109 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.tool;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.resource.loader.StringResourceLoader;
+import org.apache.velocity.runtime.resource.util.StringResourceRepository;
+import org.openecomp.sdnc.config.generator.ConfigGeneratorConstant;
+
+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.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+
+public class MergeTool {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(MergeTool.class);
+
+ public static String mergeMap2TemplateData(String template, Map< String, String> dataMap ){
+ log.info("MergeMap2TemplateData Template :"+ template + " Maps :"+ dataMap);
+ StringWriter writer = new StringWriter();
+ VelocityEngine ve = new VelocityEngine();
+ ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "string");
+ ve.addProperty("string.resource.loader.class", StringResourceLoader.class.getName());
+ ve.addProperty("string.resource.loader.repository.static", "false");
+ ve.init();
+
+ StringResourceRepository repo = (StringResourceRepository)ve.getApplicationAttribute(StringResourceLoader.REPOSITORY_NAME_DEFAULT);
+ repo.putStringResource("TemplateResource", template);
+
+ Template t = ve.getTemplate("TemplateResource");
+ VelocityContext context = new VelocityContext();
+ Iterator<Map.Entry<String, String>> entries = dataMap.entrySet().iterator();
+ while (entries.hasNext()) {
+ Map.Entry<String, String> entry = entries.next();
+ context.put(entry.getKey(), entry.getValue());
+ }
+ t.merge(context, writer);
+ return writer.toString();
+ }
+
+
+ public static String mergeJson2TemplateData(String template, String jsonData, String templateType, String doPrettyOutput) throws JsonParseException, JsonMappingException, IOException{
+ String mergedData = template;
+ if( StringUtils.isNotBlank(template) && StringUtils.isNotBlank(jsonData)){
+ Velocity.init();
+
+ ObjectMapper mapper = new ObjectMapper();
+ CustomJsonNodeFactory f = new CustomJsonNodeFactory();
+ mapper.setNodeFactory(f);
+
+ JsonNode jsonObj = mapper.readValue(jsonData, JsonNode.class);
+
+ VelocityContext context = new VelocityContext();
+ Iterator<String> ii = jsonObj.fieldNames();
+ while (ii.hasNext()) {
+ String key = ii.next();
+ context.put(key, jsonObj.get(key));
+ }
+
+ StringWriter writer = new StringWriter();
+ Velocity.evaluate(context, writer, "TemplateData", template);
+ writer.flush();
+ mergedData = writer.toString();
+
+ if(StringUtils.isNotBlank(templateType) && StringUtils.isNotBlank(doPrettyOutput)
+ && ConfigGeneratorConstant.Y.equalsIgnoreCase(doPrettyOutput)
+ && ( ConfigGeneratorConstant.DATA_TYPE_JSON.equalsIgnoreCase(templateType)
+ || ConfigGeneratorConstant.DATA_TYPE_XML.equalsIgnoreCase(templateType)) ){
+ // Perform Prettying
+
+ }
+ }
+ return mergedData;
+
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/transform/XSLTTransformerNode.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/transform/XSLTTransformerNode.java
new file mode 100644
index 000000000..bdcf37339
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/transform/XSLTTransformerNode.java
@@ -0,0 +1,96 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.transform;
+
+import java.io.File;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdnc.config.generator.ConfigGeneratorConstant;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+
+public class XSLTTransformerNode implements SvcLogicJavaPlugin {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(XSLTTransformerNode.class);
+
+ public void transformData(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.trace("Received convertJson2DGContext call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try {
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix + ".") : "";
+
+ String templateData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_DATA);
+
+ if (StringUtils.isNotBlank(templateData)) {
+ String templateFile = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_FILE);
+ if (StringUtils.isNotBlank(templateFile)) {
+ templateData = FileUtils.readFileToString(new File(templateFile), Charset.defaultCharset());
+ }
+ }
+ if (StringUtils.isBlank(templateData)) {
+ throw new Exception("In-param templateFile/templateData value is missing");
+ }
+
+ String requestData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_REQUEST_DATA);
+ if (StringUtils.isBlank(requestData)) {
+ throw new Exception("In-param requestData value is missing");
+ }
+
+ String transformedData = transform(requestData, templateData);
+ log.trace("Transformed Data : "+ transformedData);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_TRANSFORMED_DATA, transformedData);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ } catch (Exception e) {
+ e.printStackTrace();
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS,
+ ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+ log.error("Failed in XSLTTransformerNode : " + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+ public String transform(String requestData, String templateData)
+ throws TransformerConfigurationException, TransformerException {
+ StringWriter xmlResultResource = new StringWriter();
+ Transformer xmlTransformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(templateData)));
+ xmlTransformer.transform(new StreamSource(new StringReader(requestData)), new StreamResult(xmlResultResource));
+ return xmlResultResource.getBuffer().toString();
+ }
+
+}
diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/writer/FileWriterNode.java b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/writer/FileWriterNode.java
new file mode 100644
index 000000000..81202777c
--- /dev/null
+++ b/appc-config/appc-config-generator/provider/src/main/java/org/openecomp/sdnc/config/generator/writer/FileWriterNode.java
@@ -0,0 +1,70 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.generator.writer;
+
+import java.io.File;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdnc.config.generator.ConfigGeneratorConstant;
+
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+public class FileWriterNode implements SvcLogicJavaPlugin {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(FileWriterNode.class);
+
+
+
+ public void writeFile(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ log.info("Received writeFile call with params : " + inParams);
+ String responsePrefix = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESPONSE_PRIFIX);
+ try{
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ String fileName = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_FILE_NAME);
+ String fileContents = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_REQUEST_DATA);
+
+
+ File file = new File(fileName);
+ File filePath = file.getParentFile();
+ FileUtils.forceMkdir(filePath);
+
+ FileUtils.writeStringToFile(file, fileContents, ConfigGeneratorConstant.STRING_ENCODING);
+
+
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ } catch (Exception e) {
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS, ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(responsePrefix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+ log.error("Failed in writeFile " + e.getMessage());
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+
+
+}