Change java.io.File.deleteOnExit() to java.io.File.delete(). For the latter id more...
authorYuanHu <yuan.hu1@zte.com.cn>
Thu, 8 Sep 2016 01:58:30 +0000 (09:58 +0800)
committerYuanHu <yuan.hu1@zte.com.cn>
Thu, 8 Sep 2016 01:58:30 +0000 (09:58 +0800)
Change-Id: I52c6982fd1fbfcd9146f7a80ccf9f4cf16feba3f
Signed-off-by: YuanHu <yuan.hu1@zte.com.cn>
catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/ToscaYamlModelParser.java

index ac381e7..739ed5e 100644 (file)
-/**\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");
+  }
+}