X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Faai%2Fbabel%2Fparser%2FArtifactGeneratorToscaParser.java;h=6e375876b3f46db334fcd0bef4a4726a23110f63;hb=5a6fd49a6aca3a567464527335b107746e28f3bd;hp=50c6edf0ab61821c53fef7b61181fabd5204edbe;hpb=fc779f51a624bfddc68328bf3fd3c74594ef31f6;p=aai%2Fbabel.git diff --git a/src/main/java/org/onap/aai/babel/parser/ArtifactGeneratorToscaParser.java b/src/main/java/org/onap/aai/babel/parser/ArtifactGeneratorToscaParser.java index 50c6edf..6e37587 100644 --- a/src/main/java/org/onap/aai/babel/parser/ArtifactGeneratorToscaParser.java +++ b/src/main/java/org/onap/aai/babel/parser/ArtifactGeneratorToscaParser.java @@ -2,8 +2,8 @@ * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ - * Copyright © 2017-2019 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017-2019 European Software Marketing Ltd. + * Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved. + * Copyright (c) 2017-2019 European Software Marketing Ltd. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,10 +22,10 @@ package org.onap.aai.babel.parser; import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; @@ -37,12 +37,14 @@ import java.util.Properties; import java.util.stream.Collectors; import java.util.stream.Stream; import org.onap.aai.babel.logging.LogHelper; +import org.onap.aai.babel.xml.generator.XmlArtifactGenerationException; import org.onap.aai.babel.xml.generator.data.GroupConfiguration; import org.onap.aai.babel.xml.generator.data.WidgetConfigurationUtil; import org.onap.aai.babel.xml.generator.model.Model; import org.onap.aai.babel.xml.generator.model.Resource; import org.onap.aai.babel.xml.generator.model.Widget; import org.onap.aai.babel.xml.generator.model.Widget.Type; +import org.onap.aai.babel.xml.generator.types.ModelType; import org.onap.aai.cl.api.Logger; import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; import org.onap.sdc.toscaparser.api.Group; @@ -92,27 +94,10 @@ public class ArtifactGeneratorToscaParser { } /** - * Get or create the artifact description. - * - * @param model - * the artifact model - * @return the artifact model's description - */ - public static String getArtifactDescription(Model model) { - switch (model.getModelType()) { - case SERVICE: - return "AAI Service Model"; - case RESOURCE: - return "AAI Resource Model"; - default: - return model.getModelDescription(); - } - } - - /** - * Initialises the widget configuration. - * + * Initializes the Widget to UUID mapping configuration. + * * @throws IOException + * if an error occurs reading the configuration properties */ public static void initWidgetConfiguration() throws IOException { log.debug("Getting Widget Configuration"); @@ -133,26 +118,35 @@ public class ArtifactGeneratorToscaParser { } /** - * Initialises the group filtering and TOSCA mapping configuration. + * Initializes the group filtering and TOSCA to Widget mapping configuration. * * @param configLocation - * the pathname to the JSON config file - * @throws FileNotFoundException - * if the file cannot be opened for reading + * the pathname to the JSON mappings file + * @throws IOException + * if the file content could not be read successfully */ - public static void initToscaMappingsConfiguration(String configLocation) throws FileNotFoundException { + public static void initToscaMappingsConfiguration(String configLocation) throws IOException { log.debug("Getting TOSCA Mappings Configuration"); File file = new File(configLocation); if (!file.exists()) { throw new IllegalArgumentException(String.format(GENERATOR_AAI_CONFIGFILE_NOT_FOUND, configLocation)); } - BufferedReader bufferedReader = new BufferedReader(new FileReader(configLocation)); - GroupConfiguration config = new Gson().fromJson(bufferedReader, GroupConfiguration.class); - if (config != null) { - WidgetConfigurationUtil.setSupportedInstanceGroups(config.getInstanceGroupTypes()); - WidgetConfigurationUtil.setWidgetMappings(config.getWidgetMappings()); + GroupConfiguration config; + + try (BufferedReader bufferedReader = new BufferedReader(new FileReader(configLocation))) { + config = new Gson().fromJson(bufferedReader, GroupConfiguration.class); + } catch (JsonSyntaxException e) { + throw new IOException("Invalid Mappings Configuration " + configLocation, e); + } + + if (config == null) { + throw new IOException("There is no content for the Mappings Configuration " + configLocation); } + + WidgetConfigurationUtil.setSupportedInstanceGroups(config.getInstanceGroupTypes()); + WidgetConfigurationUtil.setWidgetTypes(config.getWidgetTypes()); + WidgetConfigurationUtil.setWidgetMappings(config.getWidgetMappings()); } /** @@ -161,8 +155,11 @@ public class ArtifactGeneratorToscaParser { * @param resourceModel * @param serviceNodeTemplate * @return resources for which XML Models should be generated + * @throws XmlArtifactGenerationException + * if there is no configuration defined for a member Widget of an instance group */ - public List processInstanceGroups(Model resourceModel, NodeTemplate serviceNodeTemplate) { + public List processInstanceGroups(Model resourceModel, NodeTemplate serviceNodeTemplate) + throws XmlArtifactGenerationException { List resources = new ArrayList<>(); if (serviceNodeTemplate.getSubMappingToscaTemplate() != null) { List serviceGroups = csarHelper.getGroupsOfOriginOfNodeTemplate(serviceNodeTemplate); @@ -200,11 +197,16 @@ public class ArtifactGeneratorToscaParser { } /** + * Add the resource/widget to the specified model. + * * @param model * @param relation + * resource or widget model to add + * @throws XmlArtifactGenerationException + * if the relation is a widget and there is no configuration defined for the relation's widget type */ - public void addRelatedModel(final Model model, final Resource relation) { - if (relation.isResource()) { + public void addRelatedModel(final Model model, final Resource relation) throws XmlArtifactGenerationException { + if (relation.getModelType() == ModelType.RESOURCE) { model.addResource(relation); } else { model.addWidget(Widget.getWidget(relation.getWidgetType())); @@ -225,8 +227,10 @@ public class ArtifactGeneratorToscaParser { * @param resources * @param model * @param serviceNode + * @throws XmlArtifactGenerationException */ - public void processVfModules(List resources, Model resourceModel, NodeTemplate serviceNode) { + public void processVfModules(List resources, Model resourceModel, NodeTemplate serviceNode) + throws XmlArtifactGenerationException { // Get the customisation UUID for each VF node and use it to get its Groups String uuid = csarHelper.getNodeTemplateCustomizationUuid(serviceNode); List serviceGroups = csarHelper.getVfModulesByVf(uuid); @@ -253,13 +257,12 @@ public class ArtifactGeneratorToscaParser { String metaDataType = Optional.ofNullable(metadata).map(m -> m.getValue("type")).orElse(nodeTypeName); Resource model = Model.getModelFor(nodeTypeName, metaDataType); - if (metadata != null && hasAllottedResource(metadata.getAllProperties())) { - if (model.getWidgetType() == Type.VSERVER) { - model = new Resource(Type.ALLOTTED_RESOURCE, false); - Map props = new HashMap<>(); - props.put("providingService", true); - model.setProperties(props); - } + if (metadata != null && hasAllottedResource(metadata.getAllProperties()) + && model.getWidgetType() == Type.VSERVER) { + model = new Resource(Type.ALLOTTED_RESOURCE, false); + Map props = new HashMap<>(); + props.put("providingService", true); + model.setProperties(props); } foundProvidingService |= processModel(resourceModel, metadata, model, resourceNodeTemplate.getProperties()); @@ -284,9 +287,12 @@ public class ArtifactGeneratorToscaParser { * @param properties * the properties of the Group * @return the Instance Group and Member resource models + * @throws XmlArtifactGenerationException + * if there is no configuration defined for one of the member Widgets */ private List processInstanceGroup(Model resourceModel, ArrayList memberNodes, - Map metaProperties, Map properties) { + Map metaProperties, Map properties) + throws XmlArtifactGenerationException { Resource groupModel = createInstanceGroupModel(mergeProperties(metaProperties, properties)); resourceModel.addResource(groupModel); List resources = Stream.of(groupModel).collect(Collectors.toList()); @@ -301,10 +307,13 @@ public class ArtifactGeneratorToscaParser { /** * @param memberNodes * @param groupModel - * @return + * @return a list of Resources + * @throws XmlArtifactGenerationException + * if a member node template is a widget and there is no configuration defined for that relation's + * widget type */ private List generateResourcesAndWidgets(final ArrayList memberNodes, - final Resource groupModel) { + final Resource groupModel) throws XmlArtifactGenerationException { log.debug(String.format("Processing member nodes for Group %s (invariant UUID %s)", // groupModel.getModelName(), groupModel.getModelId())); @@ -324,7 +333,7 @@ public class ArtifactGeneratorToscaParser { memberModel.getClass().getSuperclass().getSimpleName(), memberModel.getClass(), nodeTypeName)); addRelatedModel(groupModel, memberModel); - if (memberModel.isResource()) { + if (memberModel.getModelType() == ModelType.RESOURCE) { resources.add(memberModel); } } @@ -333,7 +342,7 @@ public class ArtifactGeneratorToscaParser { } private void processVfModule(List resources, Model vfModel, Group groupDefinition, - NodeTemplate serviceNode, Resource groupModel) { + NodeTemplate serviceNode, Resource groupModel) throws XmlArtifactGenerationException { groupModel.populateModelIdentificationInformation( mergeProperties(groupDefinition.getMetadata().getAllProperties(), groupDefinition.getProperties())); @@ -346,7 +355,8 @@ public class ArtifactGeneratorToscaParser { } } - private void processVfModuleGroup(Resource groupModel, List members) { + private void processVfModuleGroup(Resource groupModel, List members) + throws XmlArtifactGenerationException { if (members != null && !members.isEmpty()) { // Get names of the members of the service group List memberNames = members.stream().map(NodeTemplate::getName).collect(Collectors.toList()); @@ -362,18 +372,19 @@ public class ArtifactGeneratorToscaParser { * * @param group * @param member + * @throws XmlArtifactGenerationException */ - private void processGroupMembers(Resource group, NodeTemplate member) { + private void processGroupMembers(Resource group, NodeTemplate member) throws XmlArtifactGenerationException { Resource resource = Model.getModelFor(member.getType()); log.debug(member.getType() + " mapped to " + resource); if (resource.getWidgetType() == Type.L3_NET) { // An l3-network inside a vf-module is treated as a Widget - resource.setIsResource(false); + resource.setModelType(ModelType.WIDGET); } - if (!resource.isResource()) { + if (resource.getModelType() == ModelType.WIDGET) { Widget widget = Widget.getWidget(resource.getWidgetType()); widget.addKey(member.getName()); // Add the widget element encountered to the Group model @@ -414,7 +425,7 @@ public class ArtifactGeneratorToscaParser { if (foundProvidingService) { processProvidingService(resourceModel, resourceNode, nodeProperties); - } else if (resourceNode != null && resourceNode.isResource() + } else if (resourceNode != null && resourceNode.getModelType() == ModelType.RESOURCE && resourceNode.getWidgetType() != Widget.Type.L3_NET) { if (metaData != null) { resourceNode.populateModelIdentificationInformation(metaData.getAllProperties());