Author: tchemit Date: 2013-07-25 16:45:48 +0200 (Thu, 25 Jul 2013) New Revision: 1155 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1155 Log: - add pupitri import test - refs #2889: [TECH] - Prise en compte de nouvelles cat?\195?\169gories dans l'applicatif (debut de validation d'un arbre existant) Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java trunk/tutti-service/src/test/resources/pupitri/ trunk/tutti-service/src/test/resources/pupitri/pupitri.car trunk/tutti-service/src/test/resources/pupitri/pupitri.tnk trunk/tutti-service/src/test/resources/tutti-test-write-dbExport.properties Modified: 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/TuttiPersistenceNoDbImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/BatchContainer.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigTest.java trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceReadTest.java trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceWriteTest.java trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceReadTest.java trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceWriteTest.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 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-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -36,6 +36,7 @@ import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; @@ -518,6 +519,21 @@ */ BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId); + /** + * Get the batch parent of all root {@link SpeciesBatch} for the given + * fishing operation. + * <p/> + * <strong>Note:</strong> All childs of the batch should be loaded here. + * + * @param fishingOperationId if of the fishing operation to seek + * @param sampleCategoryModel [optional] sample category model to check + * @return the list of root {@link SpeciesBatch} + * @throws InvalidBatchModelException if batch does not respect the sample category model + * @since 2.5 + */ + BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId, + SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException; + @Transactional(readOnly = false) SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId); @@ -563,6 +579,21 @@ BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId); + /** + * Get the batch parent of all root {@link BenthosBatch} for the given + * fishing operation. + * <p/> + * <strong>Note:</strong> All childs of the batch should be loaded here. + * + * @param fishingOperationId if of the fishing operation to seek + * @param sampleCategoryModel [optional] sample category model to check + * @return the list of root {@link BenthosBatch} + * @throws InvalidBatchModelException if batch does not respect the sample category model + * @since 2.5 + */ + BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId, + SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException; + @Transactional(readOnly = false) BenthosBatch createBenthosBatch(BenthosBatch bean, String parentBatchId); 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-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -40,6 +40,7 @@ import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; @@ -652,10 +653,15 @@ @Override public BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId) { - return speciesBatchService.getRootSpeciesBatch(fishingOperationId); + return getRootSpeciesBatch(fishingOperationId, null); } @Override + public BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException { + return speciesBatchService.getRootSpeciesBatch(fishingOperationId, sampleCategoryModel); + } + + @Override public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId) { return speciesBatchService.createSpeciesBatch(bean, parentBatchId); } @@ -696,10 +702,15 @@ @Override public BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId) { - return benthosBatchService.getRootBenthosBatch(fishingOperationId); + return benthosBatchService.getRootBenthosBatch(fishingOperationId, null); } @Override + public BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException { + return benthosBatchService.getRootBenthosBatch(fishingOperationId, sampleCategoryModel); + } + + @Override public BenthosBatch createBenthosBatch(BenthosBatch bean, String parentBatchId) { return benthosBatchService.createBenthosBatch(bean, parentBatchId); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -36,6 +36,7 @@ import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; @@ -452,6 +453,11 @@ } @Override + public BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException { + throw notImplemented(); + } + + @Override public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId) { throw notImplemented(); } @@ -492,6 +498,11 @@ } @Override + public BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException { + throw notImplemented(); + } + + @Override public BenthosBatch createBenthosBatch(BenthosBatch bean, String parentBatchId) { throw notImplemented(); } 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-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -132,7 +132,7 @@ SAMPLE_CATEGORY_MODEL( "tutti.persistence.SampleCategoryModel", n_("tutti.config.option.persistence.SampleCategoryModel.description"), - "1428,Vrac/Hors Vrac|198,Classe de Tri|196,Sexe|174,Maturité|1430,Age", + "1428,V/HV|198,Class Tri.|196,Sexe|174,Maturité|1430,Age", SampleCategoryModel.class, false, false Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/BatchContainer.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/BatchContainer.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/BatchContainer.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -48,4 +48,12 @@ public void addChildren(B batch) { children.add(batch); } + + public int sizeChildren() { + return children.size(); + } + + public boolean isEmptyChildren() { + return children.isEmpty(); + } } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceService.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -24,10 +24,12 @@ * #L% */ +import fr.ifremer.tutti.persistence.InvalidBatchModelException; import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.referential.Species; import org.springframework.transaction.annotation.Transactional; @@ -51,11 +53,13 @@ * <p/> * <strong>Note:</strong> All childs of the batch should be loaded here. * - * @param fishingOperationId if of the fishing operation to seek + * @param fishingOperationId if of the fishing operation to seek + * @param sampleCategoryModel [optional] sample category model to check * @return the list of root {@link BenthosBatch} + * @throws InvalidBatchModelException if batch does not respect the sample category model * @since 1.0 */ - BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId); + BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException; @Transactional(readOnly = false) BenthosBatch createBenthosBatch(BenthosBatch bean, String parentBatchId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -36,7 +36,7 @@ import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon; import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonImpl; -import fr.ifremer.tutti.TuttiBusinessException; +import fr.ifremer.tutti.persistence.InvalidBatchModelException; import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; @@ -95,7 +95,8 @@ } @Override - public BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId) { + public BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId, + SampleCategoryModel sampleCategoryModel) { Preconditions.checkNotNull(fishingOperationId); CatchBatch catchBatch = batchHelper.getRootCatchBatchByFishingOperationId(fishingOperationId, false); @@ -119,7 +120,7 @@ Preconditions.checkNotNull(referenceTaxon, "Can't have a rootBenthosBatch with a null taxon, but was for " + batch.getId()); Species species = referentialService.getSpeciesByReferenceTaxonId(referenceTaxon.getId()); if (species == null) { - throw new TuttiBusinessException(_("tutti.persistence.batch.validation.unkonwn.taxon", source.getId(), referenceTaxon.getId())); + throw new InvalidBatchModelException(_("tutti.persistence.batch.validation.unkonwn.taxon", source.getId(), referenceTaxon.getId())); } BenthosBatch target = TuttiBeanFactory.newBenthosBatch(); target.setSpecies(species); @@ -144,6 +145,9 @@ ReferenceTaxon referenceTaxon = source.getReferenceTaxon(); Preconditions.checkNotNull(referenceTaxon, "Can't have a rootSpeciesBatch with a null taxon, but was for " + source.getId()); Species species = referentialService.getSpeciesByReferenceTaxonId(referenceTaxon.getId()); + if (species == null) { + throw new InvalidBatchModelException(_("tutti.persistence.batch.validation.unkonwn.taxon", source.getId(), referenceTaxon.getId())); + } BenthosBatch target = TuttiBeanFactory.newBenthosBatch(); target.setSpecies(species); @@ -155,6 +159,13 @@ } } } + + if (sampleCategoryModel != null) { + + // validate with given sample category model + batchHelper.validateBenthos(sampleCategoryModel, result); + } + return result; } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -24,8 +24,10 @@ * #L% */ +import fr.ifremer.tutti.persistence.InvalidBatchModelException; import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -52,11 +54,14 @@ * <p/> * <strong>Note:</strong> All childs of the batch should be loaded here. * - * @param fishingOperationId if of the fishing operation to seek + * @param fishingOperationId if of the fishing operation to seek + * @param sampleCategoryModel [optional] sample category model to check * @return the list of root {@link SpeciesBatch} - * @since 1.0.2 + * @throws InvalidBatchModelException if batch does not respect the sample category model + * @since 2.5 */ - BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId); + BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId, + SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException; @Transactional(readOnly = false) SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -36,7 +36,7 @@ import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon; import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonImpl; -import fr.ifremer.tutti.TuttiBusinessException; +import fr.ifremer.tutti.persistence.InvalidBatchModelException; import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; @@ -95,7 +95,8 @@ //------------------------------------------------------------------------// @Override - public BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId) { + public BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId, + SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException { Preconditions.checkNotNull(fishingOperationId); CatchBatch catchBatch = batchHelper.getRootCatchBatchByFishingOperationId(fishingOperationId, false); @@ -126,7 +127,7 @@ } Species species = referentialService.getSpeciesByReferenceTaxonId(referenceTaxon.getId()); if (species == null) { - throw new TuttiBusinessException(_("tutti.persistence.batch.validation.unkonwn.taxon", source.getId(), referenceTaxon.getId())); + throw new InvalidBatchModelException(_("tutti.persistence.batch.validation.unkonwn.taxon", source.getId(), referenceTaxon.getId())); } SpeciesBatch target = TuttiBeanFactory.newSpeciesBatch(); target.setSpecies(species); @@ -154,7 +155,9 @@ log.trace("Loading CatchBatch Hors Vrac > Species > " + referenceTaxon.getId() + " - " + " (batch:" + source.getId() + ")"); } Species species = referentialService.getSpeciesByReferenceTaxonId(referenceTaxon.getId()); - + if (species == null) { + throw new InvalidBatchModelException(_("tutti.persistence.batch.validation.unkonwn.taxon", source.getId(), referenceTaxon.getId())); + } SpeciesBatch target = TuttiBeanFactory.newSpeciesBatch(); target.setSpecies(species); entityToSpeciesBatch(source, target); @@ -165,6 +168,12 @@ } } + if (sampleCategoryModel != null) { + + // validate with given sample category model + batchHelper.validateSpecies(sampleCategoryModel, result); + } + return result; } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -24,6 +24,7 @@ * #L% */ +import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -32,8 +33,8 @@ import fr.ifremer.adagio.core.dao.data.batch.CatchBatchExtendDao; import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; import fr.ifremer.adagio.core.dao.data.batch.SortingBatchDao; +import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationError; import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationException; -import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidator; import fr.ifremer.adagio.core.dao.data.measure.QuantificationMeasurement; import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement; import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; @@ -41,7 +42,10 @@ import fr.ifremer.tutti.persistence.InvalidBatchModelException; import fr.ifremer.tutti.persistence.entities.TuttiEntity; import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; @@ -50,6 +54,7 @@ import fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceService; import fr.ifremer.tutti.persistence.service.MeasurementPersistenceHelper; import fr.ifremer.tutti.persistence.service.ReferentialPersistenceService; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -64,6 +69,8 @@ import java.util.List; import java.util.Set; +import static org.nuiton.i18n.I18n._; + /** * Helper around batches. * @@ -93,7 +100,7 @@ protected SortingBatchDao sortingBatchDao; @Resource(name = "scientificCruiseCatchBatchValidator") - protected CatchBatchValidator catchBatchValidator; + protected TuttiCatchBatchValidator catchBatchValidator; @Autowired protected MeasurementPersistenceHelper measurementPersistenceHelper; @@ -116,6 +123,39 @@ return bean; } + public void validateSpecies(SampleCategoryModel sampleCategoryModel, + BatchContainer<SpeciesBatch> species) throws InvalidBatchModelException { + List<CatchBatchValidationError> errors = catchBatchValidator.validateSpecies(sampleCategoryModel, species); + List<String> errorsStr = Lists.newArrayList(); + for (CatchBatchValidationError error : errors) { + if (error.getGravity() == CatchBatchValidationError.GRAVITY_ERROR) { + errorsStr.add(error.getMessage()); + } + } + if (errorsStr.isEmpty()) { + String join = Joiner.on("<br/>").join(errorsStr); + throw new InvalidBatchModelException(_("tutti.persistence.batch.validation.bad.sample.categories", join)); + } + } + + public void validateBenthos(SampleCategoryModel sampleCategoryModel, + BatchContainer<BenthosBatch> benthos) throws InvalidBatchModelException { + List<CatchBatchValidationError> errors = catchBatchValidator.validateBenthos(sampleCategoryModel, benthos); + + if (CollectionUtils.isNotEmpty(errors)) { + List<String> errorsStr = Lists.newArrayList(); + for (CatchBatchValidationError error : errors) { + if (error.getGravity() == CatchBatchValidationError.GRAVITY_ERROR) { + errorsStr.add(error.getMessage()); + } + } + if (errorsStr.isEmpty()) { + String join = Joiner.on("<br/>").join(errorsStr); + throw new InvalidBatchModelException(_("tutti.persistence.batch.validation.bad.sample.categories", join)); + } + } + } + public void deleteCatchBatch(String fishingOperationId, Integer catchBatchId) { // delete individual observation batchs @@ -807,22 +847,6 @@ ); } -// public SortingMeasurement setSortingMeasurement( -// SortingBatch sortingBatch, -// SampleCategoryEnum sampleCategory, -// Serializable value) { -// Preconditions.checkNotNull(sampleCategory); -// Preconditions.checkNotNull(value); -// -// Integer pmfmId = sampleCategory.getFieldValue(); -// -// Caracteristic caracteristic = referentialService.getCaracteristic(pmfmId); -// SortingMeasurement sortingMeasurement = catchBatchDao.getSortingMeasurement( -// sortingBatch, pmfmId, getRecorderDepartmentId(), true); -// measurementPersistenceHelper.setMeasurement(sortingMeasurement, caracteristic, value); -// return sortingMeasurement; -// } - public SortingMeasurement setSortingMeasurement( SortingBatch sortingBatch, Integer pmfmId, @@ -896,8 +920,6 @@ SortingMeasurement sm = sortingBatch.getSortingMeasurements().iterator().next(); Pmfm pmfm = sm.getPmfm(); -// SampleCategoryEnum sampleCategoryByPmfmId = -// enumeration.getSampleCategoryByPmfmId(pmfm.getId()); result = !sampleCategoryModel.containsCategoryId(pmfm.getId()); } 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-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -30,7 +30,10 @@ import fr.ifremer.adagio.core.dao.data.batch.CatchBatchExtendDao; import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationError; -import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidator; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.service.CatchBatchPersistenceService; import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; import org.apache.commons.logging.Log; @@ -45,7 +48,7 @@ import static org.nuiton.i18n.I18n.n_; @Component(value = "scientificCruiseCatchBatchValidator") -public class ScientificCruiseCatchBatchValidator implements CatchBatchValidator { +public class ScientificCruiseCatchBatchValidator implements TuttiCatchBatchValidator { /** Logger. */ private static final Log log = @@ -76,6 +79,30 @@ return errors; } + @Override + public List<CatchBatchValidationError> validateSpecies(SampleCategoryModel sampleCategoryModel, + BatchContainer<SpeciesBatch> species) { + + List<CatchBatchValidationError> errors = Lists.newArrayList(); + + for (SpeciesBatch speciesBatch : species.getChildren()) { + + } + return errors; + } + + @Override + public List<CatchBatchValidationError> validateBenthos(SampleCategoryModel sampleCategoryModel, + BatchContainer<BenthosBatch> benthos) { + + List<CatchBatchValidationError> errors = Lists.newArrayList(); + + for (BenthosBatch benthosBatch : benthos.getChildren()) { + + } + return errors; + } + // ------------------------------------------------------------------------// // -- Internal methods --// // ------------------------------------------------------------------------// @@ -180,7 +207,7 @@ addWarning(errors, n_("tutti.persistence.batch.validation.vracBenthosInertNotFound")); } - // Vrac > Benthos > Alive itermized + // Vrac > Benthos > Alive itemized SortingBatch aliveItemizedBatch = batchHelper.getSortingBatch( benthosBatch, "Vrac > Benthos > Alive itermized", Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -0,0 +1,49 @@ +package fr.ifremer.tutti.persistence.service.batch; + +/* + * #%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% + */ + +import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationError; +import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidator; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; + +import java.util.List; + +/** + * Override adagio validator to add a validate within a {@link SampleCategoryModel}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public interface TuttiCatchBatchValidator extends CatchBatchValidator { + + List<CatchBatchValidationError> validateSpecies(SampleCategoryModel sampleCategoryModel, + BatchContainer<SpeciesBatch> species); + + List<CatchBatchValidationError> validateBenthos(SampleCategoryModel sampleCategoryModel, + BatchContainer<BenthosBatch> benthos); +} Property changes on: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -36,6 +36,7 @@ import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,8 +45,8 @@ import org.junit.runner.Description; import org.junit.runner.notification.Failure; import org.junit.runners.model.Statement; +import org.nuiton.config.ApplicationConfig; import org.nuiton.util.FileUtil; -import org.nuiton.config.ApplicationConfig; import org.nuiton.util.converter.ConverterUtil; import java.io.BufferedReader; @@ -53,6 +54,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -169,7 +171,7 @@ Class<?> testClass; public void prepareConfig(ApplicationConfig applicationConfig, - File resourceDirectory) { + File resourceDirectory) { applicationConfig.loadDefaultOptions( TuttiPersistenceConfigOption.values()); @@ -178,6 +180,23 @@ new File(resourceDirectory, "data").getAbsolutePath()); } + public File copyClassPathResource(String path, String destinationName) throws IOException { + InputStream inputStream = getClass().getResourceAsStream("/" + path); + Preconditions.checkNotNull(inputStream, "Could not find " + path + " in test class-path"); + File output = new File(resourceDirectory, destinationName); + + OutputStream outputStream = FileUtils.openOutputStream(output); + try { + IOUtils.copy(inputStream, outputStream); + inputStream.close(); + outputStream.close(); + } finally { + IOUtils.closeQuietly(inputStream); + IOUtils.closeQuietly(outputStream); + } + return output; + } + protected void before(Description description) throws Throwable { TuttiRunListener.beforeClass(description); Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -15,10 +15,10 @@ tutti.config.option.persistence.jdbc.password.description= tutti.config.option.persistence.jdbc.url.description= tutti.config.option.persistence.jdbc.username.description= -tutti.config.option.persistence.samplingCategories.description= tutti.config.persistence= tutti.persistence.attachment.copyFile.error= tutti.persistence.attachment.deleteFile.error= +tutti.persistence.batch.validation.bad.sample.categories= tutti.persistence.batch.validation.horsVracBenthosNotFound= tutti.persistence.batch.validation.horsVracMarineLitterNotFound= tutti.persistence.batch.validation.horsVracNotFound= @@ -50,9 +50,3 @@ tutti.persistence.synchronizeReferential.synchronize.step2= tutti.persistence.synchronizeReferential.synchronizeTable= tutti.persistence.tableMetadata.instanciation.error= -tutti.sampleCategoryType.age= -tutti.sampleCategoryType.maturity= -tutti.sampleCategoryType.sex= -tutti.sampleCategoryType.size= -tutti.sampleCategoryType.sortedUnsorted= -tutti.service.attachment.copyFile.error= 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-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -1,5 +1,5 @@ nuitonutil.error.no.convertor= -tutti.config.option.persistence.SampleCategoryModel.description= +tutti.config.option.persistence.SampleCategoryModel.description=Configuration des catégories d'échantillonnage tutti.config.option.persistence.db.attachment.directory.description=Répertoire où sont stockées les pièces-jointes tutti.config.option.persistence.db.cache.directory.description=Répertoire où sont stockées les caches de persistance tutti.config.option.persistence.db.configurationPath.description=Chemin du fichier de configuration d'Adagio @@ -15,10 +15,10 @@ tutti.config.option.persistence.jdbc.password.description=Mot de passe de l'utilisateur pour se connecter à la base de données tutti.config.option.persistence.jdbc.url.description=URL de connexion à la base de données tutti.config.option.persistence.jdbc.username.description=Login de l'utilisateur pour se connecter à la base de données -tutti.config.option.persistence.samplingCategories.description= tutti.config.persistence=Configuration de la persistance de l'application tutti.persistence.attachment.copyFile.error=Erreur lors de la copie de la pièce jointe %1s dans le fichier %2s tutti.persistence.attachment.deleteFile.error=Erreur lors de la suppression de la pièce jointe %s +tutti.persistence.batch.validation.bad.sample.categories=Il existe des lots avec des catégories d'échantillon non compatible avec le modèle configuré \:<br/>%s tutti.persistence.batch.validation.horsVracBenthosNotFound=Lot 'Hors Vrac > Benthos' non trouvé ou configuré avec d'autres critères de classement. tutti.persistence.batch.validation.horsVracMarineLitterNotFound=Lot 'Hors Vrac > Macro-déchet' 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. @@ -50,8 +50,3 @@ tutti.persistence.synchronizeReferential.synchronize.step2=Sauvegarde des données dans la base locale tutti.persistence.synchronizeReferential.synchronizeTable=Mise à jour de la table %s tutti.persistence.tableMetadata.instanciation.error=Erreur à l'initialisation de %s -tutti.sampleCategoryType.age=Age -tutti.sampleCategoryType.maturity=Maturité -tutti.sampleCategoryType.sex=Sexe -tutti.sampleCategoryType.size=Class Tri. -tutti.sampleCategoryType.sortedUnsorted=V/HV Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo =================================================================== (Binary files differ) Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigTest.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigTest.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -76,12 +76,12 @@ SampleCategoryModelEntry vracHVrac = new SampleCategoryModelEntry(); vracHVrac.setCategoryId(1428); - vracHVrac.setLabel("Vrac/Hors Vrac"); + vracHVrac.setLabel("V/HV"); vracHVrac.setOrder(0); SampleCategoryModelEntry classDeTri = new SampleCategoryModelEntry(); classDeTri.setCategoryId(198); - classDeTri.setLabel("Classe de Tri"); + classDeTri.setLabel("Class Tri."); classDeTri.setOrder(1); SampleCategoryModelEntry sex = new SampleCategoryModelEntry(); Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceReadTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceReadTest.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceReadTest.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -83,7 +83,7 @@ @Test public void getRootBenthosBatch(/*String fishingOperationId*/) { //TODO Do me! - service.getRootBenthosBatch(fishingOperation.getId()); + service.getRootBenthosBatch(fishingOperation.getId(), null); } @Ignore @@ -164,7 +164,7 @@ public BenthosBatch getBenthosBatch(String fishingOperationId, String speciesBatchId) { - BatchContainer<BenthosBatch> rootSpeciesBatch = service.getRootBenthosBatch(fishingOperationId); + BatchContainer<BenthosBatch> rootSpeciesBatch = service.getRootBenthosBatch(fishingOperationId, null); return getBenthosBatch(speciesBatchId, rootSpeciesBatch.getChildren()); } Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceWriteTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceWriteTest.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceWriteTest.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -324,7 +324,7 @@ // ----------------------------------------------------------------------------- // 7. Test get all root species // ----------------------------------------------------------------------------- - List<BenthosBatch> rootBenthosBatch = service.getRootBenthosBatch(fishingOperationWithEmptyBatch.getId()).getChildren(); + List<BenthosBatch> rootBenthosBatch = service.getRootBenthosBatch(fishingOperationWithEmptyBatch.getId(), null).getChildren(); assertNotNull(rootBenthosBatch); assertEquals(2, rootBenthosBatch.size()); assertNotNull(rootBenthosBatch.get(0).getChildBatchs()); @@ -512,7 +512,7 @@ } protected BenthosBatch getBenthosBatch(String fishingOperationId, String speciesBatchId) { - return getBenthosBatch(speciesBatchId, service.getRootBenthosBatch(fishingOperationId).getChildren()); + return getBenthosBatch(speciesBatchId, service.getRootBenthosBatch(fishingOperationId, null).getChildren()); } protected BenthosBatch getBenthosBatch(String speciesBatchId, List<BenthosBatch> speciesBatchs) { Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceReadTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceReadTest.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceReadTest.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -82,7 +82,7 @@ @Test public void getRootSpeciesBatch(/*String fishingOperationId*/) { //TODO Do me! - service.getRootSpeciesBatch(fishingOperation.getId()); + service.getRootSpeciesBatch(fishingOperation.getId(), null); } @Ignore @@ -168,7 +168,7 @@ public SpeciesBatch getSpeciesBatch(String fishingOperationId, String speciesBatchId) { - BatchContainer<SpeciesBatch> rootSpeciesBatch = service.getRootSpeciesBatch(fishingOperationId); + BatchContainer<SpeciesBatch> rootSpeciesBatch = service.getRootSpeciesBatch(fishingOperationId, null); return getSpeciesBatch(speciesBatchId, rootSpeciesBatch.getChildren()); } Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceWriteTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceWriteTest.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceWriteTest.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -316,7 +316,7 @@ // ----------------------------------------------------------------------------- // 7. Test get all root species // ----------------------------------------------------------------------------- - BatchContainer<SpeciesBatch> rootSpeciesBatc = service.getRootSpeciesBatch(fishingOperationWithEmptyBatch.getId()); + BatchContainer<SpeciesBatch> rootSpeciesBatc = service.getRootSpeciesBatch(fishingOperationWithEmptyBatch.getId(), null); List<SpeciesBatch> rootSpeciesBatch = rootSpeciesBatc.getChildren(); assertNotNull(rootSpeciesBatch); assertEquals(2, rootSpeciesBatch.size()); @@ -504,7 +504,7 @@ } protected SpeciesBatch getSpeciesBatch(String fishingOperationId, String speciesBatchId) { - return getSpeciesBatch(speciesBatchId, service.getRootSpeciesBatch(fishingOperationId).getChildren()); + return getSpeciesBatch(speciesBatchId, service.getRootSpeciesBatch(fishingOperationId, null).getChildren()); } protected SpeciesBatch getSpeciesBatch(String speciesBatchId, List<SpeciesBatch> speciesBatchs) { 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-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -43,6 +43,7 @@ import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; @@ -745,10 +746,16 @@ @Override public BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId) { - return driver.getRootSpeciesBatch(fishingOperationId); + return driver.getRootSpeciesBatch(fishingOperationId, null); } @Override + public BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId, + SampleCategoryModel sampleCategoryModel) { + return driver.getRootSpeciesBatch(fishingOperationId, sampleCategoryModel); + } + + @Override public SpeciesBatch createSpeciesBatch(SpeciesBatch bean, String parentBatchId) { return driver.createSpeciesBatch(bean, parentBatchId); @@ -795,6 +802,11 @@ } @Override + public BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException { + return driver.getRootBenthosBatch(fishingOperationId, sampleCategoryModel); + } + + @Override public BenthosBatch createBenthosBatch(BenthosBatch bean, String parentBatchId) { return driver.createBenthosBatch(bean, parentBatchId); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -47,6 +47,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; import fr.ifremer.tutti.service.AbstractTuttiService; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiDataContext; import fr.ifremer.tutti.service.TuttiServiceContext; @@ -412,7 +413,8 @@ reader.close(); } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.pupitri.import.carrousel.error", operation.toString(), carrouselFile), e);//"Could not import carrousel data [" + operation.toString() + "] from file " + carrouselFile + DecoratorService service = getService(DecoratorService.class); + throw new TuttiTechnicalException(_("tutti.service.pupitri.import.carrousel.error", carrouselFile, service.getDecorator(operation).toString(operation)), e);//"Could not import carrousel data [" + operation.toString() + "] from file " + carrouselFile } finally { IOUtils.closeQuietly(carrouselImporter); Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -9,8 +9,6 @@ tutti.config.option.tmp.directory.description= tutti.config.option.version.description= tutti.config.service= -tutti.persistence.checkArchiveDb.error= -tutti.persistence.checkImportstructure.fileNotExist= tutti.property.attachment= tutti.property.caracteristic= tutti.property.country= @@ -50,13 +48,9 @@ tutti.propety.no.vessel.name= tutti.propety.no.zone= tutti.propety.vessel.nation.registrationCode= -tutti.service.catches.computeWeights.benthos.error.incoherentSampleWeight= -tutti.service.catches.computeWeights.error.incoherentRowWeightCategory= -tutti.service.catches.computeWeights.species.error.incoherentSampleWeight= tutti.service.compressZipFile.error= tutti.service.config.deleteTempDirectory.error= tutti.service.context.serviceInstanciation.error= -tutti.service.csv.parse.entityAlreadyDefined= tutti.service.csv.parse.entityNotFound= tutti.service.cvs.format.error= tutti.service.export.catches.error= @@ -87,15 +81,12 @@ tutti.service.exportSumatra.header.weight= tutti.service.mkDir.error= tutti.service.multipost.attachment.copy.error= -tutti.service.multipost.explodeArchive.error= tutti.service.multipost.export.attachments.error= tutti.service.multipost.export.batches.error= -tutti.service.multipost.export.benthos.error= tutti.service.multipost.export.deleteTempDirectory.error= tutti.service.multipost.export.error= tutti.service.multipost.export.frequencies.error= tutti.service.multipost.export.operation.error= -tutti.service.multipost.export.species.error= tutti.service.multipost.export.weight.error= tutti.service.multipost.export.weights.error= tutti.service.multipost.import.attachments.error= @@ -103,17 +94,9 @@ tutti.service.multipost.import.caracteristics.error= tutti.service.multipost.import.frequencies.error= tutti.service.multipost.import.operation.error= -tutti.service.multipost.import.species.error= tutti.service.multipost.import.weights.error= tutti.service.multipost.import.wrongOperation.error= -tutti.service.multipost.resolveArchive.error= tutti.service.multipost.uncompress.error= -tutti.service.operations.accidental.error.species.required= -tutti.service.operations.computeWeights.benthos.error.incoherentCategoryWeight= -tutti.service.operations.computeWeights.benthos.error.incoherentParentCategoryWeight= -tutti.service.operations.computeWeights.benthos.error.incoherentRowWeightFrequency= -tutti.service.operations.computeWeights.benthos.error.incoherentTotalSorted= -tutti.service.operations.computeWeights.benthos.error.noWeight= tutti.service.operations.computeWeights.error.benthos.incoherentCategoryWeight= tutti.service.operations.computeWeights.error.benthos.incoherentParentCategoryWeight= tutti.service.operations.computeWeights.error.benthos.incoherentRowWeightCategory= @@ -131,36 +114,16 @@ tutti.service.operations.computeWeights.error.species.incoherentSampleWeight= tutti.service.operations.computeWeights.error.species.incoherentTotalSorted= tutti.service.operations.computeWeights.error.species.noWeight= -tutti.service.operations.computeWeights.marineLitter.error.incoherentTotal= -tutti.service.operations.computeWeights.marineLitter.error.noWeight= -tutti.service.operations.computeWeights.species.error.incoherentCategoryWeight= -tutti.service.operations.computeWeights.species.error.incoherentParentCategoryWeight= -tutti.service.operations.computeWeights.species.error.incoherentRowWeightFrequency= -tutti.service.operations.computeWeights.species.error.incoherentTotalSorted= -tutti.service.operations.computeWeights.species.error.noWeight= tutti.service.operations.exportCatchesReport.error= tutti.service.operations.exportCatchesReport.specialRows.benthos.code= tutti.service.operations.exportCatchesReport.specialRows.benthos.name= tutti.service.operations.exportCatchesReport.specialRows.inertAndLivinngNotItemized.code= tutti.service.operations.exportCatchesReport.specialRows.inertAndLivinngNotItemized.name= -tutti.service.operations.individualObservation.error.lengthStepCaracteristic.required= -tutti.service.operations.individualObservation.error.size.required= -tutti.service.operations.individualObservation.error.species.required= -tutti.service.operations.individualObservation.error.weight.required= -tutti.service.operations.marineLitter.error.marineLitterCategory.required= -tutti.service.operations.marineLitter.error.marineLitterSizeCategory.required= -tutti.service.operations.marineLitter.error.number.required= -tutti.service.operations.marineLitter.warning.weight.required= -tutti.service.operations.validate.marineLitter.error.marineLitterCategory.required= -tutti.service.operations.validate.marineLitter.error.marineLitterSizeCategory.required= -tutti.service.operations.validate.marineLitter.error.number.required= -tutti.service.operations.validate.marineLitter.warning.weight.required= tutti.service.persistence.checkArchiveDb.error= tutti.service.persistence.checkImportstructure.fileNotExist= tutti.service.persistence.checkImportstructure.tooManyChildren= tutti.service.persistence.copyDirectory.attachment.error= tutti.service.persistence.copyDirectory.db.error= -tutti.service.persistence.copyDirectory.protocol.error= tutti.service.persistence.exportDb.deleteTempDir.error= tutti.service.persistence.exportDb.zip.error= tutti.service.persistence.extractArchive.error= Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -48,13 +48,9 @@ tutti.propety.no.vessel.name=Nom inconnu tutti.propety.no.zone=Pas de zone tutti.propety.vessel.nation.registrationCode=%s (nat.) -tutti.service.catches.computeWeights.benthos.error.incoherentSampleWeight=Le poids de sous-échantillon est supérieur au poids du lot. -tutti.service.catches.computeWeights.error.incoherentRowWeightCategory=Le poids de sous-échantillon est renseigné alors que le lot n'a pas de poids. -tutti.service.catches.computeWeights.species.error.incoherentSampleWeight=Le poids de sous-échantillon est supérieur au poids du lot. tutti.service.compressZipFile.error=Erreur lors de la compression du dossier %1s dans le fichier %2s tutti.service.config.deleteTempDirectory.error=Erreur lors de la suppression du dossier temporaire tutti.service.context.serviceInstanciation.error=Erreur lors de l'instanciation du service %s -tutti.service.csv.parse.entityAlreadyDefined=La propriété %1s de valeur %2s est déjà définie tutti.service.csv.parse.entityNotFound=L'entité de type %1s avec la propriété %2s de valeur %3s n'a pas été trouvée tutti.service.cvs.format.error=Erreur lors du formatage de la valeur %s tutti.service.export.catches.error=Erreur lors de l'export des captures @@ -128,7 +124,6 @@ tutti.service.persistence.checkImportstructure.tooManyChildren=L'archive de base de données %s ne doit avoir qu'un sous-dossier tutti.service.persistence.copyDirectory.attachment.error=Erreur lors de la copie du dossier des pièces jointes tutti.service.persistence.copyDirectory.db.error=Erreur lors de la copie du dossier de base de données -tutti.service.persistence.copyDirectory.protocol.error=Erreur lors de la copie du dossier des protocoles tutti.service.persistence.exportDb.deleteTempDir.error=Erreur lors de la suppression du dossier temporaire tutti.service.persistence.exportDb.zip.error=Erreur lors de la création de l'archive %s tutti.service.persistence.extractArchive.error=Erreur lors de l'extraction de l'archive %s Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportService2Test.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -74,7 +74,7 @@ public static final String OPERATION_2_ID = "100113"; public static final String CATCH_CONTENT = - "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;Vrac/Hors Vrac;Num_Ordre_Vrac/Hors Vrac_H2;Tot_Vrac/Hors Vrac;Ech_Vrac/Hors Vrac;Type_Volume_Poids_Vrac/Hors Vrac;Unite_Volume_Poids_Vrac/Hors Vrac;Classe de Tri;Num_Ordre_Classe de Tri_H2;Tot_Classe de Tri;Ech_Classe de Tri;Type_Volume_Poids_Classe de Tri;Unite_Volume_Poids_Classe de Tri;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" + + "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V/HV;Num_Ordre_V/HV_H2;Tot_V/HV;Ech_V/HV;Type_Volume_Poids_V/HV;Unite_Volume_Poids_V/HV;Class Tri.;Num_Ordre_Class Tri._H2;Tot_Class Tri.;Ech_Class Tri.;Type_Volume_Poids_Class Tri.;Unite_Volume_Poids_Class Tri.;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" + "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1938;Agonus cataphractus;AGONCAT-vrac-80;Vrac;1;80.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;80.0;5.4444447;\n" + "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-male 60;Vrac;2;;;Poids;kg;NA;;;;;kg;Mâle;1;60.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;;60.0;9.074075;\n" + "2013;test elevation;1;OTB 20/28.10;A;1;1;278970;1358;Alosa alosa;ALOSALO-vrac|ALOSALO-vrac-femelle 40;Vrac;2;;;Poids;kg;NA;;;;;kg;Femelle;2;40.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;306;Longueur totale (LT) - individu - totale - Mesure au cm par un observateur;5.0;1;0.6;cm;1.0;4;0.6;907.4074;\n" + Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/export/TuttiExportServiceTest.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -108,7 +108,7 @@ "2013;Campagne CGFS;;A;2;1;308;Nombre d'engin - engin - totale - Déclaration d'un professionnel;2.0;"; public static final String CATCH_CONTENT = - "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;Vrac/Hors Vrac;Num_Ordre_Vrac/Hors Vrac_H2;Tot_Vrac/Hors Vrac;Ech_Vrac/Hors Vrac;Type_Volume_Poids_Vrac/Hors Vrac;Unite_Volume_Poids_Vrac/Hors Vrac;Classe de Tri;Num_Ordre_Classe de Tri_H2;Tot_Classe de Tri;Ech_Classe de Tri;Type_Volume_Poids_Classe de Tri;Unite_Volume_Poids_Classe de Tri;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" + + "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V/HV;Num_Ordre_V/HV_H2;Tot_V/HV;Ech_V/HV;Type_Volume_Poids_V/HV;Unite_Volume_Poids_V/HV;Class Tri.;Num_Ordre_Class Tri._H2;Tot_Class Tri.;Ech_Class Tri.;Type_Volume_Poids_Class Tri.;Unite_Volume_Poids_Class Tri.;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" + "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.0;1;;cm;0.5;5;5.0;20.0;\n" + "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;10.5;2;;cm;0.5;2;5.0;20.0;\n" + "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;|||;Vrac;1;100.0;;Poids;kg;G - Gros;1;80.0;;Poids;kg;Mâle;1;30.0;;Poids;kg;1 - Stade 1;1;10.0;5.0;Poids;kg;NA;;;;;kg;307;Longueur totale (LT) - individu - totale - Mesure au 1/2 cm par un observateur;11.0;3;;cm;0.5;1;5.0;20.0;\n" + @@ -120,7 +120,7 @@ "2013;Campagne CGFS;;GOV 19.7/25.9;A;1;1;278970;11242;Aaptos;;Hors Vrac;1;20.0;;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;2;20.0;1.0;"; public static final String CATCH_CONTENT_2 = - "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;Vrac/Hors Vrac;Num_Ordre_Vrac/Hors Vrac_H2;Tot_Vrac/Hors Vrac;Ech_Vrac/Hors Vrac;Type_Volume_Poids_Vrac/Hors Vrac;Unite_Volume_Poids_Vrac/Hors Vrac;Classe de Tri;Num_Ordre_Classe de Tri_H2;Tot_Classe de Tri;Ech_Classe de Tri;Type_Volume_Poids_Classe de Tri;Unite_Volume_Poids_Classe de Tri;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" + + "Annee;Serie;Serie_Partielle;Engin;Id_Operation;NumOrdre_Station;Poche;Navire;Taxon;Nom_scientifique;Commentaire;V/HV;Num_Ordre_V/HV_H2;Tot_V/HV;Ech_V/HV;Type_Volume_Poids_V/HV;Unite_Volume_Poids_V/HV;Class Tri.;Num_Ordre_Class Tri._H2;Tot_Class Tri.;Ech_Class Tri.;Type_Volume_Poids_Class Tri.;Unite_Volume_Poids_Class Tri.;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Maturité;Num_Ordre_Maturité_H2;Tot_Maturité;Ech_Maturité;Type_Volume_Poids_Maturité;Unite_Volume_Poids_Maturité;Age;Num_Ordre_Age_H2;Tot_Age;Ech_Age;Type_Volume_Poids_Age;Unite_Volume_Poids_Age;Code_Longueur;Libelle_Longueur;Taille;NumOrdre_Taille_H2;Poids_Classe_Taille;Unite_Taille;Precision_Mesure;Nbr;Poids_Reference;Coef_Elev_Espece_Capture\n" + "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;365;Aequipecten opercularis;taxon;Vrac;1;0.005;0.005;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.005;1.0;\n" + "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;491;Alloteuthis;taxon;Vrac;2;0.004;0.004;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.004;1.0;\n" + "2010;Campagne CGFS;;GOV 19.7/25.9;20;20;1;278970;300;Buccinum undatum;taxon;Vrac;3;0.015;0.015;Poids;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;NA;;;;;kg;;;;;;;;1;0.015;1.0;\n" + Added: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java (rev 0) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java 2013-07-25 14:45:48 UTC (rev 1155) @@ -0,0 +1,151 @@ +package fr.ifremer.tutti.service.pupitri; + +/* + * #%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 com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +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.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.ServiceDbResource; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class TuttiPupitriImportExportServiceTest { + + @ClassRule + public static final ServiceDbResource dbResource = + ServiceDbResource.writeDb("dbExport"); + + public static final String PROGRAM_ID = "CAM-TEST_ELEVATION"; + + public static final String CRUISE_ID = "100003"; + + public static final String OPERATION_1_ID = "100112"; + + public static final String OPERATION_2_ID = "100113"; + + protected TuttiPupitriImportExportService service; + + protected PersistenceService persistenceService; + + protected Program program; + + protected Cruise cruise; + + protected Cruise cruiseCGFS; + + protected List<FishingOperation> operations; + + @Before + public void setUp() throws Exception { + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + persistenceService = serviceContext.getService(PersistenceService.class); + + // set export country id in configuration + List<TuttiLocation> allCountry = persistenceService.getAllCountry(); + Assert.assertNotNull(allCountry); + Assert.assertFalse(allCountry.isEmpty()); + TuttiLocation franceCountry = TuttiEntities.splitById(allCountry).get("12"); + Assert.assertNotNull(franceCountry); + dbResource.getServiceConfig().setExportCountry(franceCountry.getId()); + + serviceContext.getDataContext().open(serviceContext.getConfig(), persistenceService); + + service = serviceContext.getService(TuttiPupitriImportExportService.class); + + loadData(PROGRAM_ID, CRUISE_ID); + Assert.assertEquals(2, operations.size()); + Assert.assertEquals(OPERATION_1_ID, operations.get(0).getId()); + Assert.assertEquals(OPERATION_2_ID, operations.get(1).getId()); + } + + protected void loadData(String programId, String cruiseId) { + program = persistenceService.getProgram(programId); + Assert.assertNotNull(program); + + cruise = persistenceService.getCruise(cruiseId); + Assert.assertNotNull(cruise); + + operations = persistenceService.getAllFishingOperation(cruise.getId()); + Assert.assertNotNull(operations); + + // load fully operations + List<FishingOperation> loadedOperations = + Lists.newArrayListWithCapacity(operations.size()); + for (FishingOperation operation : operations) { + FishingOperation loadedOeration = + persistenceService.getFishingOperation(operation.getId()); + loadedOperations.add(loadedOeration); + } + operations = loadedOperations; + } + + @Test + public void importPupitri() throws IOException { + + File trunk = dbResource.copyClassPathResource("pupitri/pupitri.tnk", "pupitri.tnk"); + File carroussel = dbResource.copyClassPathResource("pupitri/pupitri.car", "pupitri.car"); + + FishingOperation operation = operations.get(0); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + catchBatch.setFishingOperation(operation); + + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId()); + Assert.assertEquals(3, rootSpeciesBatch.sizeChildren()); + int nbAdded = service.importPupitri(trunk, carroussel, operation, catchBatch); + Assert.assertEquals(6, nbAdded); + BatchContainer<SpeciesBatch> rootSpeciesBatchAfter = persistenceService.getRootSpeciesBatch(operation.getId()); + Assert.assertEquals(18, rootSpeciesBatchAfter.sizeChildren()); + + int index = 0; + for (SpeciesBatch speciesBatch : rootSpeciesBatchAfter.getChildren()) { + + int nbChildren = 0; + if (index == 11) { + nbChildren = 2; + } + Assert.assertEquals("SpeciesBatch at index " + (index++) + " should have " + nbChildren + " but had " + speciesBatch.sizeChildBatchs(), nbChildren, speciesBatch.sizeChildBatchs()); + } + } +} Property changes on: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-service/src/test/resources/pupitri/pupitri.car =================================================================== --- trunk/tutti-service/src/test/resources/pupitri/pupitri.car (rev 0) +++ trunk/tutti-service/src/test/resources/pupitri/pupitri.car 2013-07-25 14:45:48 UTC (rev 1155) @@ -0,0 +1,26 @@ +$TSMES,15/01/13,09:07:34.156,BLCAR, 0,A,1,002,POLLPOL,0,VAT,0004.4, +$TSMES,15/01/13,09:08:15.228,BLCAR, 0,A,1,002,TRISLUS,0,VAT,0002.3, +$TSMES,15/01/13,09:09:23.601,BLCAR, 0,A,1,002,SQUAACA,0,VAT,0007.9, +$TSMES,15/01/13,09:13:15.244,BLCAR, 0,A,1,002,SCYLCAN,0,VAT,0008.1, +$TSMES,15/01/13,09:14:30.657,BLCAR, 0,A,1,002,SPRASPR,0,VAT,0013.2, +$TSMES,15/01/13,09:15:14.761,BLCAR, 0,A,1,002,BENTHOS,0,VAT,0002.9, +$TSMES,15/01/13,09:15:40.868,BLCAR, 0,A,1,001,SPONCAN,0,VAT,0000.2, +$TSMES,15/01/13,09:16:00.839,BLCAR, 0,A,1,001,PLEUPLA,0,VAT,0002.5, +$TSMES,15/01/13,09:16:23.118,BLCAR, 0,A,1,001,TRISLUS,0,VAT,0003.8, +$TSMES,15/01/13,09:17:00.248,BLCAR, 0,A,1,001,ALOSFAL,0,VAT,0000.7, +$TSMES,15/01/13,09:17:24.573,BLCAR, 0,A,1,001,RAJACLA,0,VAT,0000.1, +$TSMES,15/01/13,09:17:52.684,BLCAR, 0,A,1,001,MERLMNG,0,VAT,0005.5, +$TSMES,15/01/13,09:18:26.807,BLCAR, 0,A,1,001,TRISMIN,0,VAT,0006.3, +$TSMES,15/01/13,09:18:57.145,BLCAR, 0,A,1,001,DECHETS,0,VAT,0000.0, +$TSMES,15/01/13,09:19:21.249,BLCAR, 0,A,1,001,CANCPAG,0,VAT,0001.6, +$TSMES,15/01/13,09:19:37.948,BLCAR, 0,A,1,001,LIMALIM,0,VAT,0000.2, +$TSMES,15/01/13,09:20:53.542,BLCAR, 0,A,1,001,AGONCAT,1,VAT,0000.2, +$TSMES,15/01/13,09:20:53.542,BLCAR, 0,A,1,001,AGONCAT,2,VAT,0000.3, +$TSMES,15/01/13,09:21:20.697,BLCAR, 0,A,1,001,ECHIVIP,0,VAT,0000.1, +$TSMES,15/01/13,09:22:16.020,BLCAR, 0,A,1,001,LIPALIP,0,VAT,0000.0, +$TSMES,15/01/13,09:24:04.365,BLCAR, 0,A,1,001,CILISEP,0,VAT,0000.1, +$TSMES,15/01/13,09:25:14.082,BLCAR, 0,A,1,001,TAURBUB,0,VAT,0000.1, +$TSMES,15/01/13,09:26:31.601,BLCAR, 0,A,1,001,MAJABRA,0,VAT,0000.0, +$TSMES,15/01/13,09:27:00.711,BLCAR,1,A,1,001,BUCCUND,0,VAT,000.2, +$TSMES,15/01/13,09:27:27.211,BLCAR, 0,A,1,001,PALASER,0,VAT,0000.1, +$TSMES,15/01/13,09:28:39.272,BLCAR,1,A,1,001,LEPIBOS,0,VAT,000.1, Property changes on: trunk/tutti-service/src/test/resources/pupitri/pupitri.car ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-service/src/test/resources/pupitri/pupitri.tnk =================================================================== --- trunk/tutti-service/src/test/resources/pupitri/pupitri.tnk (rev 0) +++ trunk/tutti-service/src/test/resources/pupitri/pupitri.tnk 2013-07-25 14:45:48 UTC (rev 1155) @@ -0,0 +1,5 @@ +$TSMES,15/01/13,09:00:44.485,BLTNK, 0,A,1,VAT,0040.4, +$TSMES,15/01/13,09:08:31.651,BLTNK, 0,A,1,VAT,0020.4, +$TSMES,15/01/13,09:10:54.833,BLTNK, 0,A,1,VAT,0000.0, +$TSMES,15/01/13,09:10:55.833,BLTNK, 0,A,1,VNT,250.0, + Property changes on: trunk/tutti-service/src/test/resources/pupitri/pupitri.tnk ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/tutti-service/src/test/resources/tutti-test-write-dbExport.properties (from rev 1154, trunk/tutti-service/src/test/resources/tutti-test-read-dbExport.properties) =================================================================== --- trunk/tutti-service/src/test/resources/tutti-test-write-dbExport.properties (rev 0) +++ trunk/tutti-service/src/test/resources/tutti-test-write-dbExport.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -0,0 +1,24 @@ +### +# #%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% +### +tutti.persistence.jdbc.createScript=src/test/dbExport/allegro.script Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -1,3 +1,26 @@ +### +# #%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% +### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo #Tue Jul 23 13:28:56 CEST 2013 tutti.config.help=config.html Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -1,3 +1,26 @@ +### +# #%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% +### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo #Tue Jul 23 13:28:56 CEST 2013 tutti.config.help=config.html Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -1,12 +1,9 @@ -export= swing.error.cannot.mail= swing.error.cannot.open.file= swing.error.cannot.open.link= swing.error.desktop.browse.not.supported= swing.error.desktop.mail.not.supported= swing.error.desktop.not.supported= -traits= -ttutti.editCruise.action.editGearCaracteristics.mnemonic= tutti.about.bottomText= tutti.about.message= tutti.about.title= @@ -67,7 +64,6 @@ tutti.commentEditor.none.tip= tutti.commentEditor.title= tutti.common.askBeforeDelete.help= -tutti.common.askBeforeDelete.title= tutti.common.askCancelEditBeforeLeaving.help= tutti.common.askCancelEditBeforeLeaving.title= tutti.common.askOverwriteFile.help= @@ -77,10 +73,8 @@ tutti.common.askSaveBeforeLeaving.title= tutti.common.cancel= tutti.common.cancel.mnemonic= -tutti.common.close= tutti.common.datefield.tip= tutti.common.file.csv= -tutti.common.file.export= tutti.common.file.pdf= tutti.common.file.protocol= tutti.common.file.tuttiAccidental= @@ -89,8 +83,6 @@ tutti.common.file.tuttiMarineLitter= tutti.common.file.tuttiSpecies= tutti.common.file.zip= -tutti.common.selected.fishingOperation= -tutti.common.selected.protocol= tutti.common.validate= tutti.common.validate.mnemonic= tutti.config.action.reload.actions= @@ -111,7 +103,6 @@ tutti.config.option.launch.mode.description= tutti.config.option.programId.description= tutti.config.option.protocolId.description= -tutti.config.option.samplingCategoryOrderIds.description= tutti.config.option.tremieCarousselVessel.description= tutti.config.option.ui.autoPopupNumberEditor.description= tutti.config.option.ui.color.blockingLayer.description= @@ -165,8 +156,6 @@ tutti.createBenthosBatch.field.batchWeight.tip= tutti.createBenthosBatch.field.sampleCategory= tutti.createBenthosBatch.field.sampleCategory.tip= -tutti.createBenthosBatch.field.sortedUnsortedCategory= -tutti.createBenthosBatch.field.sortedUnsortedCategory.tip= tutti.createBenthosBatch.field.species= tutti.createBenthosBatch.field.species.tip= tutti.createBenthosBatch.title= @@ -219,8 +208,6 @@ tutti.createSpeciesBatch.field.batchWeight.tip= tutti.createSpeciesBatch.field.sampleCategory= tutti.createSpeciesBatch.field.sampleCategory.tip= -tutti.createSpeciesBatch.field.sortedUnsortedCategory= -tutti.createSpeciesBatch.field.sortedUnsortedCategory.tip= tutti.createSpeciesBatch.field.species= tutti.createSpeciesBatch.field.species.tip= tutti.createSpeciesBatch.title= @@ -240,10 +227,6 @@ tutti.dbMabager.title= tutti.dbManager.action.chooseDbExportFile= tutti.dbManager.action.chooseDbFile= -tutti.dbManager.action.closeDb= -tutti.dbManager.action.closeDb.deleteCache.error= -tutti.dbManager.action.closeDb.mnemonic= -tutti.dbManager.action.closeDb.tip= tutti.dbManager.action.exportAndCleanDb= tutti.dbManager.action.exportAndCleanDb.mnemonic= tutti.dbManager.action.exportAndCleanDb.tip= @@ -256,9 +239,7 @@ tutti.dbManager.action.installDb= tutti.dbManager.action.installDb.mnemonic= tutti.dbManager.action.installDb.tip= -tutti.dbManager.action.openDb= tutti.dbManager.action.openDb.couldNotOpen= -tutti.dbManager.action.openDb.mnemonic= tutti.dbManager.action.openDb.tip= tutti.dbManager.action.upgradeDb= tutti.dbManager.action.upgradeDb.check= @@ -370,22 +351,12 @@ tutti.editBenthosBatch.split.weightNotNull.help= tutti.editBenthosBatch.split.weightNotNull.message= tutti.editBenthosBatch.split.weightNotNull.title= -tutti.editBenthosBatch.table.header.ageCategory= -tutti.editBenthosBatch.table.header.ageCategory.tip= tutti.editBenthosBatch.table.header.comment= tutti.editBenthosBatch.table.header.comment.tip= tutti.editBenthosBatch.table.header.computedNumber= tutti.editBenthosBatch.table.header.computedNumber.tip= tutti.editBenthosBatch.table.header.file= tutti.editBenthosBatch.table.header.file.tip= -tutti.editBenthosBatch.table.header.maturityCategory= -tutti.editBenthosBatch.table.header.maturityCategory.tip= -tutti.editBenthosBatch.table.header.sexCategory= -tutti.editBenthosBatch.table.header.sexCategory.tip= -tutti.editBenthosBatch.table.header.sizeCategory= -tutti.editBenthosBatch.table.header.sizeCategory.tip= -tutti.editBenthosBatch.table.header.sortedUnsortedCategory= -tutti.editBenthosBatch.table.header.sortedUnsortedCategory.tip= tutti.editBenthosBatch.table.header.species= tutti.editBenthosBatch.table.header.species.tip= tutti.editBenthosBatch.table.header.toConfirm= @@ -437,16 +408,8 @@ tutti.editCatchBatch.action.cancelEditCatchBatch.mnemonic= tutti.editCatchBatch.action.cancelEditCatchBatch.tip= tutti.editCatchBatch.action.computeWeights= -tutti.editCatchBatch.action.computeWeights.error.incoherentCategoryWeight= -tutti.editCatchBatch.action.computeWeights.error.incoherentParentCategoryWeight= -tutti.editCatchBatch.action.computeWeights.error.incoherentRowWeightCategory= -tutti.editCatchBatch.action.computeWeights.error.incoherentRowWeightFrequency= -tutti.editCatchBatch.action.computeWeights.error.incoherentSpeciesTotalSorted= -tutti.editCatchBatch.action.computeWeights.error.incoherentTotal= -tutti.editCatchBatch.action.computeWeights.error.noWeight= tutti.editCatchBatch.action.computeWeights.mnemonic= tutti.editCatchBatch.action.computeWeights.replaceTotalSortedWeight.help= -tutti.editCatchBatch.action.computeWeights.replaceTotalSortedWeight.message= tutti.editCatchBatch.action.computeWeights.replaceTotalSortedWeight.message.benthos= tutti.editCatchBatch.action.computeWeights.replaceTotalSortedWeight.message.species= tutti.editCatchBatch.action.computeWeights.replaceTotalSortedWeight.title= @@ -512,8 +475,6 @@ tutti.editCruise.field.beginDate.tip= tutti.editCruise.field.comment= tutti.editCruise.field.comment.tip= -tutti.editCruise.field.country= -tutti.editCruise.field.country.tip= tutti.editCruise.field.departureLocation= tutti.editCruise.field.departureLocation.tip= tutti.editCruise.field.endDate= @@ -555,9 +516,6 @@ tutti.editFishingOperation.action.deleteFishingOperation.tip= tutti.editFishingOperation.action.deleteFishingOperation.title= tutti.editFishingOperation.action.editFishingOperation.tip= -tutti.editFishingOperation.action.importCasino= -tutti.editFishingOperation.action.importCasino.mnemonic= -tutti.editFishingOperation.action.importCasino.tip= tutti.editFishingOperation.action.resetEditFishingOperation= tutti.editFishingOperation.action.resetEditFishingOperation.mnemonic= tutti.editFishingOperation.action.resetEditFishingOperation.tip= @@ -722,20 +680,6 @@ tutti.editMarineLitterBatch.table.header.number.tip= tutti.editMarineLitterBatch.table.header.weight= tutti.editMarineLitterBatch.table.header.weight.tip= -tutti.editPlanktonBatch.table.header.comment= -tutti.editPlanktonBatch.table.header.comment.tip= -tutti.editPlanktonBatch.table.header.file= -tutti.editPlanktonBatch.table.header.file.tip= -tutti.editPlanktonBatch.table.header.sampleWeight= -tutti.editPlanktonBatch.table.header.sampleWeight.tip= -tutti.editPlanktonBatch.table.header.speciesByCode= -tutti.editPlanktonBatch.table.header.speciesByCode.tip= -tutti.editPlanktonBatch.table.header.speciesByGenusCode= -tutti.editPlanktonBatch.table.header.speciesByGenusCode.tip= -tutti.editPlanktonBatch.table.header.toConfirm= -tutti.editPlanktonBatch.table.header.toConfirm.tip= -tutti.editPlanktonBatch.table.header.weight= -tutti.editPlanktonBatch.table.header.weight.tip= tutti.editProgram.action.closeEditProgram= tutti.editProgram.action.closeEditProgram.mnemonic= tutti.editProgram.action.closeEditProgram.tip= @@ -816,20 +760,12 @@ tutti.editProtocol.tab.caracteristic.vesselUseFeature= tutti.editProtocol.tab.info= tutti.editProtocol.tab.species= -tutti.editProtocol.table.header.age= -tutti.editProtocol.table.header.age.tip= tutti.editProtocol.table.header.calcifySample= tutti.editProtocol.table.header.calcifySample.tip= tutti.editProtocol.table.header.countIfNoFrequency= tutti.editProtocol.table.header.countIfNoFrequency.tip= tutti.editProtocol.table.header.lengthStep= tutti.editProtocol.table.header.lengthStep.tip= -tutti.editProtocol.table.header.maturity= -tutti.editProtocol.table.header.maturity.tip= -tutti.editProtocol.table.header.sex= -tutti.editProtocol.table.header.sex.tip= -tutti.editProtocol.table.header.size= -tutti.editProtocol.table.header.size.tip= tutti.editProtocol.table.header.speciesReferenceTaxonId= tutti.editProtocol.table.header.speciesReferenceTaxonId.tip= tutti.editProtocol.table.header.speciesSurveyCode= @@ -862,11 +798,7 @@ tutti.editSpeciesBatch.action.exportMultiPost.success= tutti.editSpeciesBatch.action.exportMultiPost.tip= tutti.editSpeciesBatch.action.importMultiPost= -tutti.editSpeciesBatch.action.importMultiPost.destinationFile.title= tutti.editSpeciesBatch.action.importMultiPost.mnemonic= -tutti.editSpeciesBatch.action.importMultiPost.notImportedSpecies= -tutti.editSpeciesBatch.action.importMultiPost.notImportedSpeciesDialog.message= -tutti.editSpeciesBatch.action.importMultiPost.notImportedSpeciesDialog.title= tutti.editSpeciesBatch.action.importMultiPost.sourceFile.button= tutti.editSpeciesBatch.action.importMultiPost.sourceFile.title= tutti.editSpeciesBatch.action.importMultiPost.success= @@ -876,8 +808,6 @@ tutti.editSpeciesBatch.action.importPupitri.existingData.message= tutti.editSpeciesBatch.action.importPupitri.existingData.title= tutti.editSpeciesBatch.action.importPupitri.mnemonic= -tutti.editSpeciesBatch.action.importPupitri.noProtocol.message= -tutti.editSpeciesBatch.action.importPupitri.noProtocol.title= tutti.editSpeciesBatch.action.importPupitri.success= tutti.editSpeciesBatch.action.importPupitri.tip= tutti.editSpeciesBatch.action.removeBatch= @@ -919,14 +849,9 @@ tutti.editSpeciesBatch.split.weightNotNull.help= tutti.editSpeciesBatch.split.weightNotNull.message= tutti.editSpeciesBatch.split.weightNotNull.title= -tutti.editSpeciesBatch.table.header.ageCategory= tutti.editSpeciesBatch.table.header.comment= tutti.editSpeciesBatch.table.header.computedNumber= tutti.editSpeciesBatch.table.header.file= -tutti.editSpeciesBatch.table.header.maturityCategory= -tutti.editSpeciesBatch.table.header.sexCategory= -tutti.editSpeciesBatch.table.header.sizeCategory= -tutti.editSpeciesBatch.table.header.sortedUnsortedCategory= tutti.editSpeciesBatch.table.header.species= tutti.editSpeciesBatch.table.header.toConfirm= tutti.editSpeciesBatch.table.header.weight= @@ -940,7 +865,6 @@ tutti.editSpeciesFrequencies.action.save.mnemonic= tutti.editSpeciesFrequencies.action.save.tip= tutti.editSpeciesFrequencies.batchCategory= -tutti.editSpeciesFrequencies.batchCategoryValue= tutti.editSpeciesFrequencies.batchSpecies= tutti.editSpeciesFrequencies.error.length.doublon= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic= @@ -987,7 +911,6 @@ tutti.exportCruiseForSumatra.title.choose.exportFile= tutti.exportDb.closeDb= tutti.exportDb.createArchive= -tutti.exportDb.deleteFiles= tutti.exportDb.openDb= tutti.exportDb.reloadApplication= tutti.exportProgram.action.success= @@ -1012,7 +935,6 @@ tutti.flash.info.caractristic.exported.from.protocol= tutti.flash.info.cruiseCreated= tutti.flash.info.cruiseSaved= -tutti.flash.info.db.closed= tutti.flash.info.db.exported= tutti.flash.info.db.exported.and.clean= tutti.flash.info.db.imported= @@ -1028,7 +950,6 @@ tutti.flash.info.species.imported.in.protocol.severalReplaced= tutti.flash.info.species.remove.from.protocol= tutti.flash.info.species.replaced= -tutti.gearCaracteristicsEditorEditorTable.table.header.key= tutti.gearCaracteristicsEditorTable.table.header.key= tutti.gearCaracteristicsEditorTable.table.header.value= tutti.gearUseFeatureTable.action.removeCaracteristic= @@ -1052,9 +973,6 @@ tutti.importPupitri.title= tutti.importPupitri.trunkFile.extension= tutti.importPupitri.trunkFile.extension.description= -tutti.io.directory.delete.error= -tutti.label.catches.planktonTotalSampleWeight= -tutti.label.catches.planktonTotalWeight= tutti.label.tab.accidental= tutti.label.tab.benthos= tutti.label.tab.catches= @@ -1062,11 +980,7 @@ tutti.label.tab.fishingOperation= tutti.label.tab.individualObservations= tutti.label.tab.marineLitter= -tutti.label.tab.plancton= tutti.label.tab.species= -tutti.legend.frequencyConfiguration= -tutti.legend.splitBenthosBatchConfiguration= -tutti.legend.splitSpeciesBatchConfiguration= tutti.main.action.about= tutti.main.action.about.mnemonic= tutti.main.action.about.tip= @@ -1143,22 +1057,18 @@ tutti.main.title.selectedCruise= tutti.main.title.selectedProgram= tutti.main.title.selectedProtocol= -tutti.manageTemporaryReferential.action.chooseReferentialGearFile= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.success= -tutti.manageTemporaryReferential.action.chooseReferentialPersonFile= tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export= tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import= tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.success= -tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile= tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export= tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import= tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.success= -tutti.manageTemporaryReferential.action.chooseReferentialVesselFile= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import= @@ -1210,14 +1120,12 @@ tutti.multiPostImportLog.title= tutti.multiPostImportLog.totalSortedWeight= tutti.multiPostImportLog.totalWeight= -tutti.property.= tutti.property.get.error= tutti.property.set.error= tutti.sampleOrder.caracteristicNotFound= tutti.selectBenthos.title= tutti.selectCruise.action.chooseCruiseExportFile= tutti.selectCruise.action.chooseProgramExportFile= -tutti.selectCruise.action.chooseProtocolFile= tutti.selectCruise.action.cloneProtocol= tutti.selectCruise.action.cloneProtocol.tip= tutti.selectCruise.action.deleteProtocol= @@ -1326,29 +1234,20 @@ tutti.updateApplication.message.success= tutti.updateApplication.noUpdate= tutti.updateApplication.title.success= -tutti.v.action.importMultiPost.mnemonic= tutti.validateCruise.action.export.all.chooseFile.defaultFile= tutti.validateCruise.action.export.all.chooseFile.label= tutti.validateCruise.action.export.all.chooseFile.title= tutti.validateCruise.action.export.all.success= tutti.validateCruise.action.export.all.tip= -tutti.validateCruise.action.export.chooseFile.defaultFile= -tutti.validateCruise.action.export.chooseFile.label= -tutti.validateCruise.action.export.chooseFile.title= tutti.validateCruise.action.export.operation.chooseFile.defaultFile= tutti.validateCruise.action.export.operation.chooseFile.label= tutti.validateCruise.action.export.operation.chooseFile.title= tutti.validateCruise.action.export.operation.success= tutti.validateCruise.action.export.operation.tip= -tutti.validateCruise.action.export.tip= -tutti.validateCruise.action.refresh.all.tip= -tutti.validateCruise.navigation.action.export= tutti.validateCruise.navigation.action.export.all.tip= tutti.validateCruise.navigation.action.export.operation= tutti.validateCruise.navigation.action.export.operation.mnemonic= tutti.validateCruise.navigation.action.export.operation.tip= -tutti.validateCruise.navigation.action.export.tip= -tutti.validateCruise.navigation.action.refresh.all.tip= tutti.validateCruise.navigation.title= tutti.validator.error.benthosFrequency.lengthStepCaracteristic.required= tutti.validator.error.benthosFrequency.oneRowRequired= @@ -1367,10 +1266,6 @@ tutti.validator.error.createSpeciesBatch.sortedUnsortedCategory.required= tutti.validator.error.createSpeciesBatch.species.required= tutti.validator.error.createSpeciesBatch.speciesAndCategory.notAvailable= -tutti.validator.error.fishingOperation.date.end.required= -tutti.validator.error.fishingOperation.dates.endOutOfCruiseDates= -tutti.validator.error.fishingOperation.dates.startOutOfCruiseDates= -tutti.validator.error.fishingOperation.dates.wrongTime= tutti.validator.error.latitude.end.required= tutti.validator.error.latitude.start.required= tutti.validator.error.longitude.end.required= 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-07-24 17:37:47 UTC (rev 1154) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-07-25 14:45:48 UTC (rev 1155) @@ -64,7 +64,6 @@ tutti.commentEditor.none.tip=Pas de commentaire tutti.commentEditor.title=Commentaire tutti.common.askBeforeDelete.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour ne pas supprimer</li><li><strong>OK</strong> pour supprimer l'objet en question</li></ul> -tutti.common.askBeforeDelete.title=Suppression de %s tutti.common.askCancelEditBeforeLeaving.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour rester sur cet écran</li><li><strong>OK</strong> pour quitter l'écran en abandonnant les modifications</li></ul> tutti.common.askCancelEditBeforeLeaving.title=Modifications non enregistrées mais invalides tutti.common.askOverwriteFile.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour ne pas écraser le fichier et annuler l'opération</li><li><strong>Oui</strong> pour écraser le fichier et continuer l'opération</li></ul> @@ -84,8 +83,6 @@ tutti.common.file.tuttiMarineLitter=Fichier d'import/export des lots de déchets tutti.common.file.tuttiSpecies=Fichier d'import/export des lots d'espèces tutti.common.file.zip=Extension d'une archive zip -tutti.common.selected.fishingOperation=l'opération de pêche sélectionnée -tutti.common.selected.protocol=le protocole sélectionné tutti.common.validate=Valider tutti.common.validate.mnemonic=V tutti.config.action.reload.actions=Recharger les actions @@ -159,8 +156,6 @@ tutti.createBenthosBatch.field.batchWeight.tip=Poids du lot (kg) tutti.createBenthosBatch.field.sampleCategory= tutti.createBenthosBatch.field.sampleCategory.tip= -tutti.createBenthosBatch.field.sortedUnsortedCategory=V / HV -tutti.createBenthosBatch.field.sortedUnsortedCategory.tip=Catégorie Vrac / Hors Vrac tutti.createBenthosBatch.field.species=Espèce du lot tutti.createBenthosBatch.field.species.tip=Espèce du lot tutti.createBenthosBatch.title=Créer un lot @@ -213,8 +208,6 @@ tutti.createSpeciesBatch.field.batchWeight.tip=Poids du lot (non obligatoire à ce stade) tutti.createSpeciesBatch.field.sampleCategory= tutti.createSpeciesBatch.field.sampleCategory.tip= -tutti.createSpeciesBatch.field.sortedUnsortedCategory=V / HV -tutti.createSpeciesBatch.field.sortedUnsortedCategory.tip=Vrac ou Hors Vrac tutti.createSpeciesBatch.field.species=Espèce du lot tutti.createSpeciesBatch.field.species.tip=Code campagne ou Code Rubin – Nom scientifique du lot à créer tutti.createSpeciesBatch.title=Créer un lot @@ -234,10 +227,6 @@ tutti.dbMabager.title=Gérer les bases de données tutti.dbManager.action.chooseDbExportFile=Exporter la base de données tutti.dbManager.action.chooseDbFile=Choisir la base à importer -tutti.dbManager.action.closeDb=Fermer -tutti.dbManager.action.closeDb.deleteCache.error=Erreur lors de la suppression du dossier de cache -tutti.dbManager.action.closeDb.mnemonic=e -tutti.dbManager.action.closeDb.tip=Fermer la base de données en cours d'utilisation tutti.dbManager.action.exportAndCleanDb=Exporter et supprimer tutti.dbManager.action.exportAndCleanDb.mnemonic=s tutti.dbManager.action.exportAndCleanDb.tip=Exporter la base de données au format zip puis supprimer les fichiers de l'application @@ -250,9 +239,7 @@ tutti.dbManager.action.installDb=Installer tutti.dbManager.action.installDb.mnemonic=n tutti.dbManager.action.installDb.tip=Télécharger puis installer la base de données -tutti.dbManager.action.openDb=Ouvrir tutti.dbManager.action.openDb.couldNotOpen=Impossible d'ouvrir la base, elle est peut-être déjà utilisée par une autre application (ou une autre instance de l'application) -tutti.dbManager.action.openDb.mnemonic=O tutti.dbManager.action.openDb.tip=Ouvrir la base de données tutti.dbManager.action.upgradeDb=Mettre à jour les référentiels tutti.dbManager.action.upgradeDb.check=Recherche des mises à jour de la base @@ -364,22 +351,12 @@ tutti.editBenthosBatch.split.weightNotNull.help=Que voulez-vous faire ? <ul><li><strong>Annuler</strong> pour ne pas catégoriser le lot et garder le poids sous-échantilloné</li><li><strong>OK</strong> pour catégoriser le lot et supprimer le poids sous-échantillonné</li></ul>. tutti.editBenthosBatch.split.weightNotNull.message=Pour catégoriser un lot, il ne doit pas avoir de poids sous-échantillonné. tutti.editBenthosBatch.split.weightNotNull.title=Poids sous-échantillonné non nul -tutti.editBenthosBatch.table.header.ageCategory=Age (kg) -tutti.editBenthosBatch.table.header.ageCategory.tip=Age des individus dans le lot (pour les coquilles St Jacques) tutti.editBenthosBatch.table.header.comment=Commentaire tutti.editBenthosBatch.table.header.comment.tip=Commentaire sur la ligne tutti.editBenthosBatch.table.header.computedNumber=Tailles/Poids ou Nombre tutti.editBenthosBatch.table.header.computedNumber.tip=Tailles/Poids ou Nombre d'individus dans le lot tutti.editBenthosBatch.table.header.file=Pièces jointes tutti.editBenthosBatch.table.header.file.tip=Pièces jointes associées à la ligne -tutti.editBenthosBatch.table.header.maturityCategory=Maturité -tutti.editBenthosBatch.table.header.maturityCategory.tip=Maturité des individus du lot -tutti.editBenthosBatch.table.header.sexCategory=Sexe (kg) -tutti.editBenthosBatch.table.header.sexCategory.tip=Sexe des individus du lot -tutti.editBenthosBatch.table.header.sizeCategory=Class. Tri (kg) -tutti.editBenthosBatch.table.header.sizeCategory.tip=Classe de taille (petits, gros, …) des individus du lot -tutti.editBenthosBatch.table.header.sortedUnsortedCategory=V/HV (kg) -tutti.editBenthosBatch.table.header.sortedUnsortedCategory.tip=V \= Vrac ; HV \= Hors Vrac (espèces rares, de grande taille etc. sorties de la capture) tutti.editBenthosBatch.table.header.species=Espèce tutti.editBenthosBatch.table.header.species.tip=Code campagne ou code Rubin – Nom scientifique tutti.editBenthosBatch.table.header.toConfirm=A Confirmer @@ -539,9 +516,6 @@ tutti.editFishingOperation.action.deleteFishingOperation.tip=Supprimer l'opération de pêche sélectionnée tutti.editFishingOperation.action.deleteFishingOperation.title=Supprimer l'opération de pêche sélectionnée tutti.editFishingOperation.action.editFishingOperation.tip=Éditer l'opération de pêche -tutti.editFishingOperation.action.importCasino=Import Casino -tutti.editFishingOperation.action.importCasino.mnemonic=I -tutti.editFishingOperation.action.importCasino.tip=Import Casino tutti.editFishingOperation.action.resetEditFishingOperation=Réinitialiser tutti.editFishingOperation.action.resetEditFishingOperation.mnemonic=R tutti.editFishingOperation.action.resetEditFishingOperation.tip=Réinitialiser l'édition du trait @@ -786,20 +760,12 @@ tutti.editProtocol.tab.caracteristic.vesselUseFeature=Autres caractéristiques tutti.editProtocol.tab.info=Informations générales tutti.editProtocol.tab.species=Espèces -tutti.editProtocol.table.header.age=Age -tutti.editProtocol.table.header.age.tip=Catégorisation sur l'âge ? (usage pour les coquilles st jacques par exemple) tutti.editProtocol.table.header.calcifySample=Prélèvement de pièces calcifiées tutti.editProtocol.table.header.calcifySample.tip=Prélèvement de pièces calcifiées (pour les données individuelles) tutti.editProtocol.table.header.countIfNoFrequency=Dénombrement tutti.editProtocol.table.header.countIfNoFrequency.tip=L'espèce doit elle être dénombrée ? tutti.editProtocol.table.header.lengthStep=Mode de mensuration tutti.editProtocol.table.header.lengthStep.tip=Comment mesurer les classes de taille ? (si vide alors pas de mesure) -tutti.editProtocol.table.header.maturity=Maturité -tutti.editProtocol.table.header.maturity.tip=Catégorisation sur la maturité ? -tutti.editProtocol.table.header.sex=Sexe -tutti.editProtocol.table.header.sex.tip=L'espèce doit elle être sexée ? -tutti.editProtocol.table.header.size=Catégorie Tri -tutti.editProtocol.table.header.size.tip=Catégorisation en gros / petit etc. ? tutti.editProtocol.table.header.speciesReferenceTaxonId=Espèce tutti.editProtocol.table.header.speciesReferenceTaxonId.tip=Code Rubin – Nom scientifique tutti.editProtocol.table.header.speciesSurveyCode=Code campagne @@ -883,14 +849,9 @@ tutti.editSpeciesBatch.split.weightNotNull.help=Que voulez-vous faire ? <ul><li><strong>Annuler</strong> pour ne pas catégoriser le lot et garder le poids sous-échantilloné</li><li><strong>OK</strong> pour catégoriser le lot et supprimer le poids sous-échantillonné</li></ul>. tutti.editSpeciesBatch.split.weightNotNull.message=Pour catégoriser un lot, il ne doit pas avoir de poids sous-échantillonné tutti.editSpeciesBatch.split.weightNotNull.title=Poids sous-échantillonné non nul -tutti.editSpeciesBatch.table.header.ageCategory=Age (kg) tutti.editSpeciesBatch.table.header.comment=Commentaire tutti.editSpeciesBatch.table.header.computedNumber=Tailles/Poids ou Nombre tutti.editSpeciesBatch.table.header.file=Pièces jointes -tutti.editSpeciesBatch.table.header.maturityCategory=Maturité (kg) -tutti.editSpeciesBatch.table.header.sexCategory=Sexe (kg) -tutti.editSpeciesBatch.table.header.sizeCategory=Class. Tri -tutti.editSpeciesBatch.table.header.sortedUnsortedCategory=V/HV (kg) tutti.editSpeciesBatch.table.header.species=Espèce tutti.editSpeciesBatch.table.header.toConfirm=A Confirmer tutti.editSpeciesBatch.table.header.weight=Poids sous-échantillonné (kg) @@ -974,7 +935,6 @@ tutti.flash.info.caractristic.exported.from.protocol=Caractéristiques du protocole exportées dans le fichier <strong>%s</strong>. tutti.flash.info.cruiseCreated=La campagne <strong>%s</strong> a été créée. tutti.flash.info.cruiseSaved=La campagne <strong>%s</strong> a été enregistrée. -tutti.flash.info.db.closed=La base de données <strong>%s</strong> est fermée. tutti.flash.info.db.exported=Base exportée dans l'archive <strong>%s</strong>. tutti.flash.info.db.exported.and.clean=Base exportée dans l'archive <strong>%s</strong>. tutti.flash.info.db.imported=La base de données <strong>%s</strong> est importée. @@ -1013,9 +973,6 @@ tutti.importPupitri.title=Import Pupitri tutti.importPupitri.trunkFile.extension=tnk tutti.importPupitri.trunkFile.extension.description=Fichier du trémie (.tnk) -tutti.io.directory.delete.error=Erreur lors de la suppression du contenu du dossier %s -tutti.label.catches.planktonTotalSampleWeight=Poids total échantillonné (kg) -tutti.label.catches.planktonTotalWeight=Poids total (kg) tutti.label.tab.accidental=Captures accidentelles tutti.label.tab.benthos=Benthos tutti.label.tab.catches=Captures @@ -1023,11 +980,7 @@ tutti.label.tab.fishingOperation=Trait tutti.label.tab.individualObservations=Observations individuelles tutti.label.tab.marineLitter=Macro déchets -tutti.label.tab.plancton=Plancton tutti.label.tab.species=Espèces -tutti.legend.frequencyConfiguration=Configuration -tutti.legend.splitBenthosBatchConfiguration=Configuration -tutti.legend.splitSpeciesBatchConfiguration=Configuration tutti.main.action.about=À propos tutti.main.action.about.mnemonic=À tutti.main.action.about.tip=À Propos @@ -1295,7 +1248,6 @@ tutti.validateCruise.navigation.action.export.operation=Exporter tutti.validateCruise.navigation.action.export.operation.mnemonic=x tutti.validateCruise.navigation.action.export.operation.tip=Exporter les messages de validation de l'opération -tutti.validateCruise.navigation.action.refresh.all.tip=Rafraîchir les messages de validation de la campagne tutti.validateCruise.navigation.title=Traits tutti.validator.error.benthosFrequency.lengthStepCaracteristic.required=La classe de taille est obligatoire tutti.validator.error.benthosFrequency.oneRowRequired=Au moins une classe de taille doit être observée @@ -1314,10 +1266,6 @@ tutti.validator.error.createSpeciesBatch.sortedUnsortedCategory.required=La catégorie Vrac / Hors Vrac est obligatoire tutti.validator.error.createSpeciesBatch.species.required=L'espèce est obligatoire tutti.validator.error.createSpeciesBatch.speciesAndCategory.notAvailable=Couple (espèce - Vrac/Hors Vrac) déjà utilisée -tutti.validator.error.fishingOperation.date.end.required=La date de la fin du trait est obligatoire -tutti.validator.error.fishingOperation.dates.endOutOfCruiseDates=La date de fin est en dehors des dates de la campagne -tutti.validator.error.fishingOperation.dates.startOutOfCruiseDates=La date de début est en dehors des dates de la campagne -tutti.validator.error.fishingOperation.dates.wrongTime=La durée du trait dépasse 45 minutes ou est inférieure à 20 minutes, merci de vérifier les dates/heures du trait tutti.validator.error.latitude.end.required=La latitude de fin de traîne est obligatoire tutti.validator.error.latitude.start.required=La latitude de début de traîne est obligatoire tutti.validator.error.longitude.end.required=La longitude de fin de traîne est obligatoire