Author: tchemit Date: 2013-03-02 17:03:05 +0100 (Sat, 02 Mar 2013) New Revision: 515 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/515 Log: - move tutti exception to persistence module - no dep on adagio in our service (should only be visible from persistence module) - refs #1872: [IMP/EXP] - Import Allegro (export tutti!) - use nuiton-validator fixed validator - optimize dependencies Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiBusinessException.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiTechnicalException.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/InvalidBatchModelException.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java Removed: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/InvalidBatchModelException.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiBusinessException.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiTechnicalException.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiCollectionUniqueKeyValidator.java Modified: trunk/pom.xml trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties trunk/tutti-service/pom.xml trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/AbstractTuttiService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java trunk/tutti-ui-swing/pom.xml trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryGearAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryPersonAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporarySpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryVesselAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiErrorHelper.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiExceptionHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties trunk/tutti-ui-swing/src/main/resources/validators.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/pom.xml 2013-03-02 16:03:05 UTC (rev 515) @@ -212,12 +212,6 @@ <classifier>tests</classifier> </dependency> - <dependency> - <groupId>org.apache.struts.xwork</groupId> - <artifactId>xwork-core</artifactId> - <version>2.3.7</version> - </dependency> - <!-- librairie Jaxx --> <dependency> <groupId>org.nuiton.jaxx</groupId> Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiBusinessException.java (from rev 513, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiBusinessException.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiBusinessException.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiBusinessException.java 2013-03-02 16:03:05 UTC (rev 515) @@ -0,0 +1,48 @@ +package fr.ifremer.tutti; + +/* + * #%L + * Tutti :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 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% + */ + +/** + * To box any business exception. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0 + */ +public class TuttiBusinessException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public TuttiBusinessException(String message) { + super(message); + } + + public TuttiBusinessException(String message, Throwable cause) { + super(message, cause); + } + + public TuttiBusinessException(Throwable cause) { + super(cause); + } +} Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiTechnicalException.java (from rev 513, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiTechnicalException.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiTechnicalException.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiTechnicalException.java 2013-03-02 16:03:05 UTC (rev 515) @@ -0,0 +1,51 @@ +package fr.ifremer.tutti; + +/* + * #%L + * Tutti :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 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% + */ + +/** + * Any techincal exception should be boxed in a such exception. + * + * @author tchemit <chemit@codelutin.com/> + * @since 0.1 + */ +public class TuttiTechnicalException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public TuttiTechnicalException() { + } + + public TuttiTechnicalException(String message) { + super(message); + } + + public TuttiTechnicalException(String message, Throwable cause) { + super(message, cause); + } + + public TuttiTechnicalException(Throwable cause) { + super(cause); + } +} Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/InvalidBatchModelException.java (from rev 513, trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/InvalidBatchModelException.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/InvalidBatchModelException.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/InvalidBatchModelException.java 2013-03-02 16:03:05 UTC (rev 515) @@ -0,0 +1,50 @@ +package fr.ifremer.tutti.persistence; + +/* + * #%L + * Tutti :: Service + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 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% + */ + +import fr.ifremer.tutti.TuttiBusinessException; + +/** + * Exception when batch model is not compatible with Tutti. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0.2 + */ +public class InvalidBatchModelException extends TuttiBusinessException { + + private static final long serialVersionUID = 1L; + + public InvalidBatchModelException(String message) { + super(message); + } + + public InvalidBatchModelException(String message, Throwable cause) { + super(message, cause); + } + + public InvalidBatchModelException(Throwable cause) { + super(cause); + } +} Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,7 +24,6 @@ * #L% */ -import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationException; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; @@ -329,14 +328,18 @@ /** * Get the catchBatch from the fishing Operation id. + * <p/> + * If batch model is not compatible with Tutti and {@code canRepair} flag + * is on, then it will try to repair it. * * @param id id of the fihsing operation * @param canRepair flag to try to repair the batch model in not in Tutti-awre format. * @return found catchbatch + * @throws InvalidBatchModelException if batch model is not compatible with Tutti and could be repaired (in cause of canRepair is on). */ @Transactional(readOnly = false) CatchBatch getCatchBatchFromFishingOperation(String id, - boolean canRepair) throws CatchBatchValidationException; + boolean canRepair) throws InvalidBatchModelException; /** * Create the given CatchBatch and return it. Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-03-02 16:03:05 UTC (rev 515) @@ -442,8 +442,12 @@ @Override public CatchBatch getCatchBatchFromFishingOperation(String id, - boolean canRepair) throws CatchBatchValidationException { - return batchService.getCatchBatchFromFishingOperation(id, canRepair); + boolean canRepair) throws InvalidBatchModelException { + try { + return batchService.getCatchBatchFromFishingOperation(id, canRepair); + } catch (CatchBatchValidationException e) { + throw new InvalidBatchModelException("L'arbre d'échantillonage n'est pas compatible avec celui de Tutti.", e); + } } @Override Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java 2013-03-02 16:03:05 UTC (rev 515) @@ -72,13 +72,12 @@ } public void initConfig(RessourceClassLoader resourceLoader) throws IOException { - try { - FileUtils.forceMkdir(getDbDirectory()); - FileUtils.forceMkdir(getProtocolDirectory()); - } catch (Exception e) { - throw new RuntimeException("Could not create directory", e); - } + FileUtils.forceMkdir(getDbDirectory()); + FileUtils.forceMkdir(getDbAttachmentDirectory()); + FileUtils.forceMkdir(getProtocolDirectory()); + + // add a predicate to search the configuration file from his directory instead of the class-path resourceLoader.addSearchInDirectoriesPredicate(new Predicate<String>() { @@ -118,6 +117,10 @@ return config.getOptionAsFile(TuttiPersistenceConfigOption.DB_DIRECTORY.getKey()); } + public File getDbAttachmentDirectory() { + return config.getOptionAsFile(TuttiPersistenceConfigOption.DB_ATTACHMENT_DIRECTORY.getKey()); + } + public File getCacheDirectory() { return config.getOptionAsFile(TuttiPersistenceConfigOption.CACHE_DIRECTORY.getKey()); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-03-02 16:03:05 UTC (rev 515) @@ -47,6 +47,13 @@ File.class, true, true), + DB_ATTACHMENT_DIRECTORY( + "tutti.persistence.db.attachment.directory", + n_("tutti.option.persistence.db.attachment.directory.description"), + "${tutti.data.directory}/meas_files", + File.class, + true, + true), CACHE_DIRECTORY( "tutti.persistence.cache.directory", Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java 2013-03-02 16:03:05 UTC (rev 515) @@ -37,7 +37,6 @@ import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidator; import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement; import fr.ifremer.tutti.persistence.service.BatchPersistenceService; -import fr.ifremer.tutti.persistence.service.ReferentialPersistenceService; import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,17 +62,11 @@ protected BatchPersistenceService batchService; @Autowired - protected ReferentialPersistenceService referentialService; - - @Autowired protected CatchBatchExtendDao catchBatchDao; @Autowired protected TuttiEnumerationFile enumeration; - public ScientificCruiseCatchBatchValidator() { - } - @Override public boolean isEnable(fr.ifremer.adagio.core.dao.data.batch.CatchBatch catchBatch) { // Apply validation only on catch batch for fishingOperation @@ -88,16 +81,21 @@ } // ------------------------------------------------------------------------// - // -- Internal methods --// + // -- Internal methods --// // ------------------------------------------------------------------------// - protected void validate(Collection<Batch> batchs, List<CatchBatchValidationError> errors, int treeLevel) { + protected void validate(Collection<Batch> batchs, + List<CatchBatchValidationError> errors, + int treeLevel) { - //TODO finishi i18n - // Vrac SortingBatch vracBatch = catchBatchDao.getSortingBatch(batchs, "pmfmId", enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_VRAC_ID); + + if (log.isDebugEnabled()) { + log.debug("Try to validate Vrac batch model " + vracBatch); + } + if (vracBatch == null) { addError(errors, n_("tutti.persistence.batch.validation.vracNotFound"), null); } else { @@ -123,7 +121,28 @@ } } - // TODO : Benthos, Plancton... + // Vrac > Benthos + SortingBatch benthosBatch = catchBatchDao.getSortingBatch(vracBatch.getChildBatchs(), + "pmfmId", enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS); + if (benthosBatch == null) { + addError(errors, n_("tutti.persistence.batch.validation.vracBenthosNotFound"), null); + } else { + // Vrac > Benthos > Inert + SortingBatch inertBatch = catchBatchDao.getSortingBatch(benthosBatch.getChildBatchs(), + "referenceTaxonId", enumeration.REFERENCE_TAXON_ID_INERT); + if (inertBatch == null) { + addWarning(errors, n_("tutti.persistence.batch.validation.vracBenthosInertNotFound")); + } + + // Vrac > Benthos > Alive no itemized + SortingBatch livingNotItemizedBatch = catchBatchDao.getSortingBatch(benthosBatch.getChildBatchs(), + "referenceTaxonId", enumeration.REFERENCE_TAXON_ID_LIFE); + if (livingNotItemizedBatch == null) { + addWarning(errors, n_("tutti.persistence.batch.validation.vracBenthosLifeNotFound")); + } + } + // TODO : Plancton... } // Hors Vrac @@ -141,7 +160,14 @@ addWarning(errors, n_("tutti.persistence.batch.validation.horsVracSpeciesNotFound")); } - // TODO : Benthos, Plancton... + // Hors Vrac > Benthos + SortingBatch benthosBatch = catchBatchDao.getSortingBatch(horsVracBatch.getChildBatchs(), + "pmfmId", enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS); + if (benthosBatch == null) { + addWarning(errors, n_("tutti.persistence.batch.validation.horsVracBenthosNotFound")); + } + // TODO : Plancton... } // Unsorted @@ -159,7 +185,7 @@ boolean someBatchHasSortingMeasurement = false; for (Batch batch1 : batchs) { SortingBatch batch = (SortingBatch) batch1; - if (allBatchHasSpecies && batch.getReferenceTaxon() == null) { + if (batch.getReferenceTaxon() == null) { allBatchHasSpecies = false; break; } @@ -186,7 +212,7 @@ return ScientificCruiseCatchBatchValidator.this.repairHistoricalData(catchBatch, false); } }); - } else if (allBatchHasSpecies && someBatchHasSortingMeasurement && allBatchHasVrac) { + } else if (allBatchHasSpecies && allBatchHasVrac) { errors.clear(); addError(errors, n_("tutti.persistence.batch.validation.onlySpeciesBatchStructure"), new CatchBatchQuickFix() { @Override @@ -205,7 +231,8 @@ * @param catchBatch * @return */ - protected CatchBatch repairHistoricalData(CatchBatch catchBatch, boolean batchHasVracSortingMeasurement) { + protected CatchBatch repairHistoricalData(CatchBatch catchBatch, + boolean batchHasVracSortingMeasurement) { Preconditions.checkNotNull(catchBatch); Preconditions.checkNotNull(catchBatch.getId()); Preconditions.checkNotNull(catchBatch.getFishingOperation()); @@ -240,9 +267,10 @@ batch.setExhaustiveInventory(Boolean.TRUE); // Add an offset into the rank order, because of special batchs 'Biota' (=live) and 'Inert' - short rankOrder = (short) (batch.getRankOrder().shortValue() + 2); + short rankOrder = (short) (batch.getRankOrder() + 2); batch.setRankOrder(rankOrder); + //FIXME-TC We should do nothing with this: this is not our problem... //TODO What to do with weird comments! categorie_individu // Reset comments if set to "taxon" if (batch.getComments() != null && "taxon".equals(batch.getComments())) { @@ -258,7 +286,9 @@ return catchBatch; } - protected void addError(List<CatchBatchValidationError> errors, String messageKey, CatchBatchQuickFix quickFix) { + protected void addError(List<CatchBatchValidationError> errors, + String messageKey, + CatchBatchQuickFix quickFix) { CatchBatchValidationError error = new CatchBatchValidationError( messageKey, _(messageKey), @@ -267,7 +297,8 @@ errors.add(error); } - protected void addWarning(List<CatchBatchValidationError> errors, String messageKey) { + protected void addWarning(List<CatchBatchValidationError> errors, + String messageKey) { CatchBatchValidationError error = new CatchBatchValidationError( messageKey, _(messageKey), Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-03-02 16:03:05 UTC (rev 515) @@ -1,4 +1,5 @@ -tutti.option.persistence.cache.directory.description=Répertoire où sont stoqué les caches de persistence +tutti.option.persistence.cache.directory.description=Répertoire où sont stoquées les caches de persistence +tutti.option.persistence.db.attachment.directory.description=Répoertoire où sont stoquées les pièces-jointes tutti.option.persistence.db.configurationPath.description=Chemin du fichier de configuration d'Adagio tutti.option.persistence.db.directory.description=Répertoire où est la base de données tutti.option.persistence.db.enumerationPath.description=Chemin du fichier de correspondance des constantes @@ -12,10 +13,14 @@ tutti.option.persistence.jdbc.url.description=URL de connexion à la base de données tutti.option.persistence.jdbc.username.description=Login de l'utilisateur pour se connecter à la base de données tutti.option.persistence.protocol.directory.description=Répertoire où sont conservés les protocoles +tutti.persistence.batch.validation.horsVracBenthosNotFound=Lot 'Hors Vrac > Benthos' non trouvé ou configuré avec d'autres critères de classement. tutti.persistence.batch.validation.horsVracNotFound=Lot 'Hors Vrac' non trouvé, ou configuré avec d'autres critères de classement. -tutti.persistence.batch.validation.horsVracSpeciesNotFound=Batch 'Hors Vrac > Espèces' non trouvé ou configuré avec d'autres critères de classement. -tutti.persistence.batch.validation.onlySpeciesBatchStructure= -tutti.persistence.batch.validation.unsortedNotFound=Batch 'Hors Vrac > Espèces' non trouvé ou configuré avec d'autres critères de classement. +tutti.persistence.batch.validation.horsVracSpeciesNotFound=Lot 'Hors Vrac > Espèces' non trouvé ou configuré avec d'autres critères de classement. +tutti.persistence.batch.validation.onlySpeciesBatchStructure=Lot 'Espèces' (données historiques CGFS) détecté. +tutti.persistence.batch.validation.unsortedNotFound=Lot 'Hors Vrac > Espèces' non trouvé ou configuré avec d'autres critères de classement. +tutti.persistence.batch.validation.vracBenthosInertNotFound=Lot 'Vrac > Benthos > Inerte' non trouvé, ou configuré avec d'autres critères de classement. +tutti.persistence.batch.validation.vracBenthosLifeNotFound=Lot 'Vrac > Benthos > Biota' non trouvé, ou configuré avec d'autres critères de classement. +tutti.persistence.batch.validation.vracBenthosNotFound=Lot 'Vrac > Benthos' non trouvé, ou configuré avec d'autres critères de classement. tutti.persistence.batch.validation.vracNotFound=Lot 'Vrac' non trouvé, ou configuré avec d'autres critères de classement. tutti.persistence.batch.validation.vracSpeciesInertNotFound=Lot 'Vrac > Espèces > Inerte' non trouvé, ou configuré avec d'autres critères de classement. tutti.persistence.batch.validation.vracSpeciesLifeNotFound=Lot 'Vrac > Espèces > Biota' non trouvé, ou configuré avec d'autres critères de classement. Modified: trunk/tutti-service/pom.xml =================================================================== --- trunk/tutti-service/pom.xml 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/pom.xml 2013-03-02 16:03:05 UTC (rev 515) @@ -49,12 +49,6 @@ </dependency> <dependency> - <groupId>fr.ifremer.adagio</groupId> - <artifactId>adagio-core</artifactId> - <classifier>allegro</classifier> - </dependency> - - <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-utils</artifactId> </dependency> Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/AbstractTuttiService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/AbstractTuttiService.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/AbstractTuttiService.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.TuttiTechnicalException; import org.apache.commons.io.FileUtils; import org.nuiton.util.ZipUtil; Deleted: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/InvalidBatchModelException.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/InvalidBatchModelException.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/InvalidBatchModelException.java 2013-03-02 16:03:05 UTC (rev 515) @@ -1,48 +0,0 @@ -package fr.ifremer.tutti.service; - -/* - * #%L - * Tutti :: Service - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 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% - */ - -/** - * Exception when batch model is not compatible with Tutti. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0.2 - */ -public class InvalidBatchModelException extends TuttiBusinessException { - - private static final long serialVersionUID = 1L; - - public InvalidBatchModelException(String message) { - super(message); - } - - public InvalidBatchModelException(String message, Throwable cause) { - super(message, cause); - } - - public InvalidBatchModelException(Throwable cause) { - super(cause); - } -} Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,7 +24,8 @@ * #L% */ -import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationException; +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.InvalidBatchModelException; import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.TuttiPersistenceNoDbImpl; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; @@ -53,7 +54,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.File; import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.List; /** @@ -90,6 +94,68 @@ driver.clearAllCaches(); } + DateFormat exportDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + /** + * Export db as an zip archive (including the attachments). + * + * @param file archive file where to store + * @since 1.0.2 + */ + public void exportDb(File file) { + + Preconditions.checkState(isDbLoaded()); + Preconditions.checkNotNull(file); + + // Make sure db is shutdown + + TuttiIOUtil.close(driver, "Could not close driver " + driver); + + try { + // create zip structure + + TuttiServiceConfig config = context.getConfig(); + + File structureDirectory = new File( + config.newTempFile("exportdb"), + "tutti-" + config.getVersion() + + exportDateFormat.format(context.currentDate())); + + TuttiIOUtil.forceMkdir(structureDirectory, + "Could not create directory"); + + if (log.isInfoEnabled()) { + log.info("Export directory: " + structureDirectory); + } + TuttiPersistenceConfig pConfig = config.getPersistenceConfig(); + + TuttiIOUtil.copyDirectory(pConfig.getDbDirectory(), + new File(structureDirectory, "db"), + "Could not copy db directory"); + + TuttiIOUtil.copyDirectory(pConfig.getDbAttachmentDirectory(), + new File(structureDirectory, "meas_files"), + "Could not copy db attachment directory"); + + TuttiIOUtil.copyFile(pConfig.getDbConfigurationPath(), + structureDirectory, + "Could not copy db configuration file"); + + TuttiIOUtil.copyFile(pConfig.getDbEnumerationPath(), + structureDirectory, + "Could not copy db enumeration file"); + + //create zip + TuttiIOUtil.zip(structureDirectory, file, + "Could not create archive at " + file); + + } finally { + + // reload driver + driver = TuttiPersistenceServiceLocator.getPersistenceService(); + } + } + public boolean isDbLoaded() { return !(driver instanceof TuttiPersistenceNoDbImpl); } @@ -410,12 +476,9 @@ @Override public CatchBatch getCatchBatchFromFishingOperation(String id, boolean canRepair) throws InvalidBatchModelException { - try { - return driver.getCatchBatchFromFishingOperation(id, canRepair); - } catch (CatchBatchValidationException e) { - throw new InvalidBatchModelException( - "L'arbre d'échantillonage n'est pas compatible avec Tutti", e); - } + + return driver.getCatchBatchFromFishingOperation(id, canRepair); + } @Override Deleted: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiBusinessException.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiBusinessException.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiBusinessException.java 2013-03-02 16:03:05 UTC (rev 515) @@ -1,48 +0,0 @@ -package fr.ifremer.tutti.service; - -/* - * #%L - * Tutti :: Service - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 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% - */ - -/** - * To box any business exception. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0 - */ -public class TuttiBusinessException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public TuttiBusinessException(String message) { - super(message); - } - - public TuttiBusinessException(String message, Throwable cause) { - super(message, cause); - } - - public TuttiBusinessException(Throwable cause) { - super(cause); - } -} Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java 2013-03-02 16:03:05 UTC (rev 515) @@ -0,0 +1,95 @@ +package fr.ifremer.tutti.service; + +/* + * #%L + * Tutti :: Service + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 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% + */ + +import fr.ifremer.tutti.TuttiTechnicalException; +import org.apache.commons.io.FileUtils; +import org.nuiton.util.ZipUtil; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; + +/** + * Useful methods around IO, all method errors are boxes a + * {@link TuttiTechnicalException}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0.2 + */ +public class TuttiIOUtil { + + protected TuttiIOUtil() { + // no instance + } + + public static void close(Closeable toClose, String errorMessage) { + + try { + toClose.close(); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void zip(File source, File archiveFile, String errorMessage) { + try { + ZipUtil.compress(archiveFile, source); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void forceMkdir(File dir, String errorMessage) { + try { + FileUtils.forceMkdir(dir); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void copyDirectory(File source, File target, String errorMessage) { + try { + FileUtils.copyDirectory(source, target); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static void copyFile(File source, File target, String errorMessage) { + try { + FileUtils.copyFileToDirectory(source, target); + } catch (IOException e) { + throw new TuttiTechnicalException(errorMessage, e); + } + } + + public static File addExtensionIfMissing(File file, String extension) { + if (!file.getName().endsWith(extension)) { + file = new File(file.getParentFile(), file.getName() + extension); + } + return file; + } +} Property changes on: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiIOUtil.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiServiceContext.java 2013-03-02 16:03:05 UTC (rev 515) @@ -28,6 +28,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.RessourceClassLoader; import fr.ifremer.tutti.service.config.TuttiServiceConfig; import org.apache.commons.io.IOUtils; @@ -37,6 +38,7 @@ import java.io.Closeable; import java.io.IOException; import java.lang.reflect.Constructor; +import java.util.Date; import java.util.concurrent.ExecutionException; /** @@ -87,6 +89,10 @@ return resourceLoader; } + public Date currentDate() { + return new Date(); + } + public <S extends TuttiService> S getService(Class<S> serviceType) { try { S s = (S) services.get(serviceType); Deleted: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiTechnicalException.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiTechnicalException.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiTechnicalException.java 2013-03-02 16:03:05 UTC (rev 515) @@ -1,51 +0,0 @@ -package fr.ifremer.tutti.service; - -/* - * #%L - * Tutti :: Application - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 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% - */ - -/** - * Any techincal exception should be boxed in a such exception. - * - * @author tchemit <chemit@codelutin.com/> - * @since 0.1 - */ -public class TuttiTechnicalException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public TuttiTechnicalException() { - } - - public TuttiTechnicalException(String message) { - super(message); - } - - public TuttiTechnicalException(String message, Throwable cause) { - super(message, cause); - } - - public TuttiTechnicalException(Throwable cause) { - super(cause); - } -} Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,7 +24,6 @@ * #L% */ -import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; @@ -104,44 +103,22 @@ return result; } + public File newTempFile(String basename) { + return new File(getTmpDirectory(), basename + "_" + System.nanoTime()); + } + public char getCsvSeparator() { return applicationConfig.getOption(TuttiServiceConfigOption.CSV_SEPARATOR.getKey()).charAt(0); } public void prepareDirectories() throws IOException { - getOrCreateDirectory(TuttiServiceConfigOption.DATA_DIRECTORY); - File tmpDir = getOrCreateDirectory(TuttiServiceConfigOption.TMP_DIRECTORY); - // clean it - FileUtils.deleteDirectory(tmpDir); - - FileUtils.forceMkdir(tmpDir); - } - - /** - * Creates a directory given the configuration {@code option}. - * - * @param option the configuration option key which contains the location of - * the directory to create - * @return the created directory - */ - protected File getOrCreateDirectory(TuttiServiceConfigOption option) throws IOException { - - File directory = applicationConfig.getOptionAsFile(option.getKey()); - - Preconditions.checkNotNull( - directory, - "Could not find directory " + directory + - " (key " + option.getKey() + "in your configuration file named" + - " sammoa.properties)" - ); - - if (log.isDebugEnabled()) { - log.debug(option + " = " + directory); + FileUtils.forceMkdir(getDataDirectory()); + File tmpDirectory = getTmpDirectory(); + if (tmpDirectory.exists()) { + FileUtils.deleteDirectory(tmpDirectory); } + FileUtils.forceMkdir(tmpDirectory); - FileUtils.forceMkdir(directory); - - return directory; } } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-03-02 16:03:05 UTC (rev 515) @@ -38,7 +38,7 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.TuttiTechnicalException; +import fr.ifremer.tutti.TuttiTechnicalException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.csv.Export; Modified: trunk/tutti-ui-swing/pom.xml =================================================================== --- trunk/tutti-ui-swing/pom.xml 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/pom.xml 2013-03-02 16:03:05 UTC (rev 515) @@ -287,11 +287,6 @@ <classifier>tests</classifier> </dependency> - <dependency> - <groupId>org.apache.struts.xwork</groupId> - <artifactId>xwork-core</artifactId> - </dependency> - <!-- librairie Jaxx --> <dependency> <groupId>org.nuiton.jaxx</groupId> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2013-03-02 16:03:05 UTC (rev 515) @@ -31,7 +31,7 @@ import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; import fr.ifremer.tutti.persistence.service.synchro.ReferentialSynchronizeResult; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.TuttiTechnicalException; +import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.service.referential.TuttiReferentialSynchronizeService; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; import org.apache.commons.io.FileUtils; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-03-02 16:03:05 UTC (rev 515) @@ -34,7 +34,7 @@ import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.TuttiTechnicalException; +import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.service.referential.TuttiReferentialSynchronizeService; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-03-02 16:03:05 UTC (rev 515) @@ -25,7 +25,7 @@ */ import com.google.common.base.Charsets; -import fr.ifremer.tutti.service.TuttiTechnicalException; +import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.service.config.TuttiServiceConfig; import fr.ifremer.tutti.service.config.TuttiServiceConfigOption; import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-03-02 16:03:05 UTC (rev 515) @@ -32,6 +32,7 @@ jaxx.runtime.validator.swing.SwingValidator jaxx.runtime.validator.swing.SwingValidatorMessageWidget fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.TuttiScreen </import> <TuttiUIContext id='model' Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-03-02 16:03:05 UTC (rev 515) @@ -86,7 +86,7 @@ context.setActionUI(new TuttiActionUI(ui, context)); } - protected MainUIHandler(TuttiUIContext context) { + public MainUIHandler(TuttiUIContext context) { super(context, null); this.persistenceService = null; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,11 +24,15 @@ * #L% */ +import fr.ifremer.tutti.service.TuttiIOUtil; import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.File; + import static org.nuiton.i18n.I18n._; /** @@ -42,6 +46,8 @@ /** Logger. */ private static final Log log = LogFactory.getLog(ExportDbAction.class); + protected File file; + public ExportDbAction(MainUIHandler handler) { super(handler, "export-db", @@ -51,12 +57,45 @@ } @Override + protected boolean prepareAction() { + boolean doAction = super.prepareAction(); + + if (doAction) { + + // ask user file where to export db + + // choose file to import + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.dbExportFile"), + _("tutti.action.chooseDbExportFile"), + null, + "^.*\\.zip", _("tutti.file.zip") + ); + doAction = file != null; + } + + if (doAction) { + file = TuttiIOUtil.addExtensionIfMissing(file, ".zip"); + } + return doAction; + } + + @Override + protected void releaseAction() { + super.releaseAction(); + file = null; + } + + @Override protected void doAction() { if (log.isInfoEnabled()) { - log.info("Will export db..."); + log.info("Will export db to " + file); } - //TODO + getContext().getPersistenceService().exportDb(file); + + sendMessage(_("tutti.flash.information.db.exported", file)); } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -26,6 +26,7 @@ import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.service.TuttiIOUtil; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; @@ -62,19 +63,22 @@ @Override protected boolean prepareAction() { - // choose file to import + boolean doAction = super.prepareAction(); - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.protocolExportFile"), - _("tutti.action.chooseProtocolFile"), - null, - "^.+\\.tuttiProtocol$", _("tutti.file.protocol") - ); - - boolean doAction = file != null; if (doAction) { - super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.protocolExportFile"), + _("tutti.action.chooseProtocolFile"), + null, + "^.+\\.tuttiProtocol$", _("tutti.file.protocol") + ); + doAction = file != null; + if (doAction) { + file = TuttiIOUtil.addExtensionIfMissing(file, ".tuttiProtocol$"); + } } return doAction; } @@ -89,19 +93,13 @@ protected void doAction() throws Exception { TuttiProtocol protocol = getModel().getProtocol(); Preconditions.checkNotNull(protocol); + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { - log.info("Export protocol: " + protocol.getId()); - } - - if (log.isInfoEnabled()) { log.info("Will save protocol " + protocol.getId() + " to file: " + file); } - if (!file.getName().endsWith(".tuttiProtocol")) { - file = new File(file.getParentFile(), file.getName() + ".tuttiProtocol"); - } // export protocol TuttiProtocolImportExportService service = getContext().getTuttiProtocolImportExportService(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.TuttiScreen; @@ -65,17 +66,19 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.protocolImportFile"), - _("tutti.action.chooseProtocolFile"), - null, - "^.+\\.tuttiProtocol$", _("tutti.file.protocol") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + // choose file to import + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.protocolImportFile"), + _("tutti.action.chooseProtocolFile"), + null, + "^.+\\.tuttiProtocol$", _("tutti.file.protocol") + ); + + doAction = file != null; } return doAction; } @@ -88,9 +91,7 @@ @Override protected void doAction() throws Exception { - if (log.isInfoEnabled()) { - log.info("TODO Import protocol!"); - } + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will import protocol file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,8 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; +import fr.ifremer.tutti.service.TuttiIOUtil; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; @@ -46,7 +48,7 @@ private static final Log log = LogFactory.getLog(ExportAllCaracteristicAction.class); - private File file; + protected File file; public ExportAllCaracteristicAction(EditProtocolUIHandler handler) { super(handler, @@ -60,17 +62,23 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.protocolCaracteristicExportFile"), - _("tutti.action.chooseProtocolCaracteristicFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.protocolCaracteristicExportFile"), + _("tutti.action.chooseProtocolCaracteristicFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + doAction = file != null; + + if (doAction) { + file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); + } } return doAction; } @@ -83,7 +91,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will export all caracteristic to file: " + file); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,7 +24,9 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.service.TuttiIOUtil; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; @@ -61,17 +63,22 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.protocolCaracteristicExportFile"), - _("tutti.action.chooseProtocolCaracteristicFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.protocolCaracteristicExportFile"), + _("tutti.action.chooseProtocolCaracteristicFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + doAction = file != null; + if (doAction) { + file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); + } } return doAction; } @@ -84,7 +91,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will export protocol caracteristic to file: " + file); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,8 +24,10 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +import fr.ifremer.tutti.service.TuttiIOUtil; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; @@ -63,17 +65,22 @@ @Override protected boolean prepareAction() { - // choose file to export - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.protocolSpeciesExportFile"), - _("tutti.action.chooseProtocolSpeciesFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.protocolSpeciesExportFile"), + _("tutti.action.chooseProtocolSpeciesFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + doAction = file != null; + if (doAction) { + file = TuttiIOUtil.addExtensionIfMissing(file, ".csv"); + } } return doAction; } @@ -86,7 +93,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will export protocol species to file: " + file); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -61,17 +62,20 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.protocolCaracteristicImportFile"), - _("tutti.action.chooseProtocolCaracteristicFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to import + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.protocolCaracteristicImportFile"), + _("tutti.action.chooseProtocolCaracteristicFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + + doAction = file != null; } return doAction; } @@ -84,12 +88,11 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will import protocol caracteristic file: " + file); } - EditProtocolUIHandler handler = getHandler(); EditProtocolUIModel model = getModel(); // bind to a protocol Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; @@ -64,17 +65,20 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.protocolSpeciesImportFile"), - _("tutti.action.chooseProtocolSpeciesFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to import + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.protocolSpeciesImportFile"), + _("tutti.action.chooseProtocolSpeciesFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + + doAction = file != null; } return doAction; } @@ -87,12 +91,11 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will import protocol species file: " + file); } - EditProtocolUIHandler handler = getHandler(); EditProtocolUIModel model = getModel(); // bind to a protocol Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryGearExampleAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -61,17 +62,19 @@ @Override protected boolean prepareAction() { - // choose file to export - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.exportTemporaryGearExampleFile"), - _("tutti.action.chooseReferentialGearFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.exportTemporaryGearExampleFile"), + _("tutti.action.chooseReferentialGearFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + doAction = file != null; } return doAction; } @@ -84,7 +87,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will export example gears temporary " + "referential to file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryPersonExampleAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -62,17 +63,19 @@ @Override protected boolean prepareAction() { - // choose file to export - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.exportTemporaryPersonExampleFile"), - _("tutti.action.chooseReferentialPersonFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.exportTemporaryPersonExampleFile"), + _("tutti.action.chooseReferentialPersonFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + doAction = file != null; } return doAction; } @@ -85,7 +88,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will export example persons temporary " + "referential to file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporarySpeciesExampleAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -61,17 +62,19 @@ @Override protected boolean prepareAction() { - // choose file to export - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.exportTemporarySpeciesExampleFile"), - _("tutti.action.chooseReferentialSpeciesFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.exportTemporarySpeciesExampleFile"), + _("tutti.action.chooseReferentialSpeciesFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + doAction = file != null; } return doAction; } @@ -84,7 +87,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will export example species temporary " + "referential to file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ExportTemporaryVesselExampleAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -61,30 +62,32 @@ @Override protected boolean prepareAction() { - // choose file to export - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.exportTemporaryVesselExampleFile"), - _("tutti.action.chooseReferentialVesselFile"), - null, - "^.*\\.csv", _("tutti.file.csv") - ); - boolean doAction = file != null; + boolean doAction = super.prepareAction(); + if (doAction) { - super.prepareAction(); + + // choose file to export + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.exportTemporaryVesselExampleFile"), + _("tutti.action.chooseReferentialVesselFile"), + null, + "^.*\\.csv", _("tutti.file.csv") + ); + doAction = file != null; } return doAction; } @Override protected void releaseAction() { + file = null; super.releaseAction(); - file = null; } @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will export example vessels temporary " + "referential to file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryGearAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryGearAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryGearAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -61,17 +62,19 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.importTemporaryGearFile"), - _("tutti.action.chooseReferentialGearFile"), - null, - "^.*\\.csv", _("tutti.file.csv")); + boolean doAction = super.prepareAction(); - boolean doAction = file != null; if (doAction) { - super.prepareAction(); + + // choose file to import + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.importTemporaryGearFile"), + _("tutti.action.chooseReferentialGearFile"), + null, + "^.*\\.csv", _("tutti.file.csv")); + + doAction = file != null; } return doAction; } @@ -84,7 +87,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will import gear temporary " + "referential from file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryPersonAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryPersonAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryPersonAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -61,17 +62,19 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.importTemporaryPersonFile"), - _("tutti.action.chooseReferentialPersonFile"), - null, - "^.*\\.csv", _("tutti.file.csv")); + boolean doAction = super.prepareAction(); - boolean doAction = file != null; if (doAction) { - super.prepareAction(); + + // choose file to import + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.importTemporaryPersonFile"), + _("tutti.action.chooseReferentialPersonFile"), + null, + "^.*\\.csv", _("tutti.file.csv")); + + doAction = file != null; } return doAction; } @@ -84,7 +87,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will import person temporary " + "referential from file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporarySpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporarySpeciesAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporarySpeciesAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -61,17 +62,18 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.importTemporarySpeciesFile"), - _("tutti.action.chooseReferentialSpeciesFile"), - null, - "^.*\\.csv", _("tutti.file.csv")); + boolean doAction = super.prepareAction(); - boolean doAction = file != null; if (doAction) { - super.prepareAction(); + // choose file to import + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.importTemporarySpeciesFile"), + _("tutti.action.chooseReferentialSpeciesFile"), + null, + "^.*\\.csv", _("tutti.file.csv")); + + doAction = file != null; } return doAction; } @@ -84,7 +86,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will import species temporary " + "referential from file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryVesselAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryVesselAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ImportTemporaryVesselAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,6 +24,7 @@ * #L% */ +import com.ezware.oxbow.swingbits.util.Preconditions; import fr.ifremer.tutti.service.referential.TuttiReferentialImportExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -61,17 +62,18 @@ @Override protected boolean prepareAction() { - // choose file to import - file = TuttiUIUtil.chooseFile( - getContext().getMainUI(), - _("tutti.title.choose.importTemporaryVesselFile"), - _("tutti.action.chooseReferentialVesselFile"), - null, - "^.*\\.csv", _("tutti.file.csv")); + boolean doAction = super.prepareAction(); - boolean doAction = file != null; if (doAction) { - super.prepareAction(); + // choose file to import + file = TuttiUIUtil.chooseFile( + getContext().getMainUI(), + _("tutti.title.choose.importTemporaryVesselFile"), + _("tutti.action.chooseReferentialVesselFile"), + null, + "^.*\\.csv", _("tutti.file.csv")); + + doAction = file != null; } return doAction; } @@ -84,7 +86,7 @@ @Override protected void doAction() throws Exception { - + Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { log.info("Will import vessel temporary " + "referential from file: " + file); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java 2013-03-02 16:03:05 UTC (rev 515) @@ -25,7 +25,7 @@ */ import fr.ifremer.tutti.persistence.entities.IdAware; -import fr.ifremer.tutti.service.TuttiTechnicalException; +import fr.ifremer.tutti.TuttiTechnicalException; import org.jdesktop.beans.AbstractSerializableBean; import org.nuiton.util.beans.Binder; Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiCollectionUniqueKeyValidator.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiCollectionUniqueKeyValidator.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiCollectionUniqueKeyValidator.java 2013-03-02 16:03:05 UTC (rev 515) @@ -1,156 +0,0 @@ -package fr.ifremer.tutti.ui.swing.util; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 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% - */ - -import com.opensymphony.xwork2.validator.ValidationException; -import org.nuiton.validator.xwork2.field.CollectionUniqueKeyValidator; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -/** - * To fix a bug (will be moved back to nuiton-validator) (see - * http://nuiton.org/issues/2545). - * <p/> - * TODO Remove this when using nuiton-validator 2.6.10 and reuse the basic validator. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0.1 - */ -public class TuttiCollectionUniqueKeyValidator extends CollectionUniqueKeyValidator { - - @Override - public void validateWhenNotSkip(Object object) throws ValidationException { - - if (keys == null || keys.length == 0) { - throw new ValidationException("no unique keys defined"); - } - - String fieldName = getFieldName(); - - Collection<?> col = getCollection(object); - - if (log.isDebugEnabled()) { - log.debug("collection found : " + col); - } - Object againstBean = againstProperty == null ? null : - getFieldValue(againstProperty, object); - - if (log.isDebugEnabled()) { - log.debug("againtBean = " + againstBean); - } - Integer againstIndex = (Integer) (againstIndexExpression == null ? - -1 : - getFieldValue(againstIndexExpression, object)); - if (againstIndex == null) { - againstIndex = -1; - } - - if (!againstMe && againstBean == null && col.size() < 2) { - // la liste ne contient pas deux entrées donc c'est valide - return; - } - - if (againstMe) { - // try on this object - againstBean = object; - if (log.isDebugEnabled()) { - log.debug("againtBean from me = " + againstBean); - } - } - - - boolean answer = true; - - Integer againstHashCode = againstBean == null ? - null : getUniqueKeyHashCode(againstBean); - if (log.isDebugEnabled()) { - log.debug("hash for new key " + againstHashCode); - } - - if (againstHashCode == null && nullValueSkipped) { - - // clef nulle, donc pas d'erreur vu que le flag a ete positionne - return; - } - List<Integer> hashCodes = new ArrayList<Integer>(); - - int index = 0; - for (Object o : col) { - Integer hash = getUniqueKeyHashCode(o); - - if (log.isDebugEnabled()) { - log.debug("hash for object " + o + " = " + hash); - } - - if (hash == null && nullValueSkipped) { - - // clef nulle, donc pas d'erreur vu que le flag a ete positionne - continue; - } - - if (againstBean == null) { - if (hashCodes.contains(hash)) { - - // on a deja rencontre cette clef unique, - // donc la validation a echouee - answer = false; - if (log.isDebugEnabled()) { - log.debug("Found same hashcode, not unique!"); - } - break; - } - } else { - // utilisation de againstBean - if (againstIndex != -1) { - if (index != againstIndex && - hash.equals(againstHashCode)) { - // on a deja rencontre cette clef unique, - // donc la validation a echouee - answer = false; - break; - } - } else { - if (!againstBean.equals(o) && - hash.equals(againstHashCode)) { - // on a deja rencontre cette clef unique, - // donc la validation a echouee - answer = false; - break; - } - } - } - // nouveau hashcode enregistre - hashCodes.add(hash); - // index suivant - index++; - } - - if (!answer) { - addFieldError(fieldName, object); - } - } -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiErrorHelper.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiErrorHelper.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiErrorHelper.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,7 +24,7 @@ * #L% */ -import fr.ifremer.tutti.service.TuttiBusinessException; +import fr.ifremer.tutti.TuttiBusinessException; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import org.jdesktop.swingx.JXErrorPane; import org.jdesktop.swingx.error.ErrorInfo; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiExceptionHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiExceptionHandler.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiExceptionHandler.java 2013-03-02 16:03:05 UTC (rev 515) @@ -24,7 +24,7 @@ * #L% */ -import fr.ifremer.tutti.service.TuttiTechnicalException; +import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-03-02 16:03:05 UTC (rev 515) @@ -25,7 +25,7 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.TuttiTechnicalException; +import fr.ifremer.tutti.TuttiTechnicalException; import jaxx.runtime.JAXXUtil; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang3.time.DurationFormatUtils; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-03-02 16:03:05 UTC (rev 515) @@ -35,7 +35,7 @@ import org.nuiton.util.decorator.Decorator; /** - * TODO + * Tutti base action. * * @author tchemit <chemit@codelutin.com> * @since 1.0 Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-03-02 16:03:05 UTC (rev 515) @@ -18,6 +18,7 @@ tutti.action.cancel.editProtocol.tip=Annuler l'édition (ou la création) du protocole tutti.action.cancelEditCatchBatch= tutti.action.cancelEditCatchBatch.tip= +tutti.action.chooseDbExportFile=Exporter la base de données tutti.action.chooseProtocolCaracteristicFile=Choisir le fichier des caractéristiques tutti.action.chooseProtocolFile=Choisir le fichier de protocole tutti.action.chooseProtocolSpeciesFile=Choisir le fichier des espèces @@ -197,9 +198,11 @@ tutti.error.errorpane.htmlmessage=<html><body><b>Une erreur s'est produite</b>\:<br/>%s</body></html> tutti.file.csv=Extension d'un fichier csv tutti.file.protocol=Extension d'un fichier de protocole Tutti +tutti.file.zip=Extension d'une archive zip tutti.flash.information.all.caractristic.exported=Toutes les caractéristiques exportées dans le fichier %s. tutti.flash.information.caracteristic.imported.in.protocol=Caractéristiques importées dans le protocole depuis le fichier %s. tutti.flash.information.caractristic.exported.from.protocol=Caractéristiques du protocole exportées dans le fichier %s. +tutti.flash.information.db.exported=Base exportée dans l'archive %s tutti.flash.information.species.add.to.protocol=L'espèce %s a été ajoutée au protocole tutti.flash.information.species.exported.from.protocol=Espèces du protocole exportées dans le fichier %s. tutti.flash.information.species.imported.in.protocol=Espèces importées dans le protocole depuis le fichier %s. @@ -474,6 +477,7 @@ tutti.table.species.sampleCategory.header.weight=Poids (kg) tutti.timeeditor.H=H tutti.title.about=À propos de Tutti +tutti.title.choose.dbExportFile=Exporter la base de données tutti.title.choose.exportTemporaryGearExampleFile=Exporter un exemple de référentiel Engin tutti.title.choose.exportTemporaryPersonExampleFile=Exporter un exemple de référentiel Personne tutti.title.choose.exportTemporarySpeciesExampleFile=Exporter un exemple de référentiel Espèce Modified: trunk/tutti-ui-swing/src/main/resources/validators.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/validators.xml 2013-03-02 06:25:02 UTC (rev 514) +++ trunk/tutti-ui-swing/src/main/resources/validators.xml 2013-03-02 16:03:05 UTC (rev 515) @@ -42,9 +42,8 @@ <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> - <!--TODO Remove this when using nuiton-validator 2.6.10 and reuse the basic validator.--> - <!--<validator name="collectionUniqueKey" class="org.nuiton.validator.xwork2.field.CollectionUniqueKeyValidator"/>--> - <validator name="collectionUniqueKey" class="fr.ifremer.tutti.ui.swing.util.TuttiCollectionUniqueKeyValidator"/> + <!-- les validateurs fournis par nuiton-validator --> + <validator name="collectionUniqueKey" class="org.nuiton.validator.xwork2.field.CollectionUniqueKeyValidator"/> <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> </validators>