summaryrefslogtreecommitdiffstats
path: root/blueprints-processor/plugin/generator-provider/src/main
diff options
context:
space:
mode:
authorSingal, Kapil (ks220y) <ks220y@att.com>2018-09-04 22:04:48 -0400
committerSingal, Kapil (ks220y) <ks220y@att.com>2018-09-04 22:04:48 -0400
commitc09c0fa4ef4c1cd7e7e28a12c9469b783b75d4d8 (patch)
tree224b50684ace3785d9da69f710706c3d810d0450 /blueprints-processor/plugin/generator-provider/src/main
parentd280b356afc2595ab9d5492bb5ae55b9553b218f (diff)
SDNC Blueprints Content Generation Service
Creating SDNC Blueprints Content Generation Service to mash data into Velocity Templates Change-Id: I0b5100f1dd242b9d70df7f919c2a7e4105364eed Issue-ID: CCSDK-504 Signed-off-by: Singal, Kapil (ks220y) <ks220y@att.com>
Diffstat (limited to 'blueprints-processor/plugin/generator-provider/src/main')
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/ConfigGeneratorConstant.java49
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/data/ConfigGeneratorInfo.java102
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorNode.java140
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorService.java33
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorServiceImpl.java143
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/CustomJsonNodeFactory.java30
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/CustomTextNode.java42
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/EscapeUtils.java82
-rw-r--r--blueprints-processor/plugin/generator-provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml49
9 files changed, 670 insertions, 0 deletions
diff --git a/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/ConfigGeneratorConstant.java b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/ConfigGeneratorConstant.java
new file mode 100644
index 000000000..b859b69cd
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/ConfigGeneratorConstant.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.config.generator;
+
+public class ConfigGeneratorConstant {
+
+ private ConfigGeneratorConstant() {
+
+ }
+
+ public static final String STRING_ENCODING = "utf-8";
+ public static final String Y = "Y";
+ public static final String N = "N";
+ public static final String DATA_TYPE_TEXT = "TEXT";
+ public static final String DATA_TYPE_JSON = "JSON";
+ public static final String DATA_TYPE_XML = "XML";
+ public static final String DATA_TYPE_SQL = "SQL";
+
+ public static final String INPUT_PARAM_REQUEST_ID = "request-id";
+ public static final String INPUT_PARAM_RESOURCE_ID = "resource-id";
+ public static final String INPUT_PARAM_RESOURCE_TYPE = "resource-type";
+ public static final String INPUT_PARAM_ACTION_NAME = "action-name";
+ public static final String INPUT_PARAM_TEMPLATE_NAME = "template-name";
+ public static final String INPUT_PARAM_TEMPLATE_CONTENT = "template-content";
+ public static final String INPUT_PARAM_TEMPLATE_DATA = "template-data";
+
+ public static final String OUTPUT_PARAM_GENERATED_CONFIG = "generated-config";
+ public static final String OUTPUT_PARAM_MASK_INFO = "mask-info";
+ public static final String OUTPUT_PARAM_STATUS = "status";
+ public static final String OUTPUT_PARAM_ERROR_MESSAGE = "error-message";
+ public static final String OUTPUT_STATUS_SUCCESS = "success";
+ public static final String OUTPUT_STATUS_FAILURE = "failure";
+
+}
diff --git a/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/data/ConfigGeneratorInfo.java b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/data/ConfigGeneratorInfo.java
new file mode 100644
index 000000000..ec461549a
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/data/ConfigGeneratorInfo.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.config.generator.data;
+
+public class ConfigGeneratorInfo {
+
+ private String requestId;
+ private String resourceId;
+ private String resourceType;
+ private String templateName;
+ private String recipeName;
+ private String resourceData;
+ private String templateContent;
+ private String mashedData;
+
+ public String getRequestId() {
+ return requestId;
+ }
+
+ public void setRequestId(String requestId) {
+ this.requestId = requestId;
+ }
+
+ public String getResourceId() {
+ return resourceId;
+ }
+
+ public void setResourceId(String resourceId) {
+ this.resourceId = resourceId;
+ }
+
+ public String getResourceType() {
+ return resourceType;
+ }
+
+ public void setResourceType(String resourceType) {
+ this.resourceType = resourceType;
+ }
+
+ public String getTemplateName() {
+ return templateName;
+ }
+
+ public void setTemplateName(String templateName) {
+ this.templateName = templateName;
+ }
+
+ public String getRecipeName() {
+ return recipeName;
+ }
+
+ public void setRecipeName(String recipeName) {
+ this.recipeName = recipeName;
+ }
+
+ public String getResourceData() {
+ return resourceData;
+ }
+
+ public void setResourceData(String resourceData) {
+ this.resourceData = resourceData;
+ }
+
+ public String getTemplateContent() {
+ return templateContent;
+ }
+
+ public void setTemplateContent(String templateContent) {
+ this.templateContent = templateContent;
+ }
+
+ public String getMashedData() {
+ return mashedData;
+ }
+
+ public void setMashedData(String mashedData) {
+ this.mashedData = mashedData;
+ }
+
+ @Override
+ public String toString() {
+ return "ConfigGeneratorInfo [requestId=" + requestId + ", resourceId=" + resourceId + ", resourceType="
+ + resourceType + ", templateName=" + templateName + ", recipeName=" + recipeName + ", resourceData="
+ + resourceData + ", templateContent=" + templateContent + ", mashedData=" + mashedData + "]";
+ }
+
+}
diff --git a/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorNode.java b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorNode.java
new file mode 100644
index 000000000..136ba7f25
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorNode.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.config.generator.service;
+
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+import org.onap.ccsdk.config.data.adaptor.service.ConfigResourceService;
+import org.onap.ccsdk.config.generator.ConfigGeneratorConstant;
+import org.onap.ccsdk.config.generator.data.ConfigGeneratorInfo;
+import org.onap.ccsdk.config.model.ConfigModelConstant;
+import org.onap.ccsdk.config.model.service.ComponentNode;
+import org.onap.ccsdk.config.model.service.ConfigModelService;
+import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class ConfigGeneratorNode implements ComponentNode {
+
+ private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigGeneratorNode.class);
+
+ private ConfigModelService configModelService;
+ private ConfigResourceService configResourceService;
+ private ConfigGeneratorService configGeneratorService;
+
+ public ConfigGeneratorNode(ConfigResourceService configResourceService, ConfigModelService configModelService) {
+ this.configResourceService = configResourceService;
+ this.configModelService = configModelService;
+ this.configGeneratorService = new ConfigGeneratorServiceImpl(this.configResourceService);
+ }
+
+ @Override
+ public Boolean preCondition(Map<String, String> inParams, SvcLogicContext ctx, Map<String, Object> componentContext)
+ throws SvcLogicException {
+ logger.trace("Received generateConfiguration preCondition call with params : ({})", inParams);
+ return Boolean.TRUE;
+ }
+
+ @Override
+ public void preProcess(Map<String, String> inParams, SvcLogicContext ctx, Map<String, Object> componentContext)
+ throws SvcLogicException {
+ logger.trace("Received generateConfiguration preProcess call with params : ({})", inParams);
+ }
+
+ @Override
+ public void process(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+ logger.trace("Received generateConfiguration process call with params : ({})", inParams);
+ }
+
+ @SuppressWarnings("squid:S3776")
+ @Override
+ public void process(Map<String, String> inParams, SvcLogicContext ctx, Map<String, Object> componentContext)
+ throws SvcLogicException {
+ logger.trace("Received generateConfiguration process with params : ({})", inParams);
+ String prifix = inParams.get(ConfigModelConstant.PROPERTY_SELECTOR);
+ try {
+ prifix = StringUtils.isNotBlank(prifix) ? (prifix + ".") : "";
+
+ String templateContent = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_CONTENT);
+ String templateData = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_DATA);
+ String requestId = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_REQUEST_ID);
+ String resourceId = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESOURCE_ID);
+ String resourceType = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_RESOURCE_TYPE);
+ String recipeName = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_ACTION_NAME);
+ String templateName = inParams.get(ConfigGeneratorConstant.INPUT_PARAM_TEMPLATE_NAME);
+
+ ConfigGeneratorInfo configGeneratorInfo = null;
+ if (StringUtils.isNotBlank(templateContent) && StringUtils.isNotBlank(templateData)) {
+ configGeneratorInfo = this.configGeneratorService.generateConfiguration(templateContent, templateData);
+ } else {
+ if (StringUtils.isBlank(requestId)) {
+ throw new SvcLogicException("Config Generator Request Id is missing.");
+ }
+ if (StringUtils.isBlank(resourceId)) {
+ throw new SvcLogicException("Config Generator Resource Id is missing.");
+ }
+ if (StringUtils.isBlank(resourceType)) {
+ throw new SvcLogicException("Config Generator Resource Type is missing.");
+ }
+ if (StringUtils.isBlank(recipeName)) {
+ throw new SvcLogicException("Config Generator Action Name is missing.");
+ }
+ if (StringUtils.isBlank(templateName)) {
+ throw new SvcLogicException("Config Generator Template Name Id is missing.");
+ }
+
+ templateContent = configModelService.getNodeTemplateContent(ctx, templateName);
+
+ if (StringUtils.isBlank(templateContent)) {
+ throw new SvcLogicException(
+ "Failed to get the Template Content for the Temaple Name :" + templateName);
+ }
+
+ configGeneratorInfo = new ConfigGeneratorInfo();
+ configGeneratorInfo.setRequestId(requestId);
+ configGeneratorInfo.setResourceId(resourceId);
+ configGeneratorInfo.setResourceType(resourceType);
+ configGeneratorInfo.setRecipeName(recipeName);
+ configGeneratorInfo.setTemplateName(templateName);
+ configGeneratorInfo.setTemplateContent(templateContent);
+
+ this.configGeneratorService.generateConfiguration(configGeneratorInfo);
+ }
+ if (configGeneratorInfo != null) {
+ ctx.setAttribute(prifix + ConfigGeneratorConstant.OUTPUT_PARAM_GENERATED_CONFIG,
+ configGeneratorInfo.getMashedData());
+ }
+ ctx.setAttribute(prifix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS,
+ ConfigGeneratorConstant.OUTPUT_STATUS_SUCCESS);
+ } catch (Exception e) {
+ ctx.setAttribute(prifix + ConfigGeneratorConstant.OUTPUT_PARAM_STATUS,
+ ConfigGeneratorConstant.OUTPUT_STATUS_FAILURE);
+ ctx.setAttribute(prifix + ConfigGeneratorConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+ logger.error("Failed in generateConfiguration ({})", e);
+ throw new SvcLogicException(e.getMessage());
+ }
+ }
+
+ @Override
+ public void postProcess(Map<String, String> inParams, SvcLogicContext ctx, Map<String, Object> componentContext)
+ throws SvcLogicException {
+ logger.info("Received generateConfiguration postProcess with params : ({})", inParams);
+ }
+
+}
diff --git a/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorService.java b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorService.java
new file mode 100644
index 000000000..710d47d25
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorService.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.config.generator.service;
+
+import org.onap.ccsdk.config.generator.data.ConfigGeneratorInfo;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+
+public interface ConfigGeneratorService {
+
+ public ConfigGeneratorInfo generateConfiguration(String templateContent, String templateData)
+ throws SvcLogicException;
+
+ public ConfigGeneratorInfo generateConfiguration(String templateContent, String templateData, boolean ignoreNull)
+ throws SvcLogicException;
+
+ public ConfigGeneratorInfo generateConfiguration(ConfigGeneratorInfo configGeneratorInfo) throws SvcLogicException;
+
+}
diff --git a/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorServiceImpl.java b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorServiceImpl.java
new file mode 100644
index 000000000..472f5b291
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/service/ConfigGeneratorServiceImpl.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.config.generator.service;
+
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.onap.ccsdk.config.data.adaptor.domain.ConfigResource;
+import org.onap.ccsdk.config.data.adaptor.service.ConfigResourceService;
+import org.onap.ccsdk.config.generator.data.ConfigGeneratorInfo;
+import org.onap.ccsdk.config.generator.tool.CustomJsonNodeFactory;
+import org.onap.ccsdk.config.model.utils.TransformationUtils;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+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 ConfigGeneratorServiceImpl implements ConfigGeneratorService {
+
+ private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigGeneratorServiceImpl.class);
+ private static final String CLASS_NAME = "ConfigGeneratorServiceImpl";
+
+ private ConfigResourceService configResourceService;
+
+ public ConfigGeneratorServiceImpl(ConfigResourceService configResourceService) {
+ logger.info("{} Constuctor Initated...", CLASS_NAME);
+ this.configResourceService = configResourceService;
+ }
+
+ @Override
+ public ConfigGeneratorInfo generateConfiguration(ConfigGeneratorInfo configGeneratorInfo) throws SvcLogicException {
+
+ if (configGeneratorInfo != null && StringUtils.isNotBlank(configGeneratorInfo.getResourceId())
+ && StringUtils.isNotBlank(configGeneratorInfo.getResourceType())
+ && StringUtils.isNotBlank(configGeneratorInfo.getRecipeName())
+ && StringUtils.isNotBlank(configGeneratorInfo.getTemplateName())
+ && StringUtils.isNotBlank(configGeneratorInfo.getTemplateContent())) {
+
+ ConfigResource configResourceQuery = new ConfigResource();
+ configResourceQuery.setResourceId(configGeneratorInfo.getResourceId());
+ configResourceQuery.setResourceType(configGeneratorInfo.getResourceType());
+ configResourceQuery.setTemplateName(configGeneratorInfo.getTemplateName());
+
+ List<ConfigResource> configResourceList = configResourceService.getConfigResource(configResourceQuery);
+
+ if (CollectionUtils.isEmpty(configResourceList)) {
+ throw new SvcLogicException("No Config Resource found");
+ } else if (configResourceList.size() > 1) {
+ throw new SvcLogicException("More than one Config Resource found for specified parameter for"
+ + " resourceId " + configGeneratorInfo.getResourceId() + ", resourceType "
+ + configGeneratorInfo.getResourceType() + ", recipeName " + configGeneratorInfo.getRecipeName()
+ + ", templateName " + configGeneratorInfo.getTemplateName());
+ }
+
+ ConfigResource configResource = configResourceList.get(0);
+
+ if (configResource != null && StringUtils.isNotBlank(configResource.getResourceData())) {
+ configGeneratorInfo.setResourceData(configResource.getResourceData());
+ logger.debug("Retrieve ConfigResource Data : ({})", configResource.getResourceData());
+ ConfigGeneratorInfo generatorInfo = generateConfiguration(configGeneratorInfo.getTemplateContent(),
+ configResource.getResourceData());
+ if (generatorInfo != null) {
+ configGeneratorInfo.setMashedData(generatorInfo.getMashedData());
+ }
+ } else {
+ throw new SvcLogicException(
+ "Failed to get the Resource Data for the Resource Id :" + configGeneratorInfo.getResourceId()
+ + " of template :" + configGeneratorInfo.getTemplateName());
+ }
+ }
+ return configGeneratorInfo;
+ }
+
+ @Override
+ public ConfigGeneratorInfo generateConfiguration(String templateContent, String templateData)
+ throws SvcLogicException {
+ return generateConfiguration(templateContent, templateData, true);
+ }
+
+ @Override
+ public ConfigGeneratorInfo generateConfiguration(String templateContent, String templateData, boolean ignoreNull)
+ throws SvcLogicException {
+ ConfigGeneratorInfo configGeneratorInfo = null;
+ try {
+ if (StringUtils.isNotBlank(templateContent) && StringUtils.isNotBlank(templateData)) {
+ configGeneratorInfo = new ConfigGeneratorInfo();
+
+ Velocity.init();
+
+ ObjectMapper mapper = new ObjectMapper();
+ CustomJsonNodeFactory f = new CustomJsonNodeFactory();
+ mapper.setNodeFactory(f);
+
+ JsonNode jsonObj = mapper.readValue(templateData, JsonNode.class);
+ if (ignoreNull) {
+ TransformationUtils.removeJsonNullNode(jsonObj);
+ }
+
+ VelocityContext context = new VelocityContext();
+ context.put("StringUtils", org.apache.commons.lang3.StringUtils.class);
+ context.put("BooleanUtils", org.apache.commons.lang3.BooleanUtils.class);
+
+ Iterator<String> ii = jsonObj.fieldNames();
+ while (ii.hasNext()) {
+ String key = ii.next();
+ JsonNode node = jsonObj.get(key);
+ logger.info("Adding key ({}) with value ({})", key, node);
+ context.put(key, node);
+ }
+
+ StringWriter writer = new StringWriter();
+ Velocity.evaluate(context, writer, "TemplateData", templateContent);
+ writer.flush();
+ configGeneratorInfo.setMashedData(writer.toString());
+ }
+ } catch (Exception e) {
+ logger.error("Failed to generate Configuration ({})", e.getMessage());
+ throw new SvcLogicException(e.getMessage(), e);
+ }
+ return configGeneratorInfo;
+ }
+
+}
diff --git a/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/CustomJsonNodeFactory.java b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/CustomJsonNodeFactory.java
new file mode 100644
index 000000000..3e69ef355
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/CustomJsonNodeFactory.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.config.generator.tool;
+
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.TextNode;
+
+public class CustomJsonNodeFactory extends JsonNodeFactory {
+
+ @Override
+ public TextNode textNode(String text) {
+ return new CustomTextNode(text);
+ }
+
+}
diff --git a/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/CustomTextNode.java b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/CustomTextNode.java
new file mode 100644
index 000000000..cf42c552b
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/CustomTextNode.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.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) {
+ CharTypes.appendQuoted(sb, content);
+ }
+
+}
diff --git a/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/EscapeUtils.java b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/EscapeUtils.java
new file mode 100644
index 000000000..3009f87f9
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/java/org/onap/ccsdk/config/generator/tool/EscapeUtils.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Modifications Copyright © 2018 IBM.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.config.generator.tool;
+
+import org.apache.commons.lang3.StringUtils;
+
+@SuppressWarnings("squid:S1118")
+public class EscapeUtils {
+
+ 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 escapeSequence(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;
+ default:
+ // do nothing
+ }
+ }
+ if (length == newLength) {
+ // nothing to escape in the string
+ return s;
+ }
+ StringBuilder sb = new StringBuilder(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/blueprints-processor/plugin/generator-provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/blueprints-processor/plugin/generator-provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 000000000..7bf65fa4e
--- /dev/null
+++ b/blueprints-processor/plugin/generator-provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright © 2017-2018 AT&T Intellectual Property.
+ Modifications Copyright © 2018 IBM.
+
+ 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.
+-->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+ xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+ odl:use-default-for-reference-types="true">
+
+ <reference id="configModelService"
+ interface="org.onap.ccsdk.config.model.service.ConfigModelService" />
+
+ <reference id="configResourceService"
+ interface="org.onap.ccsdk.config.data.adaptor.service.ConfigResourceService" />
+
+ <!-- Expose the Common Component Bean -->
+
+ <bean id="configGeneratorService"
+ class="org.onap.ccsdk.config.generator.service.ConfigGeneratorServiceImpl">
+ <argument ref="configResourceService" />
+ </bean>
+
+ <service ref="configGeneratorService"
+ interface="org.onap.ccsdk.config.generator.service.ConfigGeneratorService" />
+
+ <bean id="configGeneratorNode"
+ class="org.onap.ccsdk.config.generator.service.ConfigGeneratorNode">
+ <argument ref="configResourceService" />
+ <argument ref="configModelService" />
+ </bean>
+
+ <service ref="configGeneratorNode"
+ interface="org.onap.ccsdk.config.generator.service.ConfigGeneratorNode" />
+
+
+</blueprint>