Clean Code. Extracting common methods.
authorYuanHu <yuan.hu1@zte.com.cn>
Thu, 29 Sep 2016 08:26:15 +0000 (16:26 +0800)
committerYuanHu <yuan.hu1@zte.com.cn>
Thu, 29 Sep 2016 08:26:15 +0000 (16:26 +0800)
Dynamically Obtain the download-uri of service template.

Change-Id: I79e60b6105bdad9cf9682776bc9dda7d2034fc54
Signed-off-by: YuanHu <yuan.hu1@zte.com.cn>
catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/common/TemplateDataHelper.java
catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/common/TemplateUtils.java [new file with mode: 0644]
catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/AbstractModelParser.java
catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java
catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/zte/ToscaYamlModelParser.java
catalog-core/catalog-mgr/src/test/java/org/openo/commontosca/catalog/wrapper/ServiceTemplateWrapperTest.java

index ad5fb78..7019ebe 100644 (file)
  */
 package org.openo.commontosca.catalog.model.common;
 
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
-
 import org.openo.commontosca.catalog.common.ToolUtil;
 import org.openo.commontosca.catalog.db.entity.NodeTemplateData;
 import org.openo.commontosca.catalog.db.entity.ServiceTemplateData;
 import org.openo.commontosca.catalog.db.entity.ServiceTemplateMappingData;
 import org.openo.commontosca.catalog.db.entity.TemplateData;
+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.model.entity.Parameters;
 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.wrapper.PackageWrapper;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -40,8 +43,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-
-
 public class TemplateDataHelper {
 
   /**
@@ -122,8 +123,9 @@ public class TemplateDataHelper {
    * convert to service templates.
    * @param stdList ServiceTemplateData list
    * @return ServiceTemplate list
+   * @throws CatalogResourceException 
    */
-  public static ServiceTemplate[] convert2ServiceTemplates(List<ServiceTemplateData> stdList) {
+  public static ServiceTemplate[] convert2ServiceTemplates(List<ServiceTemplateData> stdList) throws CatalogResourceException {
     List<ServiceTemplate> stList = new ArrayList<>();
     for (ServiceTemplateData std : stdList) {
       stList.add(convert2ServiceTemplate(std));
@@ -136,17 +138,26 @@ public class TemplateDataHelper {
    * covert to service template.
    * @param std ServiceTemplateData
    * @return ServiceTemplate
+   * @throws CatalogResourceException 
    */
-  public static ServiceTemplate convert2ServiceTemplate(ServiceTemplateData std) {
+  public static ServiceTemplate convert2ServiceTemplate(ServiceTemplateData std) throws CatalogResourceException {
     Parameters parameters = ToolUtil.fromJson(std.getInputs(), Parameters.class);
     ServiceTemplateOperation[] operations =
         ToolUtil.fromJson(std.getOperations(), ServiceTemplateOperation[].class);
-
+    String downloadUri = buildSTDownloadUri(std.getCsarId(), std.getDownloadUri());
+    
     return new ServiceTemplate(std.getServiceTemplateId(), std.getTemplateName(), std.getVendor(),
-        std.getVersion(), std.getCsarId(), std.getType(), std.getDownloadUri(),
+        std.getVersion(), std.getCsarId(), std.getType(), downloadUri,
         parameters.getInputs(), parameters.getOutputs(), operations);
   }
 
+  private static String buildSTDownloadUri(String packageId, String stFileName)
+      throws CatalogResourceException {
+    CsarFileUriResponse stDownloadUri =
+        PackageWrapper.getInstance().getCsarFileDownloadUri(packageId, stFileName);
+    return stDownloadUri.getDownloadUri();
+  }
+
   /**
    * covert to nodeTemplates.
    * @param ntdList NodeTemplateData list
diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/common/TemplateUtils.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/common/TemplateUtils.java
new file mode 100644 (file)
index 0000000..945cc92
--- /dev/null
@@ -0,0 +1,105 @@
+/**
+ * Copyright 2016 ZTE Corporation.
+ *
+ * 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.common;
+
+import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
+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.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+
+public class TemplateUtils {
+  private static final Logger logger = LoggerFactory.getLogger(TemplateUtils.class);
+  
+  /**
+   * @param zipFileName
+   * @param zipEntryName
+   * @return
+   * @throws CatalogResourceException
+   */
+  public static String readStringFromZipFile(String zipFileName, String zipEntryName) throws CatalogResourceException {
+    String[] lines = readFromZipFile(zipFileName, zipEntryName);
+    StringBuffer sb = new StringBuffer();
+    for (String line : lines) {
+      sb.append(line).append(System.lineSeparator());
+    }
+    return sb.toString();
+  }
+  
+  /**
+   * @param zipFileName
+   * @param zipEntryName
+   * @return
+   * @throws CatalogResourceException
+   */
+  @SuppressWarnings("resource")
+  public static String[] readFromZipFile(String zipFileName, String zipEntryName)
+      throws CatalogResourceException {
+    ZipInputStream zipIns = null;
+    BufferedReader zipEntryBr = null;
+    try {
+      ZipFile zipFile = new ZipFile(zipFileName);
+      
+      zipIns = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFileName)));
+      ZipEntry zipEntry;
+      while ((zipEntry = zipIns.getNextEntry()) != null) {
+        if (zipEntryName.equals(zipEntry.getName())
+            || (zipEntryName.replaceAll("/", File.separator)).equals(zipEntry.getName())) {
+          zipEntryBr = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry)));
+          List<String> lineList = new ArrayList<>();
+          String line;
+          while ((line = zipEntryBr.readLine()) != null) {
+            lineList.add(line);
+          }
+          
+          return lineList.toArray(new String[0]);
+        }
+      }
+    } catch (IOException e) {
+      throw new CatalogResourceException("Parse Tosca Meta Fail.", e);
+    } finally {
+      closeStreamAndReader(zipIns, zipEntryBr);
+    }
+    return new String[0];
+  }
+  
+  private static 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 !");
+      }
+    }
+  }
+}
index 065b5c0..11c50a9 100644 (file)
@@ -18,30 +18,19 @@ package org.openo.commontosca.catalog.model.parser;
 import org.openo.commontosca.catalog.common.Config;
 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.common.TemplateUtils;
 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;
   
@@ -52,6 +41,8 @@ public abstract class AbstractModelParser {
         fileLocation, destPath, true)) {
       throw new CatalogResourceException("Copy Temporary To HttpServer Failed.");
     }
+    
+    logger.info("destPath = " + destPath);
     return destPath;
   }
   
@@ -79,14 +70,14 @@ public abstract class AbstractModelParser {
     if (ToolUtil.isTrimedEmptyString(type)) {
       return false;
     }
-    return type.toUpperCase().contains(".VNF");
+    return type.toUpperCase().endsWith(".VNF") || type.toUpperCase().contains(".VNF.");
   }
 
   private boolean isNsType(String type) {
     if (ToolUtil.isTrimedEmptyString(type)) {
       return false;
     }
-    return type.toUpperCase().contains(".NS");
+    return type.toUpperCase().endsWith(".NS") || type.toUpperCase().contains(".NS.");
   }
   
   private EnumTemplateType getTemplateTypeFromNodeTemplates(List<NodeTemplate> ntList) {
@@ -101,67 +92,27 @@ public abstract class AbstractModelParser {
   
   private static final String TOSCA_META_FIELD_ENTRY_DEFINITIONS = "Entry-Definitions";
   
-  protected CsarFileUriResponse buildServiceTemplateDownloadUri(String packageId, String fileLocation)
+  protected String parseServiceTemplateFileName(String packageId, String fileLocation)
       throws CatalogResourceException {
-    Map<String, String> toscaMeta = parseToscaMeta(fileLocation);
-    String stFileName = toscaMeta.get(TOSCA_META_FIELD_ENTRY_DEFINITIONS);
-    CsarFileUriResponse stDownloadUri =
-        PackageWrapper.getInstance().getCsarFileDownloadUri(packageId, stFileName);
-    return stDownloadUri;
+    return File.separator + parseToscaMeta(fileLocation).get(TOSCA_META_FIELD_ENTRY_DEFINITIONS);
   }
   
-  @SuppressWarnings("resource")
-  protected Map<String, String> parseToscaMeta(String fileLocation) throws CatalogResourceException {
+  private static final String TOSCA_META_FILE_NAME = "TOSCA-Metadata/TOSCA.meta";
+  protected Map<String, String> parseToscaMeta(String zipLocation) throws CatalogResourceException {
     Map<String, String> toscaMeta = new HashMap<>();
+    String[] lines = TemplateUtils.readFromZipFile(zipLocation, TOSCA_META_FILE_NAME);
 
-    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;
-        }
+    for (String line : lines) {
+      String[] tmps;
+      if (line.indexOf(":") > 0) {
+        tmps = line.split(":");
+        toscaMeta.put(tmps[0].trim(), tmps[1].trim());
       }
-
-    } 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 !");
-      }
-    }
-  }
 
 }
index 32e295f..205ddf0 100644 (file)
@@ -18,7 +18,6 @@ package org.openo.commontosca.catalog.model.parser.yaml.aria;
 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.InputParameter;
 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
@@ -56,8 +55,8 @@ public class AriaModelParser extends AbstractModelParser {
     AriaParserResult result = getAriaParserResult(fileLocation);
     
     // service template
-    CsarFileUriResponse stDownloadUri = buildServiceTemplateDownloadUri(packageId, fileLocation);
-    ServiceTemplate st = parseServiceTemplate(result, packageId, stDownloadUri.getDownloadUri());
+    ServiceTemplate st = parseServiceTemplate(
+        result, packageId, parseServiceTemplateFileName(packageId, fileLocation));
     // node templates
     List<NodeTemplate> ntList = parseNodeTemplates(packageId, st.getServiceTemplateId(), result);
     st.setType(getTemplateType(getSubstitutionType(result), ntList).toString());
index f1f4398..2465bea 100644 (file)
@@ -18,7 +18,6 @@ package org.openo.commontosca.catalog.model.parser.yaml.zte;
 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.InputParameter;
 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
@@ -55,8 +54,8 @@ public class ToscaYamlModelParser extends AbstractModelParser {
     ParseYamlResult result = getParseYamlResult(fileLocation);
     
     // service template
-    CsarFileUriResponse stDownloadUri = buildServiceTemplateDownloadUri(packageId, fileLocation);
-    ServiceTemplate st = parseServiceTemplate(packageId, result, stDownloadUri.getDownloadUri());
+    ServiceTemplate st = parseServiceTemplate(
+        packageId, result, parseServiceTemplateFileName(packageId, fileLocation));
     // workflow
     ServiceTemplateOperation[] operations = parseOperations(result.getPlanList(), fileLocation);
     st.setOperations(operations);
index ac87302..1cbf2ad 100644 (file)
@@ -319,8 +319,7 @@ public class ServiceTemplateWrapperTest {
   private ServiceTemplateData setServiceTemplate() {
     ServiceTemplateData serviceTemplate = new ServiceTemplateData();
     serviceTemplate.setCsarId("123456");
-    serviceTemplate.setDownloadUri(MsbAddrConfig.getMsbAddress() 
-        + "/files/catalog/NSAR/ZTE/NanocellGW/v1.0/Definitions/segw.yml");
+    serviceTemplate.setDownloadUri("/Definitions/segw.yml");
     String inputs = "{\"inputs\":[{\"name\": \"SubscribersPerNfc\","
         + "\"type\": \"STRING\",\"description\": \"\",\"required\": false}],"
         + "\"outputs\":[]}";
@@ -362,7 +361,7 @@ public class ServiceTemplateWrapperTest {
     ServiceTemplate serviceTemplate = new ServiceTemplate();
     serviceTemplate.setCsarid("123456");
     serviceTemplate.setDownloadUri(MsbAddrConfig.getMsbAddress() 
-        + "/files/catalog/NSAR/ZTE/NanocellGW/v1.0/Definitions/segw.yml");
+        + "/files/catalog-http/NSAR/ZTE/NanocellGW/v1.0/NanocellGW/Definitions/segw.yml");
     InputParameter[] inputs = getServiceTemplateInputs();
     serviceTemplate.setInputs(inputs);
     ServiceTemplateOperation[] operations = getServiceTemplateOperation();