2 * Copyright 2016 [ZTE] and others.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.openo.commontosca.catalog.model.parser.yaml.aria;
19 import java.util.ArrayList;
20 import java.util.HashMap;
21 import java.util.List;
23 import java.util.Map.Entry;
25 import org.openo.commontosca.catalog.common.ToolUtil;
26 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
27 import org.openo.commontosca.catalog.db.resource.TemplateManager;
28 import org.openo.commontosca.catalog.entity.response.CsarFileUriResponse;
29 import org.openo.commontosca.catalog.model.common.TemplateDataHelper;
30 import org.openo.commontosca.catalog.model.entity.EnumDataType;
31 import org.openo.commontosca.catalog.model.entity.InputParameter;
32 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
33 import org.openo.commontosca.catalog.model.entity.OutputParameter;
34 import org.openo.commontosca.catalog.model.entity.RelationShip;
35 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;
36 import org.openo.commontosca.catalog.model.entity.SubstitutionMapping;
37 import org.openo.commontosca.catalog.model.parser.AbstractModelParser;
38 import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult;
39 import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Input;
40 import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Node;
41 import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Node.Relationship;
42 import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Output;
43 import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Substitution.Mapping;
44 import org.openo.commontosca.catalog.model.parser.yaml.aria.service.AriaParserServiceConsumer;
50 public class AriaModelParser extends AbstractModelParser {
53 * @see org.openo.commontosca.catalog.model.parser.AbstractModelParser#parse(java.lang.String, java.lang.String)
56 public String parse(String packageId, String fileLocation) throws CatalogResourceException {
57 AriaParserResult result = getAriaParserResult(fileLocation);
60 CsarFileUriResponse stDownloadUri = buildServiceTemplateDownloadUri(packageId, fileLocation);
61 ServiceTemplate st = parseServiceTemplate(result, packageId, stDownloadUri.getDownloadUri());
63 List<NodeTemplate> ntList = parseNodeTemplates(packageId, st.getServiceTemplateId(), result);
64 st.setType(getTemplateType(getSubstitutionType(result), ntList).toString());
66 TemplateManager.getInstance().addServiceTemplate(
67 TemplateDataHelper.convert2TemplateData(st, ToolUtil.toJson(result), ntList));
70 SubstitutionMapping stm = parseSubstitutionMapping(st.getServiceTemplateId(), result);
72 TemplateManager.getInstance()
73 .addServiceTemplateMapping(TemplateDataHelper.convert2TemplateMappingData(stm));
76 return st.getServiceTemplateId();
81 * @param serviceTemplateId
85 private SubstitutionMapping parseSubstitutionMapping(String serviceTemplateId,
86 AriaParserResult result) {
87 String type = getSubstitutionType(result);
88 if (ToolUtil.isTrimedEmptyString(type)) {
92 org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Substitution stm =
93 result.getSubstitution();
94 return new SubstitutionMapping(
97 parseSubstitutionRequirements(stm.getRequirement()),
98 parseSubstitutionCapabilities(stm.getCapabilities()));
103 * @param capabilities
106 private Map<String, String[]> parseSubstitutionCapabilities(Mapping[] capabilities) {
107 return parseMappings(capabilities);
111 private Map<String, String[]> parseMappings(Mapping[] mappings) {
112 Map<String, String[]> ret = new HashMap<>();
113 if (mappings != null) {
114 for (Mapping mapping : mappings) {
115 ret.put(mapping.getMapped_name(), new String[]{mapping.getNode_id(), mapping.getName()});
126 private Map<String, String[]> parseSubstitutionRequirements(Mapping[] requirement) {
127 return parseMappings(requirement);
134 private String getSubstitutionType(AriaParserResult result) {
135 if (result.getSubstitution() == null) {
138 return result.getSubstitution().getNode_type_name();
144 * @param serviceTemplateId
148 private List<NodeTemplate> parseNodeTemplates(String packageId, String serviceTemplateId,
149 AriaParserResult result) {
150 Node[] nodes = result.getNodes();
151 if (nodes == null || nodes.length == 0) {
155 List<NodeTemplate> retList = new ArrayList<>();
156 for (Node node : nodes) {
157 NodeTemplate ret = new NodeTemplate();
158 ret.setId(node.getName());
159 ret.setName(node.getName());
160 ret.setType(node.getType_name());
161 ret.setProperties(node.getPropertyAssignments());
162 List<RelationShip> relationShipList =
163 parseNodeTemplateRelationShip(node.getRelationships(), node);
164 ret.setRelationShips(relationShipList);
174 * @param relationships
178 private List<RelationShip> parseNodeTemplateRelationShip(Relationship[] relationships, Node sourceNode) {
179 List<RelationShip> retList = new ArrayList<>();
181 if (relationships == null || relationships.length == 0) {
185 for (Relationship relationship : relationships) {
186 RelationShip ret = new RelationShip();
187 ret.setSourceNodeId(sourceNode.getName());
188 ret.setSourceNodeName(sourceNode.getName());
189 ret.setTargetNodeId(relationship.getTemplate_name());
190 ret.setTargetNodeName(relationship.getTemplate_name());
191 ret.setType(relationship.getType_name());
205 private ServiceTemplate parseServiceTemplate(AriaParserResult result, String packageId,
206 String downloadUri) {
207 ServiceTemplate st = new ServiceTemplate();
209 st.setServiceTemplateId(ToolUtil.generateId());
210 st.setTemplateName(result.getMetadata().get("template_name"));
211 st.setVendor(result.getMetadata().get("template_author"));
212 st.setVersion(result.getMetadata().get("template_version"));
213 st.setCsarid(packageId);
214 st.setDownloadUri(downloadUri);
215 st.setInputs(parseInputs(result));
216 st.setOutputs(parseOutputs(result));
225 private InputParameter[] parseInputs(AriaParserResult result) {
226 Map<String, Input> inputs = result.getInputs();
227 if (inputs == null || inputs.isEmpty()) {
228 return new InputParameter[0];
230 List<InputParameter> retList = new ArrayList<InputParameter>();
231 for (Entry<String, Input> e : inputs.entrySet()) {
235 getEnumDataType(e.getValue().getType_name()),
236 e.getValue().getDescription(),
237 e.getValue().getValue(),
240 return retList.toArray(new InputParameter[0]);
247 private EnumDataType getEnumDataType(String type) {
248 if (EnumDataType.INTEGER.toString().equalsIgnoreCase(type)) {
249 return EnumDataType.INTEGER;
252 if (EnumDataType.FLOAT.toString().equalsIgnoreCase(type)) {
253 return EnumDataType.FLOAT;
256 if (EnumDataType.BOOLEAN.toString().equalsIgnoreCase(type)) {
257 return EnumDataType.BOOLEAN;
260 return EnumDataType.STRING;
268 private OutputParameter[] parseOutputs(AriaParserResult result) {
269 Map<String, Output> outputs = result.getOutpus();
270 if (outputs == null || outputs.isEmpty()) {
271 return new OutputParameter[0];
274 List<OutputParameter> retList = new ArrayList<OutputParameter>();
275 for (Entry<String, Output> e: outputs.entrySet()) {
278 e.getKey(), e.getValue().getDescription(), e.getValue().getValue()));
281 return retList.toArray(new OutputParameter[0]);
284 private AriaParserResult getAriaParserResult(String fileLocation) throws CatalogResourceException {
285 String destPath = copyTemporaryFile2HttpServer(fileLocation);
287 String url = getUrl(toTempFileLocalPath(fileLocation));
288 return AriaParserServiceConsumer.parseCsarPackage(url);
290 if (destPath != null && !destPath.isEmpty() && (new File(destPath)).exists()) {
291 (new File(destPath)).delete();