diff options
author | Chris André <chris.andre@yoppworks.com> | 2020-04-15 20:05:32 -0400 |
---|---|---|
committer | Ofir Sonsino <ofir.sonsino@intl.att.com> | 2020-04-20 07:17:49 +0000 |
commit | a0c6e45f2085ba1f26573f5823d37b55268a1191 (patch) | |
tree | fc3ed0e0bdaf3012db800741b02afda01c04f6df /asdctool/src/main/java | |
parent | 659556d07ad5b928cb0032f040dc86fcb11944c8 (diff) |
Added a try-with-resource to properly close a FileInputStream
Issue-ID: SDC-2898
Signed-off-by: Chris Andre <chris.andre@yoppworks.com>
Change-Id: I0a0163937ee2e760f3074d858dfc68a7b262ecd9
Diffstat (limited to 'asdctool/src/main/java')
-rw-r--r-- | asdctool/src/main/java/org/openecomp/sdc/asdctool/main/SdcSchemaFileImport.java | 455 |
1 files changed, 234 insertions, 221 deletions
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/SdcSchemaFileImport.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/SdcSchemaFileImport.java index 676c3b45c0..57939df910 100644 --- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/SdcSchemaFileImport.java +++ b/asdctool/src/main/java/org/openecomp/sdc/asdctool/main/SdcSchemaFileImport.java @@ -7,9 +7,9 @@ * 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. @@ -55,228 +55,241 @@ import java.util.zip.ZipOutputStream; public class SdcSchemaFileImport { - - private static final String SEPARATOR = FileSystems.getDefault().getSeparator(); - - private static final String TOSCA_VERSION = "tosca_simple_yaml_1_1"; - - private static String importToscaPath; - - private static final byte[] buffer = new byte[1024]; - - private static final String YAML_EXTENSION = ".yml"; - - private static final String DEPLOYMENT_TYPE_ONAP = "onap"; - - private static String LICENSE_TXT; - - private static ZipOutputStream zos; - - public static void main(String[] args) throws Exception { - - //Generation flow start - generating SDC from normatives - System.out.println("Starting SdcSchemaFileImport procedure..."); - final String FILE_NAME = "SDC.zip"; - - if (args == null || !(args.length ==4 || args.length == 5 )) { - usageAndExit(); - } - - importToscaPath = args[0]; - String sdcReleaseNum = args[1]; - String conformanceLevel = args[2]; - String appConfigDir = args[3]; - String deploymentType=null; - if(args.length==5){ - deploymentType=args[4]; - } - - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - zos = new ZipOutputStream(baos); - - //Initialize the license text - try { - LICENSE_TXT = new String(Files.readAllBytes(Paths.get(appConfigDir + SEPARATOR+"license.txt"))); - } - catch(Exception e) { - System.err.println("Couldn't read license.txt in location :" + appConfigDir+", error: "+e); - System.exit(1); - } - - //Loop over schema file list and create each yaml file from /import/tosca folder - SchemaZipFileEnum[] schemaFileList = SchemaZipFileEnum.values(); - for (SchemaZipFileEnum schemaZipFileEnum : schemaFileList) { - try { - //get the source yaml file - String pathname = importToscaPath + SEPARATOR + schemaZipFileEnum.getSourceFolderName() + SEPARATOR + schemaZipFileEnum.getSourceFileName() + YAML_EXTENSION; - System.out.println("Processing file "+pathname+"...."); - InputStream input = new FileInputStream(new File(pathname)); - //Convert the content of file to yaml - Yaml yamlFileSource = new Yaml(); - Object content = yamlFileSource.load(input); - - createAndSaveSchemaFileYaml(schemaZipFileEnum, content); - } - catch(Exception e) { - System.err.println("Error in file creation : " + schemaZipFileEnum.getFileName() + ", " + e.getMessage()); - System.exit(1); - } - } - - createAndSaveNodeSchemaFile(deploymentType); - - try { - //close the ZipOutputStream - zos.close(); - System.out.println("File SDC.zip creation successful"); - - } catch(Exception ex) { - System.err.println("Failed to pack SDC.zip file, error: "+ex); - System.exit(1); - } - - //Generation flow end - generating SDC from narratives - - AnnotationConfigApplicationContext context = initContext(appConfigDir); - SdcSchemaFilesCassandraDao schemaFilesCassandraDao = (SdcSchemaFilesCassandraDao) context.getBean("sdc-schema-files-cassandra-dao"); - - byte[] fileBytes = baos.toByteArray(); - - Date date = new Date(); - String md5Hex = DigestUtils.md5Hex(fileBytes); - - SdcSchemaFilesData schemeFileData = new SdcSchemaFilesData(sdcReleaseNum, date, conformanceLevel, FILE_NAME, fileBytes, md5Hex); - CassandraOperationStatus saveSchemaFile = schemaFilesCassandraDao.saveSchemaFile(schemeFileData); - - if(!saveSchemaFile.equals(CassandraOperationStatus.OK)) { - System.err.println("SdcSchemaFileImport failed cassandra error" + saveSchemaFile); - System.exit(1); - } - - System.out.println("SdcSchemaFileImport successfully completed"); - - System.exit(0); - } - - public static void createAndSaveSchemaFileYaml(SchemaZipFileEnum schemaZipFileEnum, Object content) { - createAndSaveSchemaFileYaml(schemaZipFileEnum.getFileName(), schemaZipFileEnum.getImportFileList(), schemaZipFileEnum.getCollectionTitle(), content); - } - - public static void createAndSaveSchemaFileYaml(String fileName, String[] importFileList, String collectionTitle, Object content) { - - //Initialize the snake yaml dumper option - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - - //Create the new yaml - Yaml yaml = new Yaml(options); - yaml.setName(fileName); - - //Initialize the yaml contents - final Map<String, Object> data = new LinkedHashMap<>(); - data.put(ToscaTagNamesEnum.TOSCA_VERSION.getElementName(), TOSCA_VERSION); - - if (importFileList.length > 0) { - data.put("imports", importFileList); - } - - data.put(collectionTitle, content); - - //Save the new yaml to file - try { - - FileWriter writer; - File file = File.createTempFile(fileName, YAML_EXTENSION); - writer = new FileWriter(file); - - //Add the license as comment in top of file - writer.write(LICENSE_TXT); - - yaml.dump(data, writer); - - writer.close(); - - // begin writing a new ZIP entry, positions the stream to the start of the entry data - ZipEntry entry = new ZipEntry(yaml.getName() + YAML_EXTENSION); - zos.putNextEntry(entry); - FileInputStream stream = new FileInputStream(file.getAbsolutePath()); - int len; - while ((len = stream.read(buffer)) > 0) { - zos.write(buffer, 0, len); - } - //close the InputStream + + private static final String SEPARATOR = FileSystems.getDefault().getSeparator(); + + private static final String TOSCA_VERSION = "tosca_simple_yaml_1_1"; + + private static String importToscaPath; + + private static final byte[] buffer = new byte[1024]; + + private static final String YAML_EXTENSION = ".yml"; + + private static final String DEPLOYMENT_TYPE_ONAP = "onap"; + + private static String LICENSE_TXT; + + private static ZipOutputStream zos; + + public static void main(String[] args) throws Exception { + + //Generation flow start - generating SDC from normatives + System.out.println("Starting SdcSchemaFileImport procedure..."); + final String FILE_NAME = "SDC.zip"; + + if (args == null || !(args.length == 4 || args.length == 5)) { + usageAndExit(); + } + + importToscaPath = args[0]; + String sdcReleaseNum = args[1]; + String conformanceLevel = args[2]; + String appConfigDir = args[3]; + String deploymentType = null; + if (args.length == 5) { + deploymentType = args[4]; + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + zos = new ZipOutputStream(baos); + + //Initialize the license text + try { + LICENSE_TXT = new String(Files.readAllBytes(Paths.get(appConfigDir + SEPARATOR + "license.txt"))); + } catch (Exception e) { + System.err.println("Couldn't read license.txt in location :" + appConfigDir + ", error: " + e); + System.exit(1); + } + + //Loop over schema file list and create each yaml file from /import/tosca folder + SchemaZipFileEnum[] schemaFileList = SchemaZipFileEnum.values(); + for (SchemaZipFileEnum schemaZipFileEnum : schemaFileList) { + String folderName = schemaZipFileEnum.getSourceFolderName(); + String fileName = schemaZipFileEnum.getFileName(); + + if ((folderName != null) && (fileName != null)) { + File folder = new File(importToscaPath, folderName); + File path = new File(folder, fileName + YAML_EXTENSION); + + try (InputStream input = new FileInputStream(path)) { + // Convert the content of file to yaml + Yaml yamlFileSource = new Yaml(); + Object content = yamlFileSource.load(input); + + createAndSaveSchemaFileYaml(schemaZipFileEnum, content); + } catch (Exception e) { + System.err.println( + "Error in file creation : " + + schemaZipFileEnum.getFileName() + + ", " + + e.getMessage()); + System.exit(1); + } + } + } + + createAndSaveNodeSchemaFile(deploymentType); + + try { + //close the ZipOutputStream + zos.close(); + System.out.println("File SDC.zip creation successful"); + + } catch (Exception ex) { + System.err.println("Failed to pack SDC.zip file, error: " + ex); + System.exit(1); + } + + //Generation flow end - generating SDC from narratives + + AnnotationConfigApplicationContext context = initContext(appConfigDir); + SdcSchemaFilesCassandraDao schemaFilesCassandraDao = (SdcSchemaFilesCassandraDao) context + .getBean("sdc-schema-files-cassandra-dao"); + + byte[] fileBytes = baos.toByteArray(); + + Date date = new Date(); + String md5Hex = DigestUtils.md5Hex(fileBytes); + + SdcSchemaFilesData schemeFileData = new SdcSchemaFilesData(sdcReleaseNum, date, conformanceLevel, FILE_NAME, + fileBytes, md5Hex); + CassandraOperationStatus saveSchemaFile = schemaFilesCassandraDao.saveSchemaFile(schemeFileData); + + if (!saveSchemaFile.equals(CassandraOperationStatus.OK)) { + System.err.println("SdcSchemaFileImport failed cassandra error" + saveSchemaFile); + System.exit(1); + } + + System.out.println("SdcSchemaFileImport successfully completed"); + + System.exit(0); + } + + public static void createAndSaveSchemaFileYaml(SchemaZipFileEnum schemaZipFileEnum, Object content) { + createAndSaveSchemaFileYaml(schemaZipFileEnum.getFileName(), schemaZipFileEnum.getImportFileList(), + schemaZipFileEnum.getCollectionTitle(), content); + } + + public static void createAndSaveSchemaFileYaml(String fileName, String[] importFileList, String collectionTitle, + Object content) { + + //Initialize the snake yaml dumper option + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + + //Create the new yaml + Yaml yaml = new Yaml(options); + yaml.setName(fileName); + + //Initialize the yaml contents + final Map<String, Object> data = new LinkedHashMap<>(); + data.put(ToscaTagNamesEnum.TOSCA_VERSION.getElementName(), TOSCA_VERSION); + + if (importFileList.length > 0) { + data.put("imports", importFileList); + } + + data.put(collectionTitle, content); + + //Save the new yaml to file + try { + + FileWriter writer; + File file = File.createTempFile(fileName, YAML_EXTENSION); + writer = new FileWriter(file); + + //Add the license as comment in top of file + writer.write(LICENSE_TXT); + + yaml.dump(data, writer); + + writer.close(); + + // begin writing a new ZIP entry, positions the stream to the start of the entry data + ZipEntry entry = new ZipEntry(yaml.getName() + YAML_EXTENSION); + zos.putNextEntry(entry); + FileInputStream stream = new FileInputStream(file.getAbsolutePath()); + int len; + while ((len = stream.read(buffer)) > 0) { + zos.write(buffer, 0, len); + } + //close the InputStream file.delete(); stream.close(); - zos.closeEntry(); - - - } catch (IOException e) { - System.out.println("Error in file creation : " + fileName + ", " + e.getMessage()); - System.exit(1); - } - } - - /** - *the method is responsible for creating and storing the sdc normatives in the DB - * @param deploymentType if the deployments type is onap the onap narratives will be add to the zip - * @throws IOException thrown in case of issues in reding files. - */ - public static void createAndSaveNodeSchemaFile(String deploymentType) throws IOException { - - //Initialize the snake yaml dumper option - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - - Map<String, Object> nodeTypeList = new LinkedHashMap<>(); - - String[] importFileList = new String[]{"data.yml", "artifacts.yml", "capabilities.yml", "interfaces.yml", "relationships.yml"}; - String collectionTitle = "node_types"; - - //Create node.yaml - collect all types from normative-types and heat-types directories - String[] nodeTypesMainFolders = new String[]{"normative-types", "heat-types"}; - - if(DEPLOYMENT_TYPE_ONAP.equals(deploymentType)){ + zos.closeEntry(); + + + } catch (IOException e) { + System.out.println("Error in file creation : " + fileName + ", " + e.getMessage()); + System.exit(1); + } + } + + /** + * the method is responsible for creating and storing the sdc normatives in the DB + * + * @param deploymentType if the deployments type is onap the onap narratives will be add to the zip + * @throws IOException thrown in case of issues in reding files. + */ + public static void createAndSaveNodeSchemaFile(String deploymentType) throws IOException { + + //Initialize the snake yaml dumper option + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + + Map<String, Object> nodeTypeList = new LinkedHashMap<>(); + + String[] importFileList = new String[]{"data.yml", "artifacts.yml", "capabilities.yml", "interfaces.yml", + "relationships.yml"}; + String collectionTitle = "node_types"; + + //Create node.yaml - collect all types from normative-types and heat-types directories + String[] nodeTypesMainFolders = new String[]{"normative-types", "heat-types"}; + + if (DEPLOYMENT_TYPE_ONAP.equals(deploymentType)) { String[] onapNodeTypesMainFolders = new String[]{"nfv-types"}; - nodeTypesMainFolders=ArrayUtils.addAll(nodeTypesMainFolders,onapNodeTypesMainFolders); - } - - for (String nodeTypesMainFolder : nodeTypesMainFolders) { - try (Stream<Path> paths = Files.walk(Paths.get(importToscaPath + SEPARATOR + nodeTypesMainFolder))) { - paths.filter(path -> path.getFileName().toString().toLowerCase().endsWith(YAML_EXTENSION)) - .forEach(yamlFile -> { - try { - String path = yamlFile.toAbsolutePath().toString(); - System.out.println("Processing node type file " + path + "..."); - FileInputStream inputStream = new FileInputStream(path); - Yaml yaml = new Yaml(); - Map<String, Object> load = yaml.loadAs(inputStream, Map.class); - Map<String, Object> nodeType = (Map<String, Object>) load.get(collectionTitle); - nodeTypeList.putAll(nodeType); - - } catch (Exception e) { - System.err.println("Error in opening file " + yamlFile.toAbsolutePath().toString()); - System.exit(1); - } - }); + nodeTypesMainFolders = ArrayUtils.addAll(nodeTypesMainFolders, onapNodeTypesMainFolders); } + + for (String nodeTypesMainFolder : nodeTypesMainFolders) { + try (Stream<Path> paths = Files.walk(Paths.get(importToscaPath + SEPARATOR + nodeTypesMainFolder))) { + paths.filter(path -> path.getFileName().toString().toLowerCase().endsWith(YAML_EXTENSION)) + .forEach(yamlFile -> { + try { + String path = yamlFile.toAbsolutePath().toString(); + System.out.println("Processing node type file " + path + "..."); + FileInputStream inputStream = new FileInputStream(path); + Yaml yaml = new Yaml(); + Map<String, Object> load = yaml.loadAs(inputStream, Map.class); + Map<String, Object> nodeType = (Map<String, Object>) load.get(collectionTitle); + nodeTypeList.putAll(nodeType); + + } catch (Exception e) { + System.err.println("Error in opening file " + yamlFile.toAbsolutePath().toString()); + System.exit(1); + } + }); + } + } + createAndSaveSchemaFileYaml("nodes", importFileList, collectionTitle, nodeTypeList); + } + + private static void usageAndExit() { + SdcSchemaFileImportUsage(); + System.exit(1); + } + + private static void SdcSchemaFileImportUsage() { + System.err.println( + "Usage: <file dir/filename> <SDC release number> <Schema conformance level> <configuration dir> <deployment type optional>"); + } + + private static AnnotationConfigApplicationContext initContext(String appConfigDir) { + ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), + appConfigDir); + new ConfigurationManager(configurationSource); + return new AnnotationConfigApplicationContext(SdcSchemaFileImportConfiguration.class); } - createAndSaveSchemaFileYaml("nodes", importFileList, collectionTitle, nodeTypeList); - } - - private static void usageAndExit() { - SdcSchemaFileImportUsage(); - System.exit(1); - } - - private static void SdcSchemaFileImportUsage() { - System.err.println("Usage: <file dir/filename> <SDC release number> <Schema conformance level> <configuration dir> <deployment type optional>"); - } - - private static AnnotationConfigApplicationContext initContext(String appConfigDir) { - ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir); - new ConfigurationManager(configurationSource); - return new AnnotationConfigApplicationContext(SdcSchemaFileImportConfiguration.class); - } } |