-/**\r
- * Copyright 2016 [ZTE] and others.\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.openo.commontosca.catalog.model.parser;\r
-\r
-import org.openo.commontosca.catalog.common.MsbAddrConfig;\r
-import org.openo.commontosca.catalog.common.ToolUtil;\r
-import org.openo.commontosca.catalog.db.exception.CatalogResourceException;\r
-import org.openo.commontosca.catalog.db.resource.TemplateManager;\r
-import org.openo.commontosca.catalog.entity.response.CsarFileUriResponse;\r
-import org.openo.commontosca.catalog.model.common.TemplateDataHelper;\r
-import org.openo.commontosca.catalog.model.entity.EnumDataType;\r
-import org.openo.commontosca.catalog.model.entity.InputParameter;\r
-import org.openo.commontosca.catalog.model.entity.NodeTemplate;\r
-import org.openo.commontosca.catalog.model.entity.OutputParameter;\r
-import org.openo.commontosca.catalog.model.entity.RelationShip;\r
-import org.openo.commontosca.catalog.model.entity.ServiceTemplate;\r
-import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation;\r
-import org.openo.commontosca.catalog.model.entity.SubstitutionMapping;\r
-import org.openo.commontosca.catalog.model.parser.yaml.YamlParseServiceConsumer;\r
-import org.openo.commontosca.catalog.model.parser.yaml.entity.EnumYamlServiceTemplateInfo;\r
-import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlRequestParemeter;\r
-import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult;\r
-import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.Plan;\r
-import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.Plan.PlanValue.PlanInput;\r
-import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.TopologyTemplate.Input;\r
-import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.TopologyTemplate.NodeTemplate.Relationship;\r
-import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.TopologyTemplate.Output;\r
-import org.openo.commontosca.catalog.model.plan.wso2.Wso2ServiceConsumer;\r
-import org.openo.commontosca.catalog.model.plan.wso2.entity.DeployPackageResponse;\r
-import org.openo.commontosca.catalog.wrapper.PackageWrapper;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import java.io.BufferedInputStream;\r
-import java.io.BufferedReader;\r
-import java.io.File;\r
-import java.io.FileInputStream;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.io.InputStreamReader;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.zip.ZipEntry;\r
-import java.util.zip.ZipFile;\r
-import java.util.zip.ZipInputStream;\r
-\r
-\r
-public class ToscaYamlModelParser extends AbstractModelParser {\r
-\r
- private static final Object TOSCA_META_FIELD_ENTRY_DEFINITIONS = "Entry-Definitions";\r
- private static final Logger LOGGER = LoggerFactory.getLogger(ToscaYamlModelParser.class);\r
-\r
- @Override\r
- public String parse(String packageId, String fileLocation) throws CatalogResourceException {\r
- ParseYamlResult result = getParseYamlResult(fileLocation);\r
- \r
- Map<String, String> toscaMeta = parseToscaMeta(fileLocation);\r
- String stFileName = toscaMeta.get(TOSCA_META_FIELD_ENTRY_DEFINITIONS);\r
- CsarFileUriResponse stDownloadUri =\r
- PackageWrapper.getInstance().getCsarFileDownloadUri(packageId, stFileName);\r
-\r
- ServiceTemplate st = parseServiceTemplate(packageId, result, stDownloadUri.getDownloadUri());\r
- ServiceTemplateOperation[] operations = parseOperations(result.getPlanList(), fileLocation);\r
- st.setOperations(operations);\r
- List<NodeTemplate> ntList = parseNodeTemplates(packageId, st.getServiceTemplateId(), result);\r
- st.setType(getTemplateType(result, ntList).toString());\r
-\r
- TemplateManager.getInstance().addServiceTemplate(\r
- TemplateDataHelper.convert2TemplateData(st, ToolUtil.toJson(result), ntList));\r
-\r
- SubstitutionMapping stm = parseSubstitutionMapping(st.getServiceTemplateId(), result);\r
- if (stm != null) {\r
- TemplateManager.getInstance()\r
- .addServiceTemplateMapping(TemplateDataHelper.convert2TemplateMappingData(stm));\r
- }\r
-\r
- return st.getServiceTemplateId();\r
- }\r
-\r
- private ParseYamlResult getParseYamlResult(String fileLocation) throws CatalogResourceException {\r
- String destPath = copyTemporaryFile2HttpServer(fileLocation);\r
- try {\r
- String url = getUrl(toTempFileLocalPath(fileLocation));\r
- return YamlParseServiceConsumer.getServiceTemplates(comboRequest(url));\r
- } finally {\r
- if (destPath != null && !destPath.isEmpty() && (new File(destPath)).exists()) {\r
- (new File(destPath)).deleteOnExit();\r
- }\r
- }\r
- }\r
-\r
- private String toTempFileLocalPath(String fileLocation) {\r
- return File.separator + "temp" + File.separator + (new File(fileLocation)).getName();\r
- }\r
- \r
- private String getUrl(String uri) {\r
- String url = null;\r
- if ((MsbAddrConfig.getMsbAddress().endsWith("/")) && uri.startsWith("/")) {\r
- url = MsbAddrConfig.getMsbAddress() + uri.substring(1);\r
- }\r
- url = MsbAddrConfig.getMsbAddress() + uri;\r
- String urlresult = url.replace("\\", "/");\r
- return urlresult;\r
- }\r
-\r
- private String copyTemporaryFile2HttpServer(String fileLocation) throws CatalogResourceException {\r
- String destPath = Class.class.getClass().getResource("/").getPath()\r
- + org.openo.commontosca.catalog.filemanage.http.ToolUtil.getHttpServerPath()\r
- + toTempFileLocalPath(fileLocation);\r
- if (!org.openo.commontosca.catalog.filemanage.http.ToolUtil.copyFile(fileLocation, destPath,\r
- true)) {\r
- throw new CatalogResourceException("Copy Temporary To HttpServer Failed.");\r
- }\r
- return destPath;\r
- }\r
-\r
- @SuppressWarnings("resource")\r
- private Map<String, String> parseToscaMeta(String fileLocation) throws CatalogResourceException {\r
- Map<String, String> toscaMeta = new HashMap<>();\r
-\r
- ZipInputStream zin = null;\r
- BufferedReader br = null;\r
- try {\r
- InputStream in = new BufferedInputStream(new FileInputStream(fileLocation));\r
- zin = new ZipInputStream(in);\r
- ZipEntry ze;\r
- while ((ze = zin.getNextEntry()) != null) {\r
- if (("TOSCA-Metadata" + File.separator + "TOSCA.meta").equals(ze.getName())\r
- || "TOSCA-Metadata/TOSCA.meta".equals(ze.getName())) {\r
- ZipFile zf = new ZipFile(fileLocation);\r
- br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));\r
- String line;\r
- String[] tmps;\r
- while ((line = br.readLine()) != null) {\r
- if (line.indexOf(":") > 0) {\r
- tmps = line.split(":");\r
- toscaMeta.put(tmps[0].trim(), tmps[1].trim());\r
- }\r
- }\r
-\r
- return toscaMeta;\r
- }\r
- }\r
-\r
- } catch (IOException e1) {\r
- throw new CatalogResourceException("Parse Tosca Meta Fail.", e1);\r
- } finally {\r
- closeStreamAndReader(zin, br);\r
- }\r
-\r
- return toscaMeta;\r
- }\r
-\r
- private void closeStreamAndReader(ZipInputStream zin, BufferedReader br) {\r
- if (br != null) {\r
- try {\r
- br.close();\r
- } catch (IOException e1) {\r
- LOGGER.error("Buffered reader close failed !");\r
- }\r
- }\r
- if (zin != null) {\r
- try {\r
- zin.closeEntry();\r
- } catch (IOException e2) {\r
- LOGGER.error("Zip inputStream close failed !");\r
- }\r
- }\r
- }\r
-\r
- private ParseYamlRequestParemeter comboRequest(String fileLocation) {\r
- ParseYamlRequestParemeter request = new ParseYamlRequestParemeter();\r
- request.setPath(fileLocation);\r
- return request;\r
- }\r
-\r
- private SubstitutionMapping parseSubstitutionMapping(String serviceTemplateId,\r
- ParseYamlResult result) {\r
- String type = getSubstitutionMappingType(result);\r
- if (ToolUtil.isTrimedEmptyString(type)) {\r
- return null;\r
- }\r
-\r
- org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult\r
- .TopologyTemplate.SubstitutionMapping stm =\r
- result.getTopologyTemplate().getSubstitutionMappings();\r
- return new SubstitutionMapping(serviceTemplateId, type, stm.getRequirementList(),\r
- stm.getCapabilityList());\r
- }\r
-\r
- private ServiceTemplate parseServiceTemplate(String packageId, ParseYamlResult result,\r
- String stDownloadUri) {\r
- ServiceTemplate st = new ServiceTemplate();\r
-\r
- st.setServiceTemplateId(ToolUtil.generateId());\r
- st.setTemplateName(result.getMetadata().get(EnumYamlServiceTemplateInfo.ID.getName()));\r
- st.setVendor(result.getMetadata().get(EnumYamlServiceTemplateInfo.PROVIDER.getName()));\r
- st.setVersion(result.getMetadata().get(EnumYamlServiceTemplateInfo.VERSION.getName()));\r
- st.setCsarid(packageId);\r
- st.setDownloadUri(stDownloadUri);\r
- st.setInputs(parseInputs(result));\r
- st.setOutputs(parseOutputs(result));\r
- return st;\r
- }\r
-\r
- private InputParameter[] parseInputs(ParseYamlResult result) {\r
- List<Input> inputList = result.getTopologyTemplate().getInputs();\r
- if (inputList == null) {\r
- return new InputParameter[0];\r
- }\r
- List<InputParameter> retList = new ArrayList<InputParameter>();\r
- for (Input input : inputList) {\r
- retList.add(new InputParameter(input.getName(), getEnumDataType(input.getType()),\r
- input.getDescription(), input.getDefault(), input.isRequired()));\r
- }\r
- return retList.toArray(new InputParameter[0]);\r
- }\r
-\r
- private OutputParameter[] parseOutputs(ParseYamlResult result) {\r
- List<Output> outputList = result.getTopologyTemplate().getOutputs();\r
- if (outputList == null || outputList.isEmpty()) {\r
- return new OutputParameter[0];\r
- }\r
- List<OutputParameter> retList = new ArrayList<OutputParameter>();\r
- for (Output output : outputList) {\r
- retList\r
- .add(new OutputParameter(output.getName(), output.getDescription(), output.getValue()));\r
- }\r
- return retList.toArray(new OutputParameter[0]);\r
- }\r
-\r
- private ServiceTemplateOperation[] parseOperations(List<Plan> planList, String zipFileLocation)\r
- throws CatalogResourceException {\r
- if (planList == null || planList.isEmpty()) {\r
- return new ServiceTemplateOperation[0];\r
- }\r
-\r
- List<ServiceTemplateOperation> opList = new ArrayList<>();\r
- for (Plan plan : planList) {\r
- ServiceTemplateOperation op = new ServiceTemplateOperation();\r
- op.setName(plan.getName());\r
- op.setDescription(plan.getDescription());\r
- checkPlanLanguage(plan.getPlanLanguage());\r
- DeployPackageResponse response =\r
- Wso2ServiceConsumer.deployPackage(zipFileLocation, plan.getReference());\r
- op.setPackageName(parsePackageName(response));\r
- op.setProcessId(response.getProcessId());\r
- op.setInputs(parsePlanInputs(plan.getInputList()));\r
-\r
- opList.add(op);\r
-\r
- }\r
- return opList.toArray(new ServiceTemplateOperation[0]);\r
- }\r
-\r
- private String parsePackageName(DeployPackageResponse response) {\r
- String packageName = response.getPackageName();\r
- if (packageName != null && packageName.indexOf("-") > 0) {\r
- packageName = packageName.substring(0, packageName.lastIndexOf("-"));\r
- }\r
- return packageName;\r
- }\r
-\r
- private void checkPlanLanguage(String planLanguage) throws CatalogResourceException {\r
- if (planLanguage == null || planLanguage.isEmpty()) {\r
- throw new CatalogResourceException("Plan Language is empty.");\r
- }\r
- if (planLanguage.equalsIgnoreCase("bpel")) {\r
- return;\r
- }\r
- if (planLanguage.equalsIgnoreCase("bpmn")) {\r
- return;\r
- }\r
- if (planLanguage.equalsIgnoreCase("bpmn4tosca")) {\r
- return;\r
- }\r
- throw new CatalogResourceException(\r
- "Plan Language is not supported. Language = " + planLanguage);\r
- }\r
-\r
- private InputParameter[] parsePlanInputs(List<PlanInput> inputList) {\r
- if (inputList == null || inputList.isEmpty()) {\r
- return new InputParameter[0];\r
- }\r
-\r
- List<InputParameter> retList = new ArrayList<>();\r
- for (PlanInput input : inputList) {\r
- retList.add(new InputParameter(input.getName(), getEnumDataType(input.getType()),\r
- input.getDescription(), input.getDefault(), input.isRequired()));\r
- }\r
- return retList.toArray(new InputParameter[0]);\r
- }\r
-\r
- private EnumDataType getEnumDataType(String type) {\r
- if (EnumDataType.INTEGER.toString().equalsIgnoreCase(type)) {\r
- return EnumDataType.INTEGER;\r
- }\r
-\r
- if (EnumDataType.FLOAT.toString().equalsIgnoreCase(type)) {\r
- return EnumDataType.FLOAT;\r
- }\r
-\r
- if (EnumDataType.BOOLEAN.toString().equalsIgnoreCase(type)) {\r
- return EnumDataType.BOOLEAN;\r
- }\r
-\r
- return EnumDataType.STRING;\r
- }\r
-\r
- private List<NodeTemplate> parseNodeTemplates(String csarId, String templateId,\r
- ParseYamlResult result) {\r
- List<ParseYamlResult.TopologyTemplate.NodeTemplate> nodetemplateList =\r
- result.getTopologyTemplate().getNodeTemplates();\r
- if (nodetemplateList == null) {\r
- return null;\r
- }\r
-\r
- List<NodeTemplate> retList = new ArrayList<>();\r
- for (ParseYamlResult.TopologyTemplate.NodeTemplate nodeTemplate : nodetemplateList) {\r
- NodeTemplate ret = new NodeTemplate();\r
- ret.setId(nodeTemplate.getName());\r
- ret.setName(nodeTemplate.getName());\r
- ret.setType(nodeTemplate.getNodeType());\r
- ret.setProperties(nodeTemplate.getPropertyList());\r
- List<RelationShip> relationShipList =\r
- parseNodeTemplateRelationShip(nodeTemplate.getRelationships());\r
- ret.setRelationShips(relationShipList);\r
-\r
- retList.add(ret);\r
- }\r
-\r
- return retList;\r
- }\r
-\r
-\r
- private List<RelationShip> parseNodeTemplateRelationShip(List<Relationship> relationshipList) {\r
- List<RelationShip> retList = new ArrayList<>();\r
-\r
- if (relationshipList == null) {\r
- return retList;\r
- }\r
-\r
- for (Relationship relationship : relationshipList) {\r
- RelationShip ret = new RelationShip();\r
- ret.setSourceNodeId(relationship.getSourceNodeName());\r
- ret.setSourceNodeName(relationship.getSourceNodeName());\r
- ret.setTargetNodeId(relationship.getTargetNodeName());\r
- ret.setTargetNodeName(relationship.getTargetNodeName());\r
- ret.setType(relationship.getType());\r
- retList.add(ret);\r
- }\r
-\r
- return retList;\r
- }\r
-\r
- private EnumTemplateType getTemplateType(ParseYamlResult result, List<NodeTemplate> ntList) {\r
- String type = getSubstitutionMappingType(result);\r
- if (isNsType(type)) {\r
- return EnumTemplateType.NS;\r
- }\r
-\r
- if (isVnfType(type)) {\r
- return EnumTemplateType.VNF;\r
- }\r
-\r
- return getTemplateTypeFromNodeTemplates(ntList);\r
- }\r
-\r
- private String getSubstitutionMappingType(ParseYamlResult result) {\r
- if (result.getTopologyTemplate().getSubstitutionMappings() == null) {\r
- return null;\r
- }\r
- return result.getTopologyTemplate().getSubstitutionMappings().getNodeType();\r
- }\r
-\r
- private EnumTemplateType getTemplateTypeFromNodeTemplates(List<NodeTemplate> ntList) {\r
- for (NodeTemplate nt : ntList) {\r
- if (isNsType(nt.getType()) || isVnfType(nt.getType())) {\r
- return EnumTemplateType.NS;\r
- }\r
- }\r
-\r
- return EnumTemplateType.VNF;\r
- }\r
-\r
- private boolean isVnfType(String type) {\r
- if (ToolUtil.isTrimedEmptyString(type)) {\r
- return false;\r
- }\r
- return type.toUpperCase().contains(".VNF");\r
- }\r
-\r
- private boolean isNsType(String type) {\r
- if (ToolUtil.isTrimedEmptyString(type)) {\r
- return false;\r
- }\r
- return type.toUpperCase().contains(".NS");\r
- }\r
-}\r
+/**
+ * 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;
+
+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;
+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.ServiceTemplateOperation;
+import org.openo.commontosca.catalog.model.entity.SubstitutionMapping;
+import org.openo.commontosca.catalog.model.parser.yaml.YamlParseServiceConsumer;
+import org.openo.commontosca.catalog.model.parser.yaml.entity.EnumYamlServiceTemplateInfo;
+import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlRequestParemeter;
+import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult;
+import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.Plan;
+import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.Plan.PlanValue.PlanInput;
+import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.TopologyTemplate.Input;
+import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.TopologyTemplate.NodeTemplate.Relationship;
+import org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult.TopologyTemplate.Output;
+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);
+
+ @Override
+ public String parse(String packageId, String fileLocation) throws CatalogResourceException {
+ ParseYamlResult result = getParseYamlResult(fileLocation);
+
+ Map<String, String> toscaMeta = parseToscaMeta(fileLocation);
+ String stFileName = toscaMeta.get(TOSCA_META_FIELD_ENTRY_DEFINITIONS);
+ CsarFileUriResponse stDownloadUri =
+ PackageWrapper.getInstance().getCsarFileDownloadUri(packageId, stFileName);
+
+ ServiceTemplate st = parseServiceTemplate(packageId, result, stDownloadUri.getDownloadUri());
+ ServiceTemplateOperation[] operations = parseOperations(result.getPlanList(), fileLocation);
+ st.setOperations(operations);
+ List<NodeTemplate> ntList = parseNodeTemplates(packageId, st.getServiceTemplateId(), result);
+ st.setType(getTemplateType(result, ntList).toString());
+
+ TemplateManager.getInstance().addServiceTemplate(
+ TemplateDataHelper.convert2TemplateData(st, ToolUtil.toJson(result), ntList));
+
+ SubstitutionMapping stm = parseSubstitutionMapping(st.getServiceTemplateId(), result);
+ if (stm != null) {
+ TemplateManager.getInstance()
+ .addServiceTemplateMapping(TemplateDataHelper.convert2TemplateMappingData(stm));
+ }
+
+ return st.getServiceTemplateId();
+ }
+
+ private ParseYamlResult getParseYamlResult(String fileLocation) throws CatalogResourceException {
+ String destPath = copyTemporaryFile2HttpServer(fileLocation);
+ try {
+ String url = getUrl(toTempFileLocalPath(fileLocation));
+ return YamlParseServiceConsumer.getServiceTemplates(comboRequest(url));
+ } finally {
+ if (destPath != null && !destPath.isEmpty() && (new File(destPath)).exists()) {
+ (new File(destPath)).delete();
+ }
+ }
+ }
+
+ 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<String, String> parseToscaMeta(String fileLocation) throws CatalogResourceException {
+ Map<String, String> 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);
+ return request;
+ }
+
+ private SubstitutionMapping parseSubstitutionMapping(String serviceTemplateId,
+ ParseYamlResult result) {
+ String type = getSubstitutionMappingType(result);
+ if (ToolUtil.isTrimedEmptyString(type)) {
+ return null;
+ }
+
+ org.openo.commontosca.catalog.model.parser.yaml.entity.ParseYamlResult
+ .TopologyTemplate.SubstitutionMapping stm =
+ result.getTopologyTemplate().getSubstitutionMappings();
+ return new SubstitutionMapping(serviceTemplateId, type, stm.getRequirementList(),
+ stm.getCapabilityList());
+ }
+
+ private ServiceTemplate parseServiceTemplate(String packageId, ParseYamlResult result,
+ String stDownloadUri) {
+ ServiceTemplate st = new ServiceTemplate();
+
+ st.setServiceTemplateId(ToolUtil.generateId());
+ st.setTemplateName(result.getMetadata().get(EnumYamlServiceTemplateInfo.ID.getName()));
+ st.setVendor(result.getMetadata().get(EnumYamlServiceTemplateInfo.PROVIDER.getName()));
+ st.setVersion(result.getMetadata().get(EnumYamlServiceTemplateInfo.VERSION.getName()));
+ st.setCsarid(packageId);
+ st.setDownloadUri(stDownloadUri);
+ st.setInputs(parseInputs(result));
+ st.setOutputs(parseOutputs(result));
+ return st;
+ }
+
+ private InputParameter[] parseInputs(ParseYamlResult result) {
+ List<Input> inputList = result.getTopologyTemplate().getInputs();
+ if (inputList == null) {
+ return new InputParameter[0];
+ }
+ List<InputParameter> retList = new ArrayList<InputParameter>();
+ for (Input input : inputList) {
+ retList.add(new InputParameter(input.getName(), getEnumDataType(input.getType()),
+ input.getDescription(), input.getDefault(), input.isRequired()));
+ }
+ return retList.toArray(new InputParameter[0]);
+ }
+
+ private OutputParameter[] parseOutputs(ParseYamlResult result) {
+ List<Output> outputList = result.getTopologyTemplate().getOutputs();
+ if (outputList == null || outputList.isEmpty()) {
+ return new OutputParameter[0];
+ }
+ List<OutputParameter> retList = new ArrayList<OutputParameter>();
+ for (Output output : outputList) {
+ retList
+ .add(new OutputParameter(output.getName(), output.getDescription(), output.getValue()));
+ }
+ return retList.toArray(new OutputParameter[0]);
+ }
+
+ private ServiceTemplateOperation[] parseOperations(List<Plan> planList, String zipFileLocation)
+ throws CatalogResourceException {
+ if (planList == null || planList.isEmpty()) {
+ return new ServiceTemplateOperation[0];
+ }
+
+ List<ServiceTemplateOperation> opList = new ArrayList<>();
+ for (Plan plan : planList) {
+ ServiceTemplateOperation op = new ServiceTemplateOperation();
+ op.setName(plan.getName());
+ op.setDescription(plan.getDescription());
+ checkPlanLanguage(plan.getPlanLanguage());
+ DeployPackageResponse response =
+ Wso2ServiceConsumer.deployPackage(zipFileLocation, plan.getReference());
+ op.setPackageName(parsePackageName(response));
+ op.setProcessId(response.getProcessId());
+ op.setInputs(parsePlanInputs(plan.getInputList()));
+
+ opList.add(op);
+
+ }
+ return opList.toArray(new ServiceTemplateOperation[0]);
+ }
+
+ private String parsePackageName(DeployPackageResponse response) {
+ String packageName = response.getPackageName();
+ if (packageName != null && packageName.indexOf("-") > 0) {
+ packageName = packageName.substring(0, packageName.lastIndexOf("-"));
+ }
+ return packageName;
+ }
+
+ private void checkPlanLanguage(String planLanguage) throws CatalogResourceException {
+ if (planLanguage == null || planLanguage.isEmpty()) {
+ throw new CatalogResourceException("Plan Language is empty.");
+ }
+ if (planLanguage.equalsIgnoreCase("bpel")) {
+ return;
+ }
+ if (planLanguage.equalsIgnoreCase("bpmn")) {
+ return;
+ }
+ if (planLanguage.equalsIgnoreCase("bpmn4tosca")) {
+ return;
+ }
+ throw new CatalogResourceException(
+ "Plan Language is not supported. Language = " + planLanguage);
+ }
+
+ private InputParameter[] parsePlanInputs(List<PlanInput> inputList) {
+ if (inputList == null || inputList.isEmpty()) {
+ return new InputParameter[0];
+ }
+
+ List<InputParameter> retList = new ArrayList<>();
+ for (PlanInput input : inputList) {
+ retList.add(new InputParameter(input.getName(), getEnumDataType(input.getType()),
+ input.getDescription(), input.getDefault(), input.isRequired()));
+ }
+ return retList.toArray(new InputParameter[0]);
+ }
+
+ 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;
+ }
+
+ private List<NodeTemplate> parseNodeTemplates(String csarId, String templateId,
+ ParseYamlResult result) {
+ List<ParseYamlResult.TopologyTemplate.NodeTemplate> nodetemplateList =
+ result.getTopologyTemplate().getNodeTemplates();
+ if (nodetemplateList == null) {
+ return null;
+ }
+
+ List<NodeTemplate> retList = new ArrayList<>();
+ for (ParseYamlResult.TopologyTemplate.NodeTemplate nodeTemplate : nodetemplateList) {
+ NodeTemplate ret = new NodeTemplate();
+ ret.setId(nodeTemplate.getName());
+ ret.setName(nodeTemplate.getName());
+ ret.setType(nodeTemplate.getNodeType());
+ ret.setProperties(nodeTemplate.getPropertyList());
+ List<RelationShip> relationShipList =
+ parseNodeTemplateRelationShip(nodeTemplate.getRelationships());
+ ret.setRelationShips(relationShipList);
+
+ retList.add(ret);
+ }
+
+ return retList;
+ }
+
+
+ private List<RelationShip> parseNodeTemplateRelationShip(List<Relationship> relationshipList) {
+ List<RelationShip> retList = new ArrayList<>();
+
+ if (relationshipList == null) {
+ return retList;
+ }
+
+ for (Relationship relationship : relationshipList) {
+ RelationShip ret = new RelationShip();
+ ret.setSourceNodeId(relationship.getSourceNodeName());
+ ret.setSourceNodeName(relationship.getSourceNodeName());
+ ret.setTargetNodeId(relationship.getTargetNodeName());
+ ret.setTargetNodeName(relationship.getTargetNodeName());
+ ret.setType(relationship.getType());
+ retList.add(ret);
+ }
+
+ return retList;
+ }
+
+ private EnumTemplateType getTemplateType(ParseYamlResult result, List<NodeTemplate> 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) {
+ if (result.getTopologyTemplate().getSubstitutionMappings() == null) {
+ return null;
+ }
+ return result.getTopologyTemplate().getSubstitutionMappings().getNodeType();
+ }
+
+ private EnumTemplateType getTemplateTypeFromNodeTemplates(List<NodeTemplate> 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");
+ }
+}