branch feature/6688 updated (bd6f2ef -> 11bdb67)
This is an automated email from the git hooks/post-receive script. New change to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git from bd6f2ef can override cruise + test for it new a1b9ead make Serializable some objects (to include them in a ui model) + add a valid result state new d64ac8d make serializable configuration new c2188a8 change rank order to short for gear + only check gear on operation if there is one new 573a659 review howto validate the layout of an archive new 7bf0b6e add report file in configuration new 5cfc0ce be able to adapt progression total new 3f35fa2 fix archive api (to be serializable) new b7d0d75 add validate import file methods in service new de1b81b ajout d'une option de configuration pour le répertoire de sauvegarde des rapports lors de l'import générique new 63d7e08 update TODO in doc new cb8517a mise en place des rapports de validation new ae34247 fix css new 11bdb67 ecran d'import au format generique The 13 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 11bdb672f87547e4b2691267c573a3e638cd4fe6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 10:03:11 2015 +0100 ecran d'import au format generique commit ae34247d99ecde69c37a542dcfe81efef74f6f2d Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 10:02:51 2015 +0100 fix css commit cb8517a863ef2c67c84a575f34c862683203e79e Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 10:02:36 2015 +0100 mise en place des rapports de validation commit 63d7e0852e5fc1dd58808af623dde1a904b36af3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 09:27:40 2015 +0100 update TODO in doc commit de1b81bac986d4103be7d53d82344f9a278458ef Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 08:48:53 2015 +0100 ajout d'une option de configuration pour le répertoire de sauvegarde des rapports lors de l'import générique commit b7d0d751d22d70053468ee59488c44191bcb560d Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:45:07 2015 +0100 add validate import file methods in service commit 3f35fa24e4e2c4129d42262b7b9fd1c3ce1be9e0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:44:38 2015 +0100 fix archive api (to be serializable) commit 5cfc0ce3b94f575f3eaf28275ccdac801091395d Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:44:09 2015 +0100 be able to adapt progression total commit 7bf0b6e62cd1bab860c0013923f79b3f0d87cd73 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:43:28 2015 +0100 add report file in configuration commit 573a659a2d577d4ad823b97e8fb00e9a1021e8be Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:43:01 2015 +0100 review howto validate the layout of an archive commit c2188a87d50574e5352f20240b412f2febd5c7a8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:41:05 2015 +0100 change rank order to short for gear + only check gear on operation if there is one commit d64ac8d6afaae3cc4432c955d491ac5351cec7cf Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 16:44:09 2015 +0100 make serializable configuration commit a1b9ead8ba749834576b3e75172e23d2f99f31be Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 08:42:46 2015 +0100 make Serializable some objects (to include them in a ui model) + add a valid result state Summary of changes: .../java/fr/ifremer/tutti/TuttiConfiguration.java | 7 + .../fr/ifremer/tutti/TuttiConfigurationOption.java | 7 + .../i18n/tutti-persistence_en_GB.properties | 1 + .../i18n/tutti-persistence_fr_FR.properties | 1 + .../genericformat/GenericFormatArchive.java | 129 +++---- ...GenericFormatArchiveInvalidLayoutException.java | 19 ++ .../genericformat/GenericFormatExportService.java | 2 +- .../GenericFormatImportConfiguration.java | 15 +- .../genericformat/GenericFormatImportContext.java | 10 +- .../GenericFormatImportCruiseResult.java | 5 +- .../GenericFormatImportOperationResult.java | 5 +- .../genericformat/GenericFormatImportRequest.java | 19 +- .../genericformat/GenericFormatImportResult.java | 61 +++- .../genericformat/GenericFormatImportService.java | 370 ++++++++++++++++++--- .../GenericFormatImportValidationHelper.java | 6 +- .../GenericFormatReferentialImportResult.java | 5 +- .../GenericFormatValidateFileContext.java | 72 ++++ .../GenericFormatValidateFileResult.java | 89 +++++ .../consumer/CsvConsumerForGearCaracteristic.java | 2 +- .../consumer/CsvConsumerForOperation.java | 12 +- .../consumer/GearNotFoundInCruiseException.java | 6 +- ...t_fr.ftl => genericFormatValidateReport_fr.ftl} | 214 +++--------- .../resources/i18n/tutti-service_en_GB.properties | 10 + .../resources/i18n/tutti-service_fr_FR.properties | 11 +- .../GenericFormatImportServiceTest.java | 24 ++ .../filtered-resources/tutti-help-fr.properties | 97 +++--- .../fr/{genericExport.html => genericFormat.html} | 20 +- tutti-ui-swing/src/main/help/fr/index.html | 2 +- .../main/help/fr/manageTemporaryReferential.html | 2 + tutti-ui-swing/src/main/help/fr/menu.html | 2 + tutti-ui-swing/src/main/help/fr/navbar.js | 2 +- .../fr/ifremer/tutti/ui/swing/TuttiScreen.java | 8 +- .../action/OpenGenericFormatImportScreen.java | 18 + .../fr/ifremer/tutti/ui/swing/content/MainUI.css | 10 + .../fr/ifremer/tutti/ui/swing/content/MainUI.jaxx | 1 + .../tutti/ui/swing/content/MainUIHandler.java | 8 + .../swing/content/config/TuttiConfigUIHandler.java | 3 + .../genericformat/GenericFormatImportUI.css | 154 +++++++++ .../genericformat/GenericFormatImportUI.jaxx | 156 +++++++++ .../GenericFormatImportUIHandler.java | 135 ++++++++ .../genericformat/GenericFormatImportUIModel.java | 234 +++++++++++++ .../actions/GenericFormatImportAction.java | 186 +++++++++++ .../actions/GenericFormatValidateAction.java | 138 ++++++++ .../OpenGenericFormatImportReportAction.java | 55 +++ .../OpenGenericFormatValidateReportAction.java | 55 +++ .../SaveGenericFormatImportReportAction.java | 78 +++++ .../SaveGenericFormatValidateReportAction.java | 78 +++++ .../tutti/ui/swing/content/home/SelectCruiseUI.css | 2 +- .../ui/swing/content/protocol/EditProtocolUI.css | 2 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 86 +++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 81 ++++- 51 files changed, 2340 insertions(+), 375 deletions(-) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchiveInvalidLayoutException.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java copy tutti-service/src/main/resources/ftl/{pupitriReport_fr.ftl => genericFormatValidateReport_fr.ftl} (55%) rename tutti-ui-swing/src/main/help/fr/{genericExport.html => genericFormat.html} (98%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenGenericFormatImportScreen.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatValidateAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatImportReportAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatValidateReportAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit a1b9ead8ba749834576b3e75172e23d2f99f31be Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 08:42:46 2015 +0100 make Serializable some objects (to include them in a ui model) + add a valid result state --- .../tutti/service/genericformat/GenericFormatArchive.java | 5 ++++- .../genericformat/GenericFormatImportCruiseResult.java | 5 ++++- .../genericformat/GenericFormatImportOperationResult.java | 5 ++++- .../service/genericformat/GenericFormatImportResult.java | 15 ++++++++++++++- .../GenericFormatReferentialImportResult.java | 5 ++++- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java index 30c465a..0e60317 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java @@ -15,6 +15,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.LineNumberReader; +import java.io.Serializable; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; @@ -32,7 +33,9 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatArchive { +public class GenericFormatArchive implements Serializable { + + private static final long serialVersionUID = 1L; /** Logger. */ private static final Log log = LogFactory.getLog(GenericFormatArchive.class); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java index 197256e..1e46aee 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportCruiseResult.java @@ -6,6 +6,7 @@ import com.google.common.collect.Iterables; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import java.io.Serializable; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -17,7 +18,9 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatImportCruiseResult { +public class GenericFormatImportCruiseResult implements Serializable { + + private static final long serialVersionUID = 1L; public static final Function<GenericFormatImportCruiseResult, Cruise> TO_CRUISE_FUNCTION = new Function<GenericFormatImportCruiseResult, Cruise>() { @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java index 159e75b..ac36d0e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java @@ -5,6 +5,7 @@ import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import javax.annotation.Nullable; +import java.io.Serializable; import java.util.LinkedHashSet; import java.util.Set; @@ -14,7 +15,7 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatImportOperationResult { +public class GenericFormatImportOperationResult implements Serializable { public static final Function<GenericFormatImportOperationResult, FishingOperation> TO_FISHING_OPERATION_FUNCTION = new Function<GenericFormatImportOperationResult, FishingOperation>() { @Nullable @@ -24,6 +25,8 @@ public class GenericFormatImportOperationResult { } }; + private static final long serialVersionUID = 1L; + private final Set<String> checkErrors; private final FishingOperation fishingOperation; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java index 2a87b5e..f4b939d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java @@ -11,6 +11,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import java.io.Serializable; import java.util.Collection; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -23,7 +24,9 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatImportResult { +public class GenericFormatImportResult implements Serializable{ + + private static final long serialVersionUID = 1L; private final Map<String, GenericFormatImportCruiseResult> cruiseResults; @@ -41,6 +44,8 @@ public class GenericFormatImportResult { private final GenericFormatArchive archive; + private boolean valid; + public GenericFormatImportResult(GenericFormatImportContext importContext) { this.archive = importContext.getImportRequest().getArchive(); @@ -136,4 +141,12 @@ public class GenericFormatImportResult { cruiseResults.put(cruise.getId(), cruiseResult); } + + public boolean isValid() { + return valid; + } + + public void setValid(boolean valid) { + this.valid = valid; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java index 16dcec7..bf4bb86 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java @@ -6,6 +6,7 @@ import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -18,7 +19,9 @@ import java.util.TreeMap; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatReferentialImportResult<E extends TuttiReferentialEntity, K extends Comparable<K>> { +public class GenericFormatReferentialImportResult<E extends TuttiReferentialEntity, K extends Comparable<K>> implements Serializable { + + private static final long serialVersionUID = 1L; private final Map<String, E> entitiesAdded; -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit d64ac8d6afaae3cc4432c955d491ac5351cec7cf Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 16:44:09 2015 +0100 make serializable configuration --- .../service/genericformat/GenericFormatImportConfiguration.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java index 89b7428..f203f29 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java @@ -1,6 +1,7 @@ package fr.ifremer.tutti.service.genericformat; import java.io.File; +import java.io.Serializable; /** * Created on 2/23/15. @@ -8,7 +9,9 @@ import java.io.File; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatImportConfiguration { +public class GenericFormatImportConfiguration implements Serializable { + + private static final long serialVersionUID = 1L; private String programId; -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit c2188a87d50574e5352f20240b412f2febd5c7a8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:41:05 2015 +0100 change rank order to short for gear + only check gear on operation if there is one --- .../genericformat/GenericFormatImportValidationHelper.java | 6 ++---- .../consumer/CsvConsumerForGearCaracteristic.java | 2 +- .../genericformat/consumer/CsvConsumerForOperation.java | 12 +++++++----- .../consumer/GearNotFoundInCruiseException.java | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java index 28a313e..91c2bba 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java @@ -92,10 +92,8 @@ public class GenericFormatImportValidationHelper implements Closeable { return cruiseContext; } - - - - public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatImportContext importContext, ImportRow<R> row, Gear gear, int rankOrder) { + + public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatImportContext importContext, ImportRow<R> row, Gear gear, short rankOrder) { Cruise cruise = row.getBean().getCruise(); GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(cruise); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java index c051f76..1450bd5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java @@ -42,7 +42,7 @@ public class CsvConsumerForGearCaracteristic extends CsvComsumer<GearCaracterist GearCaracteristicRow bean = row.getBean(); Gear gear = bean.getGear(); - int rankOrder = bean.getRankOrder(); + short rankOrder = bean.getRankOrder(); Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); if (cruiseGear != null) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java index 3a4619e..60b340e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java @@ -51,13 +51,15 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation } else { Gear gear = bean.getGear(); - int rankOrder = bean.getGearRankOrder(); + Short rankOrder = bean.getGearRankOrder(); - Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); - if (cruiseGear != null) { - bean.setGear(cruiseGear); - } + if (gear != null && rankOrder != null) { + Gear cruiseGear = validationHelper.getGear(this, importContext, row, gear, rankOrder); + if (cruiseGear != null) { + bean.setGear(cruiseGear); + } + } NuitonValidatorResult validatorResult = validationHelper.validateFishingOperation(fishingOperation); if (validatorResult.hasFatalMessages()) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java index 5dd59e5..070c5e0 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/GearNotFoundInCruiseException.java @@ -19,9 +19,9 @@ public class GearNotFoundInCruiseException extends Exception { private final Gear gear; - private final int rankOrder; + private final short rankOrder; - public GearNotFoundInCruiseException(Cruise cruise, Gear gear, int rankOrder) { + public GearNotFoundInCruiseException(Cruise cruise, Gear gear, short rankOrder) { this.cruise = cruise; this.gear = gear; this.rankOrder = rankOrder; @@ -35,7 +35,7 @@ public class GearNotFoundInCruiseException extends Exception { return gear; } - public int getRankOrder() { + public short getRankOrder() { return rankOrder; } -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 573a659a2d577d4ad823b97e8fb00e9a1021e8be Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:43:01 2015 +0100 review howto validate the layout of an archive --- .../genericformat/GenericFormatArchive.java | 124 ++++++++------------- ...GenericFormatArchiveInvalidLayoutException.java | 19 ++++ 2 files changed, 68 insertions(+), 75 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java index 0e60317..3ea7e5f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java @@ -6,7 +6,6 @@ import fr.ifremer.tutti.persistence.ProgressionModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.vfs2.FileObject; -import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.ApplicationIOUtil; import org.nuiton.jaxx.application.ApplicationTechnicalException; @@ -84,7 +83,7 @@ public class GenericFormatArchive implements Serializable { private final File archiveFile; - private final Path workingDirectory; + private final File workingDirectory; private final ArchiveMode archiveMode; @@ -94,7 +93,7 @@ public class GenericFormatArchive implements Serializable { try { - Path workingDirectory = Files.createTempDirectory(tempDirectory.toPath(), "genericImport"); + File workingDirectory = Files.createTempDirectory(tempDirectory.toPath(), "genericImport").toFile(); GenericFormatArchive archive = new GenericFormatArchive(ArchiveMode.IMPORT, archiveFile, workingDirectory); return archive; @@ -108,7 +107,7 @@ public class GenericFormatArchive implements Serializable { try { - Path workingDirectory = Files.createTempDirectory(tempDirectory.toPath(), "genericExport"); + File workingDirectory = Files.createTempDirectory(tempDirectory.toPath(), "genericExport").toFile(); GenericFormatArchive archive = new GenericFormatArchive(ArchiveMode.EXPORT, archiveFile, workingDirectory); return archive; @@ -120,12 +119,12 @@ public class GenericFormatArchive implements Serializable { public static GenericFormatArchive forExportFromWorkingDirectory(File archiveFile, File workingDirectory) { - GenericFormatArchive archive = new GenericFormatArchive(ArchiveMode.EXPORT, archiveFile, workingDirectory.toPath()); + GenericFormatArchive archive = new GenericFormatArchive(ArchiveMode.EXPORT, archiveFile, workingDirectory); return archive; } - public Path getWorkingDirectoryPath() { + public File getWorkingDirectoryPath() { return workingDirectory; } @@ -209,29 +208,56 @@ public class GenericFormatArchive implements Serializable { return getPath(ArchiveFilePath.DATA_MARINE_LITTER); } - public int getNbCruisesFromFile() { + public void validateArchiveLayout() throws GenericFormatArchiveInvalidLayoutException { - Path path = getSurveyPath(); - try (BufferedReader bufferedReader = Files.newBufferedReader(path, Charset.forName("UTF-8"))) { + List<String> errors = new ArrayList<>(); - try (LineNumberReader lineNumberReader = new LineNumberReader(bufferedReader)) { - lineNumberReader.skip(Long.MAX_VALUE); - int result = lineNumberReader.getLineNumber() - 1; - if (result == -1) { - result = 0; + try (ZipFile zipFile = new ZipFile(archiveFile)) { + + for (ArchiveFilePath archiveFilePath : ArchiveFilePath.values()) { + + if (archiveFilePath.isMandatory()) { + String zipEntryPath = getZipEntryPath(archiveFilePath); + + if (log.isDebugEnabled()) { + log.debug("Check mandatory entry " + zipEntryPath + " exists."); + } + + ZipEntry zipEntry = zipFile.getEntry(zipEntryPath); + + if (zipEntry == null) { + + if (log.isErrorEnabled()) { + log.error("Mandatory entry " + zipEntryPath + " not found."); + } + errors.add(t("tutti.service.genericFormat.importError.missArchiveFile", archiveFilePath.getFilename())); + + } else { + + if (log.isInfoEnabled()) { + log.info("Mandatory entry " + zipEntryPath + " found."); + } + } } - return result; + } } catch (IOException e) { - throw new ApplicationTechnicalException("Could not read survey.csv file from archive " + archiveFile, e); + + throw new ApplicationTechnicalException("Could not open zip file: " + archiveFile, e); } - } + if (!errors.isEmpty()) { - public int getNbOperationsFromFile() { + String message = t("tutti.service.genericFormat.importError.archiveNotSane", Joiner.on("\n").join(errors)); + + throw new GenericFormatArchiveInvalidLayoutException(message); - Path path = getOperationPath(); + } + + } + + public int countImportLines(Path path) { try (BufferedReader bufferedReader = Files.newBufferedReader(path, Charset.forName("UTF-8"))) { @@ -245,7 +271,7 @@ public class GenericFormatArchive implements Serializable { } } catch (IOException e) { - throw new ApplicationTechnicalException("Could not read operation.csv file from archive " + archiveFile, e); + throw new ApplicationTechnicalException("Could not read " + path.toFile().getName() + " file from archive " + archiveFile, e); } } @@ -258,7 +284,7 @@ public class GenericFormatArchive implements Serializable { } - ApplicationIOUtil.zip(workingDirectory.toFile(), archiveFile, t("tutti.service.genericFormat.export.zip.error", archiveFile)); + ApplicationIOUtil.zip(workingDirectory, archiveFile, t("tutti.service.genericFormat.export.zip.error", archiveFile)); } @@ -266,7 +292,7 @@ public class GenericFormatArchive implements Serializable { String filename = archiveFilePath.getFilename(); - Path file = workingDirectory.resolve(filename); + Path file = workingDirectory.toPath().resolve(filename); if (isImport() && Files.notExists(file) && !missingPaths.contains(archiveFilePath)) { @@ -311,7 +337,7 @@ public class GenericFormatArchive implements Serializable { protected final EnumSet<ArchiveFilePath> missingPaths; - protected GenericFormatArchive(ArchiveMode archiveMode, File archiveFile, Path workingDirectory) { + protected GenericFormatArchive(ArchiveMode archiveMode, File archiveFile, File workingDirectory) { this.archiveFile = archiveFile; this.workingDirectory = workingDirectory; @@ -328,8 +354,6 @@ public class GenericFormatArchive implements Serializable { log.info("Zip entries prefix path: " + prefixPath); } - checkArchiveLayout(); - missingPaths = getMissingPaths(); } else { @@ -363,56 +387,6 @@ public class GenericFormatArchive implements Serializable { } - protected void checkArchiveLayout() { - - List<String> errors = new ArrayList<>(); - - try (ZipFile zipFile = new ZipFile(archiveFile)) { - - for (ArchiveFilePath archiveFilePath : ArchiveFilePath.values()) { - - if (archiveFilePath.isMandatory()) { - String zipEntryPath = getZipEntryPath(archiveFilePath); - - if (log.isDebugEnabled()) { - log.debug("Check mandatory entry " + zipEntryPath + " exists."); - } - - ZipEntry zipEntry = zipFile.getEntry(zipEntryPath); - - if (zipEntry == null) { - - if (log.isErrorEnabled()) { - log.error("Mandatory entry " + zipEntryPath + " not found."); - } - errors.add(t("tutti.service.genericFormat.importError.missArchiveFile", archiveFilePath.getFilename())); - - } else { - - if (log.isInfoEnabled()) { - log.info("Mandatory entry " + zipEntryPath + " found."); - } - } - } - - } - - } catch (IOException e) { - - throw new ApplicationTechnicalException("Could not open zip file: " + archiveFile, e); - } - - if (!errors.isEmpty()) { - - String message = t("tutti.service.genericFormat.importError.archiveNotSane", Joiner.on("\n").join(errors)); - - throw new ApplicationBusinessException(message); - - } - - } - - protected EnumSet<ArchiveFilePath> getMissingPaths() { EnumSet<ArchiveFilePath> result = EnumSet.noneOf(ArchiveFilePath.class); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchiveInvalidLayoutException.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchiveInvalidLayoutException.java new file mode 100644 index 0000000..f2c4a22 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchiveInvalidLayoutException.java @@ -0,0 +1,19 @@ +package fr.ifremer.tutti.service.genericformat; + +import org.nuiton.jaxx.application.ApplicationBusinessException; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatArchiveInvalidLayoutException extends ApplicationBusinessException { + + private static final long serialVersionUID = 1L; + + public GenericFormatArchiveInvalidLayoutException(String message) { + super(message); + } + +} -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 7bf0b6e62cd1bab860c0013923f79b3f0d87cd73 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:43:28 2015 +0100 add report file in configuration --- .../genericformat/GenericFormatImportConfiguration.java | 10 ++++++++++ .../service/genericformat/GenericFormatImportRequest.java | 6 ++++++ .../tutti/service/genericformat/GenericFormatImportResult.java | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java index f203f29..62a8c77 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java @@ -17,6 +17,8 @@ public class GenericFormatImportConfiguration implements Serializable { private File importFile; + private File reportFile; + private boolean cleanWeights; private boolean checkWeights; @@ -39,6 +41,14 @@ public class GenericFormatImportConfiguration implements Serializable { this.importFile = importFile; } + public File getReportFile() { + return reportFile; + } + + public void setReportFile(File reportFile) { + this.reportFile = reportFile; + } + public boolean isCleanWeights() { return cleanWeights; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java index 9b06b87..cd40464 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java @@ -6,6 +6,7 @@ import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import java.io.File; import java.util.Set; /** @@ -98,4 +99,9 @@ public class GenericFormatImportRequest { public boolean isOverrideData() { return importConfiguration.isOverrideData(); } + + public File getReportFile() { + return importConfiguration.getReportFile(); + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java index f4b939d..027670c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java @@ -11,6 +11,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import java.io.File; import java.io.Serializable; import java.util.Collection; import java.util.LinkedHashMap; @@ -44,11 +45,14 @@ public class GenericFormatImportResult implements Serializable{ private final GenericFormatArchive archive; + private final File reportFile; + private boolean valid; public GenericFormatImportResult(GenericFormatImportContext importContext) { this.archive = importContext.getImportRequest().getArchive(); + this.reportFile= importContext.getImportRequest().getReportFile(); this.cruiseResults = new LinkedHashMap<>(); this.errors = new LinkedHashSet<>(); this.protocol = importContext.getImportedProtocol(); @@ -126,6 +130,10 @@ public class GenericFormatImportResult implements Serializable{ return importedVessels; } + public File getReportFile() { + return reportFile; + } + public void addFishingOperationCheckError(Cruise cruise, String fishingOperationId, String checkError) { GenericFormatImportCruiseResult importedCruiseResult = getImportedCruiseResult(cruise.getId()); -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 5cfc0ce3b94f575f3eaf28275ccdac801091395d Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:44:09 2015 +0100 be able to adapt progression total --- .../service/genericformat/GenericFormatImportContext.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java index cc6e382..1e8f306 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java @@ -162,7 +162,7 @@ public class GenericFormatImportContext implements Closeable { public void addImportedCruise(Cruise cruise, boolean override) { String cruiseId = cruise.getId(); - GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, override,cruiseDecorator.toString(cruise)); + GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, override, cruiseDecorator.toString(cruise)); cruiseContexts.put(cruiseId, cruiseContext); } @@ -291,6 +291,10 @@ public class GenericFormatImportContext implements Closeable { progressionModel.increments(message); } + public void addStepsInProgressionModel(int size) { + progressionModel.adaptTotal(progressionModel.getTotal() + size); + } + public GenericFormatImportValidationHelper getValidationHelper() { return validationHelper; } @@ -304,10 +308,6 @@ public class GenericFormatImportContext implements Closeable { } } - public void addStepsInProgressionModel(int size) { - progressionModel.adaptTotal(progressionModel.getTotal() + size); - } - public static interface CruiseContextAction { void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 3f35fa24e4e2c4129d42262b7b9fd1c3ce1be9e0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:44:38 2015 +0100 fix archive api (to be serializable) --- .../ifremer/tutti/service/genericformat/GenericFormatExportService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java index 0b24f9d..3f60ddc 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportService.java @@ -277,7 +277,7 @@ public class GenericFormatExportService extends GenericFormatServiceSupport { throw checkError; } - return genericFormatArchive.getWorkingDirectoryPath().toFile(); + return genericFormatArchive.getWorkingDirectoryPath(); } -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit b7d0d751d22d70053468ee59488c44191bcb560d Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 24 20:45:07 2015 +0100 add validate import file methods in service --- .../genericformat/GenericFormatImportService.java | 365 ++++++++++++++++++--- .../GenericFormatValidateFileContext.java | 72 ++++ .../GenericFormatValidateFileResult.java | 53 +++ .../resources/i18n/tutti-service_en_GB.properties | 10 + .../resources/i18n/tutti-service_fr_FR.properties | 11 +- .../GenericFormatImportServiceTest.java | 24 ++ 6 files changed, 496 insertions(+), 39 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java index fdfead5..705d947 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java @@ -3,6 +3,7 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -80,21 +81,81 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - public int getImportProgramNbSteps(GenericFormatImportConfiguration importConfiguration) { + public int getValidateImportFileNbSteps(GenericFormatImportConfiguration importConfiguration) { Preconditions.checkNotNull(importConfiguration); - File importFile = importConfiguration.getImportFile(); - Preconditions.checkNotNull(importFile); - Preconditions.checkState(importFile.exists()); + GenericFormatArchive archive = createArchive(importConfiguration); - GenericFormatArchive archive = GenericFormatArchive.forImport(importFile, context.getConfig().getTmpDirectory()); + int result = 6 // check sampleCategoryModel + import ( gear + person + species + vessel + protocol ) + + archive.countImportLines(archive.getSurveyPath()) // load cruises + + archive.countImportLines(archive.getGearCaracteristicsPath()) // load gear caracteristics + + archive.countImportLines(archive.getOperationPath()) // load operations + + archive.countImportLines(archive.getParameterPath()) // load parameters + + archive.countImportLines(archive.getCatchPath()) // load catches + + archive.countImportLines(archive.getMarineLitterPath()) // load marine litters + + archive.countImportLines(archive.getIndividualObservationPath()) // load individualObservations + + archive.countImportLines(archive.getAccidentalCatchPath()); // load accidental catches + + return result; + + } + + public GenericFormatValidateFileResult validateImportFile(GenericFormatImportConfiguration importConfiguration, ProgressionModel progressionModel) throws GenericFormatArchiveInvalidLayoutException { + + Preconditions.checkNotNull(importConfiguration); + + Preconditions.checkNotNull(progressionModel); + + GenericFormatArchive archive = createArchive(importConfiguration); + + GenericFormatImportRequest importRequest = createImportRequest(importConfiguration, archive); + + try { + GenericFormatValidateFileResult result = doValidate(importRequest, progressionModel); + + generateValidateReport(result, progressionModel); + + return result; + } finally { + + TuttiProtocol oldProtocol = importRequest.getOldProtocol(); + + if (oldProtocol != null) { + + TuttiProtocol protocol = persistenceService.getProtocol(); + if (!protocol.equals(oldProtocol)) { + + if (log.isInfoEnabled()) { + log.info("Set back old protocol: " + oldProtocol.getId() + " - " + oldProtocol.getName()); + } + + persistenceService.setProtocol(oldProtocol); + + if (log.isInfoEnabled()) { + log.info("Delete temporary protocol: " + protocol.getId() + " - " + protocol.getName()); + } + persistenceService.deleteProtocol(protocol.getId()); + + } + + } + + } + + } - int nbCruises = archive.getNbCruisesFromFile(); + public int getImportProgramNbSteps(GenericFormatImportConfiguration importConfiguration) { + + Preconditions.checkNotNull(importConfiguration); + + GenericFormatArchive archive = createArchive(importConfiguration); + + int nbCruises = archive.countImportLines(archive.getSurveyPath()); if (log.isInfoEnabled()) { log.info("Count " + nbCruises + " cruises to import."); } - int nbOperations = archive.getNbOperationsFromFile(); + int nbOperations = archive.countImportLines(archive.getOperationPath()); if (log.isInfoEnabled()) { log.info("Count " + nbOperations + " operations to import."); } @@ -125,51 +186,62 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { Preconditions.checkNotNull(progressionModel); - GenericFormatImportRequest importRequest = createImportRequest(importConfiguration); + GenericFormatArchive archive = createArchive(importConfiguration); + + GenericFormatImportRequest importRequest = createImportRequest(importConfiguration, archive); GenericFormatImportResult result = doImport(importRequest, progressionModel); - computeReport(result, progressionModel); + generateImportReport(result, progressionModel); return result; } - protected GenericFormatImportRequest createImportRequest(GenericFormatImportConfiguration importConfiguration) { + protected void generateImportReport(GenericFormatImportResult result, ProgressionModel progressionModel) { - String programId = importConfiguration.getProgramId(); - Preconditions.checkNotNull(programId); + File reportFile = result.getReportFile(); - Program program = persistenceService.getProgram(programId); - Preconditions.checkNotNull(program); + progressionModel.increments(t("tutti.service.genericFormat.import.computeReport", reportFile)); - if (log.isDebugEnabled()) { - log.debug("Will import into program: " + programId); - } + //TODO Compute report - File importFile = importConfiguration.getImportFile(); - Preconditions.checkNotNull(importFile); - Preconditions.checkState(importFile.exists()); + } - // Full load cruise - Set<Cruise> cruises = new LinkedHashSet<>(); - for (String cruiseId : persistenceService.getAllCruiseId(program.getId())) { - cruises.add(persistenceService.getCruise(cruiseId)); - } + protected void generateValidateReport(GenericFormatValidateFileResult result, ProgressionModel progressionModel) { - TuttiProtocol protocol = persistenceService.getProtocol(); + File reportFile = result.getReportFile(); - GenericFormatArchive archive = GenericFormatArchive.forImport(importFile, context.getConfig().getTmpDirectory()); + progressionModel.increments(t("tutti.service.genericFormat.validate.computeReport", reportFile)); - GenericFormatImportRequest request = new GenericFormatImportRequest(importConfiguration, - archive, - ';', - program, - context.getSampleCategoryModel(), - ImmutableSet.copyOf(cruises), - protocol); + //TODO Compute report - return request; + } + + protected GenericFormatValidateFileResult doValidate(GenericFormatImportRequest request, ProgressionModel progressionModel) { + + try (GenericFormatValidateFileContext importContext = new GenericFormatValidateFileContext(request, progressionModel, persistenceService, cruiseDecorator, fishingOperationDecorator)) { + + checkSampleCategoryModel(importContext); + importTemporaryGears(importContext); + importTemporaryPersons(importContext); + importTemporarySpecies(importContext); + importTemporaryVessels(importContext); + importProtocol(importContext); + + validateCruises(importContext); + validateGearCaracteristics(importContext); + validateOperations(importContext); + validateParameters(importContext); + validateCatches(importContext); + validateMarineLitters(importContext); + validateIndividualObservations(importContext); + validateAccidentalCatches(importContext); + + GenericFormatValidateFileResult result = new GenericFormatValidateFileResult(importContext); + return result; + + } } @@ -205,10 +277,47 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - protected void computeReport(GenericFormatImportResult result, ProgressionModel progressionModel) { + protected GenericFormatImportRequest createImportRequest(GenericFormatImportConfiguration importConfiguration, GenericFormatArchive archive) { - //TODO Compute report - progressionModel.increments(t("tutti.service.genericFormat.import.computeReport")); + String programId = importConfiguration.getProgramId(); + Preconditions.checkNotNull(programId); + + Program program = persistenceService.getProgram(programId); + Preconditions.checkNotNull(program); + + if (log.isDebugEnabled()) { + log.debug("Will import into program: " + programId); + } + + // Full load cruise + Set<Cruise> cruises = new LinkedHashSet<>(); + for (String cruiseId : persistenceService.getAllCruiseId(program.getId())) { + cruises.add(persistenceService.getCruise(cruiseId)); + } + + TuttiProtocol protocol = persistenceService.getProtocol(); + + GenericFormatImportRequest request = new GenericFormatImportRequest(importConfiguration, + archive, + ';', + program, + context.getSampleCategoryModel(), + ImmutableSet.copyOf(cruises), + protocol); + return request; + + } + + private GenericFormatArchive createArchive(GenericFormatImportConfiguration importConfiguration) { + + File importFile = importConfiguration.getImportFile(); + Preconditions.checkNotNull(importFile); + Preconditions.checkState(importFile.exists()); + + GenericFormatArchive archive = GenericFormatArchive.forImport(importFile, context.getConfig().getTmpDirectory()); + archive.validateArchiveLayout(); + + return archive; } @@ -447,6 +556,186 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } } + protected void validateCruises(GenericFormatValidateFileContext importContext) { + + if (log.isInfoEnabled()) { + log.info("Validate survey.csv file."); + } + + try (CsvConsumerForSurvey consumer = importContext.loadSurveys()) { + for (ImportRow<SurveyRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.cruises", row.getLineNumber())); + + consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(row); + + Cruise cruise = row.getBean().getCruise(); + + boolean createCruise = TuttiEntities.isNew(cruise); + importContext.addImportedCruise(cruise, !createCruise); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close survey.csv file", e); + } + + } + + protected void validateGearCaracteristics(GenericFormatValidateFileContext importContext) { + + if (log.isInfoEnabled()) { + log.info("Validate gearCaracteristics.csv file."); + } + + try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics()) { + for (ImportRow<GearCaracteristicRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.gearCaracteristics", row.getLineNumber())); + + GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(cruiseContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close gearCaracteristic.csv file", e); + } + + } + + protected void validateOperations(GenericFormatValidateFileContext importContext) { + + if (log.isInfoEnabled()) { + log.info("Validate operation.csv file."); + } + + try (CsvConsumerForOperation consumer = importContext.loadOperations()) { + for (ImportRow<OperationRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.operations", row.getLineNumber())); + + GenericFormatImportCruiseContext cruiseContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(cruiseContext, row); + + OperationRow bean = row.getBean(); + + FishingOperation fishingOperation = bean.getFishingOperation(); + CatchBatch catchBatch = bean.getCatchBatch(); + + importContext.addImportedFishingOperation(fishingOperation, catchBatch); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close operation.csv file", e); + } + + } + + protected void validateParameters(GenericFormatValidateFileContext importContext) { + + if (log.isInfoEnabled()) { + log.info("Validate parameter.csv file."); + } + + try (CsvConsumerForParameter consumer = importContext.loadParameters()) { + for (ImportRow<ParameterRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.parameters", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close parameter.csv file", e); + } + + } + + protected void validateCatches(GenericFormatValidateFileContext importContext) { + + if (log.isInfoEnabled()) { + log.info("Validate catch.csv file."); + } + + try (CsvConsumerForCatch consumer = importContext.loadCatches()) { + for (ImportRow<CatchRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.catches", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close catch.csv file", e); + } + + } + + protected void validateMarineLitters(GenericFormatValidateFileContext importContext) { + + if (log.isInfoEnabled()) { + log.info("Validate marineLitter.csv file."); + } + + try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters()) { + for (ImportRow<MarineLitterRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.marineLitters", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e); + } + + } + + protected void validateIndividualObservations(GenericFormatValidateFileContext importContext) { + + if (log.isInfoEnabled()) { + log.info("Validate individualObservation.csv file."); + } + + try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations()) { + for (ImportRow<IndividualObservationRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.individualObservations", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close individualObservation.csv file", e); + } + + } + + protected void validateAccidentalCatches(GenericFormatValidateFileContext importContext) { + + if (log.isInfoEnabled()) { + log.info("Validate accidentalCatch.csv file."); + } + + try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches()) { + for (ImportRow<AccidentalCatchRow> row : consumer) { + + importContext.increments(t("tutti.service.genericFormat.validate.accidentalCatches", row.getLineNumber())); + + GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext); + consumer.prepareRowForPersist(operationContext, row); + + } + } catch (IOException e) { + throw new ApplicationTechnicalException("Could not close accidentalCatch.csv file", e); + } + + } + protected void importCruises(GenericFormatImportContext importContext, GenericformatImportPersitenceHelper persitenceHelper) { if (log.isInfoEnabled()) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java new file mode 100644 index 0000000..cd41879 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java @@ -0,0 +1,72 @@ +package fr.ifremer.tutti.service.genericformat; + +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.decorator.Decorator; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatValidateFileContext extends GenericFormatImportContext { + + public GenericFormatValidateFileContext(GenericFormatImportRequest importRequest, + ProgressionModel progressionModel, + PersistenceService persistenceService, + Decorator<Cruise> cruiseDecorator, + Decorator<FishingOperation> fishingOperationDecorator) { + + super(importRequest, progressionModel, persistenceService, cruiseDecorator, fishingOperationDecorator); + + } + + @Override + public void addImportedCruise(Cruise cruise, boolean override) { + + if (!override) { + + // add a temporary id to simulate persist behaviour + cruise.setId(getNextCruiseId()); + + } + + super.addImportedCruise(cruise, override); + + } + + public void addImportedFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) { + + // add a temporary id to simulate persist behaviour + fishingOperation.setId(getNextFishingOperationId()); + + // add a temporary id to simulate persist behaviour + catchBatch.setId(getNextCatchBatchId()); + + super.addImportedFishingOperation(fishingOperation, catchBatch); + + } + + private int cruiseId = -1; + + private int fishinOperationId = -1; + + private int catchBatchId = -1; + + private int getNextCruiseId() { + return cruiseId--; + } + + private int getNextFishingOperationId() { + return fishinOperationId--; + } + + private int getNextCatchBatchId() { + return catchBatchId--; + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java new file mode 100644 index 0000000..bed9b9a --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java @@ -0,0 +1,53 @@ +package fr.ifremer.tutti.service.genericformat; + +import com.google.common.collect.ImmutableSet; + +import java.io.File; +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatValidateFileResult implements Serializable { + + private static final long serialVersionUID = 1L; + + private final Set<String> archiveFormatErrors; + + private final GenericFormatArchive archive; + + private final File reportFile; + + private boolean valid; + + public GenericFormatValidateFileResult(GenericFormatValidateFileContext validateFileContext) { + this.archive = validateFileContext.getImportRequest().getArchive(); + this.reportFile = validateFileContext.getImportRequest().getReportFile(); + this.archiveFormatErrors = new LinkedHashSet<>(); + } + + public Set<String> getArchiveFormatErrors() { + return ImmutableSet.copyOf(archiveFormatErrors); + } + + public GenericFormatArchive getArchive() { + return archive; + } + + public File getReportFile() { + return reportFile; + } + + public boolean isValid() { + return valid; + } + + public void setValid(boolean valid) { + this.valid = valid; + } +} diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 58da369..7009559 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -211,8 +211,18 @@ tutti.service.genericFormat.persist.operation.individualObservations= tutti.service.genericFormat.persist.operation.marineLitters= tutti.service.genericFormat.persist.operation.parameters= tutti.service.genericFormat.persist.operation.speciesBatches= +tutti.service.genericFormat.remove.existingCruise.fishingOperation= tutti.service.genericFormat.reuse.protocol= tutti.service.genericFormat.skip.import.protocol= +tutti.service.genericFormat.validate.accidentalCatches= +tutti.service.genericFormat.validate.catches= +tutti.service.genericFormat.validate.computeReport= +tutti.service.genericFormat.validate.cruises= +tutti.service.genericFormat.validate.gearCaracteristics= +tutti.service.genericFormat.validate.individualObservations= +tutti.service.genericFormat.validate.marineLitters= +tutti.service.genericFormat.validate.operations= +tutti.service.genericFormat.validate.parameters= tutti.service.multipost.attachment.copy.error= tutti.service.multipost.attachment.mkdir.error= tutti.service.multipost.export.attachments.error= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 9e91655..9c131a6 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -166,7 +166,6 @@ tutti.service.genericFormat.invalid.cruise=Erreur d'élévation de poids sur les tutti.service.genericFormat.invalid.fishingOperation=<li>L'élévation des poids ne peut pas être réalisée sur le trait %s, pour la raison suivante \:<ul><li>%s</li></ul></li> tutti.service.genericFormat.load.protocol=Import du protocol tutti.service.genericFormat.persist.cruise=Sauvegarde de la campagne <strong>%s</strong> -tutti.service.genericFormat.remove.existingCruise.fishingOperation=Suppression du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.gearCaracteristics=Sauvegarde des caractéristiques des engins de la campagne <strong>%s</strong> tutti.service.genericFormat.persist.operation=Sauvegarde du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.accidentalBatches=Sauvegarde des captures accidentelles du trait <strong>%s</strong> - <strong>%s</strong> @@ -175,8 +174,18 @@ tutti.service.genericFormat.persist.operation.individualObservations=Sauvegarde tutti.service.genericFormat.persist.operation.marineLitters=Sauvegarde des macro-déchets du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.parameters=Sauvegarde des caractéristiques du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.persist.operation.speciesBatches=Sauvegarde des lots espèces du trait <strong>%s</strong> - <strong>%s</strong> +tutti.service.genericFormat.remove.existingCruise.fishingOperation=Suppression du trait <strong>%s</strong> - <strong>%s</strong> tutti.service.genericFormat.reuse.protocol=Réutilisation du protocol existant %s tutti.service.genericFormat.skip.import.protocol=Pas de protocole à importer +tutti.service.genericFormat.validate.accidentalCatches=Validation du fichier <strong>accidentalCatch.csv</strong> - ligne %s +tutti.service.genericFormat.validate.catches=Validation du fichier <strong>catch.csv</strong> - ligne %s +tutti.service.genericFormat.validate.computeReport= +tutti.service.genericFormat.validate.cruises=Validation du fichier <strong>survey.csv</strong> - ligne %s +tutti.service.genericFormat.validate.gearCaracteristics=Validation du fichier <strong>gearCaracteristic.csv</strong> - ligne %s +tutti.service.genericFormat.validate.individualObservations=Validation du fichier <strong>individualObservation.csv</strong> - ligne %s +tutti.service.genericFormat.validate.marineLitters=Validation du fichier <strong>marineLitter.csv</strong> - ligne %s +tutti.service.genericFormat.validate.operations=Validation du fichier <strong>operation.csv</strong> - ligne %s +tutti.service.genericFormat.validate.parameters=Validation du fichier <strong>parameter.csv</strong> - ligne %s tutti.service.multipost.attachment.copy.error=Erreur lors de l'export de la pièce-jointe %s tutti.service.multipost.attachment.mkdir.error=Impossible de créer le répertoire %s tutti.service.multipost.export.attachments.error=Erreur lors de l'export des pièces-jointes diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java index 66bef66..dba1fed 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java @@ -40,6 +40,30 @@ public class GenericFormatImportServiceTest extends GenericFormatImportServiceTe } @Test + public void testValidateFile() throws IOException { + + ServiceDbResource.DataContext dataContext = getServiceDbResource().loadContext(PROGRAM_ID); + + File archiveFile = createArchive("empty.zip", "technical", "protocol", "default"); + + GenericFormatImportConfiguration importConfiguration = new GenericFormatImportConfiguration(); + importConfiguration.setImportFile(archiveFile); + importConfiguration.setProgramId(dataContext.program.getId()); + + int nbSteps = service.getValidateImportFileNbSteps(importConfiguration); + + ProgressionModel progressionModel = new ProgressionModel(); + progressionModel.adaptTotal(nbSteps); + + if (log.isInfoEnabled()) { + log.info("Will validate file in " + nbSteps + " steps"); + } + + service.validateImportFile(importConfiguration, progressionModel); + + } + + @Test public void testImport() throws IOException { ServiceDbResource.DataContext dataContext = getServiceDbResource().loadContext(PROGRAM_ID); -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit de1b81bac986d4103be7d53d82344f9a278458ef Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 08:48:53 2015 +0100 ajout d'une option de configuration pour le répertoire de sauvegarde des rapports lors de l'import générique --- .../src/main/java/fr/ifremer/tutti/TuttiConfiguration.java | 7 +++++++ .../src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java | 7 +++++++ .../src/main/resources/i18n/tutti-persistence_en_GB.properties | 1 + .../src/main/resources/i18n/tutti-persistence_fr_FR.properties | 1 + .../tutti/ui/swing/content/config/TuttiConfigUIHandler.java | 3 +++ 5 files changed, 19 insertions(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java index 247be13..5812311 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -206,6 +206,7 @@ public class TuttiConfiguration extends ApplicationConfiguration { ApplicationIOUtil.forceMkdir(tmpDirectory, t("tutti.io.mkDir.error", tmpDirectory)); ApplicationIOUtil.forceMkdir(getReportBackupDirectory(), t("tutti.io.mkDir.error", getReportBackupDirectory())); + ApplicationIOUtil.forceMkdir(getGenericFormatReportBackupDirectory(), t("tutti.io.mkDir.error", getGenericFormatReportBackupDirectory())); } public void prepareDirectories() { @@ -474,6 +475,12 @@ public class TuttiConfiguration extends ApplicationConfiguration { return result; } + /** @return {@link TuttiConfigurationOption#GENERIC_FORMAT_REPORT_BACKUP_DIRECTORY} value */ + public File getGenericFormatReportBackupDirectory() { + File result = applicationConfig.getOptionAsFile(TuttiConfigurationOption.GENERIC_FORMAT_REPORT_BACKUP_DIRECTORY.getKey()); + return result; + } + public File getTmpDirectory() { File result = applicationConfig.getOptionAsFile(TuttiConfigurationOption.TMP_DIRECTORY.getKey()); return result; diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index bb57280..0a8307a 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -261,6 +261,13 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { File.class, false), + GENERIC_FORMAT_REPORT_BACKUP_DIRECTORY( + "tutti.genericFormat.report.backup.directory", + n("tutti.config.option.genericFormat.report.backup.directory.description"), + "${tutti.data.directory}/genericFormat/reportbackup", + File.class, + false), + CSV_SEPARATOR( "tutti.csv.separator", n("tutti.config.option.csv.separator.description"), diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties index 373d386..cb39cc5 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties @@ -14,6 +14,7 @@ tutti.config.option.csv.separator.description= tutti.config.option.data.directory.description= tutti.config.option.export.backup.directory.description= tutti.config.option.export.countryId.description= +tutti.config.option.genericFormat.report.backup.directory.description= tutti.config.option.help.directory.description= tutti.config.option.i18n.directory.description= tutti.config.option.i18n.locale.description= diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties index 166aafc..26debdd 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties @@ -10,6 +10,7 @@ tutti.config.option.csv.separator.description=Caractère séparateur pour les im tutti.config.option.data.directory.description=Répertoire de données de l'application. Vous pouvez utiliser l'expression ${tutti.data.directory} pour le référence dans d'autres propriétés de configuration (ex\: ${tutti.data.directory}/tmp). tutti.config.option.export.backup.directory.description=Répertoire où sont enregistrées les exports génériques tutti.config.option.export.countryId.description=L'id du pays à utiliser pour les exports (il s'agit de la valeur LOCATION.ID). +tutti.config.option.genericFormat.report.backup.directory.description=Répertoire où sont enregistrés les rapports de l'import générique tutti.config.option.help.directory.description=Répertoire des fichiers d'aide tutti.config.option.i18n.directory.description=Répertoire des fichiers de traductions tutti.config.option.i18n.locale.description=Langue utilisée dans l'application diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index f0a1e28..d2a20f6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -292,6 +292,9 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.EXPORT_BACKUP_DIRECTORY) .setOptionShortLabel(t("tutti.config.option.service.export.backup.directory.shortLabel")) + .addOption(TuttiConfigurationOption.GENERIC_FORMAT_REPORT_BACKUP_DIRECTORY) + .setOptionShortLabel(t("tutti.config.option.service.genericFormat.export.backup.directory.shortLabel")) + .addOption(TuttiConfigurationOption.UPDATE_APPLICATION_URL) .setOptionShortLabel(t("tutti.config.option.update.application.url.shortLabel")) -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 63d7e0852e5fc1dd58808af623dde1a904b36af3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 09:27:40 2015 +0100 update TODO in doc --- .../filtered-resources/tutti-help-fr.properties | 96 ++++++++++------------ .../fr/{genericExport.html => genericFormat.html} | 20 ++++- tutti-ui-swing/src/main/help/fr/index.html | 2 +- .../main/help/fr/manageTemporaryReferential.html | 2 + tutti-ui-swing/src/main/help/fr/menu.html | 2 + tutti-ui-swing/src/main/help/fr/navbar.js | 2 +- 6 files changed, 69 insertions(+), 55 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 69e5e3b..7a68687 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -1,29 +1,5 @@ -### -# #%L -# Tutti :: UI -# $Id:$ -# $HeadURL:$ -# %% -# Copyright (C) 2012 - 2015 Ifremer -# %% -# 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% -### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Mon Feb 16 09:45:58 CET 2015 -\ "tutti.editProtocol.action.addCaracteristicMapping.help"\ = +#Wed Feb 25 08:38:59 CET 2015 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -145,10 +121,8 @@ tutti.editCatchBatch.action.cleanWeights.help=editFishingOperation.html\#capture tutti.editCatchBatch.action.computeWeights.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.exportFishingOperationReport.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.exportFishingOperationReportForSumatra.help=editFishingOperation.html\#captureResumeActions -tutti.editCatchBatch.action.exportFishingOperationReportForSumatra2.help=editFishingOperation.html\#captureResumeActions -tutti.editCatchBatch.action.exportFishingOperationReportForSumatraV2.help= -tutti.editCatchBatch.action.exportMultiPost.help= -tutti.editCatchBatch.action.importMultiPost.help= +tutti.editCatchBatch.action.exportMultiPost.help=editFishingOperation.html\#captureResumeActions +tutti.editCatchBatch.action.importMultiPost.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.saveCatchBatch.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.field.benthosTotalSampleSortedWeight.help=editFishingOperation.html\#captureResumeFields tutti.editCatchBatch.field.benthosTotalSortedWeight.help=editFishingOperation.html\#captureResumeFields @@ -249,7 +223,7 @@ tutti.editProgram.field.name.help=editProgram.html\#fields tutti.editProgram.field.zone.help=editProgram.html\#fields tutti.editProgram.help=editProgram.html tutti.editProtocol.action.addBenthosProtocol.help=editProtocol.html\#actionsBenthos -tutti.editProtocol.action.addCaracteristicMapping.help= +tutti.editProtocol.action.addCaracteristicMapping.help=editProtocol.html\#actions tutti.editProtocol.action.addSpeciesProtocol.help=editProtocol.html\#actionsSpecies tutti.editProtocol.action.closeEditProtocol.help=editProtocol.html\#actions tutti.editProtocol.action.exportProtocolAllCaracteristic.help=editProtocol.html\#actionsCaracteristics @@ -334,6 +308,23 @@ tutti.fishingOperations.action.deleteFishingOperation.help=editFishingOperation. tutti.fishingOperations.action.newFishingOperation.help=editFishingOperation.html\#traitActions tutti.fishingOperations.field.fishingOperation.help=editFishingOperation.html\#fields tutti.fishingOperations.help=editFishingOperation.html +tutti.genericFormatImport.action.closeGenericFormatImport.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.action.generateReport.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.action.import.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.action.openImportReport.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.action.openValidateReport.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.action.saveValidateReport.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.action.saveImportReport.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.action.showReport.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.action.validate.help=genericFormat.html#generic_format_import_actions +tutti.genericFormatImport.field.checkWeights.help=genericFormat.html#generic_format_import_fields +tutti.genericFormatImport.field.cleanWeights.help=genericFormat.html#generic_format_import_fields +tutti.genericFormatImport.field.importResult.help=genericFormat.html#generic_format_import_fields +tutti.genericFormatImport.field.overrideData.help=genericFormat.html#generic_format_import_fields +tutti.genericFormatImport.field.program.help=genericFormat.html#generic_format_import_fields +tutti.genericFormatImport.field.validateResult.help=genericFormat.html#generic_format_import_fields +tutti.genericFormatImport.field.validationResult.help=genericFormat.html#generic_format_import_fields +tutti.genericFormatImport.help=genericFormat.html#generic_format_import tutti.index.help=index.html tutti.main.action.changeLocale.help=menu.html\#menu_aide tutti.main.action.changeLocaleFR.help=menu.html\#menu_aide @@ -351,10 +342,11 @@ tutti.main.menu.action.editCatches.help=menu.html\#menu_action tutti.main.menu.action.editCruise.help=menu.html\#menu_action tutti.main.menu.action.editProgram.help=menu.html\#menu_action tutti.main.menu.action.editProtocol.help=menu.html\#menu_action -tutti.main.menu.action.editSampleCategoryModel.help= +tutti.main.menu.action.editSampleCategoryModel.help=menu.html\#menu_administration tutti.main.menu.action.exit.help=menu.html\#menu_fichier tutti.main.menu.action.generateCruiseReport.help=menu.html\#menu_action tutti.main.menu.action.generateSelectedCruiseReport.help=menu.html\#menu_action +tutti.main.menu.action.genericFormatImport.help=menu.html\#menu_action tutti.main.menu.action.importTemporaryReferential.help=menu.html\#menu_administration tutti.main.menu.action.manageDb.help=menu.html\#menu_fichier tutti.main.menu.action.selectCruise.help=menu.html\#menu_action @@ -365,10 +357,10 @@ tutti.main.menu.action.updateReport.help=menu.html\#menu_fichier tutti.main.menu.action.validateCatches.help=menu.html\#menu_action tutti.main.status.ichtyometer.help=menu.html\#status tutti.main.status.validation.help=menu.html\#status -tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.help= -tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.help= -tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.help= -tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.help= +tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.help=menu.html\#menu_administration_referentiel +tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.help=menu.html\#menu_administration_referentiel +tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.help=menu.html\#menu_administration_referentiel +tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.exportTemporaryGearExample.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.exportTemporaryPersonExample.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.exportTemporarySpeciesExample.help=menu.html\#menu_administration_referentiel @@ -377,24 +369,24 @@ tutti.manageTemporaryReferential.action.importTemporaryGear.help=menu.html\#menu tutti.manageTemporaryReferential.action.importTemporaryPerson.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.importTemporarySpecies.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.importTemporaryVessel.help=menu.html\#menu_administration_referentiel -tutti.manageTemporaryReferential.action.replaceTemporaryGear.help= -tutti.manageTemporaryReferential.action.replaceTemporaryPerson.help= -tutti.manageTemporaryReferential.action.replaceTemporarySpecies.help= -tutti.manageTemporaryReferential.action.replaceTemporaryVessel.help= +tutti.manageTemporaryReferential.action.replaceTemporaryGear.help=menu.html\#menu_administration_referentiel +tutti.manageTemporaryReferential.action.replaceTemporaryPerson.help=menu.html\#menu_administration_referentiel +tutti.manageTemporaryReferential.action.replaceTemporarySpecies.help=menu.html\#menu_administration_referentiel +tutti.manageTemporaryReferential.action.replaceTemporaryVessel.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.help=menu.html\#menu_administration_referentiel -tutti.replaceTemporaryGear.action.replace.help= -tutti.replaceTemporaryGear.help= -tutti.replaceTemporaryPerson.action.replace.help= -tutti.replaceTemporaryPerson.help= -tutti.replaceTemporaryReferential.action.cancel.help= -tutti.replaceTemporaryReferential.field.sourceList.help= -tutti.replaceTemporaryReferential.field.targetList.help= -tutti.replaceTemporarySpecies.action.replace.help= -tutti.replaceTemporarySpecies.help= -tutti.replaceTemporaryVessel.action.cancel.help= -tutti.replaceTemporaryVessel.action.replace.help= -tutti.replaceTemporaryVessel.field.sourceList.help= -tutti.replaceTemporaryVessel.help= +tutti.replaceTemporaryGear.action.replace.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryGear.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryPerson.action.replace.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryPerson.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryReferential.action.cancel.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryReferential.field.sourceList.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryReferential.field.targetList.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporarySpecies.action.replace.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporarySpecies.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryVessel.action.cancel.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryVessel.action.replace.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryVessel.field.sourceList.help=menu.html\#menu_administration_referentiel +tutti.replaceTemporaryVessel.help=menu.html\#menu_administration_referentiel tutti.report.action.cancel.help=report.html\#actions tutti.report.action.chooseOutputFile.help=report.html\#actions tutti.report.action.generate.help=report.html\#actions diff --git a/tutti-ui-swing/src/main/help/fr/genericExport.html b/tutti-ui-swing/src/main/help/fr/genericFormat.html similarity index 98% rename from tutti-ui-swing/src/main/help/fr/genericExport.html rename to tutti-ui-swing/src/main/help/fr/genericFormat.html index 1f9d435..a78daa2 100644 --- a/tutti-ui-swing/src/main/help/fr/genericExport.html +++ b/tutti-ui-swing/src/main/help/fr/genericFormat.html @@ -21,7 +21,7 @@ --> <meta charset="utf-8"> - <title>Allegro Campagne - Export générique</title> + <title>Allegro Campagne - Import / Export générique</title> <link href="../css/bootstrap.min.css" rel="stylesheet"> <link href="../css/style.css" rel="stylesheet"> <script type="text/javascript" src="../js/jquery-2.0.3.min.js"></script> @@ -32,6 +32,8 @@ <div class="container"> + <strong>TODO Update doc with generic import specs</strong> + <div class="page-header"> <h1>Export générique</h1> </div> @@ -60,6 +62,7 @@ exportCruise-100000 ├── parameter.csv ├── species.csv └── survey.csv</pre> + <p>Vous pouvez télécharger <a href="../export/exportCruise-example.zip" target="export">un exemple d'export générique.</a></p> <h2>Fichier accidentalCatch.csv</h2> @@ -473,6 +476,21 @@ Annee;Serie;Serie_Partielle;Navire;Pays;Zone_Etude;Campagne;Id_Sismer;Date_Deb_C <tr><td>Commentaire</td><td>Campagne</td><td>Commentaire</td><td></td></tr> </tbody> </table> + + <h1>Import générique<a name="generic_format_import"></a></h1> + + <h2>Description des champs<a name="generic_format_import_fields"></a></h2> + <dl> + <dt>Champs</dt> + <dd>Description TODO + </dd> + </dl> + <h2>Description des actions<a name="generic_format_import_actions"></a></h2> + <dl> + <dt>Action</dt> + <dd>Description TODO + </dd> + </dl> </div> </body> </html> diff --git a/tutti-ui-swing/src/main/help/fr/index.html b/tutti-ui-swing/src/main/help/fr/index.html index eb7e1a3..218f0fb 100644 --- a/tutti-ui-swing/src/main/help/fr/index.html +++ b/tutti-ui-swing/src/main/help/fr/index.html @@ -148,7 +148,7 @@ <li><a href="config.html">Configuration</a></li> <li><a href="manageTemporaryReferential.html">Gestionnaire de référentiels temporaires</a></li> <li><a href="report.html">Générer des rapports</a></li> - <li><a href="genericExport.html">Export générique</a></li> + <li><a href="genericFormat.html">Export générique</a></li> <li><a href="dbMapping.html">Mapping des écrans / base de données</a></li> <li><a href="validation.html">Règles de validation</a></li> </ul> diff --git a/tutti-ui-swing/src/main/help/fr/manageTemporaryReferential.html b/tutti-ui-swing/src/main/help/fr/manageTemporaryReferential.html index 169d50e..e5fe73d 100644 --- a/tutti-ui-swing/src/main/help/fr/manageTemporaryReferential.html +++ b/tutti-ui-swing/src/main/help/fr/manageTemporaryReferential.html @@ -37,6 +37,8 @@ <h1>Gérer les référentiels temporaires</h1> </div> + <strong>TODO Update this doc with new referential actions (replace, delete, ...)</strong> + <p>Sur cette écran on peut gérer les référentiels temporaires.<br>L'accès à cet écran est protégé par un mot de passe afin d'éviter un usage abusif des références temporaires. En effet, l'utilisation de diff --git a/tutti-ui-swing/src/main/help/fr/menu.html b/tutti-ui-swing/src/main/help/fr/menu.html index 2ed6de1..a373332 100644 --- a/tutti-ui-swing/src/main/help/fr/menu.html +++ b/tutti-ui-swing/src/main/help/fr/menu.html @@ -228,6 +228,8 @@ Pour faire un nouvel import, procédez ainsi: <h4>Description des actions</h4> + <strong>TODO Update this doc with new referential actions (replace, delete, ...)</strong> + <dl> <dt>Exporter</dt> <dd>permet d'exporter un fichier d'exemple (format .csv, encodage UTF8, diff --git a/tutti-ui-swing/src/main/help/fr/navbar.js b/tutti-ui-swing/src/main/help/fr/navbar.js index bc05940..0b8ea18 100644 --- a/tutti-ui-swing/src/main/help/fr/navbar.js +++ b/tutti-ui-swing/src/main/help/fr/navbar.js @@ -102,7 +102,7 @@ document.write(' <li><a href="dbManager.html">Gestionnaire de bas document.write(' <li><a href="config.html">Configuration</a></li>'); document.write(' <li><a href="manageTemporaryReferential.html">Gestionnaire de référentiels temporaires</a></li>'); document.write(' <li><a href="report.html">Générer des rapports</a></li>'); -document.write(' <li><a href="genericExport.html">Export générique</a></li>'); +document.write(' <li><a href="genericFormat.html">Format générique d\'import - export</a></li>'); document.write(' <li><a href="dbMapping.html">Mapping des écrans / base de données</a></li>'); document.write(' <li><a href="validation.html">Règles de validation</a></li>'); document.write(' </ul>'); -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit cb8517a863ef2c67c84a575f34c862683203e79e Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 10:02:36 2015 +0100 mise en place des rapports de validation --- .../genericformat/GenericFormatImportRequest.java | 13 ++- .../genericformat/GenericFormatImportResult.java | 54 ++++++++--- .../genericformat/GenericFormatImportService.java | 9 +- .../GenericFormatValidateFileResult.java | 54 +++++++++-- .../ftl/genericFormatValidateReport_fr.ftl | 108 +++++++++++++++++++++ 5 files changed, 213 insertions(+), 25 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java index cd40464..39c53df 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java @@ -7,6 +7,8 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import java.io.File; +import java.io.Serializable; +import java.util.Date; import java.util.Set; /** @@ -15,7 +17,9 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatImportRequest { +public class GenericFormatImportRequest implements Serializable { + + private static final long serialVersionUID = 1L; private final GenericFormatImportConfiguration importConfiguration; @@ -31,6 +35,8 @@ public class GenericFormatImportRequest { private final Program program; + private final Date startingDate; + public GenericFormatImportRequest(GenericFormatImportConfiguration importConfiguration, GenericFormatArchive archive, char csvSeparator, @@ -45,6 +51,7 @@ public class GenericFormatImportRequest { this.program = program; this.existingCruises = cruises; this.oldProtocol = oldProtocol; + this.startingDate = new Date(); } @@ -72,6 +79,10 @@ public class GenericFormatImportRequest { return program; } + public Date getStartingDate() { + return startingDate; + } + public Cruise getExistingCruise(Cruise importRowCruise) { Cruise result = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java index 027670c..98f0aee 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java @@ -5,6 +5,8 @@ import com.google.common.collect.Iterables; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; @@ -14,6 +16,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Vessel; import java.io.File; import java.io.Serializable; import java.util.Collection; +import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; @@ -25,7 +28,7 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatImportResult implements Serializable{ +public class GenericFormatImportResult implements Serializable { private static final long serialVersionUID = 1L; @@ -43,16 +46,13 @@ public class GenericFormatImportResult implements Serializable{ private final GenericFormatReferentialImportResult<Vessel, String> importedVessels; - private final GenericFormatArchive archive; - - private final File reportFile; + private final GenericFormatImportRequest importRequest; private boolean valid; public GenericFormatImportResult(GenericFormatImportContext importContext) { - this.archive = importContext.getImportRequest().getArchive(); - this.reportFile= importContext.getImportRequest().getReportFile(); + this.importRequest = importContext.getImportRequest(); this.cruiseResults = new LinkedHashMap<>(); this.errors = new LinkedHashSet<>(); this.protocol = importContext.getImportedProtocol(); @@ -64,7 +64,43 @@ public class GenericFormatImportResult implements Serializable{ } public GenericFormatArchive getArchive() { - return archive; + return importRequest.getArchive(); + } + + public SampleCategoryModel getSampleCategoryModel() { + return importRequest.getSampleCategoryModel(); + } + + public Set<Cruise> getExistingCruises() { + return importRequest.getExistingCruises(); + } + + public TuttiProtocol getOldProtocol() { + return importRequest.getOldProtocol(); + } + + public Program getProgram() { + return importRequest.getProgram(); + } + + public Date getStartingDate() { + return importRequest.getStartingDate(); + } + + public boolean isCleanWeights() { + return importRequest.isCleanWeights(); + } + + public boolean isCheckWeights() { + return importRequest.isCheckWeights(); + } + + public boolean isOverrideData() { + return importRequest.isOverrideData(); + } + + public File getReportFile() { + return importRequest.getReportFile(); } public Set<Cruise> getImportedCruises() { @@ -130,10 +166,6 @@ public class GenericFormatImportResult implements Serializable{ return importedVessels; } - public File getReportFile() { - return reportFile; - } - public void addFishingOperationCheckError(Cruise cruise, String fishingOperationId, String checkError) { GenericFormatImportCruiseResult importedCruiseResult = getImportedCruiseResult(cruise.getId()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java index 705d947..8d60247 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java @@ -14,8 +14,8 @@ import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.PdfGeneratorService; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.service.catches.WeightCleaningService; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; @@ -71,13 +71,14 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { protected WeightCleaningService weightCleaningService; - protected ValidationService validationServic; + protected PdfGeneratorService pdfGeneratorService; @Override public void setServiceContext(TuttiServiceContext context) { super.setServiceContext(context); weightCleaningService = getService(WeightCleaningService.class); + pdfGeneratorService = getService(PdfGeneratorService.class); } @@ -204,7 +205,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { progressionModel.increments(t("tutti.service.genericFormat.import.computeReport", reportFile)); - //TODO Compute report + pdfGeneratorService.generatePdf(reportFile, context.getConfig().getI18nLocale(), "genericFormatImportReport.ftl", result); } @@ -214,7 +215,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { progressionModel.increments(t("tutti.service.genericFormat.validate.computeReport", reportFile)); - //TODO Compute report + pdfGeneratorService.generatePdf(reportFile, context.getConfig().getI18nLocale(), "genericFormatValidateReport.ftl", result); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java index bed9b9a..2d744f3 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileResult.java @@ -1,9 +1,14 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.collect.ImmutableSet; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import java.io.File; import java.io.Serializable; +import java.util.Date; import java.util.LinkedHashSet; import java.util.Set; @@ -19,28 +24,59 @@ public class GenericFormatValidateFileResult implements Serializable { private final Set<String> archiveFormatErrors; - private final GenericFormatArchive archive; - - private final File reportFile; - private boolean valid; + private GenericFormatImportRequest importRequest; + public GenericFormatValidateFileResult(GenericFormatValidateFileContext validateFileContext) { - this.archive = validateFileContext.getImportRequest().getArchive(); - this.reportFile = validateFileContext.getImportRequest().getReportFile(); + + this.importRequest = validateFileContext.getImportRequest(); this.archiveFormatErrors = new LinkedHashSet<>(); + } public Set<String> getArchiveFormatErrors() { return ImmutableSet.copyOf(archiveFormatErrors); } + public File getReportFile() { + return importRequest.getReportFile(); + } + public GenericFormatArchive getArchive() { - return archive; + return importRequest.getArchive(); } - public File getReportFile() { - return reportFile; + public SampleCategoryModel getSampleCategoryModel() { + return importRequest.getSampleCategoryModel(); + } + + public Set<Cruise> getExistingCruises() { + return importRequest.getExistingCruises(); + } + + public TuttiProtocol getOldProtocol() { + return importRequest.getOldProtocol(); + } + + public Program getProgram() { + return importRequest.getProgram(); + } + + public Date getStartingDate() { + return importRequest.getStartingDate(); + } + + public boolean isCleanWeights() { + return importRequest.isCleanWeights(); + } + + public boolean isCheckWeights() { + return importRequest.isCheckWeights(); + } + + public boolean isOverrideData() { + return importRequest.isOverrideData(); } public boolean isValid() { diff --git a/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl b/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl new file mode 100644 index 0000000..8add13d --- /dev/null +++ b/tutti-service/src/main/resources/ftl/genericFormatValidateReport_fr.ftl @@ -0,0 +1,108 @@ +<#-- + #%L + Tutti :: Service + %% + Copyright (C) 2012 - 2014 Ifremer + %% + 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% +--> +<html> +<head> + <style type="text/css"> + + <#assign blueColor="#000080"> + <#assign lightGrayColor="#f2f2f2"> + + @page { size: A4 landscape;} + + h1 { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKEAAAAeCAYAAABEzX4WAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gsYESwznZhaYQAAC8VJREFUeNrtnHmQHPV1xz+vu+fanZm9b2l1YFlCSGBkkI3DYQpwqrI7rFwuK44ph8QmcQyuUCQYl3EO4xg7wQaDBSZCMahQIiiBjXZWoiiIywIZZbkMiAAxhyWxOliJPbTH3N0vf/x6tKPdjQMY5BGaV9PVU7/+Xb2/7+/73vd1zwrHmW3ZsoXu7m6SyeRFIhIHxgBUNSsiu4GDIpLv7u52i20eeeQRLrroonc95ubNm1m1ahUVe39MjkMQ1qtqN3CBqp4sIiuAw0BaVV8BBkTkGeBRVd0nIqOJRKKQTCarLMuyuru7JwCSyWRMRCw [...] + width: 100%; + text-align: center; + } + + h1, h4 { + color: ${blueColor}; + font-weight: bold; + font-style: italic; + } + + h2 { + margin-bottom: 50pt; + } + + table { + margin-bottom: 25pt; + border-collapse: collapse; + } + + th { + color: ${blueColor}; + font-weight: bold; + background: ${lightGrayColor}; + } + + td, th { + padding: 1pt 5pt; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + } + + tbody tr:nth-child(even) { + background: ${lightGrayColor}; + } + tbody tr:nth-child(odd) { + background: #fff; + } + + </style> +</head> +<body> + +<h1>Rapport de validation avant import générique</h1> + +<h2>Méta-données</h2> + +<ul> + <li>Fichier: ${archive.name}</li> + <li>Date - heure : ${date?date?string.full} ${date?time?string.short}</li> + <li>Série de campagne: ${program.name}</li> +</ul> + +<h2>Format de l'archive</h2> + +<h2>Référentiels temporaire</h2> + +<h2>Protocole</h2> + +<h2>Fichier survey.csv</h2> + +<h2>Fichier gearCaracteristics.csv</h2> + +<h2>Fichier operation.csv</h2> + +<h2>Fichier parameter.csv</h2> + +<h2>Fichier catch.csv</h2> + +<h2>Fichier marineLitter.csv</h2> + +<h2>Fichier accidentalCatch.csv</h2> + +<h2>Fichier indivudalObservation.csv</h2> + +</body> +</html> -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit ae34247d99ecde69c37a542dcfe81efef74f6f2d Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 10:02:51 2015 +0100 fix css --- .../java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css index 022ca7c..36179a1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css @@ -88,7 +88,7 @@ JTextField { i18nMnemonic: "tutti.editProtocol.action.addCaracteristicMapping.mnemonic"; _applicationAction: {fr.ifremer.tutti.ui.swing.action.AddCaracteristicMappingAction.class}; enabled: { caracteristicMappingComboBox.getSelectedItem() != null }; - _help: { "tutti.editProtocol.action.addCaracteristicMapping.help" }; + _help: {"tutti.editProtocol.action.addCaracteristicMapping.help"}; } -- 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 feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 11bdb672f87547e4b2691267c573a3e638cd4fe6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 10:03:11 2015 +0100 ecran d'import au format generique --- .../filtered-resources/tutti-help-fr.properties | 37 ++-- .../fr/ifremer/tutti/ui/swing/TuttiScreen.java | 8 +- .../action/OpenGenericFormatImportScreen.java | 18 ++ .../fr/ifremer/tutti/ui/swing/content/MainUI.css | 10 + .../fr/ifremer/tutti/ui/swing/content/MainUI.jaxx | 1 + .../tutti/ui/swing/content/MainUIHandler.java | 8 + .../genericformat/GenericFormatImportUI.css | 154 ++++++++++++++ .../genericformat/GenericFormatImportUI.jaxx | 156 ++++++++++++++ .../GenericFormatImportUIHandler.java | 135 ++++++++++++ .../genericformat/GenericFormatImportUIModel.java | 234 +++++++++++++++++++++ .../actions/GenericFormatImportAction.java | 186 ++++++++++++++++ .../actions/GenericFormatValidateAction.java | 138 ++++++++++++ .../OpenGenericFormatImportReportAction.java | 55 +++++ .../OpenGenericFormatValidateReportAction.java | 55 +++++ .../SaveGenericFormatImportReportAction.java | 78 +++++++ .../SaveGenericFormatValidateReportAction.java | 78 +++++++ .../tutti/ui/swing/content/home/SelectCruiseUI.css | 2 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 86 ++++++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 81 ++++++- 19 files changed, 1498 insertions(+), 22 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 7a68687..4de27c2 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Wed Feb 25 08:38:59 CET 2015 +#Wed Feb 25 09:28:15 CET 2015 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -308,23 +308,24 @@ tutti.fishingOperations.action.deleteFishingOperation.help=editFishingOperation. tutti.fishingOperations.action.newFishingOperation.help=editFishingOperation.html\#traitActions tutti.fishingOperations.field.fishingOperation.help=editFishingOperation.html\#fields tutti.fishingOperations.help=editFishingOperation.html -tutti.genericFormatImport.action.closeGenericFormatImport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.generateReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.import.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.openImportReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.openValidateReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.saveValidateReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.saveImportReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.showReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.validate.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.field.checkWeights.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.cleanWeights.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.importResult.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.overrideData.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.program.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.validateResult.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.validationResult.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.help=genericFormat.html#generic_format_import +tutti.genericFormatImport.action.closeGenericFormatImport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.generateReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.import.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.openImportReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.openValidateReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.saveImportReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.saveValidateReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.showReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.validate.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.field.checkWeights.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.cleanWeights.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.importResult.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.overrideData.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.program.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.validateResult.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.validationResult.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.help=genericFormat.html\#generic_format_import +tutti.genericFormatValidate.action.saveValidateReport.help= tutti.index.help=index.html tutti.main.action.changeLocale.help=menu.html\#menu_aide tutti.main.action.changeLocaleFR.help=menu.html\#menu_aide diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java index d53f65a..76801dc 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java @@ -103,5 +103,11 @@ public enum TuttiScreen { * * @since 2.9 */ - REPORT + REPORT, + /** + * To perform a generic format import. + * + * @since 3.14 + */ + GENERIC_FORMAT_IMPORT, } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenGenericFormatImportScreen.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenGenericFormatImportScreen.java new file mode 100644 index 0000000..5c89de6 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenGenericFormatImportScreen.java @@ -0,0 +1,18 @@ +package fr.ifremer.tutti.ui.swing.action; + +import fr.ifremer.tutti.ui.swing.TuttiScreen; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class OpenGenericFormatImportScreen extends AbstractChangeScreenAction { + + public OpenGenericFormatImportScreen(MainUIHandler handler) { + super(handler, true, TuttiScreen.GENERIC_FORMAT_IMPORT); + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css index b833804..48d66be 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css @@ -220,6 +220,16 @@ _help: {"tutti.main.menu.action.validateCatches.help"}; } +#menuActionGenericFormatImport { + actionIcon: import; + text: "tutti.main.action.genericFormatImport"; + toolTipText: "tutti.main.action.genericFormatImport.tip"; + i18nMnemonic: "tutti.main.action.genericFormatImport.mnemonic"; + enabled: {model.getScreen() != TuttiScreen.GENERIC_FORMAT_IMPORT}; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.OpenGenericFormatImportScreen.class}; + _help: {"tutti.main.menu.action.genericFormatImport.help"}; +} + #menuAdministration { text: "tutti.main.menu.administration"; toolTipText: "tutti.main.menu.administration.tip"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx index 70110f0..a9000b5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx @@ -76,6 +76,7 @@ <JMenuItem id='menuActionEditCatches'/> <JMenuItem id='menuActionValidateCatches'/> <JMenuItem id='menuActionGenerateCruiseReport'/> + <JMenuItem id='menuActionGenericFormatImport'/> </JMenu> <JMenu id='menuAdministration'> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java index fdd7c8c..6c16ea9 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java @@ -35,6 +35,7 @@ import fr.ifremer.tutti.ui.swing.content.category.EditSampleCategoryModelUI; import fr.ifremer.tutti.ui.swing.content.config.TuttiConfigUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; import fr.ifremer.tutti.ui.swing.content.validation.ValidateCruiseUI; import fr.ifremer.tutti.ui.swing.content.db.DbManagerUI; import fr.ifremer.tutti.ui.swing.content.db.DbManagerUIHandler; @@ -455,6 +456,13 @@ public class MainUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, MainUI screenTitle = t("tutti.report.title"); icon = ui.getMenuActionGenerateCruiseReport().getIcon(); break; + + case GENERIC_FORMAT_IMPORT: + + screenUI = new GenericFormatImportUI(ui); + screenTitle = t("tutti.genericFormatImport.title"); + icon = ui.getMenuActionGenericFormatImport().getIcon(); + break; } JButton showHelp = ui.getShowHelp(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css new file mode 100644 index 0000000..eae2dd6 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css @@ -0,0 +1,154 @@ +FileEditor { + showReset:true; + directoryEnabled: false; + acceptAllFileFilterUsed: false; +} + +BeanFilterableComboBox { + showReset: true; + bean: {model}; +} + +JToolBar { + borderPainted: false; + floatable: false; +} + +JTextField { + _selectOnFocus: {true}; +} + +#genericFormatImportTopPanel { + _help: {"tutti.genericFormatImport.help"}; +} + +#validateFilePanel { + border: {BorderFactory.createTitledBorder(t("tutti.genericFormatImport.validateImport.legend"))}; +} + +#programLabel { + text: "tutti.genericFormatImport.field.program"; + labelFor: {programComboBox}; + toolTipText: "tutti.genericFormatImport.field.program.tip"; + _help: {"tutti.genericFormatImport.field.program.help"}; +} + +#programComboBox { + property: program; + selectedItem: {model.getProgram()}; + _validatorLabel: {t("tutti.genericFormatImport.field.program")}; + _help: {"tutti.genericFormatImport.field.program.help"}; +} + +#importFileLabel { + text: "tutti.genericFormatImport.field.importFile"; + labelFor: {importFile}; + toolTipText: "tutti.genericFormatImport.field.importFile.tip"; +} + +#importFile { + exts: {t("tutti.genericFormatImport.importFile.extension")}; + extsDescription: {t("tutti.genericFormatImport.importFile.extension.description")}; + selectedFile: {model.getImportFile()}; +} + +#overrideDataCheckBox { + text: "tutti.genericFormatImport.field.overrideData"; + selected: {model.isOverrideData()}; + toolTipText: "tutti.genericFormatImport.field.overrideData.tip"; + _help: {"tutti.genericFormatImport.field.overrideData.help"}; +} + +#validateButton { + actionIcon: validate; + text: "tutti.genericFormatImport.action.validate"; + toolTipText: "tutti.genericFormatImport.action.validate.tip"; + i18nMnemonic: "tutti.genericFormatImport.action.validate.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.GenericFormatValidateAction.class}; + enabled: {model.isCanValidate()}; + _help: {"tutti.genericFormatImport.action.validate.help"}; +} + +#validateResultPanel { + visible: false; + _help: {"tutti.genericFormatImport.field.validateResult.help"}; +} + +#validateResultText { + _help: {"tutti.genericFormatImport.field.validateResult.help"}; +} + +#openValidateReportButton { + actionIcon: open-file; + toolTipText: "tutti.genericFormatImport.action.openValidateReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.OpenGenericFormatValidateReportAction.class}; + _help: {"tutti.genericFormatImport.action.openValidateReport.help"}; +} + +#saveValidateReportButton { + actionIcon: save; + toolTipText: "tutti.genericFormatImport.action.saveValidateReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.SaveGenericFormatValidateReportAction.class}; + _help: {"tutti.genericFormatValidate.action.saveValidateReport.help"}; +} + +#importPanel { + border: {BorderFactory.createTitledBorder(t("tutti.genericFormatImport.import.legend"))}; + visible: {model.isValidateDone() && model.isValidateValid()}; +} + +#cleanWeightsCheckBox { + text: "tutti.genericFormatImport.field.cleanWeights"; + selected: {model.isCleanWeights()}; + toolTipText: "tutti.genericFormatImport.field.cleanWeights.tip"; + _help: {"tutti.genericFormatImport.field.cleanWeights.help"}; +} + +#checkWeightsCheckBox { + text: "tutti.genericFormatImport.field.checkWeights"; + selected: {model.isCheckWeights()}; + toolTipText: "tutti.genericFormatImport.field.checkWeights.tip"; + _help: {"tutti.genericFormatImport.field.checkWeights.help"}; +} + +#importButton { + actionIcon: import; + text: "tutti.genericFormatImport.action.import"; + toolTipText: "tutti.genericFormatImport.action.import.tip"; + i18nMnemonic: "tutti.genericFormatImport.action.import.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.GenericFormatImportAction.class}; + enabled: {model.isCanImport()}; + _help: {"tutti.genericFormatImport.action.import.help"}; +} + +#importResultPanel { + visible: false; + _help: {"tutti.genericFormatImport.field.importResult.help"}; +} + +#importResultText { + _help: {"tutti.genericFormatImport.field.importResult.help"}; +} + +#openImportReportButton { + actionIcon: open-file; + toolTipText: "tutti.genericFormatImport.action.openImportReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.OpenGenericFormatImportReportAction.class}; + _help: {"tutti.genericFormatImport.action.openImportReport.help"}; +} + +#saveImportReportButton { + actionIcon: save; + toolTipText: "tutti.genericFormatImport.action.saveImportReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.SaveGenericFormatImportReportAction.class}; + _help: {"tutti.genericFormatImport.action.saveImportReport.help"}; +} + +#closeButton { + actionIcon: cancel; + text: "tutti.genericFormatImport.action.closeGenericFormatImport"; + toolTipText: "tutti.genericFormatImport.action.closeGenericFormatImport.tip"; + i18nMnemonic: "tutti.genericFormatImport.action.closeGenericFormatImport.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.SelectCruiseAction.class}; + _help: {"tutti.genericFormatImport.action.closeGenericFormatImport.help"}; +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx new file mode 100644 index 0000000..1a3ebc0 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx @@ -0,0 +1,156 @@ +<!-- + #%L + Tutti :: UI + %% + Copyright (C) 2012 - 2014 Ifremer + %% + 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% + --> +<JPanel id='genericFormatImportTopPanel' layout='{new BorderLayout()}' decorator='help' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<GenericFormatImportUIModel, GenericFormatImportUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.data.Program + + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + jaxx.runtime.swing.editor.FileEditor + + static org.nuiton.i18n.I18n.t + static jaxx.runtime.SwingUtil.getStringValue + </import> + + <script><![CDATA[ + + public GenericFormatImportUI(TuttiUI parentUI) { + TuttiUIUtil.setParentUI(this, parentUI); + } + ]]></script> + + <GenericFormatImportUIModel id='model' initializer='getContextValue(GenericFormatImportUIModel.class)'/> + + <TuttiHelpBroker id='broker' constructorParams='"tutti.genericFormatimport.help"'/> + + <BeanValidator id='validator' bean='model' context='edit' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> + <field name='program' component='programComboBox'/> + <field name='importFile' component='importFile'/> + </BeanValidator> + + <Table id='validateFilePanel' fill='both' constraints='BorderLayout.NORTH'> + + <!-- program --> + <row> + <cell> + <JLabel id='programLabel'/> + </cell> + <cell> + <BeanFilterableComboBox id='programComboBox' constructorParams='this' genericType='Program'/> + </cell> + </row> + + <!-- Import file --> + <row> + <cell anchor='west'> + <JLabel id='importFileLabel'/> + </cell> + <cell fill='both' weightx='1'> + <FileEditor id='importFile' onActionPerformed='handler.setFile(event, "importFile")'/> + </cell> + </row> + + <!-- Import options --> + <row> + <cell fill='both' columns="2"> + <JPanel layout='{new GridLayout(0, 1)}'> + <JCheckBox id='overrideDataCheckBox' onItemStateChanged='handler.setBoolean(event, "overrideData")'/> + </JPanel> + </cell> + </row> + + <!-- validate action --> + <row> + <cell columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='validateButton'/> + </JPanel> + </cell> + </row> + + <!-- Validate result --> + <row> + <cell columns='2'> + <JPanel id='validateResultPanel' layout='{new BorderLayout()}'> + <JLabel id='validateResultText' constraints='BorderLayout.WEST'/> + <JToolBar constraints='BorderLayout.EAST'> + <JButton id='openValidateReportButton'/> + <JButton id='saveValidateReportButton'/> + </JToolBar> + </JPanel> + </cell> + </row> + + </Table> + + <Table id='importPanel' fill='both' constraints='BorderLayout.CENTER'> + + <!-- Import options --> + <row fill='both'> + <cell fill='both' columns="2"> + <JPanel layout='{new GridLayout(0, 1)}'> + <JCheckBox id='cleanWeightsCheckBox' onItemStateChanged='handler.setBoolean(event, "cleanWeights")'/> + <JCheckBox id='checkWeightsCheckBox' onItemStateChanged='handler.setBoolean(event, "checkWeights")'/> + </JPanel> + </cell> + </row> + + <!-- Import actions --> + <row anchor='south'> + <cell columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='importButton'/> + </JPanel> + </cell> + </row> + + <!-- import result --> + <row> + <cell columns='2'> + <JPanel id='importResultPanel' layout='{new BorderLayout()}'> + <JLabel id='importResultText' constraints='BorderLayout.WEST'/> + <JToolBar constraints='BorderLayout.EAST'> + <JButton id='openImportReportButton'/> + <JButton id='saveImportReportButton'/> + </JToolBar> + </JPanel> + </cell> + </row> + + </Table> + + <Table fill='both' constraints='BorderLayout.SOUTH'> + <row> + <cell fill='both' weightx="1"> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='closeButton'/> + </JPanel> + </cell> + </row> + </Table> + +</JPanel> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java new file mode 100644 index 0000000..90eda64 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java @@ -0,0 +1,135 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.swing.util.CloseableUI; + +import javax.swing.JComponent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Set; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<GenericFormatImportUIModel, GenericFormatImportUI> implements CloseableUI { + + /** Logger. */ + private static final Log log = LogFactory.getLog(GenericFormatImportUIHandler.class); + + @Override + public void beforeInit(GenericFormatImportUI ui) { + + super.beforeInit(ui); + + getDataContext().resetValidationDataContext(); + + GenericFormatImportUIModel model = new GenericFormatImportUIModel(); + + if (getContext().isProgramFilled()) { + + String programId = getContext().getProgramId(); + + if (log.isInfoEnabled()) { + log.info("Using selected program " + programId); + } + // load existing program + Program program = getPersistenceService().getProgram(programId); + + model.setProgram(program); + } + + ui.setContextValue(model); + + model.addPropertyChangeListener(new PropertyChangeListener() { + + final Set<String> propertyNamesToCanValidate = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_IMPORT_FILE, GenericFormatImportUIModel.PROPERTY_PROGRAM, GenericFormatImportUIModel.PROPERTY_OVERRIDE_DATA); + + final Set<String> propertyNamesToCanImport = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_IMPORT_FILE, GenericFormatImportUIModel.PROPERTY_PROGRAM, GenericFormatImportUIModel.PROPERTY_OVERRIDE_DATA); + + @Override + public void propertyChange(PropertyChangeEvent evt) { + GenericFormatImportUIModel source = (GenericFormatImportUIModel) evt.getSource(); + String propertyName = evt.getPropertyName(); + + if (propertyNamesToCanValidate.contains(propertyName)) { + + boolean canValidate = source.computeIsCanValidate(); + source.setCanValidate(canValidate); + + } + + if (propertyNamesToCanImport.contains(propertyName)) { + + boolean canImport = source.computeIsCanImport(); + source.setCanImport(canImport); + + } + + if (GenericFormatImportUIModel.PROPERTY_CAN_VALIDATE.equals(propertyName)) { + + if (!(boolean) evt.getNewValue()) { + getUI().getValidateResultPanel().setVisible(false); + } + } + + if (GenericFormatImportUIModel.PROPERTY_CAN_IMPORT.equals(propertyName)) { + + if (!(boolean) evt.getNewValue()) { + getUI().getImportResultPanel().setVisible(false); + } + } + + } + }); + + } + + @Override + public void afterInit(GenericFormatImportUI ui) { + + initUI(ui); + + GenericFormatImportUIModel model = getModel(); + initBeanFilterableComboBox(ui.getProgramComboBox(), + Lists.newArrayList(getPersistenceService().getAllProgram()), + model.getProgram()); + + SwingValidator validator = ui.getValidator(); + + registerValidators(validator); + + } + + @Override + protected JComponent getComponentToFocus() { + return getUI().getProgramComboBox(); + } + + @Override + public void onCloseUI() { + if (log.isDebugEnabled()) { + log.debug("closing: " + ui); + } + clearValidators(); + } + + @Override + public boolean quitUI() { + return true; + } + + @Override + public SwingValidator<GenericFormatImportUIModel> getValidator() { + return ui.getValidator(); + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java new file mode 100644 index 0000000..9654271 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java @@ -0,0 +1,234 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat; + +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportConfiguration; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatValidateFileResult; +import org.jdesktop.beans.AbstractSerializableBean; + +import java.io.File; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportUIModel extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_PROGRAM = "program"; + + public static final String PROPERTY_IMPORT_FILE = "importFile"; + + public static final String PROPERTY_BACKUP_FILE = "backupFile"; + + public static final String PROPERTY_CLEAN_WEIGHTS = "cleanWeights"; + + public static final String PROPERTY_CHECK_WEIGHTS = "checkWeights"; + + public static final String PROPERTY_OVERRIDE_DATA = "overrideData"; + + public static final String PROPERTY_CAN_VALIDATE = "canValidate"; + + public static final String PROPERTY_VALIDATE_RESULT = "validateResult"; + + public static final String PROPERTY_VALIDATE_VALID = "validateValid"; + + public static final String PROPERTY_VALIDATE_DONE = "validateDone"; + + public static final String PROPERTY_CAN_IMPORT = "canImport"; + + public static final String PROPERTY_IMPORT_RESULT = "importResult"; + + public static final String PROPERTY_IMPORT_DONE = "importDone"; + + public static final String PROPERTY_IMPORT_VALID = "importValid"; + + private Program program; + + private File importFile; + + private boolean cleanWeights; + + private boolean checkWeights; + + private boolean overrideData; + + private boolean canValidate; + + private File validateReportFile; + + private GenericFormatValidateFileResult validateResult; + + private boolean canImport; + + private File importReportFile; + + private GenericFormatImportResult importResult; + + public GenericFormatImportConfiguration toValidateImportFileConfiguration() { + + GenericFormatImportConfiguration configuration = new GenericFormatImportConfiguration(); + + configuration.setCleanWeights(cleanWeights); + configuration.setCheckWeights(checkWeights); + configuration.setOverrideData(overrideData); + configuration.setImportFile(importFile); + configuration.setReportFile(validateReportFile); + configuration.setProgramId(program.getId()); + + return configuration; + + } + + public GenericFormatImportConfiguration toImportConfiguration() { + + GenericFormatImportConfiguration configuration = new GenericFormatImportConfiguration(); + + configuration.setCleanWeights(cleanWeights); + configuration.setCheckWeights(checkWeights); + configuration.setOverrideData(overrideData); + configuration.setImportFile(importFile); + configuration.setReportFile(importReportFile); + configuration.setProgramId(program.getId()); + + return configuration; + + } + + public Program getProgram() { + return program; + } + + public void setProgram(Program program) { + Object oldValue = getProgram(); + this.program = program; + firePropertyChange(PROPERTY_PROGRAM, oldValue, program); + } + + public File getImportFile() { + return importFile; + } + + public void setImportFile(File importFile) { + Object oldValue = getImportFile(); + this.importFile = importFile; + firePropertyChange(PROPERTY_IMPORT_FILE, oldValue, importFile); + firePropertyChange(PROPERTY_VALIDATE_VALID, null, isValidateValid()); + } + + public boolean isCleanWeights() { + return cleanWeights; + } + + public void setCleanWeights(boolean cleanWeights) { + this.cleanWeights = cleanWeights; + firePropertyChange(PROPERTY_CLEAN_WEIGHTS, null, cleanWeights); + } + + public boolean isCheckWeights() { + return checkWeights; + } + + public void setCheckWeights(boolean checkWeights) { + this.checkWeights = checkWeights; + firePropertyChange(PROPERTY_CHECK_WEIGHTS, null, checkWeights); + } + + public boolean isOverrideData() { + return overrideData; + } + + public void setOverrideData(boolean overrideData) { + this.overrideData = overrideData; + firePropertyChange(PROPERTY_OVERRIDE_DATA, null, overrideData); + } + + public File getValidateReportFile() { + return validateReportFile; + } + + public void setValidateReportFile(File validateReportFile) { + this.validateReportFile = validateReportFile; + } + + public boolean isCanValidate() { + return canValidate; + } + + public void setCanValidate(boolean canValidate) { + this.canValidate = canValidate; + firePropertyChange(PROPERTY_CAN_VALIDATE, null, canValidate); + } + + public GenericFormatValidateFileResult getValidateResult() { + return validateResult; + } + + public void setValidateResult(GenericFormatValidateFileResult validateResult) { + this.validateResult = validateResult; + firePropertyChange(PROPERTY_VALIDATE_RESULT, null, validateResult); + firePropertyChange(PROPERTY_VALIDATE_DONE, null, isValidateDone()); + firePropertyChange(PROPERTY_VALIDATE_VALID, null, isValidateValid()); + } + + public boolean isValidateDone() { + return validateResult != null; + } + + public boolean isValidateValid() { + return validateResult != null && validateResult.isValid(); + } + + public boolean isCanImport() { + return canImport; + } + + public void setCanImport(boolean canImport) { + this.canImport = canImport; + firePropertyChange(PROPERTY_CAN_IMPORT, null, canImport); + } + + public File getImportReportFile() { + return importReportFile; + } + + public void setImportReportFile(File importReportFile) { + this.importReportFile = importReportFile; + } + + public GenericFormatImportResult getImportResult() { + return importResult; + } + + public void setImportResult(GenericFormatImportResult importResult) { + this.importResult = importResult; + firePropertyChange(PROPERTY_IMPORT_RESULT, null, importResult); + firePropertyChange(PROPERTY_IMPORT_DONE, null, isImportDone()); + firePropertyChange(PROPERTY_IMPORT_VALID, null, isImportValid()); + } + + public boolean isImportDone() { + return importResult != null; + } + + public boolean isImportValid() { + return importResult != null && importResult.isValid(); + } + + + public boolean computeIsCanValidate() { + + return canValidate = program != null && importFile != null && importFile.exists(); + + } + + public boolean computeIsCanImport() { + + return isValidateDone() && isValidateValid(); + + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java new file mode 100644 index 0000000..7584ebc --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java @@ -0,0 +1,186 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportConfiguration; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportService; +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import jaxx.runtime.SwingUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.Icon; +import javax.swing.JLabel; +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(GenericFormatImportAction.class); + + public static final DateFormat df = new SimpleDateFormat("yyy-MM-dd-hh-mm"); + + private File backupFile; + + private GenericFormatImportResult importResult; + + public GenericFormatImportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().isCanValidate(); + + } + + // Do a backup before import + + if (doAction) { + + // choose file to export + backupFile = saveFileWithStartDirectory( + getConfig().getDbBackupDirectory(), + false, + "tutti-db-" + df.format(new Date()), + t("tutti.genericFormat.title.choose.dbBackupFile"), + t("tutti.genericFormat.action.chooseDbBackupFile"), + "^.+\\.zip$", t("tutti.common.file.zip") + ); + + if (backupFile == null) { + + displayWarningMessage( + t("tutti.dbManager.title.backup.db"), + t("tutti.dbManager.action.importdb.no.backup.db.choosen") + ); + + doAction = false; + } + + } + + if (doAction) { + + // Remove any previous import result + updateResult(null); + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + getModel().setImportReportFile(getConfig().newTempFile("genericFormatImportReport", "pdf")); + + GenericFormatImportConfiguration configuration = getModel().toImportConfiguration(); + + GenericFormatImportService service = getContext().getGenericFormatImportService(); + + int nbSteps = 3 + service.getImportProgramNbSteps(configuration); + + if (log.isInfoEnabled()) { + log.info("Import nb steps: " + nbSteps); + } + createProgressionModelIfRequired(nbSteps); + + // close db + getProgressionModel().increments(t("tutti.genericFormatImport.step.closeDb")); + getContext().closePersistenceService(); + + // backup db + getProgressionModel().increments(t("tutti.genericFormatImport.step.backupDb", backupFile)); + getContext().getPersistenceService().exportDb(backupFile); + + // reopen db + getProgressionModel().increments(t("tutti.genericFormatImport.step.reopenDb", backupFile)); + getContext().openPersistenceService(); + + Program program = getModel().getProgram(); + + File importFile = getModel().getImportFile(); + + if (log.isInfoEnabled()) { + log.info("Do generic format import for program: " + program.getName() + " from file: " + importFile); + } + + importResult = service.importProgram(configuration, getProgressionModel()); + + } + + @Override + public void postSuccessAction() { + + updateResult(importResult); + + } + + @Override + public void releaseAction() { + backupFile = null; + importResult = null; + super.releaseAction(); + } + + protected void updateResult(GenericFormatImportResult result) { + + getModel().setImportResult(result); + + if (result == null) { + + // result removed + getUI().getImportResultPanel().setVisible(false); + + } else { + + // result added + getUI().getImportResultPanel().setVisible(true); + + Icon icon; + String text; + String tip; + if (result.isValid()) { + + icon = SwingUtil.createActionIcon("accept"); + text = t("tutti.genericFormat.import.success"); + tip = t("tutti.genericFormat.import.success.tip"); + + } else { + + icon = SwingUtil.createActionIcon("cancel"); + text = t("tutti.genericFormat.import.error"); + tip = t("tutti.genericFormat.import.error.tip"); + + } + + JLabel resultText = getUI().getImportResultText(); + resultText.setIcon(icon); + resultText.setText(text); + resultText.setToolTipText(tip); + + } + + } +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatValidateAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatValidateAction.java new file mode 100644 index 0000000..5281eb4 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatValidateAction.java @@ -0,0 +1,138 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportConfiguration; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportService; +import fr.ifremer.tutti.service.genericformat.GenericFormatValidateFileResult; +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import jaxx.runtime.SwingUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.Icon; +import javax.swing.JLabel; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatValidateAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(GenericFormatValidateAction.class); + + GenericFormatValidateFileResult validateFileResult; + + public GenericFormatValidateAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().isCanValidate(); + + } + + if (doAction) { + + // Remove any previous validate result + updateResult(null); + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + getModel().setValidateReportFile(getConfig().newTempFile("genericFormatValidateReport", "pdf")); + + GenericFormatImportConfiguration configuration = getModel().toValidateImportFileConfiguration(); + + GenericFormatImportService service = getContext().getGenericFormatImportService(); + + int nbSteps = service.getValidateImportFileNbSteps(configuration); + + if (log.isInfoEnabled()) { + log.info("validate import file nb steps: " + nbSteps); + } + createProgressionModelIfRequired(nbSteps); + + Program program = getModel().getProgram(); + + if (log.isInfoEnabled()) { + log.info("Validate generic format import file for program: " + program.getName() + " from file: " + configuration.getImportFile()); + } + + validateFileResult = service.validateImportFile(configuration, getProgressionModel()); + + } + + @Override + public void postSuccessAction() { + + updateResult(validateFileResult); + + } + + @Override + protected void releaseAction() { + validateFileResult = null; + super.releaseAction(); + } + + protected void updateResult(GenericFormatValidateFileResult result) { + + getModel().setValidateResult(result); + + if (result == null) { + + // result removed + getUI().getValidateResultPanel().setVisible(false); + + } else { + + // result added + getUI().getValidateResultPanel().setVisible(true); + + Icon icon; + String text; + String tip; + if (result.isValid()) { + + icon = SwingUtil.createActionIcon("accept"); + text = t("tutti.genericFormat.validate.success"); + tip = t("tutti.genericFormat.validate.success.tip"); + + } else { + + icon = SwingUtil.createActionIcon("cancel"); + text = t("tutti.genericFormat.validate.error"); + tip = t("tutti.genericFormat.validate.error.tip"); + + } + + JLabel resultText = getUI().getValidateResultText(); + resultText.setIcon(icon); + resultText.setText(text); + resultText.setToolTipText(tip); + + } + + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatImportReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatImportReportAction.java new file mode 100644 index 0000000..a136c51 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatImportReportAction.java @@ -0,0 +1,55 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; + +import java.awt.Desktop; +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class OpenGenericFormatImportReportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + public OpenGenericFormatImportReportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().getImportReportFile() != null && getModel().getImportReportFile().exists(); + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + Desktop desktop = TuttiUIUtil.getDesktopForBrowse(); + try { + + desktop.browse(getModel().getImportReportFile().toURI()); + + } catch (IOException e) { + getContext().getErrorHelper().showErrorDialog(t("swing.error.cannot.open.file")); + } + + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatValidateReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatValidateReportAction.java new file mode 100644 index 0000000..d704030 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatValidateReportAction.java @@ -0,0 +1,55 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; + +import java.awt.Desktop; +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class OpenGenericFormatValidateReportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + public OpenGenericFormatValidateReportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().getValidateReportFile() != null && getModel().getValidateReportFile().exists(); + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + Desktop desktop = TuttiUIUtil.getDesktopForBrowse(); + try { + + desktop.browse(getModel().getValidateReportFile().toURI()); + + } catch (IOException e) { + getContext().getErrorHelper().showErrorDialog(t("swing.error.cannot.open.file")); + } + + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java new file mode 100644 index 0000000..813f715 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java @@ -0,0 +1,78 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import org.nuiton.jaxx.application.ApplicationIOUtil; + +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/25/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class SaveGenericFormatImportReportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + private static final DateFormat DF = new SimpleDateFormat("yyy-MM-dd-hh-mm"); + + private File targetFile; + + public SaveGenericFormatImportReportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().getImportReportFile() != null && getModel().getImportReportFile().exists(); + + } + + if (doAction) { + + targetFile = saveFileWithStartDirectory( + getConfig().getGenericFormatReportBackupDirectory(), + false, + "import-report-" + getModel().getProgram().getId() + "-" + DF.format(new Date()), + "zip", + t("tutti.genericFormat.title.choose.saveImportReportfile"), + t("tutti.genericFormat.action.chooseImportReportFile"), + "^.+\\.zip$", t("tutti.common.file.zip")); + + doAction = targetFile != null; + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + File reportFile = getModel().getImportReportFile(); + ApplicationIOUtil.copyFile(reportFile, targetFile, t("tutti.io.error.copyFile")); + sendMessage(t("tutti.genericFormat.importReportFile.saved", targetFile)); + + } + + @Override + protected void releaseAction() { + + targetFile = null; + super.releaseAction(); + + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java new file mode 100644 index 0000000..fdbe4b4 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java @@ -0,0 +1,78 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import org.nuiton.jaxx.application.ApplicationIOUtil; + +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/25/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class SaveGenericFormatValidateReportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + private static final DateFormat DF = new SimpleDateFormat("yyy-MM-dd-hh-mm"); + + private File targetFile; + + public SaveGenericFormatValidateReportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().getValidateReportFile() != null && getModel().getValidateReportFile().exists(); + + } + + if (doAction) { + + targetFile = saveFileWithStartDirectory( + getConfig().getGenericFormatReportBackupDirectory(), + false, + "validate-report-" + getModel().getProgram().getId() + "-" + DF.format(new Date()), + "zip", + t("tutti.genericFormat.title.choose.saveValidateReportfile"), + t("tutti.genericFormat.action.chooseValidateReportFile"), + "^.+\\.zip$", t("tutti.common.file.zip")); + + doAction = targetFile != null; + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + File reportFile = getModel().getValidateReportFile(); + ApplicationIOUtil.copyFile(reportFile, targetFile, t("tutti.io.error.copyFile")); + sendMessage(t("tutti.genericFormat.validateReportFile.saved", targetFile)); + + } + + @Override + protected void releaseAction() { + + targetFile = null; + super.releaseAction(); + + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css index f6d18d1..21d27ec 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css @@ -80,7 +80,7 @@ BeanFilterableComboBox { #importProgramButton { actionIcon: import; text: "tutti.selectCruise.action.importProgram"; - _applicationAction: {fr.ifremer.tutti.ui.swing.action.ImportGenericFormatProgramCruisesAction.class}; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.OpenGenericFormatImportScreen.class}; toolTipText: "tutti.selectCruise.action.importProgram.tip"; _help: {"tutti.selectCruise.action.importProgram.help"}; } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 49fc205..f01a330 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -142,6 +142,7 @@ tutti.config.option.persistence.db.enumerationPath.shortLabel= tutti.config.option.persistence.db.protocol.directory.shortLabel= tutti.config.option.persistence.jdbc.url.shortLabel= tutti.config.option.service.export.backup.directory.shortLabel= +tutti.config.option.service.genericFormat.export.backup.directory.shortLabel= tutti.config.option.service.report.backup.directory.shortLabel= tutti.config.option.service.report.directory.shortLabel= tutti.config.option.service.report.log.directory.shortLabel= @@ -1404,6 +1405,87 @@ tutti.gearUseFeatureTable.action.removeCaracteristic.tip= tutti.gearUseFeatureTable.table.header.key= tutti.gearUseFeatureTable.table.header.value= tutti.gearUseFeatureTable.title= +tutti.genericFormat.action.chooseDbBackupFile= +tutti.genericFormat.action.chooseImportReportFile= +tutti.genericFormat.action.chooseValidateReportFile= +tutti.genericFormat.import.error= +tutti.genericFormat.import.error.tip= +tutti.genericFormat.import.success= +tutti.genericFormat.import.success.tip= +tutti.genericFormat.importReportFile.saved= +tutti.genericFormat.title.choose.dbBackupFile= +tutti.genericFormat.title.choose.exportImportReportfile= +tutti.genericFormat.title.choose.exportValidateReportfile= +tutti.genericFormat.title.choose.saveImportReportfile= +tutti.genericFormat.title.choose.saveValidateReportfile= +tutti.genericFormat.validate.error= +tutti.genericFormat.validate.error.tip= +tutti.genericFormat.validate.success= +tutti.genericFormat.validate.success.tip= +tutti.genericFormat.validateReportFile.saved= +tutti.genericFormatImport.action.closeGenericFormatImport= +tutti.genericFormatImport.action.closeGenericFormatImport.mnemonic= +tutti.genericFormatImport.action.closeGenericFormatImport.tip= +tutti.genericFormatImport.action.error= +tutti.genericFormatImport.action.generateReport= +tutti.genericFormatImport.action.generateReport.mnemonic= +tutti.genericFormatImport.action.generateReport.tip= +tutti.genericFormatImport.action.import= +tutti.genericFormatImport.action.import.mnemonic= +tutti.genericFormatImport.action.import.tip= +tutti.genericFormatImport.action.importErrors= +tutti.genericFormatImport.action.openImportReport= +tutti.genericFormatImport.action.openImportReport.mnemonic= +tutti.genericFormatImport.action.openImportReport.tip= +tutti.genericFormatImport.action.openValidateReport= +tutti.genericFormatImport.action.openValidateReport.mnemonic= +tutti.genericFormatImport.action.openValidateReport.tip= +tutti.genericFormatImport.action.saveImportReport.tip= +tutti.genericFormatImport.action.saveValidateReport.tip= +tutti.genericFormatImport.action.showReport= +tutti.genericFormatImport.action.showReport.mnemonic= +tutti.genericFormatImport.action.showReport.tip= +tutti.genericFormatImport.action.success= +tutti.genericFormatImport.action.validate= +tutti.genericFormatImport.action.validate.mnemonic= +tutti.genericFormatImport.action.validate.tip= +tutti.genericFormatImport.action.validateImportFile= +tutti.genericFormatImport.action.validateImportFile.mnemonic= +tutti.genericFormatImport.action.validateImportFile.tip= +tutti.genericFormatImport.backupFile.extension= +tutti.genericFormatImport.backupFile.extension.description= +tutti.genericFormatImport.field.backupFile= +tutti.genericFormatImport.field.backupFile.tip= +tutti.genericFormatImport.field.checkWeights= +tutti.genericFormatImport.field.checkWeights.tip= +tutti.genericFormatImport.field.cleanWeights= +tutti.genericFormatImport.field.cleanWeights.tip= +tutti.genericFormatImport.field.importFile= +tutti.genericFormatImport.field.importFile.tip= +tutti.genericFormatImport.field.overrideData= +tutti.genericFormatImport.field.overrideData.tip= +tutti.genericFormatImport.field.program= +tutti.genericFormatImport.field.program.tip= +tutti.genericFormatImport.field.reportFile= +tutti.genericFormatImport.field.reportFile.tip= +tutti.genericFormatImport.import.legend= +tutti.genericFormatImport.importConfiguration.legend= +tutti.genericFormatImport.importFile.extension= +tutti.genericFormatImport.importFile.extension.description= +tutti.genericFormatImport.importResult.description= +tutti.genericFormatImport.importResult.description.tip= +tutti.genericFormatImport.importResult.legend= +tutti.genericFormatImport.reportConfiguration.legend= +tutti.genericFormatImport.reportFile.extension= +tutti.genericFormatImport.reportFile.extension.description= +tutti.genericFormatImport.step.backupDb= +tutti.genericFormatImport.step.closeDb= +tutti.genericFormatImport.step.reopenDb= +tutti.genericFormatImport.title= +tutti.genericFormatImport.validateImport.legend= +tutti.genericFormatImport.validationResult.description= +tutti.genericFormatImport.validationResult.description.tip= +tutti.genericFormatImport.validationResult.legend= tutti.help.mkDir.error= tutti.i18n.deleteCache.error= tutti.i18n.mkDir.error= @@ -1440,6 +1522,7 @@ tutti.importPupitri.field.trunkFile= tutti.importPupitri.title= tutti.importPupitri.trunkFile.extension= tutti.importPupitri.trunkFile.extension.description= +tutti.io.error.copyFile= tutti.label.tab.accidental= tutti.label.tab.benthos= tutti.label.tab.catches= @@ -1493,6 +1576,9 @@ tutti.main.action.exit.tip= tutti.main.action.generateSelectedCruiseReport= tutti.main.action.generateSelectedCruiseReport.mnemonic= tutti.main.action.generateSelectedCruiseReport.tip= +tutti.main.action.genericFormatImport= +tutti.main.action.genericFormatImport.mnemonic= +tutti.main.action.genericFormatImport.tip= tutti.main.action.goto.previousScreen.tip= tutti.main.action.importTemporaryReferential= tutti.main.action.importTemporaryReferential.mnemonic= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 144bca3..5611602 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -124,6 +124,7 @@ tutti.config.option.persistence.db.enumerationPath.shortLabel=Chemin vers le fic tutti.config.option.persistence.db.protocol.directory.shortLabel=Répertoire des protocoles tutti.config.option.persistence.jdbc.url.shortLabel=Url jdbc de connexion tutti.config.option.service.export.backup.directory.shortLabel=Répertoire des sauvegardes d'export générique +tutti.config.option.service.genericFormat.export.backup.directory.shortLabel=Répertoire des sauvegardes de rapport d'import générique tutti.config.option.service.report.backup.directory.shortLabel=Répertoire des sauvegardes de rapport tutti.config.option.service.report.directory.shortLabel=Répertoire des modèles de rapport tutti.config.option.service.report.log.directory.shortLabel=Répertoire des log de génération des rapports @@ -1348,6 +1349,79 @@ tutti.gearUseFeatureTable.action.removeCaracteristic.tip=Supprimer la caractéri tutti.gearUseFeatureTable.table.header.key=Caractéristique tutti.gearUseFeatureTable.table.header.value=Valeur tutti.gearUseFeatureTable.title=Mise en œuvre de l'engin +tutti.genericFormat.action.chooseDbBackupFile=Sauvegarder la base de données +tutti.genericFormat.action.chooseImportReportFile=Enregistrer +tutti.genericFormat.action.chooseValidateReportFile=Enregistrer +tutti.genericFormat.import.error=Des erreurs ont été détectées lors de l'import +tutti.genericFormat.import.error.tip=Vous pouvez consulter le rapport d'import pour les corriger +tutti.genericFormat.import.success=L'import s'est déroulé avec succès +tutti.genericFormat.import.success.tip=Vous pouvez consulter le rapport d'import (%s) +tutti.genericFormat.importReportFile.saved=Le rapport d'import a été enregistré <strong>%s</strong> +tutti.genericFormat.title.choose.dbBackupFile=Sauvegarder la base de données +tutti.genericFormat.title.choose.saveImportReportfile=Enregisrer le rapport d'import +tutti.genericFormat.title.choose.saveValidateReportfile=Enregisrer le rapport de validation +tutti.genericFormat.validate.error=Des erreurs ont été détectées lors de la validation +tutti.genericFormat.validate.error.tip=Vous pouvez consulter le rapport de validation pour les corriger +tutti.genericFormat.validate.success=La validation s'est déroulée avec succès +tutti.genericFormat.validate.success.tip=Vous pouvez consulter le rapport de validation (%s) +tutti.genericFormat.validateReportFile.saved=Le rapport de validation a été enregistré <strong>%s</strong> +tutti.genericFormatImport..extension=zip +tutti.genericFormatImport..extension.description=Archive d'import générique (.zip) +tutti.genericFormatImport.action.closeGenericFormatImport=Quitter +tutti.genericFormatImport.action.closeGenericFormatImport.mnemonic=Q +tutti.genericFormatImport.action.closeGenericFormatImport.tip=Quitter +tutti.genericFormatImport.action.error=L'import depuis le fichier <strong>%s</strong> a échoué. +tutti.genericFormatImport.action.generateReport=Générer le rapport +tutti.genericFormatImport.action.generateReport.mnemonic=G +tutti.genericFormatImport.action.generateReport.tip=Générer le rapport de l'import +tutti.genericFormatImport.action.import=Importer +tutti.genericFormatImport.action.import.mnemonic=I +tutti.genericFormatImport.action.import.tip=Lancer l'import générique +tutti.genericFormatImport.action.importErrors= +tutti.genericFormatImport.action.openImportReport.tip=Ouvrir le rapport d'import +tutti.genericFormatImport.action.openValidateReport.tip=Ouvrir le rapport de validation +tutti.genericFormatImport.action.saveImportReport.tip=Enregistrer le rapport d'import +tutti.genericFormatImport.action.saveValidateReport.tip=Enregistrer le rapport de validation +tutti.genericFormatImport.action.showReport=Visualiser +tutti.genericFormatImport.action.showReport.mnemonic=V +tutti.genericFormatImport.action.showReport.tip=Visualiser le rapport +tutti.genericFormatImport.action.success=L'import depuis le fichier <strong>%s</strong> s'est bien déroulé. +tutti.genericFormatImport.action.validate=Valider l'import +tutti.genericFormatImport.action.validate.mnemonic=V +tutti.genericFormatImport.action.validate.tip=Valider l'archive d'import +tutti.genericFormatImport.backupFile.extension=zip +tutti.genericFormatImport.backupFile.extension.description=Sauvegarde de la base (.zip) +tutti.genericFormatImport.field.backupFile=Fichier de sauvegarde +tutti.genericFormatImport.field.backupFile.tip=Fichier de sauvegarde de la base avant import +tutti.genericFormatImport.field.checkWeights=Vérifier les poids (élévation) +tutti.genericFormatImport.field.checkWeights.tip=Vérifier les poids via l'élévation des poids +tutti.genericFormatImport.field.cleanWeights=Supprimer les poids en double +tutti.genericFormatImport.field.cleanWeights.tip=Supprimer les poids en double +tutti.genericFormatImport.field.importFile=Fichier d'import +tutti.genericFormatImport.field.importFile.tip=Fichier d'import au format générique +tutti.genericFormatImport.field.overrideData=Autoriser l'écrasement des données +tutti.genericFormatImport.field.overrideData.tip=Autorise l'écrasement des données existantes +tutti.genericFormatImport.field.program=Série de campagne +tutti.genericFormatImport.field.program.tip=Série de campagne où importer les campagne +tutti.genericFormatImport.field.reportFile=Rapport +tutti.genericFormatImport.field.reportFile.tip=Chemin du fichier de rapport +tutti.genericFormatImport.import.legend=Import +tutti.genericFormatImport.importFile.extension=zip +tutti.genericFormatImport.importFile.extension.description=Import générique (.zip) +tutti.genericFormatImport.importReportFile.extension=pdf +tutti.genericFormatImport.importReportFile.extension.description=Rapport d'import (.pdf) +tutti.genericFormatImport.importResult.description=Résultats +tutti.genericFormatImport.importResult.description.tip=Résultat de l'import +tutti.genericFormatImport.importResult.legend=Résultats de l'import +tutti.genericFormatImport.step.backupDb=Sauvegarde de la base de données (<strong>%s</strong>) +tutti.genericFormatImport.step.closeDb=Fermeture de la base de données avant la sauvegarde +tutti.genericFormatImport.step.reopenDb=Réouverture de la base de données +tutti.genericFormatImport.title=Import générique +tutti.genericFormatImport.validateImport.legend=Préparation de l'import +tutti.genericFormatImport.validateReportFile.extension=pdf +tutti.genericFormatImport.validateReportFile.extension.description=Rapport de validation (.pdf) +tutti.genericFormatImport.validationResult.description=Résultat de la validation +tutti.genericFormatImport.validationResult.description.tip=Résultat de la validation tutti.help.mkDir.error=Erreur à la création du dossier d'aide tutti.i18n.deleteCache.error=Erreur à la suppression du cache de l'internationalisation tutti.i18n.mkDir.error=Erreur à la création du dossier d'internationalisation @@ -1381,6 +1455,7 @@ tutti.importPupitri.field.trunkFile=Fichier du trémie tutti.importPupitri.title=Import Pupitri tutti.importPupitri.trunkFile.extension=tnk tutti.importPupitri.trunkFile.extension.description=Fichier du trémie (.tnk) +tutti.io.error.copyFile=Impossible de copier le fichier tutti.label.tab.accidental=Captures accidentelles tutti.label.tab.benthos=Benthos tutti.label.tab.catches=Captures @@ -1434,6 +1509,9 @@ tutti.main.action.exit.tip=Quitter l'application tutti.main.action.generateSelectedCruiseReport=Rapport tutti.main.action.generateSelectedCruiseReport.mnemonic=R tutti.main.action.generateSelectedCruiseReport.tip=Générer des rapports +tutti.main.action.genericFormatImport=Import générique +tutti.main.action.genericFormatImport.mnemonic=BirtSample +tutti.main.action.genericFormatImport.tip=Importer des campagnes au format générique tutti.main.action.goto.previousScreen.tip=Retour à l'écran précédent tutti.main.action.importTemporaryReferential=Référentiels temporaires tutti.main.action.importTemporaryReferential.mnemonic=R @@ -1765,9 +1843,8 @@ tutti.splitSpeciesBatch.table.header.category=Catégorie tutti.splitSpeciesBatch.table.header.selected=Sélection tutti.splitSpeciesBatch.table.header.weight=Poids tutti.splitSpeciesBatch.title=Catégorisation du lot -tutti.title.openReplaceTecmporaryUI.noTarget=Pas de référentiel officiel de type %s dans la base tutti.title.openReplaceTemporaryUI.noSource=Pas de référentiel temporaire de type %s dans la base -tutti.title.openReplaceTemporaryUI.noTarget= +tutti.title.openReplaceTemporaryUI.noTarget=Pas de référentiel officiel de type %s dans la base tutti.toolbar.menu.action=Actions tutti.toolbar.menu.action.mnemonic=A tutti.toolbar.menu.action.tip=Actions possibles pour cet onglet -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm