branch develop updated (5b33e3b -> 082f99d)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository izi-eval. See http://git.codelutin.com/izi-eval.git from 5b33e3b refs #7578: Format d'export des graphiques new 082f99d fixes #7572 : Importer des valeurs seuils fixes #7563 : Importation de données qualitatives The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 082f99decdec72c1e2496817400e00e7fdea55c5 Author: Eric Chatellier <chatellier@codelutin.com> Date: Tue Jan 12 15:44:36 2016 +0100 fixes #7572 : Importer des valeurs seuils fixes #7563 : Importation de données qualitatives Summary of changes: masc-api/pom.xml | 6 ++ ...esholdsParser.java => CsvThresholdsParser.java} | 69 +++++++--------------- ...esholdsWriter.java => CsvThresholdsWriter.java} | 39 +++++------- .../fr/inra/masc/services/ThresholdService.java | 44 +++++++++----- masc-ui/pom.xml | 1 + .../main/java/fr/inra/masc/ui/MascUIHelper.java | 4 +- .../editor/threshold/ThresholdEditorHandler.java | 32 ++++++---- .../inra/masc/ui/widget/SvgImagePanelHandler.java | 3 - .../main/resources/i18n/masc-ui_en_GB.properties | 4 ++ .../main/resources/i18n/masc-ui_fr_FR.properties | 4 ++ 10 files changed, 104 insertions(+), 102 deletions(-) copy masc-api/src/main/java/fr/inra/masc/io/parser/{ThresholdsParser.java => CsvThresholdsParser.java} (57%) copy masc-api/src/main/java/fr/inra/masc/io/writer/{ThresholdsWriter.java => CsvThresholdsWriter.java} (68%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository izi-eval. See http://git.codelutin.com/izi-eval.git commit 082f99decdec72c1e2496817400e00e7fdea55c5 Author: Eric Chatellier <chatellier@codelutin.com> Date: Tue Jan 12 15:44:36 2016 +0100 fixes #7572 : Importer des valeurs seuils fixes #7563 : Importation de données qualitatives --- masc-api/pom.xml | 6 ++ .../inra/masc/io/parser/CsvThresholdsParser.java | 82 +++++++++++++++++++++ .../inra/masc/io/writer/CsvThresholdsWriter.java | 85 ++++++++++++++++++++++ .../fr/inra/masc/services/ThresholdService.java | 44 +++++++---- masc-ui/pom.xml | 1 + .../main/java/fr/inra/masc/ui/MascUIHelper.java | 4 +- .../editor/threshold/ThresholdEditorHandler.java | 32 +++++--- .../inra/masc/ui/widget/SvgImagePanelHandler.java | 3 - .../main/resources/i18n/masc-ui_en_GB.properties | 4 + .../main/resources/i18n/masc-ui_fr_FR.properties | 4 + 10 files changed, 234 insertions(+), 31 deletions(-) diff --git a/masc-api/pom.xml b/masc-api/pom.xml index 35a2bb2..8399c10 100644 --- a/masc-api/pom.xml +++ b/masc-api/pom.xml @@ -166,6 +166,12 @@ <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-codec</artifactId> </dependency> + + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-csv</artifactId> + <version>1.2</version> + </dependency> </dependencies> diff --git a/masc-api/src/main/java/fr/inra/masc/io/parser/CsvThresholdsParser.java b/masc-api/src/main/java/fr/inra/masc/io/parser/CsvThresholdsParser.java new file mode 100644 index 0000000..db5fd52 --- /dev/null +++ b/masc-api/src/main/java/fr/inra/masc/io/parser/CsvThresholdsParser.java @@ -0,0 +1,82 @@ +package fr.inra.masc.io.parser; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVParser; +import org.apache.commons.csv.CSVRecord; +import org.apache.commons.io.IOUtils; + +import com.google.common.base.Charsets; +import com.google.common.collect.Lists; +import com.google.common.io.Files; + +import fr.inra.masc.model.EditableCriteria; +import fr.inra.masc.model.EditableCriteriaImpl; +import fr.inra.masc.model.ThresholdOperator; +import fr.inra.masc.model.ThresholdValue; +import fr.inra.masc.model.ThresholdValueImpl; + +public class CsvThresholdsParser { + + public List<EditableCriteria> getModel(File file) throws IOException { + + List<EditableCriteria> criterias = Lists.newArrayList(); + + BufferedReader reader = Files.newReader(file, Charsets.UTF_8); + CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT.withAllowMissingColumnNames()); + + try { + + String line; + + for (CSVRecord record : parser) { + EditableCriteria criteria = loadCriteria(record); + criterias.add(criteria); + } + + // close reader + parser.close(); + } finally { + + // make sure model is closed + IOUtils.closeQuietly(parser); + } + + return criterias; + } + + protected EditableCriteria loadCriteria(CSVRecord record) { + + Iterator<String> itr = record.iterator(); + + String criteriaName = itr.next(); + String unit = itr.next(); + + List<ThresholdValue> values = Lists.newArrayList(); + + EditableCriteria result = new EditableCriteriaImpl(); + result.setUnit(unit); + result.setName(criteriaName); + while (itr.hasNext()) { + + String operatorString = itr.next(); + ThresholdOperator operator = + ThresholdOperator.fromString(operatorString); + + String valueString = itr.next(); + Double value = Double.valueOf(valueString); + + values.add(new ThresholdValueImpl(value, + operator.getSign(), + operator.isCanBeEqual())); + } + result.setValues(values); + + return result; + } +} diff --git a/masc-api/src/main/java/fr/inra/masc/io/writer/CsvThresholdsWriter.java b/masc-api/src/main/java/fr/inra/masc/io/writer/CsvThresholdsWriter.java new file mode 100644 index 0000000..cf66ee5 --- /dev/null +++ b/masc-api/src/main/java/fr/inra/masc/io/writer/CsvThresholdsWriter.java @@ -0,0 +1,85 @@ +package fr.inra.masc.io.writer; +/* + * #%L + * Masc :: API + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2016 Inra, Codelutin, Tony chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import fr.inra.masc.model.EditableCriteria; +import fr.inra.masc.model.ThresholdOperator; +import fr.inra.masc.model.ThresholdValue; +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.util.List; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; + +/** + * To export in a file thresholds as csv format. + */ +public class CsvThresholdsWriter { + + public void write(List<EditableCriteria> criterias, File file) throws IOException { + + BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + CSVPrinter printer = CSVFormat.DEFAULT.withAllowMissingColumnNames().print(writer); + try { + + for (EditableCriteria criteria : criterias) { + criteriaToString(criteria, printer); + } + + // close writer + printer.close(); + } finally { + IOUtils.closeQuietly(printer); + } + } + + protected String criteriaToString(EditableCriteria criteria, CSVPrinter printer) throws IOException { + List<ThresholdValue> values = criteria.getValues(); + String result = null; + + if (!CollectionUtils.isEmpty(values)) { + + printer.print(criteria.getName()); + String unit = criteria.getUnit(); + printer.print(StringUtils.isBlank(unit) ? "" : unit); + + for (ThresholdValue value : values) { + + ThresholdOperator operator = + ThresholdOperator.fromThresholdValue(value); + printer.print(operator.getText()); + printer.print(value.getValue()); + } + + printer.println(); + } + return result; + } +} diff --git a/masc-api/src/main/java/fr/inra/masc/services/ThresholdService.java b/masc-api/src/main/java/fr/inra/masc/services/ThresholdService.java index c362050..afde6bb 100644 --- a/masc-api/src/main/java/fr/inra/masc/services/ThresholdService.java +++ b/masc-api/src/main/java/fr/inra/masc/services/ThresholdService.java @@ -1,5 +1,16 @@ package fr.inra.masc.services; +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /* * #%L * Masc :: API @@ -27,25 +38,18 @@ package fr.inra.masc.services; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; + import fr.inra.masc.MascTechnicalException; -import fr.inra.masc.utils.MascUtil; +import fr.inra.masc.io.parser.CsvThresholdsParser; import fr.inra.masc.io.parser.ThresholdsParser; +import fr.inra.masc.io.writer.CsvThresholdsWriter; import fr.inra.masc.io.writer.ThresholdsWriter; import fr.inra.masc.model.Criterias; import fr.inra.masc.model.EditableCriteria; import fr.inra.masc.model.MascModel; import fr.inra.masc.model.ThresholdValue; import fr.inra.masc.model.ThresholdValueImpl; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Set; +import fr.inra.masc.utils.MascUtil; /** * Service to import/export thresholds. @@ -68,8 +72,13 @@ public class ThresholdService extends MascService { List<EditableCriteria> criterias; try { - ThresholdsParser parser = new ThresholdsParser(); - criterias = parser.getModel(file); + if (file.getName().toLowerCase().endsWith(".csv")) { + CsvThresholdsParser parser = new CsvThresholdsParser(); + criterias = parser.getModel(file); + } else { + ThresholdsParser parser = new ThresholdsParser(); + criterias = parser.getModel(file); + } } catch (IOException e) { throw new MascTechnicalException( @@ -147,8 +156,13 @@ public class ThresholdService extends MascService { log.debug("Will export threshold to file: " + file); } try { - ThresholdsWriter writer = new ThresholdsWriter(); - writer.write(criterias, file); + if (file.getName().toLowerCase().endsWith(".csv")) { + CsvThresholdsWriter writer = new CsvThresholdsWriter(); + writer.write(criterias, file); + } else { + ThresholdsWriter writer = new ThresholdsWriter(); + writer.write(criterias, file); + } } catch (IOException eee) { throw new MascTechnicalException( "Failed to write thresholds file", eee); diff --git a/masc-ui/pom.xml b/masc-ui/pom.xml index be5e3fd..5c3098d 100644 --- a/masc-ui/pom.xml +++ b/masc-ui/pom.xml @@ -243,6 +243,7 @@ <configuration> <entries> <entry> + <basedir>${project.basedir}/src/main/java/</basedir> <basedir>${project.build.directory}/generated-sources/java/</basedir> </entry> </entries> diff --git a/masc-ui/src/main/java/fr/inra/masc/ui/MascUIHelper.java b/masc-ui/src/main/java/fr/inra/masc/ui/MascUIHelper.java index 238862c..08609b2 100644 --- a/masc-ui/src/main/java/fr/inra/masc/ui/MascUIHelper.java +++ b/masc-ui/src/main/java/fr/inra/masc/ui/MascUIHelper.java @@ -67,7 +67,9 @@ public class MascUIHelper extends JAXXWidgetUtil { JPG(_("masc.file.app.image.dialog"), null, _("masc.fileType.app.jpg"), ".jpg", ".jpeg"), SVG(_("masc.file.app.image.svg"), null, _("masc.fileType.app.svg"), ".svg"), CSV(_("masc.file.app.import.csv"), null, _("masc.fileType.app.csv"), ".csv"), - REPORT(null, _("masc.file.report.dialog"), _("masc.fileType.pdf"), ".pdf"); + REPORT(null, _("masc.file.report.dialog"), _("masc.fileType.pdf"), ".pdf"), + THRESHOLD(_("masc.file.app.threshold.open"), _("masc.file.app.threashold.save"), _("masc.fileType.threshold"), ".mthreshold"), + THRESHOLDCSV(_("masc.file.app.threshold.open"), _("masc.file.app.threashold.save"), _("masc.fileType.threshold.csv"), ".csv"); private String openTitle; diff --git a/masc-ui/src/main/java/fr/inra/masc/ui/content/editor/threshold/ThresholdEditorHandler.java b/masc-ui/src/main/java/fr/inra/masc/ui/content/editor/threshold/ThresholdEditorHandler.java index c4eafbe..df8e30e 100644 --- a/masc-ui/src/main/java/fr/inra/masc/ui/content/editor/threshold/ThresholdEditorHandler.java +++ b/masc-ui/src/main/java/fr/inra/masc/ui/content/editor/threshold/ThresholdEditorHandler.java @@ -172,15 +172,19 @@ public class ThresholdEditorHandler extends MascHandler { public void importValues() { - ImportThresholdModel model = new ImportThresholdModel(); + //ImportThresholdModel model = new ImportThresholdModel(); - boolean accept = showImportUI(model); + //boolean accept = showImportUI(model); + + File importFile = MascUIHelper.openFile( + ui, MascUIHelper.MascFileType.THRESHOLD.getOpenTitle(), + MascUIHelper.MascFileType.THRESHOLD, MascUIHelper.MascFileType.THRESHOLDCSV); - if (accept) { + if (importFile != null) { // can import thresholds - File importFile = model.getImportFile(); + //File importFile = model.getImportFile(); if (log.isInfoEnabled()) { log.info("Import threshold from " + importFile); @@ -222,15 +226,19 @@ public class ThresholdEditorHandler extends MascHandler { public void exportValues() { - ExportThresholdModel model = new ExportThresholdModel(); + File exportFile = MascUIHelper.saveAsFile( + ui, MascUIHelper.MascFileType.THRESHOLD.getOpenTitle(), "izi-eval", + MascUIHelper.MascFileType.THRESHOLD, MascUIHelper.MascFileType.THRESHOLDCSV); + + //ExportThresholdModel model = new ExportThresholdModel(); - boolean accept = showExportUI(model); + //boolean accept = showExportUI(model); - if (accept) { + if (exportFile != null) { // export thresholds - File exportFile = model.getExportFile(getThresholdExtension()); + //File exportFile = model.getExportFile(getThresholdExtension()); if (log.isInfoEnabled()) { log.info("Export thresholds to file " + exportFile); @@ -257,7 +265,7 @@ public class ThresholdEditorHandler extends MascHandler { return _("masc.config.threshold.extension"); } - protected boolean showExportUI(ExportThresholdModel model) { + /*protected boolean showExportUI(ExportThresholdModel model) { // show ui @@ -318,9 +326,9 @@ public class ThresholdEditorHandler extends MascHandler { doIt = valid || showExportUI(model); } return doIt; - } + }*/ - protected boolean showImportUI(ImportThresholdModel model) { + /*protected boolean showImportUI(ImportThresholdModel model) { // show ui @@ -369,7 +377,7 @@ public class ThresholdEditorHandler extends MascHandler { doIt = valid || showImportUI(model); } return doIt; - } + }*/ protected void reloadModel() { // reload model diff --git a/masc-ui/src/main/java/fr/inra/masc/ui/widget/SvgImagePanelHandler.java b/masc-ui/src/main/java/fr/inra/masc/ui/widget/SvgImagePanelHandler.java index 3bdcd32..ff5c366 100644 --- a/masc-ui/src/main/java/fr/inra/masc/ui/widget/SvgImagePanelHandler.java +++ b/masc-ui/src/main/java/fr/inra/masc/ui/widget/SvgImagePanelHandler.java @@ -39,8 +39,6 @@ import java.util.Date; import javax.swing.JComponent; import javax.swing.JOptionPane; -import org.apache.batik.ext.awt.image.spi.ImageWriter; -import org.apache.batik.ext.awt.image.spi.ImageWriterRegistry; import org.apache.batik.swing.JSVGCanvas; import org.apache.batik.swing.JSVGScrollPane; import org.apache.batik.swing.svg.GVTTreeBuilderAdapter; @@ -54,7 +52,6 @@ import org.apache.batik.transcoder.image.PNGTranscoder; import org.apache.batik.transcoder.svg2svg.SVGTranscoder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.xmlgraphics.image.writer.imageio.ImageIOJPEGImageWriter; import org.w3c.dom.svg.SVGDocument; import fr.inra.masc.ui.MascUIHelper; diff --git a/masc-ui/src/main/resources/i18n/masc-ui_en_GB.properties b/masc-ui/src/main/resources/i18n/masc-ui_en_GB.properties index d27c183..c2bf8cd 100644 --- a/masc-ui/src/main/resources/i18n/masc-ui_en_GB.properties +++ b/masc-ui/src/main/resources/i18n/masc-ui_en_GB.properties @@ -101,6 +101,10 @@ masc.file.app.r.dialog=Please select DEXi executable file. masc.file.export.dialog=Please select a file to export. masc.file.import.dialog=Please select a DEXi file. masc.file.open.dialog=Open a DEXi (*.dxi) or IZI-EVAL (*.izi) file +masc.file.app.threshold.open=Open threshold file +masc.file.app.threshold.save=Save threshold file +masc.fileType.threshold=IZI-EVAL threshold file (*.mthreshold) +masc.fileType.threshold.csv=IZI-EVAL threshold file (*.csv) masc.file.report.dialog=Please select a file to save the reports masc.file.saveAs.dialog=Save as a IZI-EVAL file masc.fileType.app.csv=CSV file (*.csv) diff --git a/masc-ui/src/main/resources/i18n/masc-ui_fr_FR.properties b/masc-ui/src/main/resources/i18n/masc-ui_fr_FR.properties index 8595dcf..3a0b531 100644 --- a/masc-ui/src/main/resources/i18n/masc-ui_fr_FR.properties +++ b/masc-ui/src/main/resources/i18n/masc-ui_fr_FR.properties @@ -108,7 +108,11 @@ masc.fileType.app.dexi=Fichier exécutable (*.exe) masc.fileType.app.dexiEval=Fichier exécutable (*.exe) masc.fileType.app.jpg=Image JPEG (*.jpg) masc.fileType.app.png=Image PNG (*.png) +masc.file.app.threshold.open=Ouvrir un fichier de valeurs-seuils +masc.file.app.threshold.save=Exporter un fichier de valeurs-seuils masc.fileType.app.r=Fichier exécutable (*.exe) +masc.fileType.threshold=IZI-EVAL fichier de valeurs-seuils (*.mthreshold) +masc.fileType.threshold.csv=IZI-EVAL fichier de valeurs-seuils (*.csv) masc.fileType.app.svg=Image SVG (*.svg) masc.fileType.dexi=Fichier DEXi (*.dxi) masc.fileType.masc=Fichier IZI-EVAL (*.izi) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm