+++ /dev/null
-/*\r
- * Copyright © 2017-2018 AT&T Intellectual Property.\r
- * Modifications Copyright © 2018 IBM.\r
- * \r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-package org.onap.ccsdk.features.assignment.service;\r
-\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import org.apache.commons.collections.CollectionUtils;\r
-import org.apache.commons.lang3.StringUtils;\r
-import org.onap.ccsdk.features.assignment.ConfigAssignmentConstants;\r
-import org.onap.ccsdk.features.assignment.data.ResourceAssignmentData;\r
-import org.onap.ccsdk.features.assignment.processor.ProcessorFactory;\r
-import org.onap.ccsdk.features.assignment.processor.ResourceAssignmentProcessor;\r
-import org.onap.ccsdk.features.data.adaptor.service.ConfigResourceService;\r
-import org.onap.ccsdk.features.generator.service.ConfigGeneratorService;\r
-import org.onap.ccsdk.features.model.ConfigModelConstant;\r
-import org.onap.ccsdk.features.model.data.ResourceAssignment;\r
-import org.onap.ccsdk.features.model.data.dict.ResourceDefinition;\r
-import org.onap.ccsdk.features.model.service.ComponentNode;\r
-import org.onap.ccsdk.features.model.service.ComponentNodeService;\r
-import org.onap.ccsdk.features.model.service.ConfigModelService;\r
-import org.onap.ccsdk.features.model.utils.ResourceAssignmentUtils;\r
-import org.onap.ccsdk.features.model.utils.TransformationUtils;\r
-import org.onap.ccsdk.features.rest.adaptor.service.ConfigRestAdaptorService;\r
-import org.onap.ccsdk.sli.core.sli.SvcLogicContext;\r
-import org.onap.ccsdk.sli.core.sli.SvcLogicException;\r
-import com.att.eelf.configuration.EELFLogger;\r
-import com.att.eelf.configuration.EELFManager;\r
-\r
-public class ConfigAssignmentProcessService {\r
-\r
- private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigAssignmentProcessService.class);\r
-\r
- private ComponentNodeService componentNodeService;\r
- private ConfigResourceService configResourceService;\r
- private ConfigModelService configModelService;\r
- private ConfigRestAdaptorService configRestAdaptorService;\r
- private ConfigGeneratorService configGeneratorService;\r
-\r
- public ConfigAssignmentProcessService(ConfigResourceService configResourceService,\r
- ConfigRestAdaptorService configRestAdaptorService, ConfigModelService configModelService,\r
- ComponentNodeService componentNodeService, ConfigGeneratorService configGeneratorService) {\r
- this.componentNodeService = componentNodeService;\r
- this.configResourceService = configResourceService;\r
- this.configModelService = configModelService;\r
- this.configRestAdaptorService = configRestAdaptorService;\r
- this.configGeneratorService = configGeneratorService;\r
- }\r
-\r
- @SuppressWarnings("squid:S1141")\r
- public void resolveResources(ResourceAssignmentData resourceAssignmentData) throws SvcLogicException {\r
- try {\r
- validateInputParams(resourceAssignmentData);\r
-\r
- String serviceTemplateName = resourceAssignmentData.getServiceTemplateName();\r
- String serviceTemplateVersion = resourceAssignmentData.getServiceTemplateVersion();\r
- String actionName = resourceAssignmentData.getActionName();\r
- String inputData = resourceAssignmentData.getInputData();\r
- SvcLogicContext svcLogicContext = resourceAssignmentData.getSvcLogicContext();\r
- List<String> templateNames = resourceAssignmentData.getTemplateNames();\r
-\r
- if (resourceAssignmentData.isReloadModel()) {\r
- Map<String, String> context = new HashMap<>();\r
- context.put(ConfigModelConstant.PROPERTY_ACTION_NAME, actionName);\r
- context = configModelService.prepareContext(context, inputData, serviceTemplateName,\r
- serviceTemplateVersion);\r
- context.forEach((key, value) -> svcLogicContext.setAttribute(key, value));\r
- logger.info("List of Resources provided in input: {}", svcLogicContext.toProperties());\r
- }\r
-\r
- Map<String, Object> componentContext = resourceAssignmentData.getContext();\r
-\r
- if (CollectionUtils.isNotEmpty(templateNames)) {\r
- // Get the Resource Assignments for templates and Validate the mappings\r
- ResourceModelService resourceModelService = new ResourceModelService(configModelService);\r
-\r
- // Get the Resource Assignment\r
- Map<String, List<ResourceAssignment>> templatesResourceAssignments =\r
- resourceModelService.getTemplatesResourceAssignments(svcLogicContext, templateNames);\r
-\r
- // Get the Template Contents\r
- Map<String, String> templatesContents =\r
- resourceModelService.getTemplatesContents(svcLogicContext, templateNames);\r
-\r
- // Process each template\r
- for (String templateName : templateNames) {\r
- List<ResourceAssignment> resourceAssignments = templatesResourceAssignments.get(templateName);\r
- String templateContent = templatesContents.get(templateName);\r
- if (resourceAssignments != null) {\r
- String templateData = null;\r
- try {\r
- // Populate the Dictionary\r
- ResourceDictionaryService resourceDictionaryService =\r
- new ResourceDictionaryService(configRestAdaptorService);\r
- Map<String, ResourceDefinition> dictionaries =\r
- resourceDictionaryService.getDataDictionaryDefinitions(resourceAssignments);\r
-\r
- processResourceAssignments(resourceAssignmentData, svcLogicContext, componentContext,\r
- templateName, resourceAssignments, dictionaries);\r
-\r
- logger.info("decrypting config data for templateName {}", templateName);\r
- templateData =\r
- ResourceAssignmentUtils.generateResourceDataForAssignments(resourceAssignments);\r
- } finally {\r
- saveResourceMapping(resourceAssignmentData, templateName, resourceAssignments);\r
- }\r
-\r
- logger.info("generating config preview for templateName {}", templateName);\r
- ConfigPreviewService configPreviewService = new ConfigPreviewService(configResourceService,\r
- configModelService, configGeneratorService);\r
- String mashedData = configPreviewService.generatePreview(templateContent, templateData);\r
- resourceAssignmentData.getTemplatesMashedContents().put(templateName, mashedData);\r
- resourceAssignmentData.getTemplatesData().put(templateName, templateData);\r
-\r
- } else {\r
- // Do nothing for Mapping not found\r
- logger.warn("No resource Assignment mappings to resolve for templateName {}", templateName);\r
- }\r
- }\r
- }\r
-\r
- } catch (Exception e) {\r
- throw new SvcLogicException(e.getMessage(), e);\r
- }\r
- }\r
-\r
- private void processResourceAssignments(ResourceAssignmentData resourceAssignmentData, SvcLogicContext ctx,\r
- Map<String, Object> componentContext, String templateName, List<ResourceAssignment> resourceAssignments,\r
- Map<String, ResourceDefinition> dictionaries) throws SvcLogicException {\r
-\r
- String recipeName = resourceAssignmentData.getActionName();\r
-\r
- ResourceAssignmentProcessor resourceAssignmentProcessor =\r
- new ResourceAssignmentProcessor(resourceAssignments, ctx);\r
- List<List<ResourceAssignment>> sequenceBatchResourceAssignment = resourceAssignmentProcessor.process();\r
-\r
- logger.debug("Resource dictionary Info ({})", dictionaries);\r
-\r
- if (sequenceBatchResourceAssignment != null) {\r
- componentContext.put(ConfigModelConstant.PROPERTY_ACTION_NAME, recipeName);\r
- componentContext.put(ConfigModelConstant.PROPERTY_TEMPLATE_NAME, templateName);\r
- componentContext.put(ConfigModelConstant.PROPERTY_DICTIONARIES, dictionaries);\r
- for (List<ResourceAssignment> batchResourceAssignment : sequenceBatchResourceAssignment) {\r
-\r
- processBatchResourceAssignments(resourceAssignmentData, ctx, componentContext, batchResourceAssignment);\r
-\r
- logger.debug("Batch Resource data status ({})", TransformationUtils.getJson(batchResourceAssignment));\r
- }\r
- }\r
- }\r
-\r
- private void processBatchResourceAssignments(ResourceAssignmentData resourceAssignmentData, SvcLogicContext ctx,\r
- Map<String, Object> componentContext, List<ResourceAssignment> batchResourceAssignment)\r
- throws SvcLogicException {\r
-\r
- if (CollectionUtils.isNotEmpty(batchResourceAssignment)) {\r
-\r
- ResourceAssignment batchFirstResourceAssignment = batchResourceAssignment.get(0);\r
- if (batchFirstResourceAssignment != null\r
- && StringUtils.isNotBlank(batchFirstResourceAssignment.getDictionarySource())) {\r
- String source = batchFirstResourceAssignment.getDictionarySource();\r
- // Processing their Source\r
- logger.info("Processing source ({}) with batch ({}) ", source, batchResourceAssignment);\r
- componentContext.put(ConfigModelConstant.PROPERTY_RESOURCE_ASSIGNMENTS, batchResourceAssignment);\r
-\r
- ProcessorFactory factory =\r
- new ProcessorFactory(configResourceService, configRestAdaptorService, componentNodeService);\r
-\r
- ComponentNode processor = factory.getInstance(source);\r
-\r
- Map<String, String> inParams = new HashMap<>();\r
- inParams.put(ConfigAssignmentConstants.INPUT_PARAM_REQUEST_ID, resourceAssignmentData.getRequestId());\r
- inParams.put(ConfigAssignmentConstants.INPUT_PARAM_RESOURCE_ID, resourceAssignmentData.getResourceId());\r
- inParams.put(ConfigAssignmentConstants.INPUT_PARAM_RESOURCE_TYPE,\r
- resourceAssignmentData.getResourceType());\r
- inParams.put(ConfigAssignmentConstants.INPUT_PARAM_ACTION_NAME, resourceAssignmentData.getActionName());\r
- inParams.put(ConfigAssignmentConstants.INPUT_PARAM_TEMPLATE_NAMES,\r
- resourceAssignmentData.getTemplateNames().toString());\r
- processor.process(inParams, ctx, componentContext);\r
- }\r
- }\r
- }\r
-\r
- private void saveResourceMapping(ResourceAssignmentData resourceAssignmentData, String templateName,\r
- List<ResourceAssignment> resourceAssignments) throws SvcLogicException {\r
- if (resourceAssignmentData != null && StringUtils.isNotBlank(templateName)) {\r
-\r
- ConfigAssignmentPersistService configAssignmentPersistService =\r
- new ConfigAssignmentPersistService(configResourceService);\r
- configAssignmentPersistService.saveResourceMapping(resourceAssignmentData, templateName,\r
- resourceAssignments);\r
- }\r
- }\r
-\r
- private void validateInputParams(ResourceAssignmentData resourceAssignmentData) throws SvcLogicException {\r
- if (resourceAssignmentData == null) {\r
- throw new SvcLogicException("Input parameters missing");\r
- }\r
-\r
- String requestId = resourceAssignmentData.getRequestId();\r
- if (StringUtils.isBlank(requestId)) {\r
- throw new SvcLogicException("Request id parameters missing");\r
- }\r
- String resourceId = resourceAssignmentData.getResourceId();\r
- if (StringUtils.isBlank(resourceId)) {\r
- throw new SvcLogicException("Resource id parameter is missing");\r
- }\r
- String resourceType = resourceAssignmentData.getResourceType();\r
- if (StringUtils.isBlank(resourceType)) {\r
- throw new SvcLogicException("Resource type parameter is missing");\r
- }\r
- String actionName = resourceAssignmentData.getActionName();\r
- if (StringUtils.isBlank(actionName)) {\r
- throw new SvcLogicException("Action name is parameter is missing");\r
- }\r
-\r
- List<String> templatesNames = resourceAssignmentData.getTemplateNames();\r
- if (CollectionUtils.isEmpty(templatesNames)) {\r
- throw new SvcLogicException("Template names parameter missing");\r
- }\r
- }\r
-\r
-}\r