From ce8fd418ea45903257a610d4f82a7738fe01d552 Mon Sep 17 00:00:00 2001 From: YuanHu Date: Wed, 14 Sep 2016 17:06:37 +0800 Subject: Codes for the interface with aria parser. Change-Id: I7bac354212fa12c08aaa266f057bb10bedb5c4c3 Signed-off-by: YuanHu --- .../catalog/CatalogAppConfiguration.java | 22 ++ .../catalog/model/entity/InputParameter.java | 2 +- .../catalog/model/parser/AbstractModelParser.java | 149 +++++++++++ .../catalog/model/parser/ModelParserFactory.java | 15 +- .../model/parser/yaml/aria/AriaModelParser.java | 296 +++++++++++++++++++++ .../parser/yaml/aria/entity/AriaParserRequest.java | 42 +++ .../parser/yaml/aria/entity/AriaParserResult.java | 123 +++++++++ .../aria/service/AriaParserServiceConsumer.java | 55 ++++ .../parser/yaml/aria/service/IAriaParserRest.java | 35 +++ .../parser/yaml/zte/ToscaYamlModelParser.java | 155 +---------- .../src/main/assembly/conf/catalog.yml | 4 + 11 files changed, 753 insertions(+), 145 deletions(-) create mode 100644 catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java create mode 100644 catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/entity/AriaParserRequest.java create mode 100644 catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/entity/AriaParserResult.java create mode 100644 catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/service/AriaParserServiceConsumer.java create mode 100644 catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/service/IAriaParserRest.java (limited to 'catalog-core') diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/CatalogAppConfiguration.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/CatalogAppConfiguration.java index d9a0eeac..79737559 100644 --- a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/CatalogAppConfiguration.java +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/CatalogAppConfiguration.java @@ -45,6 +45,12 @@ public class CatalogAppConfiguration extends Configuration { @NotEmpty private String yamlParseAddr; + + @NotEmpty + private String parserType; + + @NotEmpty + private String ariaParserAddr; @NotEmpty private String wso2HostIp; @@ -143,6 +149,22 @@ public class CatalogAppConfiguration extends Configuration { public void setYamlParseAddr(String yamlParseAddr) { this.yamlParseAddr = yamlParseAddr; } + + public String getParserType() { + return parserType; + } + + public void setParserType(String parserType) { + this.parserType = parserType; + } + + public String getAriaParserAddr() { + return ariaParserAddr; + } + + public void setAriaParserAddr(String ariaParserAddr) { + this.ariaParserAddr = ariaParserAddr; + } @JsonProperty public String getWso2HostIp() { diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/entity/InputParameter.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/entity/InputParameter.java index 5dc9a246..a3f80a9f 100644 --- a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/entity/InputParameter.java +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/entity/InputParameter.java @@ -28,6 +28,6 @@ public class InputParameter { private String name; private EnumDataType type = EnumDataType.STRING; private String description; - private String defaultValue; + private Object defaultValue; private boolean required; } diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/AbstractModelParser.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/AbstractModelParser.java index 4bfcac04..4cb59b08 100644 --- a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/AbstractModelParser.java +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/AbstractModelParser.java @@ -16,11 +16,160 @@ package org.openo.commontosca.catalog.model.parser; +import org.openo.commontosca.catalog.common.MsbAddrConfig; +import org.openo.commontosca.catalog.common.ToolUtil; import org.openo.commontosca.catalog.db.exception.CatalogResourceException; +import org.openo.commontosca.catalog.entity.response.CsarFileUriResponse; +import org.openo.commontosca.catalog.model.entity.NodeTemplate; +import org.openo.commontosca.catalog.wrapper.PackageWrapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; public abstract class AbstractModelParser { + private static final Logger logger = LoggerFactory.getLogger(AbstractModelParser.class); + public abstract String parse(String packageId, String fileLocation) throws CatalogResourceException; + + public String copyTemporaryFile2HttpServer(String fileLocation) throws CatalogResourceException { + String destPath = Class.class.getClass().getResource("/").getPath() + + org.openo.commontosca.catalog.filemanage.http.ToolUtil.getHttpServerPath() + + toTempFileLocalPath(fileLocation); + if (!org.openo.commontosca.catalog.filemanage.http.ToolUtil.copyFile(fileLocation, destPath, + true)) { + throw new CatalogResourceException("Copy Temporary To HttpServer Failed."); + } + return destPath; + } + + public String getUrl(String uri) { + String url = null; + if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) { + url = MsbAddrConfig.getMsbAddress() + uri.substring(1); + } + url = MsbAddrConfig.getMsbAddress() + uri; + String urlresult = url.replace("\\", "/"); + return urlresult; + } + + protected String toTempFileLocalPath(String fileLocation) { + return File.separator + "temp" + File.separator + (new File(fileLocation)).getName(); + } + + protected EnumTemplateType getTemplateType(String substitutionType, List ntList) { + if (isNsType(substitutionType)) { + return EnumTemplateType.NS; + } + + if (isVnfType(substitutionType)) { + return EnumTemplateType.VNF; + } + + return getTemplateTypeFromNodeTemplates(ntList); + } + + private boolean isVnfType(String type) { + if (ToolUtil.isTrimedEmptyString(type)) { + return false; + } + return type.toUpperCase().contains(".VNF"); + } + + private boolean isNsType(String type) { + if (ToolUtil.isTrimedEmptyString(type)) { + return false; + } + return type.toUpperCase().contains(".NS"); + } + + private EnumTemplateType getTemplateTypeFromNodeTemplates(List ntList) { + for (NodeTemplate nt : ntList) { + if (isNsType(nt.getType()) || isVnfType(nt.getType())) { + return EnumTemplateType.NS; + } + } + + return EnumTemplateType.VNF; + } + + private static final String TOSCA_META_FIELD_ENTRY_DEFINITIONS = "Entry-Definitions"; + + protected CsarFileUriResponse buildServiceTemplateDownloadUri(String packageId, String fileLocation) + throws CatalogResourceException { + Map toscaMeta = parseToscaMeta(fileLocation); + String stFileName = toscaMeta.get(TOSCA_META_FIELD_ENTRY_DEFINITIONS); + CsarFileUriResponse stDownloadUri = + PackageWrapper.getInstance().getCsarFileDownloadUri(packageId, stFileName); + return stDownloadUri; + } + + @SuppressWarnings("resource") + protected Map parseToscaMeta(String fileLocation) throws CatalogResourceException { + Map toscaMeta = new HashMap<>(); + + ZipInputStream zin = null; + BufferedReader br = null; + try { + InputStream in = new BufferedInputStream(new FileInputStream(fileLocation)); + zin = new ZipInputStream(in); + ZipEntry ze; + while ((ze = zin.getNextEntry()) != null) { + if (("TOSCA-Metadata" + File.separator + "TOSCA.meta").equals(ze.getName()) + || "TOSCA-Metadata/TOSCA.meta".equals(ze.getName())) { + ZipFile zf = new ZipFile(fileLocation); + br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze))); + String line; + String[] tmps; + while ((line = br.readLine()) != null) { + if (line.indexOf(":") > 0) { + tmps = line.split(":"); + toscaMeta.put(tmps[0].trim(), tmps[1].trim()); + } + } + + return toscaMeta; + } + } + + } catch (IOException e1) { + throw new CatalogResourceException("Parse Tosca Meta Fail.", e1); + } finally { + closeStreamAndReader(zin, br); + } + + return toscaMeta; + } + + private void closeStreamAndReader(ZipInputStream zin, BufferedReader br) { + if (br != null) { + try { + br.close(); + } catch (IOException e1) { + logger.error("Buffered reader close failed !"); + } + } + if (zin != null) { + try { + zin.closeEntry(); + } catch (IOException e2) { + logger.error("Zip inputStream close failed !"); + } + } + } } diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/ModelParserFactory.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/ModelParserFactory.java index a0de8473..32442b9f 100644 --- a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/ModelParserFactory.java +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/ModelParserFactory.java @@ -16,7 +16,9 @@ package org.openo.commontosca.catalog.model.parser; +import org.openo.commontosca.catalog.common.Config; import org.openo.commontosca.catalog.db.exception.CatalogResourceException; +import org.openo.commontosca.catalog.model.parser.yaml.aria.AriaModelParser; import org.openo.commontosca.catalog.model.parser.yaml.zte.ToscaYamlModelParser; import java.util.HashMap; @@ -36,7 +38,18 @@ public class ModelParserFactory { private ModelParserFactory() { // PackageParseMap.put(EnumPackageFormat.TOSCA_XML, new // ToscaXmlModelParser()); - pkgType2ParseMap.put(EnumPackageFormat.TOSCA_YAML, new ToscaYamlModelParser()); + if (isAriaParser()) { + pkgType2ParseMap.put(EnumPackageFormat.TOSCA_YAML, new AriaModelParser()); + } else { + pkgType2ParseMap.put(EnumPackageFormat.TOSCA_YAML, new ToscaYamlModelParser()); + } + } + + /** + * @return + */ + private boolean isAriaParser() { + return "aria".equalsIgnoreCase(Config.getConfigration().getParserType()); } /** diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java new file mode 100644 index 00000000..4e9e66eb --- /dev/null +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java @@ -0,0 +1,296 @@ +/** + * Copyright 2016 [ZTE] and others. + * + * 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.openo.commontosca.catalog.model.parser.yaml.aria; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.openo.commontosca.catalog.common.ToolUtil; +import org.openo.commontosca.catalog.db.exception.CatalogResourceException; +import org.openo.commontosca.catalog.db.resource.TemplateManager; +import org.openo.commontosca.catalog.entity.response.CsarFileUriResponse; +import org.openo.commontosca.catalog.model.common.TemplateDataHelper; +import org.openo.commontosca.catalog.model.entity.EnumDataType; +import org.openo.commontosca.catalog.model.entity.InputParameter; +import org.openo.commontosca.catalog.model.entity.NodeTemplate; +import org.openo.commontosca.catalog.model.entity.OutputParameter; +import org.openo.commontosca.catalog.model.entity.RelationShip; +import org.openo.commontosca.catalog.model.entity.ServiceTemplate; +import org.openo.commontosca.catalog.model.entity.SubstitutionMapping; +import org.openo.commontosca.catalog.model.parser.AbstractModelParser; +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult; +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Input; +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Node; +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Node.Relationship; +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Output; +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Substitution.Mapping; +import org.openo.commontosca.catalog.model.parser.yaml.aria.service.AriaParserServiceConsumer; + +/** + * @author 10090474 + * + */ +public class AriaModelParser extends AbstractModelParser { + + /* (non-Javadoc) + * @see org.openo.commontosca.catalog.model.parser.AbstractModelParser#parse(java.lang.String, java.lang.String) + */ + @Override + public String parse(String packageId, String fileLocation) throws CatalogResourceException { + AriaParserResult result = getAriaParserResult(fileLocation); + + // service template + CsarFileUriResponse stDownloadUri = buildServiceTemplateDownloadUri(packageId, fileLocation); + ServiceTemplate st = parseServiceTemplate(packageId, result, stDownloadUri.getDownloadUri()); + // node templates + List ntList = parseNodeTemplates(packageId, st.getServiceTemplateId(), result); + st.setType(getTemplateType(getSubstitutionType(result), ntList).toString()); + // save to db + TemplateManager.getInstance().addServiceTemplate( + TemplateDataHelper.convert2TemplateData(st, ToolUtil.toJson(result), ntList)); + + // substitution + SubstitutionMapping stm = parseSubstitutionMapping(st.getServiceTemplateId(), result); + if (stm != null) { + TemplateManager.getInstance() + .addServiceTemplateMapping(TemplateDataHelper.convert2TemplateMappingData(stm)); + } + + return st.getServiceTemplateId(); + } + + + /** + * @param serviceTemplateId + * @param result + * @return + */ + private SubstitutionMapping parseSubstitutionMapping(String serviceTemplateId, + AriaParserResult result) { + String type = getSubstitutionType(result); + if (ToolUtil.isTrimedEmptyString(type)) { + return null; + } + + org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult.Substitution stm = + result.getSubstitution(); + return new SubstitutionMapping( + serviceTemplateId, + type, + parseSubstitutionRequirements(stm.getRequirement()), + parseSubstitutionCapabilities(stm.getCapabilities())); + } + + + /** + * @param capabilities + * @return + */ + private Map parseSubstitutionCapabilities(Mapping[] capabilities) { + return parseMappings(capabilities); + } + + + private Map parseMappings(Mapping[] mappings) { + Map ret = new HashMap<>(); + if (mappings != null) { + for (Mapping mapping : mappings) { + ret.put(mapping.getMapped_name(), new String[]{mapping.getNode_id(), mapping.getName()}); + } + } + + return ret; + } + + /** + * @param requirement + * @return + */ + private Map parseSubstitutionRequirements(Mapping[] requirement) { + return parseMappings(requirement); + } + + /** + * @param result + * @return + */ + private String getSubstitutionType(AriaParserResult result) { + if (result.getSubstitution() == null) { + return null; + } + return result.getSubstitution().getNode_type_name(); + } + + + /** + * @param packageId + * @param serviceTemplateId + * @param result + * @return + */ + private List parseNodeTemplates(String packageId, String serviceTemplateId, + AriaParserResult result) { + Node[] nodes = result.getNodes(); + if (nodes == null || nodes.length == 0) { + return null; + } + + List retList = new ArrayList<>(); + for (Node node : nodes) { + NodeTemplate ret = new NodeTemplate(); + ret.setId(node.getName()); + ret.setName(node.getName()); + ret.setType(node.getType_name()); + ret.setProperties(node.getPropertyAssignments()); + List relationShipList = + parseNodeTemplateRelationShip(node.getRelationships(), node); + ret.setRelationShips(relationShipList); + + retList.add(ret); + } + + return retList; + } + + + /** + * @param relationships + * @param sourceNode + * @return + */ + private List parseNodeTemplateRelationShip(Relationship[] relationships, Node sourceNode) { + List retList = new ArrayList<>(); + + if (relationships == null || relationships.length == 0) { + return retList; + } + + for (Relationship relationship : relationships) { + RelationShip ret = new RelationShip(); + ret.setSourceNodeId(sourceNode.getName()); + ret.setSourceNodeName(sourceNode.getName()); + ret.setTargetNodeId(relationship.getTemplate_name()); + ret.setTargetNodeName(relationship.getTemplate_name()); + ret.setType(relationship.getType_name()); + retList.add(ret); + } + + return retList; + } + + + /** + * @param packageId + * @param result + * @param downloadUri + * @return + */ + private ServiceTemplate parseServiceTemplate(String packageId, AriaParserResult result, + String downloadUri) { + ServiceTemplate st = new ServiceTemplate(); + + st.setServiceTemplateId(ToolUtil.generateId()); + st.setTemplateName(result.getMetadata().get("template_name")); + st.setVendor(result.getMetadata().get("template_author")); + st.setVersion(result.getMetadata().get("template_version")); + st.setCsarid(packageId); + st.setDownloadUri(downloadUri); + st.setInputs(parseInputs(result)); + st.setOutputs(parseOutputs(result)); + return st; + } + + + /** + * @param result + * @return + */ + private InputParameter[] parseInputs(AriaParserResult result) { + Map inputs = result.getInputs(); + if (inputs == null || inputs.isEmpty()) { + return new InputParameter[0]; + } + List retList = new ArrayList(); + for (Entry e : inputs.entrySet()) { + retList.add( + new InputParameter( + e.getKey(), + getEnumDataType(e.getValue().getType_name()), + e.getValue().getDescription(), + e.getValue().getValue(), + false)); + } + return retList.toArray(new InputParameter[0]); + } + + /** + * @param type + * @return + */ + private EnumDataType getEnumDataType(String type) { + if (EnumDataType.INTEGER.toString().equalsIgnoreCase(type)) { + return EnumDataType.INTEGER; + } + + if (EnumDataType.FLOAT.toString().equalsIgnoreCase(type)) { + return EnumDataType.FLOAT; + } + + if (EnumDataType.BOOLEAN.toString().equalsIgnoreCase(type)) { + return EnumDataType.BOOLEAN; + } + + return EnumDataType.STRING; + } + + + /** + * @param result + * @return + */ + private OutputParameter[] parseOutputs(AriaParserResult result) { + Map outputs = result.getOutpus(); + if (outputs == null || outputs.isEmpty()) { + return new OutputParameter[0]; + } + + List retList = new ArrayList(); + for (Entry e: outputs.entrySet()) { + retList.add( + new OutputParameter( + e.getKey(), e.getValue().getDescription(), e.getValue().getValue())); + } + + return retList.toArray(new OutputParameter[0]); + } + + private AriaParserResult getAriaParserResult(String fileLocation) throws CatalogResourceException { + String destPath = copyTemporaryFile2HttpServer(fileLocation); + try { + String url = getUrl(toTempFileLocalPath(fileLocation)); + return AriaParserServiceConsumer.parseCsarPackage(url); + } finally { + if (destPath != null && !destPath.isEmpty() && (new File(destPath)).exists()) { + (new File(destPath)).delete(); + } + } + } + +} diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/entity/AriaParserRequest.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/entity/AriaParserRequest.java new file mode 100644 index 00000000..7de7f98c --- /dev/null +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/entity/AriaParserRequest.java @@ -0,0 +1,42 @@ +/** + * Copyright 2016 [ZTE] and others. + * + * 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.openo.commontosca.catalog.model.parser.yaml.aria.entity; + +/** + * + */ +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AriaParserRequest { + private String uri; + private List inputs; + + @Data + @NoArgsConstructor + @AllArgsConstructor + public class Parameter { + private String name; + private String value; + } +} diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/entity/AriaParserResult.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/entity/AriaParserResult.java new file mode 100644 index 00000000..b610ecd9 --- /dev/null +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/entity/AriaParserResult.java @@ -0,0 +1,123 @@ +/** + * Copyright 2016 [ZTE] and others. + * + * 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.openo.commontosca.catalog.model.parser.yaml.aria.entity; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import com.google.gson.JsonObject; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AriaParserResult { + private String description; + private Map metadata; + private Node[] nodes; + private JsonObject groups; + private JsonObject policies; + private Substitution substitution; + private Map inputs; + private Map outpus; + + @Data + public class Substitution { + private String node_type_name; + private Mapping[] requirement; + private Mapping[] capabilities; + + @Data + public class Mapping { + private String mapped_name; + private String node_id; + private String name; + + } + } + + @Data + public class Input { + private String type_name; + private Object value; + private String description; + } + + @Data + public class Output { + private String type_name; + private Object value; + private String description; + } + + @Data + public class Node { + private String id; + private String name; + private String type_name; + private Map properties; + private JsonObject[] interfaces; + private JsonObject[] artifacts; + private JsonObject[] capabilities; + private Relationship[] relationships; + + @Data + public class Property { + private String type_name; + private Object value; + private String description; + } + + @Data + public class Relationship { + private String target_node_id; + private String target_capability_name; + private String type_name; + private String template_name; + private Map properties; + private JsonObject[] source_interfaces; + private JsonObject[] target_interfaces; + + @Data + public class Property { + private String type_name; + private Object value; + private String description; + } + } + + /** + * @return + */ + public Map getPropertyAssignments() { + if (this.properties == null || this.properties.isEmpty()) { + return new HashMap(); + } + + Map ret = new HashMap(); + for (Entry e : this.properties.entrySet()) { + ret.put(e.getKey(), e.getValue().getValue()); + } + + return ret; + } + } +} diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/service/AriaParserServiceConsumer.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/service/AriaParserServiceConsumer.java new file mode 100644 index 00000000..53b18225 --- /dev/null +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/service/AriaParserServiceConsumer.java @@ -0,0 +1,55 @@ +/** + * Copyright 2016 [ZTE] and others. + * + * 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.openo.commontosca.catalog.model.parser.yaml.aria.service; + +import org.glassfish.jersey.client.ClientConfig; +import org.openo.commontosca.catalog.common.Config; +import org.openo.commontosca.catalog.db.exception.CatalogResourceException; +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserRequest; +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserResult; + +import com.eclipsesource.jaxrs.consumer.ConsumerFactory; +import com.google.gson.Gson; + + +public class AriaParserServiceConsumer { + public static AriaParserResult parseCsarPackage(String uri) throws CatalogResourceException { + return parseCsarPackage(new AriaParserRequest(uri, null)); + } + /** + * parse csar package via aria parser. + * + * @param request parse yaml request + * @return parase yaml result + * @throws CatalogResourceException e + */ + public static AriaParserResult parseCsarPackage(AriaParserRequest request) + throws CatalogResourceException { + try { + IAriaParserRest parseProxy = + ConsumerFactory.createConsumer( + Config.getConfigration().getAriaParserAddr(), + new ClientConfig(), + IAriaParserRest.class); + String jsonStr = parseProxy.parse(request); + return new Gson().fromJson(jsonStr, AriaParserResult.class); + } catch (Exception e) { + throw new CatalogResourceException("Call aria parser api failed.", e); + } + + } +} diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/service/IAriaParserRest.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/service/IAriaParserRest.java new file mode 100644 index 00000000..4b53f341 --- /dev/null +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/service/IAriaParserRest.java @@ -0,0 +1,35 @@ +/** + * Copyright 2016 [ZTE] and others. + * + * 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.openo.commontosca.catalog.model.parser.yaml.aria.service; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.openo.commontosca.catalog.model.parser.yaml.aria.entity.AriaParserRequest; + + +@Path("/indirect/plan") +public interface IAriaParserRest { + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + String parse(AriaParserRequest request) throws Exception; +} diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/zte/ToscaYamlModelParser.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/zte/ToscaYamlModelParser.java index 88a5ba47..48e1d6a0 100644 --- a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/zte/ToscaYamlModelParser.java +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/zte/ToscaYamlModelParser.java @@ -16,7 +16,6 @@ package org.openo.commontosca.catalog.model.parser.yaml.zte; -import org.openo.commontosca.catalog.common.MsbAddrConfig; import org.openo.commontosca.catalog.common.ToolUtil; import org.openo.commontosca.catalog.db.exception.CatalogResourceException; import org.openo.commontosca.catalog.db.resource.TemplateManager; @@ -31,61 +30,46 @@ import org.openo.commontosca.catalog.model.entity.ServiceTemplate; import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation; import org.openo.commontosca.catalog.model.entity.SubstitutionMapping; import org.openo.commontosca.catalog.model.parser.AbstractModelParser; -import org.openo.commontosca.catalog.model.parser.EnumTemplateType; import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.EnumYamlServiceTemplateInfo; import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.ParseYamlRequestParemeter; import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.ParseYamlResult; import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.ParseYamlResult.Plan; import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.ParseYamlResult.Plan.PlanValue.PlanInput; import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.ParseYamlResult.TopologyTemplate.Input; -import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.ParseYamlResult.TopologyTemplate.Output; import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.ParseYamlResult.TopologyTemplate.NodeTemplate.Relationship; +import org.openo.commontosca.catalog.model.parser.yaml.zte.entity.ParseYamlResult.TopologyTemplate.Output; import org.openo.commontosca.catalog.model.parser.yaml.zte.service.YamlParseServiceConsumer; import org.openo.commontosca.catalog.model.plan.wso2.Wso2ServiceConsumer; import org.openo.commontosca.catalog.model.plan.wso2.entity.DeployPackageResponse; -import org.openo.commontosca.catalog.wrapper.PackageWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedInputStream; -import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import java.util.zip.ZipInputStream; - public class ToscaYamlModelParser extends AbstractModelParser { - - private static final Object TOSCA_META_FIELD_ENTRY_DEFINITIONS = "Entry-Definitions"; - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaYamlModelParser.class); + private static final Logger logger = LoggerFactory.getLogger(ToscaYamlModelParser.class); @Override public String parse(String packageId, String fileLocation) throws CatalogResourceException { + logger.info("tosca-yaml-parser parse begin."); ParseYamlResult result = getParseYamlResult(fileLocation); - Map toscaMeta = parseToscaMeta(fileLocation); - String stFileName = toscaMeta.get(TOSCA_META_FIELD_ENTRY_DEFINITIONS); - CsarFileUriResponse stDownloadUri = - PackageWrapper.getInstance().getCsarFileDownloadUri(packageId, stFileName); - + // service template + CsarFileUriResponse stDownloadUri = buildServiceTemplateDownloadUri(packageId, fileLocation); ServiceTemplate st = parseServiceTemplate(packageId, result, stDownloadUri.getDownloadUri()); + // workflow ServiceTemplateOperation[] operations = parseOperations(result.getPlanList(), fileLocation); st.setOperations(operations); + // node templates List ntList = parseNodeTemplates(packageId, st.getServiceTemplateId(), result); - st.setType(getTemplateType(result, ntList).toString()); - + st.setType(getTemplateType(getSubstitutionType(result), ntList).toString()); + // save to db TemplateManager.getInstance().addServiceTemplate( TemplateDataHelper.convert2TemplateData(st, ToolUtil.toJson(result), ntList)); + // substitution SubstitutionMapping stm = parseSubstitutionMapping(st.getServiceTemplateId(), result); if (stm != null) { TemplateManager.getInstance() @@ -107,85 +91,6 @@ public class ToscaYamlModelParser extends AbstractModelParser { } } - private String toTempFileLocalPath(String fileLocation) { - return File.separator + "temp" + File.separator + (new File(fileLocation)).getName(); - } - - private String getUrl(String uri) { - String url = null; - if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) { - url = MsbAddrConfig.getMsbAddress() + uri.substring(1); - } - url = MsbAddrConfig.getMsbAddress() + uri; - String urlresult = url.replace("\\", "/"); - return urlresult; - } - - private String copyTemporaryFile2HttpServer(String fileLocation) throws CatalogResourceException { - String destPath = Class.class.getClass().getResource("/").getPath() - + org.openo.commontosca.catalog.filemanage.http.ToolUtil.getHttpServerPath() - + toTempFileLocalPath(fileLocation); - if (!org.openo.commontosca.catalog.filemanage.http.ToolUtil.copyFile(fileLocation, destPath, - true)) { - throw new CatalogResourceException("Copy Temporary To HttpServer Failed."); - } - return destPath; - } - - @SuppressWarnings("resource") - private Map parseToscaMeta(String fileLocation) throws CatalogResourceException { - Map toscaMeta = new HashMap<>(); - - ZipInputStream zin = null; - BufferedReader br = null; - try { - InputStream in = new BufferedInputStream(new FileInputStream(fileLocation)); - zin = new ZipInputStream(in); - ZipEntry ze; - while ((ze = zin.getNextEntry()) != null) { - if (("TOSCA-Metadata" + File.separator + "TOSCA.meta").equals(ze.getName()) - || "TOSCA-Metadata/TOSCA.meta".equals(ze.getName())) { - ZipFile zf = new ZipFile(fileLocation); - br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze))); - String line; - String[] tmps; - while ((line = br.readLine()) != null) { - if (line.indexOf(":") > 0) { - tmps = line.split(":"); - toscaMeta.put(tmps[0].trim(), tmps[1].trim()); - } - } - - return toscaMeta; - } - } - - } catch (IOException e1) { - throw new CatalogResourceException("Parse Tosca Meta Fail.", e1); - } finally { - closeStreamAndReader(zin, br); - } - - return toscaMeta; - } - - private void closeStreamAndReader(ZipInputStream zin, BufferedReader br) { - if (br != null) { - try { - br.close(); - } catch (IOException e1) { - LOGGER.error("Buffered reader close failed !"); - } - } - if (zin != null) { - try { - zin.closeEntry(); - } catch (IOException e2) { - LOGGER.error("Zip inputStream close failed !"); - } - } - } - private ParseYamlRequestParemeter comboRequest(String fileLocation) { ParseYamlRequestParemeter request = new ParseYamlRequestParemeter(); request.setPath(fileLocation); @@ -194,7 +99,7 @@ public class ToscaYamlModelParser extends AbstractModelParser { private SubstitutionMapping parseSubstitutionMapping(String serviceTemplateId, ParseYamlResult result) { - String type = getSubstitutionMappingType(result); + String type = getSubstitutionType(result); if (ToolUtil.isTrimedEmptyString(type)) { return null; } @@ -371,47 +276,11 @@ public class ToscaYamlModelParser extends AbstractModelParser { return retList; } - private EnumTemplateType getTemplateType(ParseYamlResult result, List ntList) { - String type = getSubstitutionMappingType(result); - if (isNsType(type)) { - return EnumTemplateType.NS; - } - - if (isVnfType(type)) { - return EnumTemplateType.VNF; - } - - return getTemplateTypeFromNodeTemplates(ntList); - } - - private String getSubstitutionMappingType(ParseYamlResult result) { + private String getSubstitutionType(ParseYamlResult result) { if (result.getTopologyTemplate().getSubstitutionMappings() == null) { return null; } return result.getTopologyTemplate().getSubstitutionMappings().getNodeType(); } - private EnumTemplateType getTemplateTypeFromNodeTemplates(List ntList) { - for (NodeTemplate nt : ntList) { - if (isNsType(nt.getType()) || isVnfType(nt.getType())) { - return EnumTemplateType.NS; - } - } - - return EnumTemplateType.VNF; - } - - private boolean isVnfType(String type) { - if (ToolUtil.isTrimedEmptyString(type)) { - return false; - } - return type.toUpperCase().contains(".VNF"); - } - - private boolean isNsType(String type) { - if (ToolUtil.isTrimedEmptyString(type)) { - return false; - } - return type.toUpperCase().contains(".NS"); - } } diff --git a/catalog-core/distribution/catalog-standalone/src/main/assembly/conf/catalog.yml b/catalog-core/distribution/catalog-standalone/src/main/assembly/conf/catalog.yml index 07dec54e..01a87b32 100644 --- a/catalog-core/distribution/catalog-standalone/src/main/assembly/conf/catalog.yml +++ b/catalog-core/distribution/catalog-standalone/src/main/assembly/conf/catalog.yml @@ -26,6 +26,10 @@ opentoscaServerAddr: http://127.0.0.1:1337 yamlParseAddr: http://127.0.0.1:8210 +parserType: zte + +ariaParserAddr: http://127.0.0.1:8204/openoapi/tosca/v1 + wso2HostIp: 127.0.0.1 wso2HostPort: 9090 -- cgit 1.2.3-korg