Author: bpoussin Date: 2014-12-16 15:38:15 +0000 (Tue, 16 Dec 2014) New Revision: 4161 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4161 Log: add possibility to force export result compression (.gz) Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java Modified: trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-12-16 09:48:40 UTC (rev 4160) +++ trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2014-12-16 15:38:15 UTC (rev 4161) @@ -761,6 +761,18 @@ return result; } + /** + * Force la compression des fichiers d'export + * + * @return + * @since 4.4.0.0 + */ + public boolean getExportForceCompression() { + ApplicationConfig config = SimulationContext.get().getConfig(); + boolean result = config.getOptionAsBoolean(Option.EXPORT_FORCE_COMPRESSION.key); + return result; + } + public void setDefaultExportNames(List<String> exportNames) { StringBuilder sb = new StringBuilder(); for (String exportName : exportNames) { @@ -875,6 +887,9 @@ result.put(Option.CACHE_BACKEND_FACTORY_CLASS.key, getOption(Option.CACHE_BACKEND_FACTORY_CLASS.key)); + result.put(Option.EXPORT_FORCE_COMPRESSION.key, + getOption(Option.EXPORT_FORCE_COMPRESSION.key)); + return result; } @@ -1098,6 +1113,7 @@ JAVADOC_DIRECTORY("javadoc.directory", n("isisfish.config.main.javadocDirectory.description"), "${isis.home.directory}" + File.separator + "isis-docs"), BACKUP_DIRECTORY("backup.directory", n("isisfish.config.main.defaultBackupDirectory.description"), "${isis.home.directory}" + File.separator + "isis-backup"), + EXPORT_FORCE_COMPRESSION("export.force.compression", n("isisfish.config.export.force.compression.description"), "false"), DEFAULT_EXPORT_NAMES("default.export.names", n("isisfish.config.main.defaultExportNames.description"), ""), DEFAULT_RESULT_NAMES("default.result.names", n("isisfish.config.main.defaultResultNames.description"), ""), DEFAULT_MAP_FILENAME("default.map.filename", n("isisfish.config.main.defaultMapFile.description"), "maps/vmap_area_thin.shp"), Modified: trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2014-12-16 09:48:40 UTC (rev 4160) +++ trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2014-12-16 15:38:15 UTC (rev 4161) @@ -25,14 +25,11 @@ package fr.ifremer.isisfish.export; +import fr.ifremer.isisfish.IsisFish; import java.io.BufferedWriter; import java.io.File; -import java.io.FileWriter; import java.io.Writer; import java.util.List; -import java.util.Properties; - -import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; @@ -41,7 +38,17 @@ import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.StorageHelper; import fr.ifremer.isisfish.simulator.SimulationParameterPropertiesHelper; +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.nio.charset.Charset; +import java.util.Properties; +import java.util.zip.GZIPOutputStream; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; + /** * Helper for exports manipulation. * @@ -58,6 +65,11 @@ /** Class logger. */ private static Log log = LogFactory.getLog(ExportHelper.class); + static final private String COMPRESSION_EXTENSION = ".gz"; + // IDEA: perhaps add this in simulation configuration to permit easy portable + // export between CapArmor and Windows world + static final private Charset charset = Charset.forName("UTF-8"); + /** * Permet de faire les exports pour une simulation. * @@ -100,9 +112,15 @@ */ protected static void exportToFile(SimulationStorage simulation, File destdir, Export export) throws Exception { + String filename = export.getExportFilename(); String extension = export.getExtensionFilename(); + if (!StringUtils.endsWithIgnoreCase(extension, COMPRESSION_EXTENSION) + && IsisFish.config.getExportForceCompression()) { + extension += COMPRESSION_EXTENSION; + } + File file = new File(destdir, filename + extension); // prevent two export with same name // name MyExport.csv become MyExport_1.csv @@ -114,7 +132,17 @@ Writer out = null; try { - out = new BufferedWriter(new FileWriter(file)); + + OutputStream os = new FileOutputStream(file); + + // if compression is needed by extension, add compression writer + if (StringUtils.endsWithIgnoreCase(extension, COMPRESSION_EXTENSION)) { + os = new GZIPOutputStream(os); + } + + out = new PrintWriter(new BufferedWriter( + new OutputStreamWriter(os, charset))); + export.export(simulation, out); } finally { IOUtils.closeQuietly(out); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2014-12-16 09:48:40 UTC (rev 4160) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/WelcomeHandler.java 2014-12-16 15:38:15 UTC (rev 4161) @@ -232,6 +232,7 @@ modelBuilder.addOption(IsisConfig.Option.MAPPED_RESULT_MATRIX_VECTOR_CLASS); modelBuilder.addOption(IsisConfig.Option.SIMULATION_STORE_RESULT_ON_DISK); modelBuilder.addOption(IsisConfig.Option.SIMULATION_STORE_RESULT_CACHE_STEP); + modelBuilder.addOption(IsisConfig.Option.EXPORT_FORCE_COMPRESSION); // category database vcs modelBuilder.addCategory(t("isisfish.config.category.officialvcs"), t("isisfish.config.category.officialvcs.description"));