r311 - in trunk: echobase-entities/src/main/java/fr/ifremer/echobase echobase-entities/src/main/java/fr/ifremer/echobase/entities/data echobase-entities/src/main/resources/i18n echobase-entities/src/main/xmi echobase-services/src/main/java/fr/ifremer/echobase/services echobase-services/src/main/java/fr/ifremer/echobase/services/configurations echobase-services/src/main/java/fr/ifremer/echobase/services/csv echobase-services/src/main/resources/i18n echobase-tools/src/main/java/fr/ifremer/e
Author: tchemit Date: 2012-02-09 18:07:50 +0100 (Thu, 09 Feb 2012) New Revision: 311 Url: http://forge.codelutin.com/repositories/revision/echobase/311 Log: import des nouvelles donn?\195?\169es bien avanc?\195?\169 Added: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/OperationImpl.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModelRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModelRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModelRow.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureResults-ConfigureResults-modeRegion-validation.xml Removed: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModelRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModelRow.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetTransits.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVessels.java Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBasePredicates.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/VoyageImpl.java trunk/echobase-entities/src/main/resources/i18n/echobase-entities_fr_FR.properties trunk/echobase-entities/src/main/xmi/echobase.zargo trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractImportDataService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AccousticDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CatchesDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CommonDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ImportException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/OperationImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ResultsImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AccousticDataImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/CatchesDataImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/OperationImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ResultsImportMode.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModelRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/RegionCellAssociationImportModelRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransectImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransectImportModelRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransitImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransitImportModelRow.java trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearMetadataLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationLoader.java trunk/echobase-tools/src/test/resources/csv/new/input-OperationMetadata.csv trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractLaunchImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAccousticData.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesData.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureOperation.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureResults.java trunk/echobase-ui/src/main/resources/config/struts-importData.xml trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesData-validation.xml trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureAccousticData.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureCatchesData.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureOperation.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureResults.jsp trunk/echobase-ui/src/main/webapp/js/gridHelper.js trunk/src/doc/reunions/reunion-2012-02-08.txt Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2012-02-09 17:07:50 UTC (rev 311) @@ -26,6 +26,7 @@ import com.google.common.base.Function; import fr.ifremer.echobase.entities.data.DataProcessing; import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AcousticInstrument; import fr.ifremer.echobase.entities.references.AreaOfOperation; @@ -208,10 +209,10 @@ } }; - public static final Function<Gear, String> GEAR_NAME = new Function<Gear, String>() { + public static final Function<Gear, String> GEAR_GEAR_CODE = new Function<Gear, String>() { @Override public String apply(Gear input) { - return input.getName(); + return input.getGearCode(); } }; @@ -264,13 +265,20 @@ } }; - public static final Function<GearMetadata, String> GEAR_METADATA_TYPE = new Function<GearMetadata, String>() { + public static final Function<GearMetadata, String> GEAR_METADATA_NAME = new Function<GearMetadata, String>() { @Override public String apply(GearMetadata input) { - return input.getType(); + return input.getName(); } }; + public static final Function<Transect, Vessel> TRANSECT_BY_VESSEL = new Function<Transect, Vessel>() { + @Override + public Vessel apply(Transect input) { + return input.getVessel(); + } + }; + public static String getSpeciesCategoryKey(Species species, SizeCategory sizeCategory, SexCategory sexCategory) { String key = species.getBaracoudaCode(); if (sizeCategory != null) { Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBasePredicates.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBasePredicates.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBasePredicates.java 2012-02-09 17:07:50 UTC (rev 311) @@ -26,6 +26,7 @@ import com.google.common.base.Predicate; import fr.ifremer.echobase.entities.references.AcousticInstrument; import fr.ifremer.echobase.entities.references.Echotype; +import fr.ifremer.echobase.entities.references.SizeCategory; /** * Keep usefull precidates on model. @@ -42,7 +43,14 @@ } }; - public static EchotypeByNamePredicate newEchotypeByNamePredicate(String name) { + public static final Predicate<SizeCategory> IS_HORS_VRAC = new Predicate<SizeCategory>() { + @Override + public boolean apply(SizeCategory input) { + return input.getName().toUpperCase().equals("H"); + } + }; + + public static Predicate<Echotype> newEchotypeByNamePredicate(String name) { return new EchotypeByNamePredicate(name); } Added: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/OperationImpl.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/OperationImpl.java (rev 0) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/OperationImpl.java 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,49 @@ +/* + * #%L + * EchoBase :: Entities + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.entities.data; + +import fr.ifremer.echobase.entities.references.SampleType; +import fr.ifremer.echobase.entities.references.SpeciesCategory; + +public class OperationImpl extends OperationAbstract { + + private static final long serialVersionUID = 1L; + + @Override + public Sample getSample(SpeciesCategory speciesCategory, + SampleType sampleType) { + + Sample result = null; + if (!isSampleEmpty()) { + for (Sample s : sample) { + if (sampleType.equals(s.getSampleType()) && + speciesCategory.equals(s.getSpeciesCategory())) { + result = s; + break; + } + } + } + return result; + } +} //OperationImpl Property changes on: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/OperationImpl.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/VoyageImpl.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/VoyageImpl.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/data/VoyageImpl.java 2012-02-09 17:07:50 UTC (rev 311) @@ -24,8 +24,16 @@ package fr.ifremer.echobase.entities.data; import com.google.common.base.Preconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import fr.ifremer.echobase.EchoBaseFunctions; +import fr.ifremer.echobase.entities.references.Vessel; +import java.util.Collection; import java.util.Date; +import java.util.List; +import java.util.Set; /** * Default implementation of {@link Voyage}. @@ -64,4 +72,57 @@ } return result; } + + @Override + public Transit getTransit(Date startTime) { + + Preconditions.checkNotNull(startTime); + Transit result = null; + if (!isTransitEmpty()) { + for (Transit t : getTransit()) { + Date transitEndTime = t.getEndTime(); + if (transitEndTime.before(startTime)) { + // transit before required range + continue; + } + + // ok transit contains required range + result = t; + break; + } + } + return result; + } + + @Override + public Set<Vessel> getAllVessels() { + + Set<Vessel> result = Sets.newHashSet(); + + for (Transit transit : getTransit()) { + + Collection<Vessel> vesselsOfTransit = + Collections2.transform( + transit.getTransect(), + EchoBaseFunctions.TRANSECT_BY_VESSEL); + result.addAll(vesselsOfTransit); + } + return result; + } + + @Override + public Collection<Operation> getOperations(Vessel vessel) { + + Collection<Operation> result = Lists.newArrayList(); + + if (isTransitEmpty()) { + for (Transit t : transit) { + + Transect transect = t.getTransect(vessel); + List<Operation> operations = transect.getOperation(); + result.addAll(operations); + } + } + return result; + } } Modified: trunk/echobase-entities/src/main/resources/i18n/echobase-entities_fr_FR.properties =================================================================== --- trunk/echobase-entities/src/main/resources/i18n/echobase-entities_fr_FR.properties 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-entities/src/main/resources/i18n/echobase-entities_fr_FR.properties 2012-02-09 17:07:50 UTC (rev 311) @@ -89,6 +89,7 @@ echobase.common.gearCharacteristic= echobase.common.gearCharacteristicValue= echobase.common.gearClassification= +echobase.common.gearCode= echobase.common.gearMetadata= echobase.common.gearMetadataValue= echobase.common.gearShootingEndLatitude= @@ -141,8 +142,9 @@ echobase.common.metadata=Metadata echobase.common.metadataGroup= echobase.common.method= +echobase.common.midHaulLatitude= +echobase.common.midHaulLongitude= echobase.common.midHauleLatitude= -echobase.common.midHauleLongitude= echobase.common.minDepth= echobase.common.minFishLength= echobase.common.minLatitude= @@ -185,6 +187,7 @@ echobase.common.referenceDatum=ReferenceDatum echobase.common.referenceDatumType= echobase.common.referencingMethod= +echobase.common.regionCell= echobase.common.relatedActivity= echobase.common.report= echobase.common.result= Modified: trunk/echobase-entities/src/main/xmi/echobase.zargo =================================================================== (Binary files differ) Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractImportDataService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractImportDataService.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractImportDataService.java 2012-02-09 17:07:50 UTC (rev 311) @@ -23,20 +23,28 @@ */ package fr.ifremer.echobase.services; +import com.google.common.base.Charsets; import com.google.common.base.Function; import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.InputFile; import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EntityModificationLog; +import fr.ifremer.echobase.entities.references.SexCategory; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.entities.references.SpeciesCategory; +import fr.ifremer.echobase.entities.references.SpeciesCategoryDAO; import fr.ifremer.echobase.services.configurations.AbstractImportConfiguration; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import java.io.BufferedReader; +import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; +import java.io.InputStreamReader; import java.io.Reader; import java.util.List; import java.util.Map; @@ -49,13 +57,68 @@ */ public abstract class AbstractImportDataService<M extends AbstractImportConfiguration> extends EchoBaseServiceSupport { - public abstract Map<InputFile, CsvImportResult> startImport(M configuration, - EchoBaseUser user) throws ImportException; + public final Map<InputFile, CsvImportResult> doImport(M configuration, + EchoBaseUser user) throws ImportException { + try { + Map<InputFile, CsvImportResult> result = startImport(configuration, + user); + + // do commit + commitTransaction("Could not execute import " + getImportLabel()); + return result; + } catch (ImportException e) { + throw e; + } catch (Exception e) { + throw new ImportException("Could not do import " + e.getMessage(), e); + } + } + + protected abstract String getImportLabel(); + + protected abstract Map<InputFile, CsvImportResult> startImport(M configuration, + EchoBaseUser user) throws ImportException; + + protected void addResultAndLog(Map<InputFile, CsvImportResult> result, + InputFile inputFile, + CsvImportResult importResult, + EchoBaseUser user) { + + if (importResult.getNumberCreated() > 0 || + importResult.getNumberUpdated() > 0) { + + result.put(inputFile, importResult); + + String importType = getImportLabel(); + + StringBuilder description = new StringBuilder(); + description.append("Depuis Fichier ").append(inputFile.getFileName()); + if (importResult.getNumberCreated() > 0) { + description.append(" [ nombre de création : ").append(importResult.getNumberCreated()).append("]"); + } + if (importResult.getNumberUpdated() > 0) { + description.append(" [ nombre de mises à jour : ").append(importResult.getNumberUpdated()).append("]"); + } + TopiaDAO<EntityModificationLog> dao = + getDAO(EntityModificationLog.class); + + create(dao, + EntityModificationLog.PROPERTY_ENTITY_TYPE, importResult.entityType, + EntityModificationLog.PROPERTY_ENTITY_ID, importType, + EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), + EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, description.toString() + ); + } + + } + + protected Reader getInputFileReader(InputFile inputFile) throws EchoBaseTechnicalException { try { - Reader reader = new BufferedReader(new FileReader(inputFile.getFile())); + Reader reader = new BufferedReader(new InputStreamReader( + new FileInputStream(inputFile.getFile()), Charsets.UTF_8)); return reader; } catch (FileNotFoundException e) { throw new EchoBaseTechnicalException( @@ -67,11 +130,15 @@ try { reader.close(); } catch (IOException e) { - throw new EchoBaseTechnicalException("Could not close reader on file " + inputFile.getFile(), e); + throw new EchoBaseTechnicalException( + "Could not close reader on file " + + inputFile.getFile(), e); } } - protected <E extends TopiaEntity, K> Map<K, E> getEntitiesMap(Class<E> entityType, Function<E, K> function) { + protected <E extends TopiaEntity, K> Map<K, E> getEntitiesMap( + Class<E> entityType, + Function<E, K> function) { List<E> allVoyages = getEntities(entityType); Map<K, E> voyageMap = Maps.uniqueIndex( allVoyages, function); @@ -96,7 +163,8 @@ } } - protected <E extends TopiaEntity> E create(TopiaDAO<E> dao, Object... properties) { + protected <E extends TopiaEntity> E create(TopiaDAO<E> dao, + Object... properties) { try { E result = dao.create(properties); return result; @@ -105,7 +173,9 @@ } } - protected <E extends TopiaEntity> E findByProperties(TopiaDAO<E> dao, String propertyName, Object value, + protected <E extends TopiaEntity> E findByProperties(TopiaDAO<E> dao, + String propertyName, + Object value, Object... others) { try { E result = dao.findByProperties(propertyName, value, others); @@ -114,4 +184,28 @@ throw new EchoBaseTechnicalException("Could not obtain query db", e); } } + + protected SpeciesCategory getSpeciesCategory(SpeciesCategoryDAO speciesCategoryDAO, + Species species, + SizeCategory sizeCategory, + SexCategory sexCategory) { + SpeciesCategory category = findByProperties( + speciesCategoryDAO, + SpeciesCategory.PROPERTY_SPECIES, species, + SpeciesCategory.PROPERTY_SIZE_CATEGORY, sizeCategory, + SpeciesCategory.PROPERTY_SEX_CATEGORY, sexCategory + ); + + if (category == null) { + + // create it + + category = create(speciesCategoryDAO); + category.setSpecies(species); + category.setSizeCategory(sizeCategory); + category.setSexCategory(sexCategory); + } + + return category; + } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AccousticDataImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AccousticDataImportService.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AccousticDataImportService.java 2012-02-09 17:07:50 UTC (rev 311) @@ -28,6 +28,7 @@ import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBasePredicates; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.CellDAO; @@ -39,6 +40,7 @@ import fr.ifremer.echobase.entities.data.DataProcessingDAO; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.Transit; +import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AcousticInstrument; import fr.ifremer.echobase.entities.references.CellType; import fr.ifremer.echobase.entities.references.DataMetadata; @@ -55,6 +57,8 @@ import java.util.Date; import java.util.Map; +import static org.nuiton.i18n.I18n.l_; + /** * Service to launch a "acoustic data" import. * @@ -64,21 +68,25 @@ public class AccousticDataImportService extends AbstractImportDataService<AccousticDataImportConfiguration> { @Override - public Map<InputFile, CsvImportResult> startImport(AccousticDataImportConfiguration configuration, - EchoBaseUser user) throws ImportException { + protected String getImportLabel() { + return l_(getLocale(), ImportDataMode.AccousticData.getI18nKey()); + } + + @Override + protected Map<InputFile, CsvImportResult> startImport( + AccousticDataImportConfiguration configuration, + EchoBaseUser user) throws ImportException { + Map<InputFile, CsvImportResult> result = Maps.newHashMap(); - // get selected transit - Transit transit = getEntityById(Transit.class, - configuration.getTransitId()); + // get selected voyage + Voyage voyage = getEntityById(Voyage.class, + configuration.getVoyageId()); // get selected vessel Vessel vessel = getEntityById(Vessel.class, configuration.getVesselId()); - // find out the correct transect to use - Transect transect = transit.getTransect(vessel); - CellType esduCellType = getEntityByProperty( CellType.class, CellType.PROPERTY_ID, "Esdu"); Preconditions.checkNotNull(esduCellType); @@ -87,22 +95,61 @@ CellType.class, CellType.PROPERTY_ID, "Elementary"); Preconditions.checkNotNull(elementaryCellType); - importMoviesFile(transect, + InputFile inputFile = configuration.getMoviesFile(); + + CsvImportResult importDataAcquisition = new CsvImportResult( + EchoBaseEntityEnum.DataAcquisition, + inputFile.getFileName(), + false); + + CsvImportResult importDataProcessing = new CsvImportResult( + EchoBaseEntityEnum.DataProcessing, + inputFile.getFileName(), + false); + + CsvImportResult importCell = new CsvImportResult( + EchoBaseEntityEnum.Cell, + inputFile.getFileName(), + false); + + CsvImportResult importCellData = new CsvImportResult( + EchoBaseEntityEnum.Data, + inputFile.getFileName(), + false); + + importMoviesFile(voyage, + vessel, esduCellType, elementaryCellType, configuration, - configuration.getMoviesFile()); + inputFile, + importDataAcquisition, + importDataProcessing, + importCell, + importCellData); + + addResultAndLog(result, inputFile, importDataAcquisition, user); + addResultAndLog(result, inputFile, importDataProcessing, user); + addResultAndLog(result, inputFile, importCell, user); + addResultAndLog(result, inputFile, importCellData, user); + return result; } private final DateFormat cellDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss'Z'"); - private void importMoviesFile(Transect transect, + private void importMoviesFile(Voyage voyage, + Vessel vessel, CellType esduCellType, CellType elementaryCellType, AccousticDataImportConfiguration configuration, - InputFile inputFile) throws ImportException { + InputFile inputFile, + CsvImportResult importDataAcquisition, + CsvImportResult importDataProcessing, + CsvImportResult importCell, + CsvImportResult importCellData + ) throws ImportException { Map<String, AcousticInstrument> instrumentsById = getEntitiesMap(AcousticInstrument.class, @@ -133,6 +180,30 @@ Cell elementaryCell; for (AcousticDataImportModelRow row : importer) { + Date startDate = row.getCellDateStart(); + + // get transect to use + Transit transit = voyage.getTransit(startDate); + if (transit == null) { + + // can not find correct transit + throw new ImportException( + l_(getLocale(), "echobase.importError.transit.notfound", + voyage.getName(), + startDate)); + } + + Transect transect = transit.getTransect(vessel); + if (transect == null) { + + // can not find correct transect + throw new ImportException( + l_(getLocale(), "echobase.importError.transect.notfound", + voyage.getName(), + startDate, + vessel.getName())); + } + // Build the row acoustic instrument String sndname = row.getSndName(); String channelName = row.getChannelName(); @@ -153,7 +224,8 @@ String soundSpeedCalculations = getSoundSpeedCalculations(configuration, isME70); - if (!addDataAcquisition && !transect.isDataAcquisitionEmpty()) { + if (!addDataAcquisition && + !transect.isDataAcquisitionEmpty()) { // try to obtain an existing data acquisiton @@ -182,6 +254,8 @@ dataAcquisitionDAO ); + importDataAcquisition.incrementsNumberCreated(); + // add it to transect transect.addDataAcquisition(dataAcquisition); } @@ -195,6 +269,8 @@ dataProcessingDAO ); + importDataProcessing.incrementsNumberUpdated(); + // add it to data acquisition dataAcquisition.addDataProcessing(dataProcessing); @@ -204,7 +280,6 @@ int cellType = row.getCellType(); - Date startDate = row.getCellDateStart(); String esduCellId = cellDateFormat.format(startDate); if (cellType == 4) { @@ -217,6 +292,8 @@ Cell.PROPERTY_NAME, esduCellId ); + importCell.incrementsNumberCreated(); + // add it to data processing dataProcessing.addCell(esduCell); @@ -225,7 +302,8 @@ esduCell, dataMetadatasByName, row, - dataDAO); + dataDAO, + importCellData); } else { // this is a elementary cell row @@ -247,6 +325,8 @@ Cell.PROPERTY_NAME, elementaryCellId ); + importCell.incrementsNumberCreated(); + // add it to esdu cell esduCell.addChilds(elementaryCell); @@ -256,31 +336,13 @@ elementaryCell, dataMetadatasByName, row, - dataDAO); + dataDAO, + importCellData); } - - -// if (esduCell == null || -// !esduCellId.equals(esduCell.getName())) { -// -// -// -// // force to create a new elementary cell -// elementaryCell = null; -// } -// -// -// -// if (elementaryCell == null || -// !elementaryCellId.equals(elementaryCell.getName())) { -// -// -// } - } } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } @@ -290,7 +352,8 @@ Cell cell, Map<String, DataMetadata> dataMetadatasByName, AcousticDataImportModelRow row, - DataDAO dao) { + DataDAO dao, + CsvImportResult importCellData) { DataMetadata dataMetadata; Data data; @@ -306,6 +369,8 @@ data.setDataValue(dataValue); cell.addData(data); + importCellData.incrementsNumberCreated(); + // create Longitude data dataMetadata = dataMetadatasByName.get("Longitude" + suffix); dataValue = row.getEsduCellDataLongitude(); @@ -313,6 +378,8 @@ data.setDataValue(dataValue); cell.addData(data); + importCellData.incrementsNumberCreated(); + // create Depth data dataMetadata = dataMetadatasByName.get("DepthRefSurface" + suffix); dataValue = row.getEsduCellDataDepth(); @@ -320,6 +387,8 @@ data.setDataValue(dataValue); cell.addData(data); + importCellData.incrementsNumberCreated(); + // create Time data dataMetadata = dataMetadatasByName.get("Time" + suffix); dataValue = cellDateFormat.format(row.getCellDateStart()); @@ -327,19 +396,24 @@ data.setDataValue(dataValue); cell.addData(data); + importCellData.incrementsNumberCreated(); + // create AcousticDensity data dataMetadata = dataMetadatasByName.get("sa"); dataValue = row.getEsduCellDataAcousticDensity(); data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); data.setDataValue(dataValue); cell.addData(data); + + importCellData.incrementsNumberCreated(); } private void createElementaryCellData(AccousticDataImportConfiguration configuration, Cell cell, Map<String, DataMetadata> dataMetadatasByName, AcousticDataImportModelRow row, - DataDAO dao) { + DataDAO dao, + CsvImportResult importCellData) { DataMetadata dataMetadata; Data data; @@ -372,6 +446,9 @@ data.setDataValue(dataValue); cell.addData(data); + importCellData.incrementsNumberCreated(); + + // create depth end data dataMetadata = dataMetadatasByName.get(endMeta); dataValue = row.getCellDepthEnd(); @@ -379,6 +456,8 @@ data.setDataValue(dataValue); cell.addData(data); + importCellData.incrementsNumberCreated(); + // create acoustic density data dataMetadata = dataMetadatasByName.get("sa"); dataValue = row.getCellSa(); @@ -386,6 +465,8 @@ data.setDataValue(dataValue); cell.addData(data); + importCellData.incrementsNumberCreated(); + } private DataAcquisition createDataAcquisition(AccousticDataImportConfiguration configuration, Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CatchesDataImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CatchesDataImportService.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CatchesDataImportService.java 2012-02-09 17:07:50 UTC (rev 311) @@ -23,26 +23,45 @@ */ package fr.ifremer.echobase.services; +import com.google.common.base.Preconditions; import com.google.common.collect.Maps; +import fr.ifremer.echobase.EchoBaseFunctions; +import fr.ifremer.echobase.EchoBasePredicates; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.Sample; import fr.ifremer.echobase.entities.data.SampleDAO; import fr.ifremer.echobase.entities.data.SampleData; import fr.ifremer.echobase.entities.data.SampleDataDAO; import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.SampleDataType; +import fr.ifremer.echobase.entities.references.SampleDataTypeDAO; +import fr.ifremer.echobase.entities.references.SampleType; +import fr.ifremer.echobase.entities.references.SampleTypeDAO; +import fr.ifremer.echobase.entities.references.SexCategory; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.entities.references.SpeciesCategory; +import fr.ifremer.echobase.entities.references.SpeciesCategoryDAO; import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.services.configurations.CatchesDataImportConfiguration; -import fr.ifremer.echobase.services.csv.SampleDataImportModel; -import fr.ifremer.echobase.services.csv.SampleDataImportModelRow; -import fr.ifremer.echobase.services.csv.SampleImportModel; -import fr.ifremer.echobase.services.csv.SampleImportModelRow; +import fr.ifremer.echobase.services.csv.BiometrySampleImportModel; +import fr.ifremer.echobase.services.csv.BiometrySampleImportModelRow; +import fr.ifremer.echobase.services.csv.SubSampleImportModel; +import fr.ifremer.echobase.services.csv.SubSampleImportModelRow; +import fr.ifremer.echobase.services.csv.TotalSampleImportModel; +import fr.ifremer.echobase.services.csv.TotalSampleImportModelRow; import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportRuntimeException; import java.io.Reader; +import java.util.Collection; import java.util.Map; +import static org.nuiton.i18n.I18n.l_; + /** * Service to launch a "catches sample data" import. * @@ -52,8 +71,13 @@ public class CatchesDataImportService extends AbstractImportDataService<CatchesDataImportConfiguration> { @Override - public Map<InputFile, CsvImportResult> startImport(CatchesDataImportConfiguration configuration, - EchoBaseUser user) throws ImportException { + protected String getImportLabel() { + return l_(getLocale(), ImportDataMode.CatchesData.getI18nKey()); + } + + @Override + protected Map<InputFile, CsvImportResult> startImport(CatchesDataImportConfiguration configuration, + EchoBaseUser user) throws ImportException { Map<InputFile, CsvImportResult> result = Maps.newHashMap(); Voyage voyage = getEntityById(Voyage.class, @@ -62,64 +86,336 @@ Vessel vessel = getEntityById(Vessel.class, configuration.getVesselId()); - importSampleFile(configuration.getSampleFile(), voyage, vessel); + // get all operation for this voyage and this vessel + Collection<Operation> operations = voyage.getOperations(vessel); - importSampleDataFile(configuration.getSampleDataFile(), voyage, vessel); + // split them by operation Id + Map<String, Operation> operationMap = Maps.uniqueIndex( + operations, EchoBaseFunctions.OPERATION_ID); + Map<String, Species> speciesMap = getEntitiesMap( + Species.class, + EchoBaseFunctions.SPECIES_BARACOUDA_CODE); + + Map<String, SizeCategory> sizeCategoryMap = getEntitiesMap( + SizeCategory.class, + EchoBaseFunctions.SIZE_CATEGORY_NAME); + + Map<String, SexCategory> sexCategoryMap = getEntitiesMap( + SexCategory.class, + EchoBaseFunctions.SEX_CATEGORY_NAME); + + CsvImportResult totalSampleResult = importTotalSampleFile( + configuration.getTotalSampleFile(), + operationMap, + speciesMap, + sizeCategoryMap); + + CsvImportResult subSampleResult = importSubSampleFile( + configuration.getSubSampleFile(), + operationMap, + speciesMap, + sizeCategoryMap, + sexCategoryMap); + + CsvImportResult biometrySampleResult = importBiometrySampleFile( + configuration.getBiometrySampleFile(), + operationMap, + speciesMap); + + addResultAndLog(result, configuration.getTotalSampleFile(), totalSampleResult, user); + addResultAndLog(result, configuration.getSubSampleFile(), subSampleResult, user); + addResultAndLog(result, configuration.getBiometrySampleFile(), biometrySampleResult, user); + return result; } - private void importSampleFile(InputFile inputFile, - Voyage voyage, - Vessel vessel) throws ImportException { + private CsvImportResult importTotalSampleFile(InputFile inputFile, + Map<String, Operation> operationMap, + Map<String, Species> speciesMap, + Map<String, SizeCategory> sizeCategoryMap) throws ImportException { - SampleImportModel csvModel = new SampleImportModel(getCsvSeparator()); + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Sample, + inputFile.getFileName(), + false); - SampleDAO dao = getDAO(Sample.class, SampleDAO.class); + TotalSampleImportModel csvModel = new TotalSampleImportModel(getCsvSeparator(), + operationMap, + speciesMap, + sizeCategoryMap + ); + SampleDAO sampleDAO = getDAO(Sample.class, SampleDAO.class); + SampleDataDAO sampleDataDAO = getDAO(SampleData.class, SampleDataDAO.class); + SampleTypeDAO sampleTypeDAO = getDAO(SampleType.class, SampleTypeDAO.class); + SampleDataTypeDAO sampleDataTypeDAO = getDAO(SampleDataType.class, SampleDataTypeDAO.class); + SpeciesCategoryDAO speciesCategoryDAO = getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + + SampleType sampleTypeTotal = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, "Total"); + Preconditions.checkNotNull(sampleTypeTotal); + SampleType sampleTypeUnsorted = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, "Unsorted"); + Preconditions.checkNotNull(sampleTypeUnsorted); + SampleType sampleTypeSorted = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, "Sorted"); + Preconditions.checkNotNull(sampleTypeSorted); + + SampleDataType sampleDataTypeMeanLength = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "MeanLengthcm"); + Preconditions.checkNotNull(sampleDataTypeMeanLength); + SampleDataType sampleDataTypeMeanWeight = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "MeanWeightg"); + Preconditions.checkNotNull(sampleDataTypeMeanWeight); + SampleDataType sampleDataTypeNoPerKg = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "NoPerKg"); + Preconditions.checkNotNull(sampleDataTypeNoPerKg); + Reader reader = getInputFileReader(inputFile); try { - Import<SampleImportModelRow> importer = + Import<TotalSampleImportModelRow> importer = Import.newImport(csvModel, reader); - for (SampleImportModelRow row : importer) { + for (TotalSampleImportModelRow row : importer) { - //TODO + Operation operation = row.getOperation(); + Species species = row.getSpecies(); + SizeCategory sizeCategory = row.getSizeCategory(); + + SpeciesCategory category = getSpeciesCategory( + speciesCategoryDAO, + species, + sizeCategory, + null + ); + + SampleType sampleType; + + if (EchoBasePredicates.IS_HORS_VRAC.apply(sizeCategory)) { + + // hors vrac case + sampleType = sampleTypeUnsorted; + + } else { + // none hors vrac case + sampleType = sampleTypeTotal; + } + + Sample sample = operation.getSample(category, sampleType); + + if (sample != null) { + + // can not have twice same sample + throw new ImportException( + l_(getLocale(), "echobase.importError.duplicate.sample", + operation.getId(), + sampleType.getName(), + species.getBaracoudaCode(), + sizeCategory.getName())); + } + + sample = row.getSample(); + sample.setSpeciesCategory(category); + + sample.setSampleType(sampleType); + Sample createdSample = create(sampleDAO, sample); + + operation.addSample(createdSample); + + importResult.incrementsNumberCreated(); + + // create datas + + if (row.getMeanLength() != null) { + + //create meanLength data + addSampleData(sampleDataDAO, + sampleDataTypeMeanLength, + null, + row.getMeanLength(), + createdSample); + } + + if (row.getMeanWeight() != null) { + + //create meanWeight data + addSampleData(sampleDataDAO, + sampleDataTypeMeanWeight, + null, + row.getMeanWeight(), + createdSample); + } + + if (row.getNoPerKg() != null) { + + //create noPerKg data + addSampleData(sampleDataDAO, + sampleDataTypeNoPerKg, + null, + row.getNoPerKg(), + createdSample); + } + + // create sorted sample + Sample createdSortedSample = create(sampleDAO); + createdSortedSample.setSampleType(sampleTypeSorted); + createdSortedSample.setSampleWeight(row.getSortedWeight()); + + operation.addSample(createdSortedSample); + + importResult.incrementsNumberCreated(); } + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - private void importSampleDataFile(InputFile inputFile, - Voyage voyage, - Vessel vessel) throws ImportException { + private CsvImportResult importSubSampleFile(InputFile inputFile, + Map<String, Operation> operationMap, + Map<String, Species> speciesMap, + Map<String, SizeCategory> sizeCategoryMap, + Map<String, SexCategory> sexCategoryMap + ) throws ImportException { - SampleDataImportModel csvModel = new SampleDataImportModel(getCsvSeparator()); + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Sample, + inputFile.getFileName(), + false); + SubSampleImportModel csvModel = new SubSampleImportModel(getCsvSeparator(), + operationMap, + speciesMap, + sizeCategoryMap, + sexCategoryMap); - SampleDataDAO dao = getDAO(SampleData.class, SampleDataDAO.class); + SampleDAO sampleDAO = getDAO(Sample.class, SampleDAO.class); + SampleDataDAO sampleDataDAO = getDAO(SampleData.class, SampleDataDAO.class); + SampleTypeDAO sampleTypeDAO = getDAO(SampleType.class, SampleTypeDAO.class); + SampleDataTypeDAO sampleDataTypeDAO = getDAO(SampleDataType.class, SampleDataTypeDAO.class); + SpeciesCategoryDAO speciesCategoryDAO = getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + SampleType sampleTypeSubsample = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, "Subsample"); + Preconditions.checkNotNull(sampleTypeSubsample); + + SampleDataType sampleDataTypeNumberAtLength = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "NumberAtLength"); + Preconditions.checkNotNull(sampleDataTypeNumberAtLength); + SampleDataType sampleDataTypeWeightAtLength = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "WeightAtLengthkg"); + Preconditions.checkNotNull(sampleDataTypeWeightAtLength); + Reader reader = getInputFileReader(inputFile); try { - Import<SampleDataImportModelRow> importer = + Import<SubSampleImportModelRow> importer = Import.newImport(csvModel, reader); - for (SampleDataImportModelRow row : importer) { + for (SubSampleImportModelRow row : importer) { + Operation operation = row.getOperation(); + + + Species species = row.getSpecies(); + SizeCategory sizeCategory = row.getSizeCategory(); + SexCategory sexCategory = row.getSexCategory(); + + SpeciesCategory category = getSpeciesCategory( + speciesCategoryDAO, + species, + sizeCategory, + sexCategory + ); + + // find the sample with this category + Sample sample = operation.getSample(category, sampleTypeSubsample); + + if (sample == null) { + + // must create it + sample = row.getSample(); + + sample.setSpeciesCategory(category); + sample.setSampleType(sampleTypeSubsample); + + sample = create(sampleDAO, sample); + + operation.addSample(sample); + + importResult.incrementsNumberUpdated(); + } + + //create numberAtLength data + addSampleData(sampleDataDAO, + sampleDataTypeNumberAtLength, + "" + row.getLengthClass(), + row.getNumberAtLength(), + sample); + + if (row.getWeightAtLength() > 0) { + + //create weightAtLength data + addSampleData(sampleDataDAO, + sampleDataTypeWeightAtLength, + "" + row.getLengthClass(), + row.getWeightAtLength(), + sample); + } + } + + return importResult; + } catch (ImportRuntimeException e) { + throw new ImportException(getLocale(), inputFile, e); + } finally { + closeReader(reader, inputFile); + } + } + + private CsvImportResult importBiometrySampleFile(InputFile inputFile, + Map<String, Operation> operationMap, + Map<String, Species> speciesMap + ) throws ImportException { + + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Sample, + inputFile.getFileName(), + false); + + BiometrySampleImportModel csvModel = new BiometrySampleImportModel(getCsvSeparator()); + + SampleDAO sampleDAO = getDAO(Sample.class, SampleDAO.class); + SampleDataDAO sampleDataDAO = getDAO(SampleData.class, SampleDataDAO.class); + SampleTypeDAO sampleTypeDAO = getDAO(SampleType.class, SampleTypeDAO.class); + + SampleType sampleTypeIndividual = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, "Individual"); + Preconditions.checkNotNull(sampleTypeIndividual); + + Reader reader = getInputFileReader(inputFile); + try { + Import<BiometrySampleImportModelRow> importer = + Import.newImport(csvModel, reader); + + for (BiometrySampleImportModelRow row : importer) { + //TODO } + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } + private SampleData addSampleData(SampleDataDAO dao, + SampleDataType sampleDataType, + String label, + float value, + Sample sample) { + SampleData sampleData = create(dao); + sampleData.setSampleDataType(sampleDataType); + sampleData.setDataValue(value); + sampleData.setDataLabel(label); + sample.addSampleData(sampleData); + return sampleData; + } + } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CommonDataImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CommonDataImportService.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CommonDataImportService.java 2012-02-09 17:07:50 UTC (rev 311) @@ -28,6 +28,7 @@ import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.TransectDAO; @@ -52,10 +53,12 @@ import org.nuiton.util.csv.ImportRuntimeException; import java.io.Reader; +import java.util.Arrays; import java.util.Date; import java.util.Map; import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.l_; /** * Service to launch a "common data" import. @@ -66,9 +69,15 @@ public class CommonDataImportService extends AbstractImportDataService<CommonDataImportConfiguration> { @Override - public Map<InputFile, CsvImportResult> startImport(CommonDataImportConfiguration configuration, - EchoBaseUser user) throws ImportException { + protected String getImportLabel() { + return l_(getLocale(), ImportDataMode.CommonData.getI18nKey()); + } + @Override + protected Map<InputFile, CsvImportResult> startImport( + CommonDataImportConfiguration configuration, + EchoBaseUser user) throws ImportException { + Map<InputFile, CsvImportResult> result = Maps.newHashMap(); CommonDataImportMode importMode = configuration.getImportMode(); @@ -85,32 +94,40 @@ getEntityById(AreaOfOperation.class, configuration.getAreaOfOperationId()); - importVoyageFile(configuration.getVoyageFile(), - mission, - areaOfOperation, - configuration.getVoyageDescription(), - configuration.getDatum()); + CsvImportResult voyageResult = importVoyageFile( + configuration.getVoyageFile(), + mission, + areaOfOperation, + configuration); + CsvImportResult transitResult = importTransitFile( + configuration.getTransitFile(), + configuration); - importTransitFile(configuration.getTransitFile(), - configuration.getTransitRelatedActivity()); + CsvImportResult transectResult = importTransectFile( + configuration.getTransectFile(), + vessel, + configuration); - importTransectFile(configuration.getTransectFile(), - vessel, - configuration); + addResultAndLog(result, configuration.getVoyageFile(), voyageResult, user); + addResultAndLog(result, configuration.getTransitFile(), transitResult, user); + addResultAndLog(result, configuration.getTransectFile(), transectResult, user); + } break; case TRANSECT: { - importTransectFile(configuration.getTransectFile(), - vessel, - configuration); + CsvImportResult transectResult = importTransectFile( + configuration.getTransectFile(), + vessel, + configuration); + + addResultAndLog(result, configuration.getTransectFile(), transectResult, user); } break; } - commitTransaction("Could not commit transaction of common data import"); return result; } @@ -138,12 +155,20 @@ } } - protected void importVoyageFile(InputFile inputFile, - Mission mission, - AreaOfOperation areaOfOperation, - String voyageDescription, - String datum) throws ImportException { + protected CsvImportResult importVoyageFile( + InputFile inputFile, + Mission mission, + AreaOfOperation areaOfOperation, + CommonDataImportConfiguration configuration) throws ImportException { + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Voyage, + inputFile.getFileName(), + false); + + String voyageDescription = configuration.getVoyageDescription(); + String datum = configuration.getDatum(); + VoyageDAO dao = getDAO(Voyage.class, VoyageDAO.class); ImportModel<Voyage> csvModel = @@ -152,79 +177,127 @@ Reader reader = getInputFileReader(inputFile); Import<Voyage> importer = Import.newImport(csvModel, reader); + Voyage newVoyage = null; try { for (Voyage voyage : importer) { - Voyage createdVoyage = create(dao); - createdVoyage.setMission(mission); - createdVoyage.setAreaOfOperation(areaOfOperation); - createdVoyage.setDescription(voyageDescription); - createdVoyage.setDatum(datum); - createdVoyage.setName(voyage.getName()); - createdVoyage.setStartDate(voyage.getStartDate()); - createdVoyage.setEndDate(voyage.getEndDate()); - createdVoyage.setStartPort(voyage.getStartPort()); - createdVoyage.setEndPort(voyage.getEndPort()); + voyage.setMission(mission); + voyage.setAreaOfOperation(areaOfOperation); + voyage.setDescription(voyageDescription); + voyage.setDatum(datum); + + Voyage createdVoyage = create(dao, voyage); + if (newVoyage == null) { + newVoyage = createdVoyage; + } else { + // this means a voyage file with more than one row not possible... + + throw new ImportException( + _("echobase.importError.can.only.import.one.voyage.atime")); + } + + importResult.incrementsNumberCreated(); } + if (newVoyage == null) { + throw new ImportException( + _("echobase.importError.no.voyage.imported")); + } + + // push back to id of the voyage in configuration for next imports + configuration.setVoyageId(newVoyage.getTopiaId()); + + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - protected void importTransitFile(InputFile inputFile, - String relatedActivity) throws ImportException { + protected CsvImportResult importTransitFile( + InputFile inputFile, + CommonDataImportConfiguration configuration) throws ImportException { - Map<String, Voyage> voyageMap = getEntitiesMap( - Voyage.class, EchoBaseFunctions.VOYAGE_NAME); + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Voyage, + inputFile.getFileName(), + false); - TransitImportModel csvModel = new TransitImportModel(getCsvSeparator(), voyageMap); + // get voyage + Voyage voyage = getEntityById(Voyage.class, + configuration.getVoyageId()); + // restrict voyage to use to this voyage + Map<String, Voyage> voyageMap = Maps.uniqueIndex( + Arrays.asList(voyage), EchoBaseFunctions.VOYAGE_NAME); + + String relatedActivity = configuration.getTransitRelatedActivity(); + + TransitImportModel csvModel = + new TransitImportModel(getCsvSeparator(), voyageMap); + TransitDAO dao = getDAO(Transit.class, TransitDAO.class); + + int nbTransits = 0; + Reader reader = getInputFileReader(inputFile); try { Import<TransitImportModelRow> importer = Import.newImport(csvModel, reader); for (TransitImportModelRow row : importer) { - Voyage voyage = row.getVoyage(); + Transit transit = row.getTransit(); - Transit transit = create(dao); + transit.setRelatedActivity(relatedActivity); - transit.setDescription(row.getDescription()); - transit.setStartLocality(row.getStartLocality()); - transit.setEndLocality(row.getEndLocality()); + Transit createdTransit = create(dao); - transit.setStartTime(row.getStartTime()); - transit.setEndTime(row.getEndTime()); - transit.setRelatedActivity(relatedActivity); - voyage.addTransit(transit); + voyage.addTransit(createdTransit); + + importResult.incrementsNumberCreated(); } + if (nbTransits == 0) { + throw new ImportException( + _("echobase.importError.no.transit.imported")); + } + + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - private void importTransectFile(InputFile inputFile, - Vessel vessel, - CommonDataImportConfiguration configuration - ) throws ImportException { + private CsvImportResult importTransectFile( + InputFile inputFile, + Vessel vessel, + CommonDataImportConfiguration configuration) throws ImportException { - Map<String, Voyage> voyageMap = getEntitiesMap( - Voyage.class, EchoBaseFunctions.VOYAGE_NAME); + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Voyage, + inputFile.getFileName(), + false); + // get voyage + Voyage voyage = getEntityById(Voyage.class, + configuration.getVoyageId()); + + // restrict voyage to use to this voyage + Map<String, Voyage> voyageMap = Maps.uniqueIndex( + Arrays.asList(voyage), EchoBaseFunctions.VOYAGE_NAME); + String datum = configuration.getDatum(); String license = configuration.getTransectLicence(); - String geospatialVerticalPositive = configuration.getTransectGeospatialVerticalPositive(); + String geospatialVerticalPositive = + configuration.getTransectGeospatialVerticalPositive(); String binUnitsPingAxis = configuration.getTransectBinUnitsPingAxis(); - TransectImportModel csvModel = new TransectImportModel(getCsvSeparator(), voyageMap); + TransectImportModel csvModel = + new TransectImportModel(getCsvSeparator(), voyageMap); TransectDAO dao = getDAO(Transect.class, TransectDAO.class); @@ -234,47 +307,36 @@ Import.newImport(csvModel, reader); for (TransectImportModelRow row : importer) { - Voyage voyage = row.getVoyage(); + Transect transect = row.getTransect(); - Date timeCoverageStart = row.getTimeCoverageStart(); - Date timeCoverageEnd = row.getTimeCoverageEnd(); + Date timeCoverageStart = transect.getTimeCoverageStart(); + Date timeCoverageEnd = transect.getTimeCoverageEnd(); - Transit transit = voyage.getTransit(timeCoverageStart, timeCoverageEnd); + Transit transit = voyage.getTransit(timeCoverageStart, + timeCoverageEnd); if (transit == null) { throw new ImportException( _("echobase.importError.no.transit.between.date", voyage.getName(), timeCoverageStart, timeCoverageEnd)); } - Transect transect = create(dao); transect.setVessel(vessel); - transect.setTitle(row.getTitle()); - transect.setTransectAbstract(row.getTransectAbstract()); - transect.setComment(row.getComment()); - transect.setDatum(datum); transect.setLicence(license); - transect.setGeospatialVerticalPositive(geospatialVerticalPositive); + transect.setGeospatialVerticalPositive( + geospatialVerticalPositive); transect.setBinUnitsPingAxis(binUnitsPingAxis); - transect.setDateCreated(row.getDateCreated()); + Transect createdTransect = create(dao, transect); - transect.setTimeCoverageStart(timeCoverageStart); - transect.setTimeCoverageEnd(timeCoverageEnd); + transit.addTransect(createdTransect); + importResult.incrementsNumberCreated(); + } - transect.setGeospatialLatMin(row.getGeospatialLatMin()); - transect.setGeospatialLonMin(row.getGeospatialLonMin()); - transect.setGeospatialVerticalMin(row.getGeospatialVerticalMin()); + return importResult; - transect.setGeospatialLatMax(row.getGeospatialLatMax()); - transect.setGeospatialLonMax(row.getGeospatialLonMax()); - transect.setGeospatialVerticalMax(row.getGeospatialVerticalMax()); - transect.setLinestring(row.getLinestring()); - transit.addTransect(transect); - } - } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java 2012-02-09 17:07:50 UTC (rev 311) @@ -66,10 +66,10 @@ DbMeta dbMeta, EchoBaseServiceFactory serviceFactory) { return new DefaultEchoBaseServiceContext(locale, - transaction, - configuration, - dbMeta, - serviceFactory); + transaction, + configuration, + dbMeta, + serviceFactory); } protected DefaultEchoBaseServiceContext(Locale locale, Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ImportException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ImportException.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ImportException.java 2012-02-09 17:07:50 UTC (rev 311) @@ -26,8 +26,10 @@ import fr.ifremer.echobase.InputFile; import org.nuiton.util.csv.ImportRuntimeException; -import static org.nuiton.i18n.I18n._; +import java.util.Locale; +import static org.nuiton.i18n.I18n.l_; + /** * Exception when a import new data failed. * @@ -46,8 +48,9 @@ super(message, cause); } - public ImportException(InputFile inputfile, ImportRuntimeException importError) { - this(_("echobase.importError.fromFile", inputfile.getFile(), - importError.getMessage()), importError); + public ImportException(Locale locale, InputFile inputfile, ImportRuntimeException importError) { + this(l_(locale, "echobase.importError.fromFile", + inputfile.getFile().getName(), + importError.getMessage()), importError); } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/OperationImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/OperationImportService.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/OperationImportService.java 2012-02-09 17:07:50 UTC (rev 311) @@ -26,6 +26,7 @@ import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.GearMetadataValue; import fr.ifremer.echobase.entities.data.GearMetadataValueDAO; @@ -35,6 +36,7 @@ import fr.ifremer.echobase.entities.data.OperationMetadataValueDAO; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.Transit; +import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.DepthStratum; import fr.ifremer.echobase.entities.references.Gear; import fr.ifremer.echobase.entities.references.GearMetadata; @@ -52,8 +54,12 @@ import java.io.Reader; import java.util.Arrays; +import java.util.Collection; +import java.util.Date; import java.util.Map; +import static org.nuiton.i18n.I18n.l_; + /** * Service to launch a "operations" import. * @@ -63,53 +69,80 @@ public class OperationImportService extends AbstractImportDataService<OperationImportConfiguration> { @Override - public Map<InputFile, CsvImportResult> startImport( + protected String getImportLabel() { + return l_(getLocale(), ImportDataMode.Operation.getI18nKey()); + } + + @Override + protected Map<InputFile, CsvImportResult> startImport( OperationImportConfiguration configuration, EchoBaseUser user) throws ImportException { Map<InputFile, CsvImportResult> result = Maps.newHashMap(); - // get selected transit - Transit transit = getEntityById(Transit.class, - configuration.getTransitId()); + // get selected voyage + Voyage voyage = getEntityById(Voyage.class, + configuration.getVoyageId()); // get selected vessel Vessel vessel = getEntityById(Vessel.class, configuration.getVesselId()); - // find out the correct transect to use - Transect transect = transit.getTransect(vessel); - // authorize only to use this vessel in import files Map<String, Vessel> vesselMap = Maps.uniqueIndex( Arrays.asList(vessel), EchoBaseFunctions.VESSEL_NAME); + // get all gears by their gear code Map<String, Gear> gearMap = getEntitiesMap( - Gear.class, EchoBaseFunctions.GEAR_NAME); + Gear.class, EchoBaseFunctions.GEAR_GEAR_CODE); - importOperationFile(configuration.getOperationFile(), - transect, - vesselMap, - gearMap); + CsvImportResult nbOperations = importOperationFile( + configuration.getOperationFile(), + voyage, + vesselMap, + gearMap); - importOperationMetadataFile(configuration.getOperationMetadataFile(), - transect, - vesselMap); + // get all operation for this voyage and this vessel + Collection<Operation> operations = voyage.getOperations(vessel); - importGearMetadataFile(configuration.getGearMetadataFile(), - transect, - vesselMap, - gearMap); + // split them by operation Id + Map<String, Operation> operationMap = Maps.uniqueIndex( + operations, EchoBaseFunctions.OPERATION_ID); - commitTransaction("Could not commit transaction of operation import"); + CsvImportResult nbOperationMetas = importOperationMetadataFile( + configuration.getOperationMetadataFile(), + vesselMap, + operationMap); + + CsvImportResult nbGearMetas = importGearMetadataFile( + configuration.getGearMetadataFile(), + vesselMap, + gearMap, + operationMap); + + addResultAndLog(result, configuration.getOperationFile(), + nbOperations, user); + + addResultAndLog(result, configuration.getOperationMetadataFile(), + nbOperationMetas, user); + + addResultAndLog(result, configuration.getGearMetadataFile(), + nbGearMetas, user); + return result; } - protected void importOperationFile(InputFile inputFile, - Transect transect, - Map<String, Vessel> vesselMap, - Map<String, Gear> gearMap) throws ImportException { + protected CsvImportResult importOperationFile( + InputFile inputFile, + Voyage voyage, + Map<String, Vessel> vesselMap, + Map<String, Gear> gearMap) throws ImportException { + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Operation, + inputFile.getFileName(), + false); + Map<String, DepthStratum> depthStratumMap = getEntitiesMap( DepthStratum.class, EchoBaseFunctions.DEPTH_STRATUM_ID); @@ -128,36 +161,51 @@ for (OperationImportModelRow row : importer) { - Operation operationToCreate = row.getOperation(); + Vessel vessel = row.getVessel(); - Operation operation = create(dao, operationToCreate); + Operation operation = row.getOperation(); - transect.addOperation(operation); + Date startTime = operation.getGearShootingStartTime(); + Date endTime = operation.getGearShootingEndTime(); + + Transit transit = voyage.getTransit(startTime, endTime); + + Transect transect = transit.getTransect(vessel); + + Operation createdOperation = create(dao, operation); + + transect.addOperation(createdOperation); + + importResult.incrementsNumberCreated(); } + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - protected void importOperationMetadataFile(InputFile inputFile, - Transect transect, - Map<String, Vessel> vesselMap) throws ImportException { + protected CsvImportResult importOperationMetadataFile( + InputFile inputFile, + Map<String, Vessel> vesselMap, + Map<String, Operation> operationMap) throws ImportException { + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.OperationMetadata, + inputFile.getFileName(), + false); + Map<String, OperationMetadata> operationMetadatasByName = getEntitiesMap(OperationMetadata.class, EchoBaseFunctions.OPERATION_METADATA_NAME); - Map<String, Operation> operationById = Maps.uniqueIndex( - transect.getOperation(), EchoBaseFunctions.OPERATION_ID); - OperationMetadataValueImportModel csvModel = new OperationMetadataValueImportModel(getCsvSeparator(), vesselMap, operationMetadatasByName, - operationById); + operationMap); OperationMetadataValueDAO dao = getDAO( OperationMetadataValue.class, @@ -178,33 +226,37 @@ dao, operationMetadataValueToCreate); operation.addOperationMetadataValue(operationMetadataValue); - + importResult.incrementsNumberCreated(); } - + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - protected void importGearMetadataFile(InputFile inputFile, - Transect transect, - Map<String, Vessel> vesselMap, - Map<String, Gear> gearMap) throws ImportException { + protected CsvImportResult importGearMetadataFile( + InputFile inputFile, + Map<String, Vessel> vesselMap, + Map<String, Gear> gearMap, + Map<String, Operation> operationMap) throws ImportException { + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.GearMetadata, + inputFile.getFileName(), + false); + Map<String, GearMetadata> gearMetadatasByType = - getEntitiesMap(GearMetadata.class, EchoBaseFunctions.GEAR_METADATA_TYPE); + getEntitiesMap(GearMetadata.class, + EchoBaseFunctions.GEAR_METADATA_NAME); - Map<String, Operation> operationById = Maps.uniqueIndex( - transect.getOperation(), EchoBaseFunctions.OPERATION_ID); - GearMetadataValueImportModel csvModel = new GearMetadataValueImportModel(getCsvSeparator(), vesselMap, gearMetadatasByType, gearMap, - operationById); + operationMap); GearMetadataValueDAO dao = getDAO(GearMetadataValue.class, GearMetadataValueDAO.class); @@ -224,11 +276,11 @@ dao, gearMetadataValuetoCreate); operation.addGearMetadataValue(gearMetadataValue); - + importResult.incrementsNumberCreated(); } - + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ResultsImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ResultsImportService.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ResultsImportService.java 2012-02-09 17:07:50 UTC (rev 311) @@ -28,6 +28,7 @@ import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBasePredicates; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.CellDAO; @@ -61,6 +62,8 @@ import java.util.Arrays; import java.util.Map; +import static org.nuiton.i18n.I18n.l_; + /** * Service to launch a "results" import. * @@ -70,6 +73,11 @@ public class ResultsImportService extends AbstractImportDataService<ResultsImportConfiguration> { @Override + protected String getImportLabel() { + return l_(getLocale(), ImportDataMode.Results.getI18nKey()); + } + + @Override public Map<InputFile, CsvImportResult> startImport(ResultsImportConfiguration configuration, EchoBaseUser user) throws ImportException { Map<InputFile, CsvImportResult> result = Maps.newHashMap(); @@ -92,42 +100,87 @@ if (configuration.canImportLengthAgeKeyFile()) { - importLenthAgeKey(configuration.getLengthAgeKeyFile(), - voyageMap, - speciesMap + CsvImportResult importResult = importLenthAgeKey( + configuration.getLengthAgeKeyFile(), + voyageMap, + speciesMap ); + + + addResultAndLog(result, configuration.getLengthAgeKeyFile(), + importResult, user); } if (configuration.canImportLengthWeightKeyFile()) { - importLenghtWeightKey(configuration.getLengthWeightKeyFile(), - voyageMap, - speciesMap + CsvImportResult importResult = importLenghtWeightKey( + configuration.getLengthWeightKeyFile(), + voyageMap, + speciesMap ); + + addResultAndLog(result, configuration.getLengthWeightKeyFile(), + importResult, user); } if (configuration.canImportEchotypeFile()) { - importEchotypeFile(configuration.getEchotypeFile(), - voyageMap, - speciesMap + CsvImportResult importResult = importEchotypeFile( + configuration.getEchotypeFile(), + voyageMap, + speciesMap ); + + addResultAndLog(result, configuration.getEchotypeFile(), + importResult, user); } break; + + case REGION: + + if (configuration.canImportRegionsFile()) { + CsvImportResult importResult = importRegionsFile( + configuration.getRegionsFile()); + + addResultAndLog(result, configuration.getRegionsFile(), + importResult, user); + } + if (configuration.canImportAssociationFile()) { + CsvImportResult importResult = importRegionAssociationFile( + configuration.getAssociationFile()); + + addResultAndLog(result, configuration.getAssociationFile(), + importResult, user); + } + break; + case ACOUSTIC: if (configuration.canImportRegionsFile()) { - importRegionsFile(configuration.getRegionsFile()); + CsvImportResult importResult = importRegionsFile( + configuration.getRegionsFile()); + + addResultAndLog(result, configuration.getRegionsFile(), + importResult, user); } if (configuration.canImportAssociationFile()) { - importAssociationFile(configuration.getAssociationFile()); + CsvImportResult importResult = importRegionAssociationFile( + configuration.getAssociationFile()); + + addResultAndLog(result, configuration.getAssociationFile(), + importResult, user); } break; } return result; } - protected void importRegionsFile(InputFile inputFile) throws ImportException { + protected CsvImportResult importRegionsFile(InputFile inputFile) throws ImportException { + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Cell, + inputFile.getFileName(), + false); + RegionCellImportModel csvModel = new RegionCellImportModel( serviceContext.getConfiguration().getCsvSeparator()); @@ -142,19 +195,25 @@ //TODO + importResult.incrementsNumberCreated(); } - + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - protected void importAssociationFile(InputFile inputFile) throws ImportException { + protected CsvImportResult importRegionAssociationFile(InputFile inputFile) throws ImportException { RegionCellAssociationImportModel csvModel = new RegionCellAssociationImportModel( serviceContext.getConfiguration().getCsvSeparator()); + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Cell, + inputFile.getFileName(), + false); + CellDAO dao = getDAO(Cell.class, CellDAO.class); Reader reader = getInputFileReader(inputFile); @@ -166,19 +225,26 @@ //TODO + importResult.incrementsNumberUpdated(); } + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - protected void importLenghtWeightKey(InputFile inputFile, - Map<String, Voyage> voyageMap, - Map<String, Species> speciesMap) throws ImportException { + protected CsvImportResult importLenghtWeightKey(InputFile inputFile, + Map<String, Voyage> voyageMap, + Map<String, Species> speciesMap) throws ImportException { + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.LengthWeightKey, + inputFile.getFileName(), + false); + Map<String, SizeCategory> sizeCategoryMap = getEntitiesMap( SizeCategory.class, EchoBaseFunctions.SIZE_CATEGORY_NAME); @@ -216,38 +282,37 @@ SizeCategory sizeCategory = row.getSizeCategory(); // find speciesCategory - SpeciesCategory speciesCategory = findByProperties( + SpeciesCategory speciesCategory = getSpeciesCategory( speciesCategoryDAO, - SpeciesCategory.PROPERTY_SIZE_CATEGORY, sizeCategory, - SpeciesCategory.PROPERTY_SPECIES, species + species, sizeCategory, + null ); - if (speciesCategory == null) { - - // not found, creates it - speciesCategory = create(speciesCategoryDAO, - SpeciesCategory.PROPERTY_SIZE_CATEGORY, sizeCategory, - SpeciesCategory.PROPERTY_SPECIES, species - ); - } - lengthWeightKey.setSpeciesCategory(speciesCategory); // attach it to voyage voyage.addLengthWeightKey(lengthWeightKey); + + importResult.incrementsNumberCreated(); } + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - protected void importLenthAgeKey(InputFile inputFile, - Map<String, Voyage> voyageMap, - Map<String, Species> speciesMap) throws ImportException { + protected CsvImportResult importLenthAgeKey(InputFile inputFile, + Map<String, Voyage> voyageMap, + Map<String, Species> speciesMap) throws ImportException { + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.LengthAgeKey, + inputFile.getFileName(), + false); + Map<String, Strata> strataMap = getEntitiesMap( Strata.class, EchoBaseFunctions.STRATA_BY_NAME); @@ -274,19 +339,25 @@ // attach it to voyage voyage.addLengthAgeKey(lengthAgeKey); + importResult.incrementsNumberCreated(); } - + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } } - private void importEchotypeFile(InputFile inputFile, - Map<String, Voyage> voyageMap, - Map<String, Species> speciesMap) throws ImportException { + private CsvImportResult importEchotypeFile(InputFile inputFile, + Map<String, Voyage> voyageMap, + Map<String, Species> speciesMap) throws ImportException { + CsvImportResult importResult = new CsvImportResult( + EchoBaseEntityEnum.Echotype, + inputFile.getFileName(), + false); + Map<String, DepthStratum> depthStratumMap = getEntitiesMap( DepthStratum.class, EchoBaseFunctions.DEPTH_STRATUM_ID); @@ -336,6 +407,11 @@ // attach it to voyage voyage.addEchotype(echotype); + + importResult.incrementsNumberCreated(); + } else { + + importResult.incrementsNumberUpdated(); } Species species = row.getSpecies(); @@ -349,8 +425,9 @@ } } + return importResult; } catch (ImportRuntimeException e) { - throw new ImportException(inputFile, e); + throw new ImportException(getLocale(), inputFile, e); } finally { closeReader(reader, inputFile); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AccousticDataImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AccousticDataImportConfiguration.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AccousticDataImportConfiguration.java 2012-02-09 17:07:50 UTC (rev 311) @@ -42,9 +42,6 @@ /** Selected voyage id where to import datas. */ protected String voyageId; - /** Selected transit id where to import datas. */ - protected String transitId; - /** Selected vessel id to find out transect where to import datas. */ protected String vesselId; @@ -115,15 +112,6 @@ this.voyageId = voyageId; } - - public String getTransitId() { - return transitId; - } - - public void setTransitId(String transitId) { - this.transitId = transitId; - } - public String getVesselId() { return vesselId; } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/CatchesDataImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/CatchesDataImportConfiguration.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/CatchesDataImportConfiguration.java 2012-02-09 17:07:50 UTC (rev 311) @@ -45,17 +45,22 @@ /** Selected vessel id to find out transect where to import datas. */ protected String vesselId; - /** Station file to import. */ - protected final InputFile sampleFile; + /** Sample file to import. */ + protected final InputFile totalSampleFile; - /** Tri file to import. */ - protected final InputFile sampleDataFile; + /** Sub sample file to import. */ + protected final InputFile subSampleFile; + /** Biometry sample file to import. */ + protected final InputFile biometrySampleFile; + public CatchesDataImportConfiguration(Locale locale) { - sampleFile = InputFile.newFile( - l_(locale, "echobase.common.sampleFile")); - sampleDataFile = InputFile.newFile( - l_(locale, "echobase.common.sampleDatafile")); + totalSampleFile = InputFile.newFile( + l_(locale, "echobase.common.totalSampleFile")); + subSampleFile = InputFile.newFile( + l_(locale, "echobase.common.subSampleFile")); + biometrySampleFile = InputFile.newFile( + l_(locale, "echobase.common.biometrySampleFile")); } public String getVoyageId() { @@ -74,16 +79,20 @@ this.vesselId = vesselId; } - public InputFile getSampleFile() { - return sampleFile; + public InputFile getTotalSampleFile() { + return totalSampleFile; } - public InputFile getSampleDataFile() { - return sampleDataFile; + public InputFile getSubSampleFile() { + return subSampleFile; } + public InputFile getBiometrySampleFile() { + return biometrySampleFile; + } + @Override public InputFile[] getInputFiles() { - return new InputFile[]{sampleFile, sampleDataFile}; + return new InputFile[]{totalSampleFile, subSampleFile, biometrySampleFile}; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/OperationImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/OperationImportConfiguration.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/OperationImportConfiguration.java 2012-02-09 17:07:50 UTC (rev 311) @@ -42,9 +42,6 @@ /** Selected voyage id where to import datas. */ protected String voyageId; - /** Selected transit id where to import datas. */ - protected String transitId; - /** Selected vessel to use for transect. */ protected String vesselId; @@ -74,14 +71,6 @@ this.voyageId = voyageId; } - public String getTransitId() { - return transitId; - } - - public void setTransitId(String transitId) { - this.transitId = transitId; - } - public String getVesselId() { return vesselId; } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ResultsImportMode.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ResultsImportMode.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ResultsImportMode.java 2012-02-09 17:07:50 UTC (rev 311) @@ -38,6 +38,9 @@ /** Import results at voyage level. */ VOYAGE(n_("echobase.common.resultsImportMode.voyage")), + /** Import Regions. */ + REGION(n_("echobase.common.resultsImportMode.region")), + /** Import acoustic results. */ ACOUSTIC(n_("echobase.common.resultsImportMode.acoustic")); Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModel.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModel.java 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,44 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.csv; + +import fr.ifremer.echobase.entities.data.Sample; + +/** + * Model to import {@link Sample} of total biometry. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class BiometrySampleImportModel extends CsvModelUtil.AbstractImportModel<BiometrySampleImportModelRow> { + + public BiometrySampleImportModel(char separator) { + super(separator); + } + + @Override + public BiometrySampleImportModelRow newEmptyInstance() { + return new BiometrySampleImportModelRow(); + } +} \ No newline at end of file Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModelRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModelRow.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,33 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.csv; + +/** + * Bean used as a row for import of {@link BiometrySampleImportModel}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class BiometrySampleImportModelRow { +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/BiometrySampleImportModelRow.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModel.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModel.java 2012-02-09 17:07:50 UTC (rev 311) @@ -63,8 +63,8 @@ newMandatoryColumn("gearName", Operation.PROPERTY_GEAR, CsvModelUtil.newForeignKeyValue(Gear.class, gearMap)); newMandatoryColumn("depthStratumID", Operation.PROPERTY_DEPTH_STRATUM, CsvModelUtil.newForeignKeyValue(DepthStratum.class, depthStratumMap)); newMandatoryColumn(Operation.PROPERTY_ID); - newMandatoryColumn(Operation.PROPERTY_MID_HAULE_LATITUDE, CsvModelUtil.PRIMITIVE_FLOAT); - newMandatoryColumn(Operation.PROPERTY_MID_HAULE_LONGITUDE, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Operation.PROPERTY_MID_HAUL_LATITUDE, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Operation.PROPERTY_MID_HAUL_LONGITUDE, CsvModelUtil.PRIMITIVE_FLOAT); newMandatoryColumn(Operation.PROPERTY_GEAR_SHOOTING_START_TIME, CsvModelUtil.DAY_TIME_SECOND); newMandatoryColumn(Operation.PROPERTY_GEAR_SHOOTING_END_TIME, CsvModelUtil.DAY_TIME_SECOND); newMandatoryColumn(Operation.PROPERTY_GEAR_SHOOTING_START_LATITUDE, CsvModelUtil.PRIMITIVE_FLOAT); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModelRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModelRow.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -91,11 +91,11 @@ } public void setMidHauleLatitude(float midHauleLatitude) { - operation.setMidHauleLatitude(midHauleLatitude); + operation.setMidHaulLatitude(midHauleLatitude); } public void setMidHauleLongitude(float midHauleLongitude) { - operation.setMidHauleLongitude(midHauleLongitude); + operation.setMidHaulLongitude(midHauleLongitude); } public void setDepthStratum(DepthStratum depthStratum) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/RegionCellAssociationImportModelRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/RegionCellAssociationImportModelRow.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/RegionCellAssociationImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -23,9 +23,6 @@ */ package fr.ifremer.echobase.services.csv; -import fr.ifremer.echobase.entities.data.Cell; -import fr.ifremer.echobase.entities.data.CellImpl; - /** * Bean used as a row for import of {@link RegionCellAssociationImportModel}. * Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModel.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModel.java 2012-02-09 17:07:50 UTC (rev 311) @@ -1,44 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 - 2012 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero 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 Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.csv; - -import fr.ifremer.echobase.entities.data.SampleData; - -/** - * Model to import {@link SampleData}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class SampleDataImportModel extends CsvModelUtil.AbstractImportModel<SampleDataImportModelRow> { - - public SampleDataImportModel(char separator) { - super(separator); - } - - @Override - public SampleDataImportModelRow newEmptyInstance() { - return new SampleDataImportModelRow(); - } -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModelRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModelRow.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -1,38 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 - 2012 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero 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 Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.csv; - -/** - * Bean used as a row for import of {@link SampleDataImportModel}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class SampleDataImportModelRow { - - - public SampleDataImportModelRow() { - } - -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModel.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModel.java 2012-02-09 17:07:50 UTC (rev 311) @@ -1,44 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 - 2012 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero 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 Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.csv; - -import fr.ifremer.echobase.entities.data.Sample; - -/** - * Model to import {@link Sample}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class SampleImportModel extends CsvModelUtil.AbstractImportModel<SampleImportModelRow> { - - public SampleImportModel(char separator) { - super(separator); - } - - @Override - public SampleImportModelRow newEmptyInstance() { - return new SampleImportModelRow(); - } -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModelRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModelRow.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -1,38 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 - 2012 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero 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 Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.csv; - -/** - * Bean used as a row for import of {@link SampleImportModel}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class SampleImportModelRow { - - - public SampleImportModelRow() { - } - -} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModel.java (from rev 307, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModel.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModel.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModel.java 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,87 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.csv; + +import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.Sample; +import fr.ifremer.echobase.entities.data.SampleData; +import fr.ifremer.echobase.entities.references.SexCategory; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; + +import java.util.Map; + +/** + * Model to import {@link SampleData}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class SubSampleImportModel extends CsvModelUtil.AbstractImportModel<SubSampleImportModelRow> { + + + public SubSampleImportModel(char separator, + Map<String, Operation> operationMap, + Map<String, Species> speciesMap, + Map<String, SizeCategory> sizeCategoryMap, + Map<String, SexCategory> sexCategoryMap) { + super(separator); + + /* + operationID + subHaul + baracoudacode + sizeCategory + sexCategory + sampleWeight + numberSampled + + numberAtLength + weightAtLength + units + round + */ + + newIgnoredColumn("subHaul"); + newIgnoredColumn("units"); + newIgnoredColumn("round"); + + newMandatoryColumn("operationID", SubSampleImportModelRow.PROPERTY_OPERATION, CsvModelUtil.newForeignKeyValue(Operation.class, operationMap)); + newMandatoryColumn("baracoudacode", SubSampleImportModelRow.PROPERTY_SPECIES, CsvModelUtil.newForeignKeyValue(Species.class, speciesMap)); + newMandatoryColumn(SubSampleImportModelRow.PROPERTY_SIZE_CATEGORY, CsvModelUtil.newForeignKeyValue(SizeCategory.class, sizeCategoryMap)); + newMandatoryColumn(SubSampleImportModelRow.PROPERTY_SEX_CATEGORY, CsvModelUtil.newForeignKeyValue(SexCategory.class, sexCategoryMap)); + + newMandatoryColumn(Sample.PROPERTY_SAMPLE_WEIGHT, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Sample.PROPERTY_NUMBER_SAMPLED, CsvModelUtil.PRIMITIVE_FLOAT); + + newMandatoryColumn(SubSampleImportModelRow.PROPERTY_NUMBER_AT_LENGTH, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(SubSampleImportModelRow.PROPERTY_WEIGHT_AT_LENGTH, CsvModelUtil.FLOAT); + newMandatoryColumn(SubSampleImportModelRow.PROPERTY_LENGTH_CLASS); + } + + @Override + public SubSampleImportModelRow newEmptyInstance() { + return new SubSampleImportModelRow(); + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModelRow.java (from rev 307, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleDataImportModelRow.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModelRow.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,145 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.csv; + +import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.Sample; +import fr.ifremer.echobase.entities.data.SampleImpl; +import fr.ifremer.echobase.entities.references.SexCategory; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; + +/** + * Bean used as a row for import of {@link SubSampleImportModel}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class SubSampleImportModelRow { + + + public static final String PROPERTY_OPERATION = "operation"; + + public static final String PROPERTY_SPECIES = "species"; + + public static final String PROPERTY_SIZE_CATEGORY = "sizeCategory"; + + public static final String PROPERTY_SEX_CATEGORY = "sexCategory"; + + public static final String PROPERTY_SAMPLE = "sample"; + + public static final String PROPERTY_NUMBER_AT_LENGTH = "numberAtLength"; + + public static final String PROPERTY_WEIGHT_AT_LENGTH = "weightAtLength"; + + public static final String PROPERTY_LENGTH_CLASS = "lengthClass"; + + protected Operation operation; + + protected Species species; + + protected SizeCategory sizeCategory; + + protected SexCategory sexCategory; + + protected final Sample sample; + + protected float numberAtLength; + + protected float weightAtLength; + + protected String lengthClass; + + public SubSampleImportModelRow() { + sample = new SampleImpl(); + } + + public Sample getSample() { + return sample; + } + + public Operation getOperation() { + return operation; + } + + public void setOperation(Operation operation) { + this.operation = operation; + } + + public Species getSpecies() { + return species; + } + + public void setSpecies(Species species) { + this.species = species; + } + + public SizeCategory getSizeCategory() { + return sizeCategory; + } + + public void setSizeCategory(SizeCategory sizeCategory) { + this.sizeCategory = sizeCategory; + } + + public void setNumberSampled(Integer numberSampled) { + sample.setNumberSampled(numberSampled); + } + + public void setSampleWeight(Float sampleWeight) { + sample.setSampleWeight(sampleWeight); + } + + public SexCategory getSexCategory() { + return sexCategory; + } + + public void setSexCategory(SexCategory sexCategory) { + this.sexCategory = sexCategory; + } + + public float getNumberAtLength() { + return numberAtLength; + } + + public void setNumberAtLength(float numberAtLength) { + this.numberAtLength = numberAtLength; + } + + public float getWeightAtLength() { + return weightAtLength; + } + + public void setWeightAtLength(float weightAtLength) { + this.weightAtLength = weightAtLength; + } + + public String getLengthClass() { + return lengthClass; + } + + public void setLengthClass(String lengthClass) { + this.lengthClass = lengthClass; + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModelRow.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModel.java (from rev 307, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModel.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModel.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModel.java 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,77 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.csv; + +import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.Sample; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; + +import java.util.Map; + +/** + * Model to import {@link Sample} of total type. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class TotalSampleImportModel extends CsvModelUtil.AbstractImportModel<TotalSampleImportModelRow> { + + public TotalSampleImportModel(char separator, + Map<String, Operation> operationMap, + Map<String, Species> speciesMap, + Map<String, SizeCategory> sizeCategoryMap) { + super(separator); + + /* + operationID + baracoudacode + sizeCategory + sampleWeight + numberSampled + meanLength + meanWeight + noPerKg + sortedWeight + */ + + newMandatoryColumn("operationID", TotalSampleImportModelRow.PROPERTY_OPERATION, CsvModelUtil.newForeignKeyValue(Operation.class, operationMap)); + newMandatoryColumn("baracoudacode", TotalSampleImportModelRow.PROPERTY_SPECIES, CsvModelUtil.newForeignKeyValue(Species.class, speciesMap)); + newMandatoryColumn(TotalSampleImportModelRow.PROPERTY_SIZE_CATEGORY, CsvModelUtil.newForeignKeyValue(SizeCategory.class, sizeCategoryMap)); + + newMandatoryColumn(Sample.PROPERTY_SAMPLE_WEIGHT, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Sample.PROPERTY_NUMBER_SAMPLED, CsvModelUtil.PRIMITIVE_FLOAT); + + newMandatoryColumn("meanLength", TotalSampleImportModelRow.PROPERTY_MEAN_LENGTH, CsvModelUtil.FLOAT); + newMandatoryColumn("meanWeight", TotalSampleImportModelRow.PROPERTY_MEAN_WEIGHT, CsvModelUtil.FLOAT); + newMandatoryColumn("noPerKg", TotalSampleImportModelRow.PROPERTY_NO_PER_KG, CsvModelUtil.FLOAT); + newMandatoryColumn("sortedWeight", TotalSampleImportModelRow.PROPERTY_SORTED_WEIGHT, CsvModelUtil.PRIMITIVE_FLOAT); + + } + + @Override + public TotalSampleImportModelRow newEmptyInstance() { + return new TotalSampleImportModelRow(); + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModelRow.java (from rev 307, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SampleImportModelRow.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModelRow.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,143 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.csv; + +import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.Sample; +import fr.ifremer.echobase.entities.data.SampleImpl; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; + +/** + * Bean used as a row for import of {@link TotalSampleImportModel}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class TotalSampleImportModelRow { + + public static final String PROPERTY_OPERATION = "operation"; + + public static final String PROPERTY_SPECIES = "species"; + + public static final String PROPERTY_SIZE_CATEGORY = "sizeCategory"; + + public static final String PROPERTY_SAMPLE = "sample"; + + public static final String PROPERTY_MEAN_LENGTH = "meanLength"; + + public static final String PROPERTY_MEAN_WEIGHT = "meanWeight"; + + public static final String PROPERTY_NO_PER_KG = "noPerKg"; + + public static final String PROPERTY_SORTED_WEIGHT = "sortedWeight"; + + protected Float meanLength; + + protected Float meanWeight; + + protected Float noPerKg; + + protected float sortedWeight; + + protected Operation operation; + + protected Species species; + + protected SizeCategory sizeCategory; + + protected final Sample sample; + + public TotalSampleImportModelRow() { + sample = new SampleImpl(); + } + + public Sample getSample() { + return sample; + } + + public Operation getOperation() { + return operation; + } + + public void setOperation(Operation operation) { + this.operation = operation; + } + + public Species getSpecies() { + return species; + } + + public void setSpecies(Species species) { + this.species = species; + } + + public SizeCategory getSizeCategory() { + return sizeCategory; + } + + public void setSizeCategory(SizeCategory sizeCategory) { + this.sizeCategory = sizeCategory; + } + + public void setNumberSampled(Integer numberSampled) { + sample.setNumberSampled(numberSampled); + } + + public void setSampleWeight(Float sampleWeight) { + sample.setSampleWeight(sampleWeight); + } + + public Float getMeanLength() { + return meanLength; + } + + public void setMeanLength(Float meanLength) { + this.meanLength = meanLength; + } + + public Float getMeanWeight() { + return meanWeight; + } + + public void setMeanWeight(Float meanWeight) { + this.meanWeight = meanWeight; + } + + public Float getNoPerKg() { + return noPerKg; + } + + public void setNoPerKg(Float noPerKg) { + this.noPerKg = noPerKg; + } + + public float getSortedWeight() { + return sortedWeight; + } + + public void setSortedWeight(float sortedWeight) { + this.sortedWeight = sortedWeight; + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModelRow.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransectImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransectImportModel.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransectImportModel.java 2012-02-09 17:07:50 UTC (rev 311) @@ -23,6 +23,7 @@ */ package fr.ifremer.echobase.services.csv; +import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.Voyage; import java.util.Map; @@ -35,29 +36,29 @@ */ public class TransectImportModel extends CsvModelUtil.AbstractImportModel<TransectImportModelRow> { - protected final Map<String, Voyage> voyageMap; - public TransectImportModel(char separator, Map<String, Voyage> voyageMap) { super(separator); - this.voyageMap = voyageMap; - newMandatoryColumn(TransectImportModelRow.PROPERTY_TITLE); - newMandatoryColumn(TransectImportModelRow.PROPERTY_TRANSECT_ABSTRACT); - newMandatoryColumn(TransectImportModelRow.PROPERTY_STRATUM); - newMandatoryColumn(TransectImportModelRow.PROPERTY_COMMENT); - newMandatoryColumn("voyageName", TransectImportModelRow.PROPERTY_VOYAGE, CsvModelUtil.newForeignKeyValue(Voyage.class, voyageMap)); + newMandatoryColumn( + "voyageName", TransectImportModelRow.PROPERTY_VOYAGE, + CsvModelUtil.newForeignKeyValue(Voyage.class, voyageMap)); - newMandatoryColumn(TransectImportModelRow.PROPERTY_DATE_CREATED, CsvModelUtil.IMPORT_DAY_TIME2); - newMandatoryColumn(TransectImportModelRow.PROPERTY_TIME_COVERAGE_START, CsvModelUtil.IMPORT_DAY_TIME2); - newMandatoryColumn(TransectImportModelRow.PROPERTY_TIME_COVERAGE_END, CsvModelUtil.IMPORT_DAY_TIME2); + newMandatoryColumn(Transect.PROPERTY_TITLE); + newMandatoryColumn(Transect.PROPERTY_TRANSECT_ABSTRACT); + newMandatoryColumn(Transect.PROPERTY_STRATUM); + newMandatoryColumn(Transect.PROPERTY_COMMENT); - newMandatoryColumn(TransectImportModelRow.PROPERTY_GEOSPATIAL_LON_MIN, CsvModelUtil.PRIMITIVE_FLOAT); - newMandatoryColumn(TransectImportModelRow.PROPERTY_GEOSPATIAL_LAT_MIN, CsvModelUtil.PRIMITIVE_FLOAT); - newMandatoryColumn(TransectImportModelRow.PROPERTY_GEOSPATIAL_VERTICAL_MIN, CsvModelUtil.PRIMITIVE_FLOAT); - newMandatoryColumn(TransectImportModelRow.PROPERTY_GEOSPATIAL_LON_MAX, CsvModelUtil.PRIMITIVE_FLOAT); - newMandatoryColumn(TransectImportModelRow.PROPERTY_GEOSPATIAL_LAT_MAX, CsvModelUtil.PRIMITIVE_FLOAT); - newMandatoryColumn(TransectImportModelRow.PROPERTY_GEOSPATIAL_VERTICAL_MAX, CsvModelUtil.PRIMITIVE_FLOAT); - newMandatoryColumn(TransectImportModelRow.PROPERTY_LINESTRING); + newMandatoryColumn(Transect.PROPERTY_DATE_CREATED, CsvModelUtil.IMPORT_DAY_TIME2); + newMandatoryColumn(Transect.PROPERTY_TIME_COVERAGE_START, CsvModelUtil.IMPORT_DAY_TIME2); + newMandatoryColumn(Transect.PROPERTY_TIME_COVERAGE_END, CsvModelUtil.IMPORT_DAY_TIME2); + + newMandatoryColumn(Transect.PROPERTY_GEOSPATIAL_LON_MIN, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Transect.PROPERTY_GEOSPATIAL_LAT_MIN, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Transect.PROPERTY_GEOSPATIAL_VERTICAL_MIN, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Transect.PROPERTY_GEOSPATIAL_LON_MAX, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Transect.PROPERTY_GEOSPATIAL_LAT_MAX, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Transect.PROPERTY_GEOSPATIAL_VERTICAL_MAX, CsvModelUtil.PRIMITIVE_FLOAT); + newMandatoryColumn(Transect.PROPERTY_LINESTRING); } @Override Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransectImportModelRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransectImportModelRow.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransectImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -23,6 +23,8 @@ */ package fr.ifremer.echobase.services.csv; +import fr.ifremer.echobase.entities.data.Transect; +import fr.ifremer.echobase.entities.data.TransectImpl; import fr.ifremer.echobase.entities.data.Voyage; import java.io.Serializable; @@ -40,104 +42,18 @@ public static final String PROPERTY_VOYAGE = "voyage"; - public static final String PROPERTY_TITLE = "title"; - - public static final String PROPERTY_TRANSECT_ABSTRACT = "transectAbstract"; - - public static final String PROPERTY_COMMENT = "comment"; - - public static final String PROPERTY_DATE_CREATED = "dateCreated"; - - public static final String PROPERTY_GEOSPATIAL_LON_MIN = "geospatialLonMin"; - - public static final String PROPERTY_GEOSPATIAL_LON_MAX = "geospatialLonMax"; - - public static final String PROPERTY_GEOSPATIAL_LAT_MIN = "geospatialLatMin"; - - public static final String PROPERTY_GEOSPATIAL_LAT_MAX = "geospatialLatMax"; - - public static final String PROPERTY_LINESTRING = "linestring"; - - public static final String PROPERTY_GEOSPATIAL_VERTICAL_MIN = "geospatialVerticalMin"; - - public static final String PROPERTY_GEOSPATIAL_VERTICAL_MAX = "geospatialVerticalMax"; - - public static final String PROPERTY_TIME_COVERAGE_START = "timeCoverageStart"; - - public static final String PROPERTY_TIME_COVERAGE_END = "timeCoverageEnd"; - - public static final String PROPERTY_STRATUM = "stratum"; - - protected String title; - - protected String transectAbstract; - - protected String stratum; - - protected String comment; - - protected String linestring; - protected Voyage voyage; - protected Date dateCreated; + protected Transect transect; - protected Date timeCoverageStart; - - protected Date timeCoverageEnd; - - protected float geospatialLonMin; - - protected float geospatialLonMax; - - protected float geospatialLatMin; - - protected float geospatialLatMax; - - protected float geospatialVerticalMin; - - protected float geospatialVerticalMax; - - public String getTitle() { - return title; + public TransectImportModelRow() { + transect = new TransectImpl(); } - public void setTitle(String title) { - this.title = title; + public Transect getTransect() { + return transect; } - public String getTransectAbstract() { - return transectAbstract; - } - - public void setTransectAbstract(String transectAbstract) { - this.transectAbstract = transectAbstract; - } - - public String getStratum() { - return stratum; - } - - public void setStratum(String stratum) { - this.stratum = stratum; - } - - public String getComment() { - return comment; - } - - public void setComment(String comment) { - this.comment = comment; - } - - public String getLinestring() { - return linestring; - } - - public void setLinestring(String linestring) { - this.linestring = linestring; - } - public Voyage getVoyage() { return voyage; } @@ -146,75 +62,59 @@ this.voyage = voyage; } - public Date getDateCreated() { - return dateCreated; + public void setTitle(String title) { + transect.setTitle(title); } - public void setDateCreated(Date dateCreated) { - this.dateCreated = dateCreated; + public void setTransectAbstract(String transectAbstract) { + transect.setTransectAbstract(transectAbstract); } - public Date getTimeCoverageStart() { - return timeCoverageStart; + public void setComment(String comment) { + transect.setComment(comment); } - public void setTimeCoverageStart(Date timeCoverageStart) { - this.timeCoverageStart = timeCoverageStart; + public void setDateCreated(Date dateCreated) { + transect.setDateCreated(dateCreated); } - public Date getTimeCoverageEnd() { - return timeCoverageEnd; - } - - public void setTimeCoverageEnd(Date timeCoverageEnd) { - this.timeCoverageEnd = timeCoverageEnd; - } - - public float getGeospatialLonMin() { - return geospatialLonMin; - } - public void setGeospatialLonMin(float geospatialLonMin) { - this.geospatialLonMin = geospatialLonMin; + transect.setGeospatialLonMin(geospatialLonMin); } - public float getGeospatialLonMax() { - return geospatialLonMax; - } - public void setGeospatialLonMax(float geospatialLonMax) { - this.geospatialLonMax = geospatialLonMax; + transect.setGeospatialLonMax(geospatialLonMax); } - public float getGeospatialLatMin() { - return geospatialLatMin; + public void setGeospatialLatMin(float geospatialLatMin) { + transect.setGeospatialLatMin(geospatialLatMin); } - public void setGeospatialLatMin(float geospatialLatMin) { - this.geospatialLatMin = geospatialLatMin; + public void setGeospatialLatMax(float geospatialLatMax) { + transect.setGeospatialLatMax(geospatialLatMax); } - public float getGeospatialLatMax() { - return geospatialLatMax; + public void setLinestring(String linestring) { + transect.setLinestring(linestring); } - public void setGeospatialLatMax(float geospatialLatMax) { - this.geospatialLatMax = geospatialLatMax; + public void setGeospatialVerticalMin(float geospatialVerticalMin) { + transect.setGeospatialVerticalMin(geospatialVerticalMin); } - public float getGeospatialVerticalMin() { - return geospatialVerticalMin; + public void setGeospatialVerticalMax(float geospatialVerticalMax) { + transect.setGeospatialVerticalMax(geospatialVerticalMax); } - public void setGeospatialVerticalMin(float geospatialVerticalMin) { - this.geospatialVerticalMin = geospatialVerticalMin; + public void setTimeCoverageStart(Date timeCoverageStart) { + transect.setTimeCoverageStart(timeCoverageStart); } - public float getGeospatialVerticalMax() { - return geospatialVerticalMax; + public void setTimeCoverageEnd(Date timeCoverageEnd) { + transect.setTimeCoverageEnd(timeCoverageEnd); } - public void setGeospatialVerticalMax(float geospatialVerticalMax) { - this.geospatialVerticalMax = geospatialVerticalMax; + public void setStratum(String stratum) { + transect.setStratum(stratum); } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransitImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransitImportModel.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransitImportModel.java 2012-02-09 17:07:50 UTC (rev 311) @@ -23,6 +23,7 @@ */ package fr.ifremer.echobase.services.csv; +import fr.ifremer.echobase.entities.data.Transit; import fr.ifremer.echobase.entities.data.Voyage; import java.util.Map; @@ -37,18 +38,15 @@ public static final String TRANSIT_VoyageId = "voyageName"; - protected final Map<String, Voyage> voyageMap; - public TransitImportModel(char separator, Map<String, Voyage> voyageMap) { super(separator); - this.voyageMap = voyageMap; newMandatoryColumn("voyageName", TransitImportModelRow.PROPERTY_VOYAGE, CsvModelUtil.newForeignKeyValue(Voyage.class, voyageMap)); - newMandatoryColumn(TransitImportModelRow.PROPERTY_DESCRIPTION); - newMandatoryColumn(TransitImportModelRow.PROPERTY_START_TIME, CsvModelUtil.DAY_TIME); - newMandatoryColumn(TransitImportModelRow.PROPERTY_END_TIME, CsvModelUtil.DAY_TIME); - newMandatoryColumn(TransitImportModelRow.PROPERTY_START_LOCALITY); - newMandatoryColumn(TransitImportModelRow.PROPERTY_END_LOCALITY); + newMandatoryColumn(Transit.PROPERTY_DESCRIPTION); + newMandatoryColumn(Transit.PROPERTY_START_TIME, CsvModelUtil.DAY_TIME); + newMandatoryColumn(Transit.PROPERTY_END_TIME, CsvModelUtil.DAY_TIME); + newMandatoryColumn(Transit.PROPERTY_START_LOCALITY); + newMandatoryColumn(Transit.PROPERTY_END_LOCALITY); } @Override Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransitImportModelRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransitImportModelRow.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TransitImportModelRow.java 2012-02-09 17:07:50 UTC (rev 311) @@ -24,6 +24,7 @@ package fr.ifremer.echobase.services.csv; import fr.ifremer.echobase.entities.data.Transit; +import fr.ifremer.echobase.entities.data.TransitImpl; import fr.ifremer.echobase.entities.data.Voyage; import java.util.Date; @@ -38,18 +39,10 @@ public static final String PROPERTY_VOYAGE = "voyage"; - public static final String PROPERTY_DESCRIPTION = Transit.PROPERTY_DESCRIPTION; - - public static final String PROPERTY_START_TIME = Transit.PROPERTY_START_TIME; - - public static final String PROPERTY_END_TIME = Transit.PROPERTY_END_TIME; - - public static final String PROPERTY_START_LOCALITY = Transit.PROPERTY_START_LOCALITY; - - public static final String PROPERTY_END_LOCALITY = Transit.PROPERTY_END_LOCALITY; - protected Voyage voyage; + protected final Transit transit; + protected String description; protected String relatedActivity; @@ -62,6 +55,14 @@ protected String endLocality; + public TransitImportModelRow() { + transit = new TransitImpl(); + } + + public Transit getTransit() { + return transit; + } + public Voyage getVoyage() { return voyage; } @@ -70,51 +71,23 @@ this.voyage = voyage; } - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; + transit.setDescription(description); } - public String getRelatedActivity() { - return relatedActivity; - } - - public void setRelatedActivity(String relatedActivity) { - this.relatedActivity = relatedActivity; - } - - public Date getStartTime() { - return startTime; - } - public void setStartTime(Date startTime) { - this.startTime = startTime; + transit.setStartTime(startTime); } - public Date getEndTime() { - return endTime; - } - public void setEndTime(Date endTime) { - this.endTime = endTime; + transit.setEndTime(endTime); } - public String getStartLocality() { - return startLocality; - } - public void setStartLocality(String startLocality) { - this.startLocality = startLocality; + transit.setStartLocality(startLocality); } - public String getEndLocality() { - return endLocality; - } - public void setEndLocality(String endLocality) { - this.endLocality = endLocality; + transit.setEndLocality(endLocality); } } Modified: trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties =================================================================== --- trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties 2012-02-09 17:07:50 UTC (rev 311) @@ -20,14 +20,19 @@ echobase.common.operationMetadataFile= echobase.common.regionsFile= echobase.common.resultsImportMode.acoustic= +echobase.common.resultsImportMode.region= echobase.common.resultsImportMode.voyage= echobase.common.sampleFile= echobase.common.subSampleFile= +echobase.common.totalSampleFile= echobase.common.transectFile= echobase.common.transitFile= echobase.common.voyageFile= echobase.importError.can.only.import.one.voyage.atime= +echobase.importError.duplicate.sample= echobase.importError.fromFile= echobase.importError.no.transit.between.date= echobase.importError.no.transit.imported= echobase.importError.no.voyage.imported= +echobase.importError.transect.notfound= +echobase.importError.transit.notfound= Modified: trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties =================================================================== --- trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties 2012-02-09 17:07:50 UTC (rev 311) @@ -1,7 +1,8 @@ echobase.common.associationFile=Fichier d'associations de cellules -echobase.common.cellPositionReference.end=Début +echobase.common.biometrySampleFile=Fichier BiometrySample +echobase.common.cellPositionReference.end=Fin echobase.common.cellPositionReference.mid=Milieu -echobase.common.cellPositionReference.start=Fin +echobase.common.cellPositionReference.start=Début echobase.common.commonDataImportMode.all=Import Voyage / Transit / Transects echobase.common.commonDataImportMode.transect=Import Transects echobase.common.echotypeFile=Fichier echotype @@ -19,11 +20,18 @@ echobase.common.operationMetadataFile=Fichier Méta-données opération echobase.common.regionsFile=Fichier des régions echobase.common.resultsImportMode.acoustic=Import des résultats acoustiques +echobase.common.resultsImportMode.region=Import des cellules régions d'un voyage echobase.common.resultsImportMode.voyage=Import des résultats du voyage -echobase.common.sampleDatafile=Fichier SampleData -echobase.common.sampleFile=Fichier Sample +echobase.common.subSampleFile=Fichier SubSample +echobase.common.totalSampleFile=Fichier TotalSample echobase.common.transectFile=Fichier des transects echobase.common.transitFile=Fichier des transits echobase.common.voyageFile=Fichier des voyages +echobase.importError.can.only.import.one.voyage.atime=Vous ne pouvez pas importer plus d'un voyage à la fois. +echobase.importError.duplicate.sample=L'opération %s ne peut pas contenir deux échantillons de même type %s, espèce %s et taille %s echobase.importError.fromFile=Erreur lors de l'import du fichier %s \: %s echobase.importError.no.transit.between.date=Pas de transit trouvé pour le voyage %s entre les dates %s et %s +echobase.importError.no.transit.imported=Aucun transit importé +echobase.importError.no.voyage.imported=Aucun voyage importé +echobase.importError.transect.notfound=Transit non trouvé pour la campagne %s et la date %s et le navire %s +echobase.importError.transit.notfound=Transit non trouvé pour la campagne %s et la date %s Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearLoader.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearLoader.java 2012-02-09 17:07:50 UTC (rev 311) @@ -58,7 +58,7 @@ model.newMandatoryColumn("ValidSince", Gear.PROPERTY_VALID_SINCE, CsvModelUtil.IMPORT_DAY); model.newMandatoryColumn("InvalidSince", Gear.PROPERTY_INVALID_SINCE, CsvModelUtil.IMPORT_DAY); model.newMandatoryColumn("IsFishingGear", Gear.PROPERTY_FISHING_GEAR, CsvModelUtil.INT_TO_BOOLEAN_PARSER); - model.newMandatoryColumn("gearLabel", Gear.PROPERTY_LABEL); + model.newMandatoryColumn("gearLabel", Gear.PROPERTY_GEAR_CODE); model.newMandatoryColumn("GearName", Gear.PROPERTY_NAME); model.newMandatoryColumn("Description", Gear.PROPERTY_DESCRIPTION); model.addDefaultColumn("UpdateDate", Gear.PROPERTY_UPDATE_DATE, Date.class); Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearMetadataLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearMetadataLoader.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearMetadataLoader.java 2012-02-09 17:07:50 UTC (rev 311) @@ -58,7 +58,7 @@ /* MetadataType;MetadataTypeMeaning;MetadataTypeGroup;OperationEvent */ - model.newMandatoryColumn("MetadataType", GearMetadata.PROPERTY_TYPE); + model.newMandatoryColumn("MetadataType", GearMetadata.PROPERTY_NAME); model.newMandatoryColumn("MetadataTypeMeaning", GearMetadata.PROPERTY_MEANING); model.newMandatoryColumn("MetadataTypeGroup", GearMetadata.PROPERTY_METADATA_GROUP); model.addForeignKeyForImport("OperationEvent", GearMetadata.PROPERTY_OPERATION_EVENT, OperationEvent.class, events, EchoBaseFunctions.OPERATION_EVENT_NAME); Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationLoader.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationLoader.java 2012-02-09 17:07:50 UTC (rev 311) @@ -41,7 +41,6 @@ import fr.ifremer.echobase.entities.references.Gear; import fr.ifremer.echobase.entities.references.GearMetadata; import fr.ifremer.echobase.entities.references.GearMetadataDAO; -import fr.ifremer.echobase.entities.references.OperationEvent; import fr.ifremer.echobase.entities.references.OperationMetadata; import fr.ifremer.echobase.entities.references.OperationMetadataDAO; import fr.ifremer.echobase.tools.FileType; @@ -177,29 +176,23 @@ operationMetadataDAO.findByName("DielPeriod"); Preconditions.checkNotNull(dielPeriodOperationMeta); //SONDEDEB - startWaterDepthOperationMeta = operationMetadataDAO.findByProperties( - OperationMetadata.PROPERTY_NAME, "WaterDepth", - OperationMetadata.PROPERTY_OPERATION_EVENT + "." + OperationEvent.PROPERTY_NAME, "ShootingStart" - ); + startWaterDepthOperationMeta = operationMetadataDAO.findByName("WaterDepthShoot"); Preconditions.checkNotNull(startWaterDepthOperationMeta); //SONDEFIN - endWaterDepthOperationMeta = operationMetadataDAO.findByProperties( - OperationMetadata.PROPERTY_NAME, "WaterDepth", - OperationMetadata.PROPERTY_OPERATION_EVENT + "." + OperationEvent.PROPERTY_NAME, "HaulingEnd" - ); + endWaterDepthOperationMeta = operationMetadataDAO.findByName("WaterDepthHaul"); Preconditions.checkNotNull(endWaterDepthOperationMeta); GearMetadataDAO gearMetadataDAO = (GearMetadataDAO) getDAO(GearMetadata.class); //LFUNES - cableLengthGearMeta = gearMetadataDAO.findByType("CableLength"); + cableLengthGearMeta = gearMetadataDAO.findByName("CableLength"); Preconditions.checkNotNull(cableLengthGearMeta); //VMIN - minSpeedGearMeta = gearMetadataDAO.findByType("MinSpeed"); + minSpeedGearMeta = gearMetadataDAO.findByName("MinSpeed"); Preconditions.checkNotNull(minSpeedGearMeta); //VMAX - maxSpeedGearMeta = gearMetadataDAO.findByType("MaxSpeed"); + maxSpeedGearMeta = gearMetadataDAO.findByName("MaxSpeed"); Preconditions.checkNotNull(maxSpeedGearMeta); dao = getDAO(); @@ -326,8 +319,8 @@ Operation.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, shootingEndLongitude, Operation.PROPERTY_GEAR_SHOOTING_START_TIME, shootingStartTime, Operation.PROPERTY_GEAR_SHOOTING_END_TIME, shootingEndTime, - Operation.PROPERTY_MID_HAULE_LATITUDE, midHauleLatitude, - Operation.PROPERTY_MID_HAULE_LONGITUDE, midHauleLongitude, + Operation.PROPERTY_MID_HAUL_LATITUDE, midHauleLatitude, + Operation.PROPERTY_MID_HAUL_LONGITUDE, midHauleLongitude, Operation.PROPERTY_COMMENT, comment ); Modified: trunk/echobase-tools/src/test/resources/csv/new/input-OperationMetadata.csv =================================================================== --- trunk/echobase-tools/src/test/resources/csv/new/input-OperationMetadata.csv 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-tools/src/test/resources/csv/new/input-OperationMetadata.csv 2012-02-09 17:07:50 UTC (rev 311) @@ -1,5 +1,5 @@ MetadataType;MetadataTypeMeaning;MetadataTypeGroup;OperationEvent MeanWaterDepth;Mean water depth during operation;Depth;Average DielPeriod;1 : day, 0 : night;Diel;Global -WaterDepth;Water depth at the beginning of the operation;Depth;ShootingStart -WaterDepth;Water depth at the end of the operation;Depth;HaulingEnd \ No newline at end of file +WaterDepthShoot;Water depth at the beginning of the operation;Depth;ShootingStart +WaterDepthHaul;Water depth at the end of the operation;Depth;HaulingEnd \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2012-02-09 17:07:50 UTC (rev 311) @@ -29,8 +29,8 @@ import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.EchoBaseUserImpl; import fr.ifremer.echobase.entities.meta.DbMeta; +import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseServiceContext; -import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseServiceFactory; import fr.ifremer.echobase.services.UserService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java 2012-02-09 17:07:50 UTC (rev 311) @@ -29,9 +29,9 @@ import fr.ifremer.echobase.I18nAble; import fr.ifremer.echobase.InputFile; import fr.ifremer.echobase.services.DecoratorService; +import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseService; import fr.ifremer.echobase.services.EchoBaseServiceContext; -import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseServiceFactory; import fr.ifremer.echobase.ui.EchoBaseApplicationContext; import fr.ifremer.echobase.ui.EchoBaseSession; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractLaunchImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractLaunchImport.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractLaunchImport.java 2012-02-09 17:07:50 UTC (rev 311) @@ -23,12 +23,17 @@ */ package fr.ifremer.echobase.ui.actions.importData; +import fr.ifremer.echobase.InputFile; import fr.ifremer.echobase.services.AbstractImportDataService; +import fr.ifremer.echobase.services.CsvImportResult; +import fr.ifremer.echobase.services.ImportException; import fr.ifremer.echobase.services.configurations.AbstractImportConfiguration; import fr.ifremer.echobase.ui.actions.AbstractWaitAndExecAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.Map; + /** * TODO * @@ -48,6 +53,8 @@ protected transient S service; + protected Map<InputFile, CsvImportResult> result; + protected AbstractLaunchImport(Class<M> modelType, Class<S> serviceType) { this.modelType = modelType; this.serviceType = serviceType; @@ -58,6 +65,10 @@ return getEchoBaseSession().getImportDataConfiguration(modelType); } + public Map<InputFile, CsvImportResult> getResult() { + return result; + } + @Override public void prepare() throws Exception { @@ -73,14 +84,16 @@ } try { - service.startImport(model, getEchoBaseSession().getEchoBaseUser()); + result = service.doImport(model, + getEchoBaseSession().getEchoBaseUser()); service.commitTransaction("Could not commit imported data"); - } catch (Exception e) { + } catch (ImportException e) { if (log.isErrorEnabled()) { - log.error("Could not do import ", e); + log.error("Error while import ", e); } + addActionError(e.getMessage()); } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAccousticData.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAccousticData.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAccousticData.java 2012-02-09 17:07:50 UTC (rev 311) @@ -44,9 +44,6 @@ /** Universe of existing voyages. */ protected Map<String, String> voyages; -// /** Universe of existing vessels. */ -// protected Map<String, String> vessels; - protected Map<String, String> cellPositionReferences; public ConfigureAccousticData() { @@ -67,7 +64,6 @@ newService(EchoBaseServiceSupport.class); voyages = loadSortAndDecorate(service, Voyage.class); -// vessels = loadSortAndDecorate(service, Vessel.class); cellPositionReferences = decorateEnums(CellPositionReference.values()); if (getModel().getCellPositionReference() == null) { @@ -82,10 +78,6 @@ return voyages; } -// public Map<String, String> getVessels() { -// return vessels; -// } - public Map<String, String> getCellPositionReferences() { return cellPositionReferences; } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesData.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesData.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesData.java 2012-02-09 17:07:50 UTC (rev 311) @@ -78,27 +78,39 @@ return vessels; } - public void setSampleFile(File file) { - getModel().getSampleFile().setFile(file); + public void setTotalSampleFile(File file) { + getModel().getTotalSampleFile().setFile(file); } - public void setSampleFileContentType(String contentType) { - getModel().getSampleFile().setContentType(contentType); + public void setTotalSampleFileContentType(String contentType) { + getModel().getTotalSampleFile().setContentType(contentType); } - public void setSampleFileFileName(String fileName) { - getModel().getSampleFile().setFileName(fileName); + public void setTotalSampleFileFileName(String fileName) { + getModel().getTotalSampleFile().setFileName(fileName); } - public void setSampleDataFile(File file) { - getModel().getSampleDataFile().setFile(file); + public void setSubSampleFile(File file) { + getModel().getSubSampleFile().setFile(file); } - public void setSampleDataFileContentType(String contentType) { - getModel().getSampleDataFile().setContentType(contentType); + public void setSubSampleFileContentType(String contentType) { + getModel().getSubSampleFile().setContentType(contentType); } - public void setSampleDataFileFileName(String fileName) { - getModel().getSampleDataFile().setFileName(fileName); + public void setSubSampleFileFileName(String fileName) { + getModel().getSubSampleFile().setFileName(fileName); } + + public void setBiometrySampleFile(File file) { + getModel().getBiometrySampleFile().setFile(file); + } + + public void setBiometrySampleFileContentType(String contentType) { + getModel().getBiometrySampleFile().setContentType(contentType); + } + + public void setBiometrySampleFileFileName(String fileName) { + getModel().getBiometrySampleFile().setFileName(fileName); + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureOperation.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureOperation.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureOperation.java 2012-02-09 17:07:50 UTC (rev 311) @@ -24,6 +24,7 @@ package fr.ifremer.echobase.ui.actions.importData; import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.configurations.OperationImportConfiguration; @@ -43,6 +44,9 @@ /** Universe of existing voyages. */ protected Map<String, String> voyages; + /** Universe of existing vessels. */ + protected Map<String, String> vessels; + public ConfigureOperation() { super(OperationImportConfiguration.class); } @@ -61,6 +65,7 @@ newService(EchoBaseServiceSupport.class); voyages = loadSortAndDecorate(service, Voyage.class); + vessels = loadSortAndDecorate(service, Vessel.class); return INPUT; } @@ -68,6 +73,10 @@ return voyages; } + public Map<String, String> getVessels() { + return vessels; + } + public void setOperationFile(File file) { getModel().getOperationFile().setFile(file); } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureResults.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureResults.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureResults.java 2012-02-09 17:07:50 UTC (rev 311) @@ -92,6 +92,12 @@ return execute(); } + @InputConfig(methodName = "input") + public String modeRegion() throws Exception { + + return execute(); + } + public Map<String, String> getVoyages() { return voyages; } Deleted: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetTransits.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetTransits.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetTransits.java 2012-02-09 17:07:50 UTC (rev 311) @@ -1,92 +0,0 @@ -/* - * #%L - * EchoBase :: UI - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 - 2012 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero 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 Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.ui.actions.importData; - -import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; -import fr.ifremer.echobase.entities.data.Transit; -import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; -import org.apache.commons.lang3.StringUtils; -import org.nuiton.util.decorator.Decorator; - -import java.util.Map; - -/** - * Given a voyage, obtain all his transits. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class GetTransits extends EchoBaseActionSupport { - - private static final long serialVersionUID = 1L; - - - protected String voyageId; - - protected Map<String, String> transits; - - public void setVoyageId(String voyageId) { - this.voyageId = voyageId; - } - - public Map<String, String> getTransits() { - return transits; - } - - @Override - public String execute() throws Exception { - - transits = Maps.newLinkedHashMap(); - - if (StringUtils.isNotEmpty(voyageId)) { - - EchoBaseServiceSupport service = - newService(EchoBaseServiceSupport.class); - - Voyage voyage = service.getEntityById(Voyage.class, voyageId); - - Preconditions.checkNotNull( - voyage, - "Could not find voyage with id " + voyageId); - - if (!voyage.isTransitEmpty()) { - - Decorator<Transit> decorator = - getDecoratorService().getDecorator(getLocale(), - Transit.class, - null); - - for (Transit transit : voyage.getTransit()) { - String value = decorator.toString(transit); - transits.put(transit.getTopiaId(), value); - } - } - } - - return SUCCESS; - } -} Deleted: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVessels.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVessels.java 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVessels.java 2012-02-09 17:07:50 UTC (rev 311) @@ -1,94 +0,0 @@ -/* - * #%L - * EchoBase :: UI - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 - 2012 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero 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 Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.ui.actions.importData; - -import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; -import fr.ifremer.echobase.entities.data.Transect; -import fr.ifremer.echobase.entities.data.Transit; -import fr.ifremer.echobase.entities.references.Vessel; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; -import org.apache.commons.lang3.StringUtils; -import org.nuiton.util.decorator.Decorator; - -import java.util.Map; - -/** - * Given a voyage, obtain all his transits. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class GetVessels extends EchoBaseActionSupport { - - private static final long serialVersionUID = 1L; - - - protected String transitId; - - protected Map<String, String> vessels; - - public void setTransitId(String transitId) { - this.transitId = transitId; - } - - public Map<String, String> getVessels() { - return vessels; - } - - @Override - public String execute() throws Exception { - - vessels = Maps.newLinkedHashMap(); - - if (StringUtils.isNotEmpty(transitId)) { - - EchoBaseServiceSupport service = - newService(EchoBaseServiceSupport.class); - - Transit transit = service.getEntityById(Transit.class, transitId); - - Preconditions.checkNotNull(transit, - "Could not find transit with id " + transitId); - if (!transit.isTransectEmpty()) { - - Decorator<Vessel> decorator = - getDecoratorService().getDecorator(getLocale(), - Vessel.class, - null); - - for (Transect transect : transit.getTransect()) { - String id = transect.getTopiaId(); - if (!vessels.containsKey(id)) { - String value = decorator.toString(transect.getVessel()); - vessels.put(id, value); - } - } - } - } - - return SUCCESS; - } -} Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,94 @@ +/* + * #%L + * EchoBase :: UI + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.ui.actions.importData; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.Vessel; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.util.decorator.Decorator; + +import java.util.Map; +import java.util.Set; + +/** + * Get all vessels used in a voyage. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class GetVesselsForVoyage extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + /** Selected voyage id. */ + protected String voyageId; + + protected Map<String, String> vessels; + + public void setVoyageId(String voyageId) { + this.voyageId = voyageId; + } + + public Map<String, String> getVessels() { + return vessels; + } + + @Override + public String execute() throws Exception { + + vessels = Maps.newLinkedHashMap(); + + if (StringUtils.isNotEmpty(voyageId)) { + + EchoBaseServiceSupport service = + newService(EchoBaseServiceSupport.class); + + Voyage voyage = service.getEntityById(Voyage.class, voyageId); + + Preconditions.checkNotNull(voyage, + "Could not find voyage with id " + voyageId); + if (!voyage.isTransitEmpty()) { + + Decorator<Vessel> decorator = + getDecoratorService().getDecorator(getLocale(), + Vessel.class, + null); + + Set<Vessel> allVessels = voyage.getAllVessels(); + + for (Vessel vessel : allVessels) { + String value = decorator.toString(vessel); + vessels.put(vessel.getTopiaId(), value); + } + + } + } + + return SUCCESS; + } +} \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/resources/config/struts-importData.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-importData.xml 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/resources/config/struts-importData.xml 2012-02-09 17:07:50 UTC (rev 311) @@ -75,18 +75,12 @@ <result>/WEB-INF/jsp/importData/result{1}.jsp</result> </action> - <!-- Get transits for a given voyage id --> - <action name="getTransits" - class="fr.ifremer.echobase.ui.actions.importData.GetTransits"> + <!-- Get all vessels used by any transects of a voyage --> + <action name="getVesselsForVoyage" + class="fr.ifremer.echobase.ui.actions.importData.GetVesselsForVoyage"> <result type="json"/> </action> - <!-- Get vessels (of transects) for a given transit id --> - <action name="getVessels" - class="fr.ifremer.echobase.ui.actions.importData.GetVessels"> - <result type="json"/> - </action> - <!-- Create a new mission --> <action name="createMission" class="fr.ifremer.echobase.ui.actions.importData.CreateMission"> Modified: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesData-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesData-validation.xml 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesData-validation.xml 2012-02-09 17:07:50 UTC (rev 311) @@ -32,18 +32,25 @@ </field-validator> </field> - <field name="sampleFile"> + <field name="totalSampleFile"> <field-validator type="nfieldexpression"> - <param name="expression">model.sampleFile.file!=null</param> - <message key="echobase.error.import.sampleFile.required"/> + <param name="expression">model.totalSampleFile.file!=null</param> + <message key="echobase.error.import.totalSampleFile.required"/> </field-validator> </field> - <field name="sampleDataFile"> + <field name="subSampleFile"> <field-validator type="nfieldexpression"> - <param name="expression">model.sampleDataFile.file!=null</param> - <message key="echobase.error.import.sampleDataFile.required"/> + <param name="expression">model.subSampleFile.file!=null</param> + <message key="echobase.error.import.subSampleFile.required"/> </field-validator> </field> + <field name="biometrySampleFile"> + <field-validator type="nfieldexpression"> + <param name="expression">model.biometrySampleFile.file!=null</param> + <message key="echobase.error.import.biometrySampleFile.required"/> + </field-validator> + </field> + </validators> \ No newline at end of file Added: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureResults-ConfigureResults-modeRegion-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureResults-ConfigureResults-modeRegion-validation.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureResults-ConfigureResults-modeRegion-validation.xml 2012-02-09 17:07:50 UTC (rev 311) @@ -0,0 +1,49 @@ +<!-- + #%L + EchoBase :: UI + + $Id: ConfigureResults-ConfigureResults-modeVoyage-validation.xml 304 2012-02-02 22:58:29Z tchemit $ + $HeadURL: http://svn.forge.codelutin.com/svn/echobase/trunk/echobase-ui/src/main/resou... $ + %% + Copyright (C) 2011 Ifremer, Codelutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero 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 Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% + --> +<!DOCTYPE validators PUBLIC + "-//OpenSymphony Group//XWork Validator 1.0.2//EN" + "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> +<validators> + + <field name="model.voyageId"> + <field-validator type="nrequiredstring"> + <message key="echobase.error.import.voyage.required"/> + </field-validator> + </field> + + <field name="regionsFile"> + <field-validator type="nfieldexpression"> + <param name="expression">model.regionsFile.file!=null</param> + <message key="echobase.error.import.regionsFile.required"/> + </field-validator> + </field> + + <field name="associationFile"> + <field-validator type="nfieldexpression"> + <param name="expression">model.associationFile.file!=null</param> + <message key="echobase.error.import.associationFile.required"/> + </field-validator> + </field> + +</validators> \ No newline at end of file Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-02-09 17:07:50 UTC (rev 311) @@ -68,6 +68,7 @@ echobase.error.import.acquisitionSoftwareVersionME70.required=acquisitionSoftwareVersionME70 non renseigné echobase.error.import.areaOfOperation.required=La sélection d'une zone d'opération est obligatoire echobase.error.import.associationFile.required=La sélection d'un fichier Association est obligatoire +echobase.error.import.biometrySampleFile.required=La sélection d'un fichier BiometrySample est obligatoire echobase.error.import.cellPositionReference.required=La sélection d'un cellPositionReference est obligatoire echobase.error.import.datum.required=Datum de la campagne non rengeigné echobase.error.import.digitThreshold.required=digitThreshold non renseigné @@ -75,8 +76,6 @@ echobase.error.import.echotypeFile.required=La sélection d'un fichier Echotype est obligatoire echobase.error.import.gearMetadataFile.required=La sélection d'un fichier GearMetadata est obligatoire echobase.error.import.importMode.required=Le mode d'import est obligatoire -echobase.error.import.individualDataFile.required=La sélection d'un fichier individualData est obligatoire -echobase.error.import.lengthAgeKeyFile.required=La sélection d'un fichier lengthAgeKey est obligatoire echobase.error.import.lengthWeightKeyFile.required=La sélection d'un fichier lengthWeightKey est obligatoire echobase.error.import.loggedDataDatatype.required=loggedDataDatatype non renseigné echobase.error.import.loggedDataFormat.required=loggedDataFormat non renseigné @@ -92,11 +91,11 @@ echobase.error.import.processingTemplate.required=processingTemplate non renseigné echobase.error.import.regionsFile.required=La sélection d'un fichier Region est obligatoire echobase.error.import.resultImportFile.required=Veuillez donner au moins un fichier à importer -echobase.error.import.sampleDataFile.required=La sélection d'un fichier SampleData est obligatoire -echobase.error.import.sampleFile.required=La sélection d'un fichier Sample est obligatoire echobase.error.import.soundSpeedCalculationsER60.required=soundSpeedCalculationsER60 non renseigné echobase.error.import.soundSpeedCalculationsME70.required=soundSpeedCalculationsME70 non renseigné echobase.error.import.sounderConstant.required=sounderConstant non renseigné +echobase.error.import.subSampleFile.required=La sélection d'un fichier SubSample est obligatoire +echobase.error.import.totalSampleFile.required=La sélection d'un fichier Sample est obligatoire echobase.error.import.transceiverAcquisitionAbsorptionDescription.required=transceiverAcquisitionAbsorptionDescription non renseigné echobase.error.import.transectBinUnitsPingAxis.required=BinUnitsPingAxis des transtects non rengeigné echobase.error.import.transectFile.required=La sélection d'un fichier Transect est obligatoire Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureAccousticData.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureAccousticData.jsp 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureAccousticData.jsp 2012-02-09 17:07:50 UTC (rev 311) @@ -36,14 +36,11 @@ jQuery(document).ready(function () { - $.autoSelectVoyageTransitAndVessel( + $.autoSelectVoyageAndVessel( $('[name="model.voyageId"]'), - $('[name="model.transitId"]'), $('[name="model.vesselId"]'), - '<s:url action="getTransits" namespace="/importData"/>', - '<s:url action="getVessels" namespace="/importData"/>', + '<s:url action="getVesselsForVoyage" namespace="/importData"/>', '<s:property value="model.voyageId"/>', - '<s:property value="model.transitId"/>', '<s:property value="model.vesselId"/>' ); }); @@ -60,9 +57,6 @@ label='%{getText("echobase.common.voyage")}' list="voyages" headerKey="" headerValue=""/> - <sj:select key="model.transitId" required="true" - label='%{getText("echobase.common.transit")}'/> - <sj:select key="model.vesselId" required="true" label='%{getText("echobase.common.vessel")}'/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureCatchesData.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureCatchesData.jsp 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureCatchesData.jsp 2012-02-09 17:07:50 UTC (rev 311) @@ -23,6 +23,9 @@ --%> <%@page contentType="text/html" pageEncoding="UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> +<%@ taglib prefix="sj" uri="/struts-jquery-tags" %> +<script type="text/javascript" + src="<s:url value='/js/gridHelper.js' />"></script> <title> Configuration <s:text name="echobase.common.importDataMode.catchesData"/> @@ -31,7 +34,13 @@ <script type="text/javascript"> jQuery(document).ready(function () { - + $.autoSelectVoyageAndVessel( + $('[name="model.voyageId"]'), + $('[name="model.vesselId"]'), + '<s:url action="getVesselsForVoyage" namespace="/importData"/>', + '<s:property value="model.voyageId"/>', + '<s:property value="model.vesselId"/>' + ); }); </script> @@ -46,15 +55,17 @@ label='%{getText("echobase.common.voyage")}' list="voyages" headerKey="" headerValue=""/> - <s:select key="model.vesselId" required="true" - label='%{getText("echobase.common.vessel")}' - list="vessels" headerKey="" headerValue=""/> + <sj:select key="model.vesselId" required="true" + label='%{getText("echobase.common.vessel")}'/> - <s:file key="sampleFile" required="true" - label='%{getText("echobase.common.sampleFile")}'/> + <s:file key="totalSampleFile" required="true" + label='%{getText("echobase.common.totalSampleFile")}'/> - <s:file key="sampleDataFile" required="true" - label='%{getText("echobase.common.sampleDataFile")}'/> + <s:file key="subSampleFile" required="true" + label='%{getText("echobase.common.subSampleFile")}'/> + + <s:file key="biometrySampleFile" required="true" + label='%{getText("echobase.common.biometrySampleFile")}'/> </fieldset> <br/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureOperation.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureOperation.jsp 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureOperation.jsp 2012-02-09 17:07:50 UTC (rev 311) @@ -34,14 +34,11 @@ <script type="text/javascript"> jQuery(document).ready(function () { - $.autoSelectVoyageTransitAndVessel( + $.autoSelectVoyageAndVessel( $('[name="model.voyageId"]'), - $('[name="model.transitId"]'), $('[name="model.vesselId"]'), - '<s:url action="getTransits" namespace="/importData"/>', - '<s:url action="getVessels" namespace="/importData"/>', + '<s:url action="getVesselsForVoyage" namespace="/importData"/>', '<s:property value="model.voyageId"/>', - '<s:property value="model.transitId"/>', '<s:property value="model.vesselId"/>' ); }); @@ -59,9 +56,6 @@ label='%{getText("echobase.common.voyage")}' list="voyages" headerKey="" headerValue=""/> - <sj:select key="model.transitId" required="true" - label='%{getText("echobase.common.transit")}'/> - <sj:select key="model.vesselId" required="true" label='%{getText("echobase.common.vessel")}'/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureResults.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureResults.jsp 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureResults.jsp 2012-02-09 17:07:50 UTC (rev 311) @@ -23,7 +23,9 @@ --%> <%@page contentType="text/html" pageEncoding="UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> - +<%@ taglib prefix="sj" uri="/struts-jquery-tags" %> +<script type="text/javascript" + src="<s:url value='/js/gridHelper.js' />"></script> <title> Configuration <s:text name="echobase.common.importDataMode.results"/> </title> @@ -40,6 +42,15 @@ var incomingVal = $('[name="model.importMode"][checked="checked"]').val(); $('#' + incomingVal).show(); + + $.autoSelectVoyageAndVessel( + $('#ACOUSTIC_model_voyageId'), + $('[name="model.vesselId"]'), + '<s:url action="getVesselsForVoyage" namespace="/importData"/>', + '<s:property value="model.voyageId"/>', + '<s:property value="model.vesselId"/>' + ); + }); </script> @@ -78,6 +89,34 @@ </s:form> +<s:form id="REGION" namespace="/importData" method="POST" + enctype="multipart/form-data" cssClass="hidden importMode"> + + <fieldset> + <legend> + <s:text name="echobase.legend.importData.configure"/> + </legend> + + <s:hidden key="model.importMode" value="REGION" label=''/> + + <s:select key="model.voyageId" required="true" + label='%{getText("echobase.common.voyage")}' + list="voyages" headerKey="" headerValue=""/> + + <s:file key="regionsFile" required="true" + label='%{getText("echobase.common.regionsFile")}'/> + + <s:file key="associationFile" required="true" + label='%{getText("echobase.common.associationFile")}'/> + + </fieldset> + + <br/> + <s:submit action="ConfigureResults-modeRegion" + value='%{getText("echobase.action.import")}'/> + +</s:form> + <s:form id="ACOUSTIC" namespace="/importData" method="POST" enctype="multipart/form-data" cssClass="hidden importMode"> @@ -92,9 +131,8 @@ label='%{getText("echobase.common.voyage")}' list="voyages" headerKey="" headerValue=""/> - <s:select key="model.vesselId" required="true" - label='%{getText("echobase.common.vessel")}' - list="vessels" headerKey="" headerValue=""/> + <sj:select key="model.vesselId" required="true" + label='%{getText("echobase.common.vessel")}'/> <s:file key="regionsFile" required="true" label='%{getText("echobase.common.regionsFile")}'/> Modified: trunk/echobase-ui/src/main/webapp/js/gridHelper.js =================================================================== --- trunk/echobase-ui/src/main/webapp/js/gridHelper.js 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/echobase-ui/src/main/webapp/js/gridHelper.js 2012-02-09 17:07:50 UTC (rev 311) @@ -168,52 +168,31 @@ }, - // auto-selection des voyages - transit - vessel - autoSelectVoyageTransitAndVessel:function (voyageSelectBox, transitSelectBox, vesselSelectBox, getTransitsUrl, getVesselsUrl, voyageId, transitId, vesselId) { + // auto-selection des voyages - vessel + autoSelectVoyageAndVessel:function (voyageSelectBox, vesselSelectBox, getVesselsUrl, voyageId, vesselId) { - voyageSelectBox.change({transitSelectBox:transitSelectBox, - vesselSelectBox:vesselSelectBox, - getTransitsUrl:getTransitsUrl}, function (event) { + voyageSelectBox.change({vesselSelectBox:vesselSelectBox, + getVesselsUrl:getVesselsUrl}, function (event) { - $.updateSelectBoxContent(event.data.getTransitsUrl, + $.updateSelectBoxContent(event.data.getVesselsUrl, {voyageId:this.value}, - 'transits', - event.data.transitSelectBox + 'vessels', + event.data.vesselSelectBox ); - event.data.vesselSelectBox.html(""); }); - transitSelectBox.change({vesselSelectBox:vesselSelectBox, - getVesselsUrl:getVesselsUrl}, function (event) { - - $.updateSelectBoxContent(event.data.getVesselsUrl, - {transitId:this.value}, - 'vessels', - event.data.vesselSelectBox); - }); - if (voyageId) { voyageSelectBox.change(voyageId); - $.updateSelectBoxContent( - getTransitsUrl, - {voyageId:voyageId}, - 'transits', - transitSelectBox, function () { - if (transitId) { + $.updateSelectBoxContent(getVesselsUrl, + {voyageId:voyageId}, + 'vessels', + vesselSelectBox, function () { - transitSelectBox.val(transitId); - $.updateSelectBoxContent( - getVesselsUrl, - {transitId:transitId}, - 'vessels', - vesselSelectBox, function () { + if (vesselId) { - if (vesselId) { - vesselSelectBox.val(vesselId); - } - }); + vesselSelectBox.val(vesselId); } } ); @@ -253,8 +232,8 @@ addEvenAndOddClasses:function (gridId) { return $(document).addEvenAndOddClasses(gridId); }, - autoSelectVoyageTransitAndVessel:function (voyageSelectBox, transitSelectBox, vesselSelectBox, getTransitsUrl, getVesselsUrl, voyageId, transitId, vesselId) { - return $(document).autoSelectVoyageTransitAndVessel(voyageSelectBox, transitSelectBox, vesselSelectBox, getTransitsUrl, getVesselsUrl, voyageId, transitId, vesselId); + autoSelectVoyageAndVessel:function (voyageSelectBox, vesselSelectBox, getVesselsUrl, voyageId, vesselId) { + return $(document).autoSelectVoyageAndVessel(voyageSelectBox, vesselSelectBox, getVesselsUrl, voyageId, vesselId); } }); })(jQuery); Modified: trunk/src/doc/reunions/reunion-2012-02-08.txt =================================================================== --- trunk/src/doc/reunions/reunion-2012-02-08.txt 2012-02-09 12:14:03 UTC (rev 310) +++ trunk/src/doc/reunions/reunion-2012-02-08.txt 2012-02-09 17:07:50 UTC (rev 311) @@ -23,28 +23,61 @@ 1) Un seul écran pour importer les données communes : mode 1: import d'un nouveau voyage / transit / transect + +AVoir --> Dans ce mode il faudrait être sûr de créer un unique voyage sinon ça va poser des problèmes... +Ok. + +On vérifie ensuite lors des imports transit - transect qu'on est bien sur le voyage créée +Ok. + mode 2: import d'un nouveau transect (renseigné par un voyage + un navire) -OK. +On vérifie ensuite de l'import transect qu'on est bien sur le voyage sélectionné Import Operations ================= +Input : - voyage - navire (connus dans les transects du voyage) -- format des fichiers à définir -Operation / OperationMetaData / GearMetaData +Operation +_________ -OK. +Peux-ton ici renseigné plus d'un transect à la fois ? +Oui + +Si oui on doit utiliser un borne de temps pour retrouver le transit puis +ensuite retrouvert le transect via le navire. + +Donc operation.gearShootingStartTime et operation.gearShootingEndTime puis on +retrouve le transect via le navire + +Attention le vesselName n'est pas bon :( + +Attention, problème en base pour le Gear le name n'est pas unique + +OperationMetaDataValue +______________________ + +GearMetaDataValue +_________________ + + +On vérifie que navire sélectionné + +Pour le Gear on se base sur le Gear#label Import Samples ============== - voyage - navire -- fichier Sample -- fichier SampleData + +- fichier Sample Total +- fichier SampleData Sub + +On retrouve l'opération par la campagne + l'id de l'opération unique - on utilisera une clef temporaire pour lier les Sample et SampleData) - pour retrouver les Operations, on se basera sur Operation#id @@ -54,13 +87,12 @@ mode 1: (celui implanté) va créer les data acquisition trouvées dans le fichier movie mode 2: (a faire) on créer le dataAcquisition uniquement s'il n'existe pas déjà pour le transect. -OK. +Utiliser le la datestart de la cellule pour retrouver le transit puis transect. Rajouté un boolean (ajout de nouvelles données acoustiques) = mode 2 OK - voyage -- transit - navire - Cell Position Reference rajouter 3 jours une combobox Start - Mid - End pour retrouver @@ -68,7 +100,8 @@ OK. -- prendre en compte le nouveau format movies (suppression colonne) + comment sélectionner les acousticInstrument. +- prendre en compte le nouveau format movies (suppression colonne) + +comment sélectionner les acousticInstrument. OK réalisé. @@ -85,34 +118,56 @@ OK réalisé. -mode 2: import acoustique +mode 2: import des régions et résultats - sélection voyage + - fichier définition des régions + - fichier association des cellules + - fichier résultats + +mode 3: import des résultats cellules esdu + - sélection voyage - sélection navire + - fichier résultats on retrouvera les transits via les plages temporelles -- ajoute les celles régions +Modifications du modèle +----------------------- -- et les résultats ??? +Ajouter un héritage RegionCell sur Cell que l'on rattache voyage +Renommage modèle + - Operation midHaulLatitude au lieu de midHauleLatitude ok + - Operation midHaulLongitude au lieu de midHaulLongitude ok + - GearMetadata name au lieu de type ok + - Gear gearCode au lieu label ok + - renommer DataAcquisition en AcousticDataAcquisition + - renommer DataProcessing en AcousticDataProcessing + +Modificication de OperationMetadata#name + +WaterDepth | ShootingStart -> WaterDepthShoot ok +WaterDepth | HaulingEnd -> WaterDepthHaul ok + + Action ------ - CodeLutin - - infra des imports - - finir import acoustic - - commencer import results - - relancer Aurelie pour la charte graphique - - corriger le journal de bords lors d'un import d'une table (problème de comparaison sur la nulitté). + - finaliser les imports suite aux ultimes mises au point. + - intégrer charte graphique + - corriger le journal de bords lors d'un import d'une table (problème de comparaison sur la nullitté). + - voir avec Ben pour trouver des example publiques de site pour utiliser les données spatiales en base + - supprimer les gears qui deconnent (les lignes en rouge dans le fichier que mathieu va m'envoyer) + - fournir le fichier i18n qui va bien et mathieu fait les traductions et les corrections - Mathieu - - import operation (format et fichiers à fournir) - - import "sample" (format et fichiers à fournir) - - import "résultats" (echotype, taille-poids-age), + clarifier la partie acoustic + - fournir nouveau fichiers mise à jour + - fichier gear Prochaine réunion : - - mercredi 8/02 14h30 \ No newline at end of file + - mardi 21/02 10h00 ? \ No newline at end of file
participants (1)
-
tchemit@users.forge.codelutin.com