Author: tchemit Date: 2012-02-17 00:14:23 +0100 (Fri, 17 Feb 2012) New Revision: 318 Url: http://forge.codelutin.com/repositories/revision/echobase/318 Log: - improve configuration (can pass default properties to push as default option via java code (used by tests)) - rename acCousticXXX to acousticeXXX - make works operation import - begin to make work catches import (still miss some species to finish it) - use FilterPagerBean from nuiton-struts2 - svn properties + headers Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AcousticDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AcousticDataImportConfiguration.java Removed: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AccousticDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/FilterPagerBean.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AccousticDataImportConfiguration.java Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseTopiaRootContextFactory.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CatchesDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/OperationImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/CsvModelUtil.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/GearMetadataValueImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/GearMetadataValueImportModelRow.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/OperationMetadataValueImportModel.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/TotalSampleImportModel.java trunk/echobase-services/src/main/resources/embedded/echobase-embedded.properties 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/LaunchAccousticData.java trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureResults-ConfigureResults-modeRegion-validation.xml trunk/echobase-ui/src/main/webapp/WEB-INF/includes/importDataResults.jsp Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java 2012-02-16 23:14:23 UTC (rev 318) @@ -28,11 +28,16 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContextFactory; -import org.nuiton.util.*; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.ArgumentsParserException; +import org.nuiton.util.FileUtil; +import org.nuiton.util.Version; +import org.nuiton.util.VersionUtil; import java.io.File; import java.io.IOException; import java.net.URL; +import java.util.Map; import java.util.Properties; /** @@ -55,22 +60,32 @@ protected ApplicationConfig applicationConfig; public EchoBaseConfiguration() { - this("echobase.properties"); + this(null); } - public EchoBaseConfiguration(String file) { + public EchoBaseConfiguration(Properties propos) { EchoBaseDateConverter.initDateConverter(); applicationConfig = new ApplicationConfig(); - applicationConfig.setConfigFileName(file); + applicationConfig.setConfigFileName("echobase.properties"); if (log.isInfoEnabled()) { log.info(this + " is initializing..."); } try { applicationConfig.loadDefaultOptions(EchoBaseConfigurationOption.class); + if (propos != null) { + for (Map.Entry<Object, Object> entry : propos.entrySet()) { + + applicationConfig.setDefaultOption( + String.valueOf(entry.getKey()), + String.valueOf(entry.getValue()) + ); + } + } applicationConfig.parse(); + } catch (ArgumentsParserException e) { throw new EchoBaseTechnicalException( "Could not parse configuration", e); @@ -161,8 +176,8 @@ Preconditions.checkNotNull( directory, "Could not find directory " + directory + " (key " + - key + - "in your configuration file named echobase.properties)" + key + + "in your configuration file named echobase.properties)" ); if (log.isInfoEnabled()) { log.info(key + " = " + directory); 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-16 22:53:05 UTC (rev 317) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2012-02-16 23:14:23 UTC (rev 318) @@ -51,7 +51,6 @@ import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.entities.references.Strata; import fr.ifremer.echobase.entities.references.Vessel; -import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.persistence.TopiaEntity; import java.io.File; @@ -205,16 +204,17 @@ public String apply(Gear input) { //FIXME : Remove the dummy test when all gear in db have a casino name String casinoGearName = input.getCasinoGearName(); - return StringUtils.isEmpty(casinoGearName) ? input.getName() : casinoGearName; +// return StringUtils.isEmpty(casinoGearName) ? input.getName() : casinoGearName; + return casinoGearName; } }; - public static final Function<Gear, String> GEAR_GEAR_CODE = new Function<Gear, String>() { - @Override - public String apply(Gear input) { - return input.getGearCode(); - } - }; +// public static final Function<Gear, String> GEAR_GEAR_CODE = new Function<Gear, String>() { +// @Override +// public String apply(Gear input) { +// return input.getGearCode(); +// } +// }; public static final Function<Operation, String> OPERATION_ID = new Function<Operation, String>() { @Override Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseTopiaRootContextFactory.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseTopiaRootContextFactory.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseTopiaRootContextFactory.java 2012-02-16 23:14:23 UTC (rev 318) @@ -32,8 +32,6 @@ import org.nuiton.topia.TopiaContextFactory; import org.nuiton.topia.TopiaNotFoundException; import org.nuiton.topia.TopiaRuntimeException; -import org.nuiton.topia.replication.TopiaReplicationService; -import org.nuiton.topia.replication.TopiaReplicationServiceImpl; import java.io.File; import java.io.IOException; @@ -53,6 +51,11 @@ public TopiaContext newEmbeddedDatabase(File dir) { + return newEmbeddedDatabase(dir, "/topia-h2.properties"); + } + + public TopiaContext newEmbeddedDatabase(File dir, String configPath) { + File databaseFile = new File(dir, "db"); String databaseAbsolutePath = databaseFile.getAbsolutePath(); @@ -61,25 +64,24 @@ Properties properties = new Properties(); InputStream input = null; try { - input = getClass().getResourceAsStream("/topia-h2.properties"); + input = getClass().getResourceAsStream(configPath); properties.load(input); } catch (IOException e) { throw new RuntimeException(e); } finally { Closeables.closeQuietly(input); } - properties.setProperty( - TopiaContextFactory.CONFIG_URL, - "jdbc:h2:file:" + databaseAbsolutePath + "/echobase"); + String dbUrl = "jdbc:h2:file:" + databaseAbsolutePath + "/echobase"; + properties.setProperty(TopiaContextFactory.CONFIG_URL, dbUrl); + if (log.isInfoEnabled()) { + log.info("Use embedded db at " + dbUrl); + } // add entities to the context properties.setProperty( TopiaContextFactory.CONFIG_PERSISTENCE_CLASSES, EchoBaseDAOHelper.getImplementationClassesAsString()); - // add topiaReplicationService in the context - properties.setProperty(TopiaReplicationService.TOPIA_SERVICE_NAME, - TopiaReplicationServiceImpl.class.getName()); TopiaContext rootContext; try { Deleted: 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-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AccousticDataImportService.java 2012-02-16 23:14:23 UTC (rev 318) @@ -1,610 +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; - -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -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; -import fr.ifremer.echobase.entities.data.Data; -import fr.ifremer.echobase.entities.data.DataAcquisition; -import fr.ifremer.echobase.entities.data.DataAcquisitionDAO; -import fr.ifremer.echobase.entities.data.DataDAO; -import fr.ifremer.echobase.entities.data.DataProcessing; -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; -import fr.ifremer.echobase.entities.references.Vessel; -import fr.ifremer.echobase.services.configurations.AccousticDataImportConfiguration; -import fr.ifremer.echobase.services.csv.AcousticDataImportModel; -import fr.ifremer.echobase.services.csv.AcousticDataImportModelRow; -import org.nuiton.util.csv.Import; -import org.nuiton.util.csv.ImportRuntimeException; - -import java.io.Reader; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import static org.nuiton.i18n.I18n.l_; - -/** - * Service to launch a "acoustic data" import. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class AccousticDataImportService extends AbstractImportDataService<AccousticDataImportConfiguration> { - - @Override - protected String getImportLabel() { - return l_(getLocale(), ImportDataMode.AccousticData.getI18nKey()); - } - - @Override - protected List<CsvImportResult> startImport( - AccousticDataImportConfiguration configuration, - EchoBaseUser user) throws ImportException { - - List<CsvImportResult> result = Lists.newLinkedList(); - - // get selected voyage - Voyage voyage = getEntityById(Voyage.class, - configuration.getVoyageId()); - - // get selected vessel - Vessel vessel = getEntityById(Vessel.class, - configuration.getVesselId()); - - CellType esduCellType = getEntityByProperty( - CellType.class, CellType.PROPERTY_ID, "Esdu"); - Preconditions.checkNotNull(esduCellType); - - CellType elementaryCellType = getEntityByProperty( - CellType.class, CellType.PROPERTY_ID, "Elementary"); - Preconditions.checkNotNull(elementaryCellType); - - 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, - 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(Voyage voyage, - Vessel vessel, - CellType esduCellType, - CellType elementaryCellType, - AccousticDataImportConfiguration configuration, - InputFile inputFile, - CsvImportResult importDataAcquisition, - CsvImportResult importDataProcessing, - CsvImportResult importCell, - CsvImportResult importCellData - ) throws ImportException { - - Map<String, AcousticInstrument> instrumentsById = - getEntitiesMap(AcousticInstrument.class, - EchoBaseFunctions.ACOUSTIC_INSTRUMENT_ID); - - Map<String, DataMetadata> dataMetadatasByName = getEntitiesMap( - DataMetadata.class, EchoBaseFunctions.DATA_METADATA_NAME); - - AcousticDataImportModel csvModel = new AcousticDataImportModel( - getCsvSeparator()); - - DataAcquisitionDAO dataAcquisitionDAO = - getDAO(DataAcquisition.class, DataAcquisitionDAO.class); - DataProcessingDAO dataProcessingDAO = - getDAO(DataProcessing.class, DataProcessingDAO.class); - CellDAO cellDAO = getDAO(Cell.class, CellDAO.class); - DataDAO dataDAO = getDAO(Data.class, DataDAO.class); - - boolean addDataAcquisition = configuration.isAddDataAcquisition(); - - Reader reader = getInputFileReader(inputFile); - try { - Import<AcousticDataImportModelRow> importer = - Import.newImport(csvModel, reader); - DataAcquisition dataAcquisition = null; - DataProcessing dataProcessing = null; - Cell esduCell = null; - 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(); - String instrumentId = sndname + channelName; - AcousticInstrument instrument = - instrumentsById.get(instrumentId); - - boolean isME70 = - EchoBasePredicates.IS_ACOUSTIC_INSTRUMENT_ME70.apply(instrument); - if (dataAcquisition == null || - !instrument.equals(dataAcquisition.getAcousticInstrument())) { - - // need to use another data acquisition - - String softwareVersion = - getSoftwareVersion(configuration, isME70); - - String soundSpeedCalculations = - getSoundSpeedCalculations(configuration, isME70); - - if (!addDataAcquisition && - !transect.isDataAcquisitionEmpty()) { - - // try to obtain an existing data acquisiton - - for (DataAcquisition acquisition : transect.getDataAcquisition()) { - - if (instrument.equals(acquisition.getAcousticInstrument())) { - - // found a matching data acquisiotn from his acoustic instrument - dataAcquisition = acquisition; - break; - } - } - } - - if (dataAcquisition == null) { - - // need to create the data acquisition - - // create dataAcquisiton - dataAcquisition = createDataAcquisition( - configuration, - instrument, - softwareVersion, - soundSpeedCalculations, - row, - dataAcquisitionDAO - ); - - importDataAcquisition.incrementsNumberCreated(); - - // add it to transect - transect.addDataAcquisition(dataAcquisition); - } - - // create data processing - dataProcessing = createDataProcessing( - configuration, - softwareVersion, - soundSpeedCalculations, - row, - dataProcessingDAO - ); - - importDataProcessing.incrementsNumberUpdated(); - - // add it to data acquisition - dataAcquisition.addDataProcessing(dataProcessing); - - // must start a fresh new esdu cell - esduCell = null; - } - - int cellType = row.getCellType(); - - String esduCellId = cellDateFormat.format(startDate); - - if (cellType == 4) { - - // this is a esdu cell row - - // create esdu cell - esduCell = create(cellDAO, - Cell.PROPERTY_CELL_TYPE, esduCellType, - Cell.PROPERTY_NAME, esduCellId - ); - - importCell.incrementsNumberCreated(); - - // add it to data processing - dataProcessing.addCell(esduCell); - - // create esdu cell data - createEsduCellData(configuration, - esduCell, - dataMetadatasByName, - row, - dataDAO, - importCellData); - } else { - - // this is a elementary cell row - - int cellNum = row.getCellNum(); - - String elementaryCellId = esduCellId + "_" + cellNum; - - if (esduCell == null) { - throw new IllegalStateException( - "No esdu cell where to attach the " + - "elementary cell " + elementaryCellId); - } - - // create the elementary cell - - elementaryCell = create(cellDAO, - Cell.PROPERTY_CELL_TYPE, elementaryCellType, - Cell.PROPERTY_NAME, elementaryCellId - ); - - importCell.incrementsNumberCreated(); - - // add it to esdu cell - esduCell.addChilds(elementaryCell); - - - // create datas of the elementary cell - createElementaryCellData(configuration, - elementaryCell, - dataMetadatasByName, - row, - dataDAO, - importCellData); - } - } - - } catch (ImportRuntimeException e) { - throw new ImportException(getLocale(), inputFile, e); - } finally { - closeReader(reader, inputFile); - } - } - - protected void createEsduCellData(AccousticDataImportConfiguration configuration, - Cell cell, - Map<String, DataMetadata> dataMetadatasByName, - AcousticDataImportModelRow row, - DataDAO dao, - CsvImportResult importCellData) { - - DataMetadata dataMetadata; - Data data; - String dataValue; - - String suffix = - configuration.getCellPositionReference().getMetadataNameSuffix(); - - // create Latitude data - dataMetadata = dataMetadatasByName.get("Latitude" + suffix); - dataValue = row.getEsduCellDataLatitude(); - data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); - data.setDataValue(dataValue); - cell.addData(data); - - importCellData.incrementsNumberCreated(); - - // create Longitude data - dataMetadata = dataMetadatasByName.get("Longitude" + suffix); - dataValue = row.getEsduCellDataLongitude(); - data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); - data.setDataValue(dataValue); - cell.addData(data); - - importCellData.incrementsNumberCreated(); - - // create Depth data - dataMetadata = dataMetadatasByName.get("DepthRefSurface" + suffix); - dataValue = row.getEsduCellDataDepth(); - data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); - data.setDataValue(dataValue); - cell.addData(data); - - importCellData.incrementsNumberCreated(); - - // create Time data - dataMetadata = dataMetadatasByName.get("Time" + suffix); - dataValue = cellDateFormat.format(row.getCellDateStart()); - data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); - 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, - CsvImportResult importCellData) { - - DataMetadata dataMetadata; - Data data; - String dataValue; - - int cellType = row.getCellType(); - - String startMeta; - String endMeta; - - if (cellType == 0) { - - // surface - - startMeta = "DepthRefSurfaceStart"; - endMeta = "DepthRefSurfaceEnd"; - - } else { - - // bottom - - startMeta = "DepthRefBottomStart"; - endMeta = "DepthRefBottomEnd"; - } - - // create depth start data - dataMetadata = dataMetadatasByName.get(startMeta); - dataValue = row.getCellDepthStart(); - data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); - data.setDataValue(dataValue); - cell.addData(data); - - importCellData.incrementsNumberCreated(); - - - // create depth end data - dataMetadata = dataMetadatasByName.get(endMeta); - dataValue = row.getCellDepthEnd(); - data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); - data.setDataValue(dataValue); - cell.addData(data); - - importCellData.incrementsNumberCreated(); - - // create acoustic density data - dataMetadata = dataMetadatasByName.get("sa"); - dataValue = row.getCellSa(); - data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); - data.setDataValue(dataValue); - cell.addData(data); - - importCellData.incrementsNumberCreated(); - - } - - private DataAcquisition createDataAcquisition(AccousticDataImportConfiguration configuration, - AcousticInstrument instrument, - String softwareVersion, - String soundSpeedCalculations, - AcousticDataImportModelRow row, - DataAcquisitionDAO dataAcquisitionDAO) { - - String transceiverAcquisitionAbsorptionDescription = - configuration.getTransceiverAcquisitionAbsorptionDescription(); - String loggedDataFormat = configuration.getLoggedDataFormat(); - String loggedDataDatatype = configuration.getLoggedDataDatatype(); - String pingDutyCycle = configuration.getPingDutyCycle(); - String echosounderSoundSpeed = configuration.getEchosounderSoundSpeed(); - - DataAcquisition dataAcquisition = create(dataAcquisitionDAO); - - // fill from manual configuration - dataAcquisition.setAcousticInstrument(instrument); - dataAcquisition.setTransceiverAcquisitionAbsorptionDescription(transceiverAcquisitionAbsorptionDescription); - dataAcquisition.setAcquisitionSoftwareVersion(softwareVersion); - dataAcquisition.setLoggedDataFormat(loggedDataFormat); - dataAcquisition.setLoggedDataDatatype(loggedDataDatatype); - dataAcquisition.setPingDutyCycle(pingDutyCycle); - dataAcquisition.setEchosounderSoundSpeed(echosounderSoundSpeed); - dataAcquisition.setSoundSpeedCalculations(soundSpeedCalculations); - - // fill from csv file - Float transceiverAcquisitionAbsorption = - row.getTransceiverAcquisitionAbsorption(); - Float transducerAcquisitionBeamAngleAthwartship = - row.getTransducerAcquisitionBeamAngleAthwartship(); - Float transducerAcquisitionBeamAngleAlongship = - row.getTransducerAcquisitionBeamAngleAlongship(); - Float transducerAcquisitionPsi = - row.getTransducerAcquisitionPsi(); - Float transceiverAcquisitionPower = - row.getTransceiverAcquisitionPower(); - Float transceiverAcquisitionPulseLength = - row.getTransceiverAcquisitionPulseLength(); - Float transceiverAcquisitionGain = - row.getTransceiverAcquisitionGain(); - Float transceiverAcquisitionSacorrection = - row.getTransceiverAcquisitionSacorrection(); - - dataAcquisition.setTransceiverAcquisitionAbsorption(transceiverAcquisitionAbsorption); - dataAcquisition.setTransducerAcquisitionBeamAngleAthwartship(transducerAcquisitionBeamAngleAthwartship); - dataAcquisition.setTransducerAcquisitionBeamAngleAlongship(transducerAcquisitionBeamAngleAlongship); - dataAcquisition.setTransducerAcquisitionPsi(transducerAcquisitionPsi); - dataAcquisition.setTransceiverAcquisitionPower(transceiverAcquisitionPower); - dataAcquisition.setTransceiverAcquisitionPulseLength(transceiverAcquisitionPulseLength); - dataAcquisition.setTransceiverAcquisitionGain(transceiverAcquisitionGain); - dataAcquisition.setTransceiverAcquisitionSacorrection(transceiverAcquisitionSacorrection); - - return dataAcquisition; - } - - private DataProcessing createDataProcessing(AccousticDataImportConfiguration configuration, - String softwareVersion, - String soundSpeedCalculations, - AcousticDataImportModelRow row, - DataProcessingDAO dataProcessingDAO) { - - String transceiverAcquisitionAbsorptionDescription = - configuration.getTransceiverAcquisitionAbsorptionDescription(); - String echosounderSoundSpeed = configuration.getEchosounderSoundSpeed(); - String processingTemplate = configuration.getProcessingTemplate(); - String processingDescription = configuration.getProcessingDescription(); - Float sounderConstant = configuration.getSounderConstant(); - float digitThreshold = configuration.getDigitThreshold(); - String acousticDensityUnit = configuration.getAcousticDensityUnit(); - String notes = configuration.getNotes(); - - DataProcessing dataProcessing = create(dataProcessingDAO); - - // fill from manual configuration - dataProcessing.setProcessingTemplate(processingTemplate); - dataProcessing.setProcessingDescription(processingDescription); - dataProcessing.setSounderConstant(sounderConstant); - dataProcessing.setDigitThreshold(digitThreshold); - dataProcessing.setAcousticDensityUnit(acousticDensityUnit); - dataProcessing.setNotes(notes); - dataProcessing.setProcessingSoftwareVersion(softwareVersion); - dataProcessing.setTransceiverProcessingAbsorptionDescription(transceiverAcquisitionAbsorptionDescription); - dataProcessing.setEchosounderSoundSpeed(echosounderSoundSpeed); - dataProcessing.setSoundSpeedCalculations(soundSpeedCalculations); - - // fill from csv file - - Float transceiverAcquisitionAbsorption = - row.getTransceiverAcquisitionAbsorption(); - Float transducerAcquisitionBeamAngleAthwartship = - row.getTransducerAcquisitionBeamAngleAthwartship(); - Float transducerAcquisitionBeamAngleAlongship = - row.getTransducerAcquisitionBeamAngleAlongship(); - Float transducerAcquisitionPsi = - row.getTransducerAcquisitionPsi(); - - Float transceiverAcquisitionGain = - row.getTransceiverAcquisitionGain(); - Float transceiverAcquisitionSacorrection = - row.getTransceiverAcquisitionSacorrection(); - Float eIThreshold = row.getEiThreshold(); - - dataProcessing.setEiThreshold(eIThreshold); - dataProcessing.setTransceiverProcessingSacorrection(transceiverAcquisitionSacorrection); - dataProcessing.setTransceiverProcessingAbsorption(transceiverAcquisitionAbsorption); - dataProcessing.setTransceiverProcessingGain(transceiverAcquisitionGain); - dataProcessing.setTransducerProcessingPsi(transducerAcquisitionPsi); - dataProcessing.setTransducerProcessingBeamAngleAthwartship(transducerAcquisitionBeamAngleAthwartship); - dataProcessing.setTransducerProcessingBeamAngleAlongship(transducerAcquisitionBeamAngleAlongship); - - - return dataProcessing; - } - - private String getSoftwareVersion(AccousticDataImportConfiguration configuration, - boolean isME70) { - String result; - if (isME70) { - result = configuration.getAcquisitionSoftwareVersionME70(); - } else { - result = configuration.getAcquisitionSoftwareVersionER60(); - } - return result; - } - - private String getSoundSpeedCalculations(AccousticDataImportConfiguration configuration, - boolean isME70) { - String result; - if (isME70) { - result = configuration.getSoundSpeedCalculationsME70(); - } else { - result = configuration.getSoundSpeedCalculationsER60(); - } - return result; - } - -} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AcousticDataImportService.java (from rev 314, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AccousticDataImportService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AcousticDataImportService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AcousticDataImportService.java 2012-02-16 23:14:23 UTC (rev 318) @@ -0,0 +1,610 @@ +/* + * #%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; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +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; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.DataAcquisition; +import fr.ifremer.echobase.entities.data.DataAcquisitionDAO; +import fr.ifremer.echobase.entities.data.DataDAO; +import fr.ifremer.echobase.entities.data.DataProcessing; +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; +import fr.ifremer.echobase.entities.references.Vessel; +import fr.ifremer.echobase.services.configurations.AcousticDataImportConfiguration; +import fr.ifremer.echobase.services.csv.AcousticDataImportModel; +import fr.ifremer.echobase.services.csv.AcousticDataImportModelRow; +import org.nuiton.util.csv.Import; +import org.nuiton.util.csv.ImportRuntimeException; + +import java.io.Reader; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import static org.nuiton.i18n.I18n.l_; + +/** + * Service to launch a "acoustic data" import. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class AcousticDataImportService extends AbstractImportDataService<AcousticDataImportConfiguration> { + + @Override + protected String getImportLabel() { + return l_(getLocale(), ImportDataMode.AccousticData.getI18nKey()); + } + + @Override + protected List<CsvImportResult> startImport( + AcousticDataImportConfiguration configuration, + EchoBaseUser user) throws ImportException { + + List<CsvImportResult> result = Lists.newLinkedList(); + + // get selected voyage + Voyage voyage = getEntityById(Voyage.class, + configuration.getVoyageId()); + + // get selected vessel + Vessel vessel = getEntityById(Vessel.class, + configuration.getVesselId()); + + CellType esduCellType = getEntityByProperty( + CellType.class, CellType.PROPERTY_ID, "Esdu"); + Preconditions.checkNotNull(esduCellType); + + CellType elementaryCellType = getEntityByProperty( + CellType.class, CellType.PROPERTY_ID, "Elementary"); + Preconditions.checkNotNull(elementaryCellType); + + 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, + 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(Voyage voyage, + Vessel vessel, + CellType esduCellType, + CellType elementaryCellType, + AcousticDataImportConfiguration configuration, + InputFile inputFile, + CsvImportResult importDataAcquisition, + CsvImportResult importDataProcessing, + CsvImportResult importCell, + CsvImportResult importCellData + ) throws ImportException { + + Map<String, AcousticInstrument> instrumentsById = + getEntitiesMap(AcousticInstrument.class, + EchoBaseFunctions.ACOUSTIC_INSTRUMENT_ID); + + Map<String, DataMetadata> dataMetadatasByName = getEntitiesMap( + DataMetadata.class, EchoBaseFunctions.DATA_METADATA_NAME); + + AcousticDataImportModel csvModel = new AcousticDataImportModel( + getCsvSeparator()); + + DataAcquisitionDAO dataAcquisitionDAO = + getDAO(DataAcquisition.class, DataAcquisitionDAO.class); + DataProcessingDAO dataProcessingDAO = + getDAO(DataProcessing.class, DataProcessingDAO.class); + CellDAO cellDAO = getDAO(Cell.class, CellDAO.class); + DataDAO dataDAO = getDAO(Data.class, DataDAO.class); + + boolean addDataAcquisition = configuration.isAddDataAcquisition(); + + Reader reader = getInputFileReader(inputFile); + try { + Import<AcousticDataImportModelRow> importer = + Import.newImport(csvModel, reader); + DataAcquisition dataAcquisition = null; + DataProcessing dataProcessing = null; + Cell esduCell = null; + 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(); + String instrumentId = sndname + channelName; + AcousticInstrument instrument = + instrumentsById.get(instrumentId); + + boolean isME70 = + EchoBasePredicates.IS_ACOUSTIC_INSTRUMENT_ME70.apply(instrument); + if (dataAcquisition == null || + !instrument.equals(dataAcquisition.getAcousticInstrument())) { + + // need to use another data acquisition + + String softwareVersion = + getSoftwareVersion(configuration, isME70); + + String soundSpeedCalculations = + getSoundSpeedCalculations(configuration, isME70); + + if (!addDataAcquisition && + !transect.isDataAcquisitionEmpty()) { + + // try to obtain an existing data acquisiton + + for (DataAcquisition acquisition : transect.getDataAcquisition()) { + + if (instrument.equals(acquisition.getAcousticInstrument())) { + + // found a matching data acquisiotn from his acoustic instrument + dataAcquisition = acquisition; + break; + } + } + } + + if (dataAcquisition == null) { + + // need to create the data acquisition + + // create dataAcquisiton + dataAcquisition = createDataAcquisition( + configuration, + instrument, + softwareVersion, + soundSpeedCalculations, + row, + dataAcquisitionDAO + ); + + importDataAcquisition.incrementsNumberCreated(); + + // add it to transect + transect.addDataAcquisition(dataAcquisition); + } + + // create data processing + dataProcessing = createDataProcessing( + configuration, + softwareVersion, + soundSpeedCalculations, + row, + dataProcessingDAO + ); + + importDataProcessing.incrementsNumberUpdated(); + + // add it to data acquisition + dataAcquisition.addDataProcessing(dataProcessing); + + // must start a fresh new esdu cell + esduCell = null; + } + + int cellType = row.getCellType(); + + String esduCellId = cellDateFormat.format(startDate); + + if (cellType == 4) { + + // this is a esdu cell row + + // create esdu cell + esduCell = create(cellDAO, + Cell.PROPERTY_CELL_TYPE, esduCellType, + Cell.PROPERTY_NAME, esduCellId + ); + + importCell.incrementsNumberCreated(); + + // add it to data processing + dataProcessing.addCell(esduCell); + + // create esdu cell data + createEsduCellData(configuration, + esduCell, + dataMetadatasByName, + row, + dataDAO, + importCellData); + } else { + + // this is a elementary cell row + + int cellNum = row.getCellNum(); + + String elementaryCellId = esduCellId + "_" + cellNum; + + if (esduCell == null) { + throw new IllegalStateException( + "No esdu cell where to attach the " + + "elementary cell " + elementaryCellId); + } + + // create the elementary cell + + elementaryCell = create(cellDAO, + Cell.PROPERTY_CELL_TYPE, elementaryCellType, + Cell.PROPERTY_NAME, elementaryCellId + ); + + importCell.incrementsNumberCreated(); + + // add it to esdu cell + esduCell.addChilds(elementaryCell); + + + // create datas of the elementary cell + createElementaryCellData(configuration, + elementaryCell, + dataMetadatasByName, + row, + dataDAO, + importCellData); + } + } + + } catch (ImportRuntimeException e) { + throw new ImportException(getLocale(), inputFile, e); + } finally { + closeReader(reader, inputFile); + } + } + + protected void createEsduCellData(AcousticDataImportConfiguration configuration, + Cell cell, + Map<String, DataMetadata> dataMetadatasByName, + AcousticDataImportModelRow row, + DataDAO dao, + CsvImportResult importCellData) { + + DataMetadata dataMetadata; + Data data; + String dataValue; + + String suffix = + configuration.getCellPositionReference().getMetadataNameSuffix(); + + // create Latitude data + dataMetadata = dataMetadatasByName.get("Latitude" + suffix); + dataValue = row.getEsduCellDataLatitude(); + data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); + data.setDataValue(dataValue); + cell.addData(data); + + importCellData.incrementsNumberCreated(); + + // create Longitude data + dataMetadata = dataMetadatasByName.get("Longitude" + suffix); + dataValue = row.getEsduCellDataLongitude(); + data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); + data.setDataValue(dataValue); + cell.addData(data); + + importCellData.incrementsNumberCreated(); + + // create Depth data + dataMetadata = dataMetadatasByName.get("DepthRefSurface" + suffix); + dataValue = row.getEsduCellDataDepth(); + data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); + data.setDataValue(dataValue); + cell.addData(data); + + importCellData.incrementsNumberCreated(); + + // create Time data + dataMetadata = dataMetadatasByName.get("Time" + suffix); + dataValue = cellDateFormat.format(row.getCellDateStart()); + data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); + 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(AcousticDataImportConfiguration configuration, + Cell cell, + Map<String, DataMetadata> dataMetadatasByName, + AcousticDataImportModelRow row, + DataDAO dao, + CsvImportResult importCellData) { + + DataMetadata dataMetadata; + Data data; + String dataValue; + + int cellType = row.getCellType(); + + String startMeta; + String endMeta; + + if (cellType == 0) { + + // surface + + startMeta = "DepthRefSurfaceStart"; + endMeta = "DepthRefSurfaceEnd"; + + } else { + + // bottom + + startMeta = "DepthRefBottomStart"; + endMeta = "DepthRefBottomEnd"; + } + + // create depth start data + dataMetadata = dataMetadatasByName.get(startMeta); + dataValue = row.getCellDepthStart(); + data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); + data.setDataValue(dataValue); + cell.addData(data); + + importCellData.incrementsNumberCreated(); + + + // create depth end data + dataMetadata = dataMetadatasByName.get(endMeta); + dataValue = row.getCellDepthEnd(); + data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); + data.setDataValue(dataValue); + cell.addData(data); + + importCellData.incrementsNumberCreated(); + + // create acoustic density data + dataMetadata = dataMetadatasByName.get("sa"); + dataValue = row.getCellSa(); + data = create(dao, Data.PROPERTY_DATA_METADATA, dataMetadata); + data.setDataValue(dataValue); + cell.addData(data); + + importCellData.incrementsNumberCreated(); + + } + + private DataAcquisition createDataAcquisition(AcousticDataImportConfiguration configuration, + AcousticInstrument instrument, + String softwareVersion, + String soundSpeedCalculations, + AcousticDataImportModelRow row, + DataAcquisitionDAO dataAcquisitionDAO) { + + String transceiverAcquisitionAbsorptionDescription = + configuration.getTransceiverAcquisitionAbsorptionDescription(); + String loggedDataFormat = configuration.getLoggedDataFormat(); + String loggedDataDatatype = configuration.getLoggedDataDatatype(); + String pingDutyCycle = configuration.getPingDutyCycle(); + String echosounderSoundSpeed = configuration.getEchosounderSoundSpeed(); + + DataAcquisition dataAcquisition = create(dataAcquisitionDAO); + + // fill from manual configuration + dataAcquisition.setAcousticInstrument(instrument); + dataAcquisition.setTransceiverAcquisitionAbsorptionDescription(transceiverAcquisitionAbsorptionDescription); + dataAcquisition.setAcquisitionSoftwareVersion(softwareVersion); + dataAcquisition.setLoggedDataFormat(loggedDataFormat); + dataAcquisition.setLoggedDataDatatype(loggedDataDatatype); + dataAcquisition.setPingDutyCycle(pingDutyCycle); + dataAcquisition.setEchosounderSoundSpeed(echosounderSoundSpeed); + dataAcquisition.setSoundSpeedCalculations(soundSpeedCalculations); + + // fill from csv file + Float transceiverAcquisitionAbsorption = + row.getTransceiverAcquisitionAbsorption(); + Float transducerAcquisitionBeamAngleAthwartship = + row.getTransducerAcquisitionBeamAngleAthwartship(); + Float transducerAcquisitionBeamAngleAlongship = + row.getTransducerAcquisitionBeamAngleAlongship(); + Float transducerAcquisitionPsi = + row.getTransducerAcquisitionPsi(); + Float transceiverAcquisitionPower = + row.getTransceiverAcquisitionPower(); + Float transceiverAcquisitionPulseLength = + row.getTransceiverAcquisitionPulseLength(); + Float transceiverAcquisitionGain = + row.getTransceiverAcquisitionGain(); + Float transceiverAcquisitionSacorrection = + row.getTransceiverAcquisitionSacorrection(); + + dataAcquisition.setTransceiverAcquisitionAbsorption(transceiverAcquisitionAbsorption); + dataAcquisition.setTransducerAcquisitionBeamAngleAthwartship(transducerAcquisitionBeamAngleAthwartship); + dataAcquisition.setTransducerAcquisitionBeamAngleAlongship(transducerAcquisitionBeamAngleAlongship); + dataAcquisition.setTransducerAcquisitionPsi(transducerAcquisitionPsi); + dataAcquisition.setTransceiverAcquisitionPower(transceiverAcquisitionPower); + dataAcquisition.setTransceiverAcquisitionPulseLength(transceiverAcquisitionPulseLength); + dataAcquisition.setTransceiverAcquisitionGain(transceiverAcquisitionGain); + dataAcquisition.setTransceiverAcquisitionSacorrection(transceiverAcquisitionSacorrection); + + return dataAcquisition; + } + + private DataProcessing createDataProcessing(AcousticDataImportConfiguration configuration, + String softwareVersion, + String soundSpeedCalculations, + AcousticDataImportModelRow row, + DataProcessingDAO dataProcessingDAO) { + + String transceiverAcquisitionAbsorptionDescription = + configuration.getTransceiverAcquisitionAbsorptionDescription(); + String echosounderSoundSpeed = configuration.getEchosounderSoundSpeed(); + String processingTemplate = configuration.getProcessingTemplate(); + String processingDescription = configuration.getProcessingDescription(); + Float sounderConstant = configuration.getSounderConstant(); + float digitThreshold = configuration.getDigitThreshold(); + String acousticDensityUnit = configuration.getAcousticDensityUnit(); + String notes = configuration.getNotes(); + + DataProcessing dataProcessing = create(dataProcessingDAO); + + // fill from manual configuration + dataProcessing.setProcessingTemplate(processingTemplate); + dataProcessing.setProcessingDescription(processingDescription); + dataProcessing.setSounderConstant(sounderConstant); + dataProcessing.setDigitThreshold(digitThreshold); + dataProcessing.setAcousticDensityUnit(acousticDensityUnit); + dataProcessing.setNotes(notes); + dataProcessing.setProcessingSoftwareVersion(softwareVersion); + dataProcessing.setTransceiverProcessingAbsorptionDescription(transceiverAcquisitionAbsorptionDescription); + dataProcessing.setEchosounderSoundSpeed(echosounderSoundSpeed); + dataProcessing.setSoundSpeedCalculations(soundSpeedCalculations); + + // fill from csv file + + Float transceiverAcquisitionAbsorption = + row.getTransceiverAcquisitionAbsorption(); + Float transducerAcquisitionBeamAngleAthwartship = + row.getTransducerAcquisitionBeamAngleAthwartship(); + Float transducerAcquisitionBeamAngleAlongship = + row.getTransducerAcquisitionBeamAngleAlongship(); + Float transducerAcquisitionPsi = + row.getTransducerAcquisitionPsi(); + + Float transceiverAcquisitionGain = + row.getTransceiverAcquisitionGain(); + Float transceiverAcquisitionSacorrection = + row.getTransceiverAcquisitionSacorrection(); + Float eIThreshold = row.getEiThreshold(); + + dataProcessing.setEiThreshold(eIThreshold); + dataProcessing.setTransceiverProcessingSacorrection(transceiverAcquisitionSacorrection); + dataProcessing.setTransceiverProcessingAbsorption(transceiverAcquisitionAbsorption); + dataProcessing.setTransceiverProcessingGain(transceiverAcquisitionGain); + dataProcessing.setTransducerProcessingPsi(transducerAcquisitionPsi); + dataProcessing.setTransducerProcessingBeamAngleAthwartship(transducerAcquisitionBeamAngleAthwartship); + dataProcessing.setTransducerProcessingBeamAngleAlongship(transducerAcquisitionBeamAngleAlongship); + + + return dataProcessing; + } + + private String getSoftwareVersion(AcousticDataImportConfiguration configuration, + boolean isME70) { + String result; + if (isME70) { + result = configuration.getAcquisitionSoftwareVersionME70(); + } else { + result = configuration.getAcquisitionSoftwareVersionER60(); + } + return result; + } + + private String getSoundSpeedCalculations(AcousticDataImportConfiguration configuration, + boolean isME70) { + String result; + if (isME70) { + result = configuration.getSoundSpeedCalculationsME70(); + } else { + result = configuration.getSoundSpeedCalculationsER60(); + } + return result; + } + +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AcousticDataImportService.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/CatchesDataImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CatchesDataImportService.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/CatchesDataImportService.java 2012-02-16 23:14:23 UTC (rev 318) @@ -121,14 +121,14 @@ sizeCategoryMap, sexCategoryMap); - CsvImportResult biometrySampleResult = importBiometrySampleFile( - configuration.getBiometrySampleFile(), - operationMap, - speciesMap); +// 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); +// addResultAndLog(result, configuration.getBiometrySampleFile(), biometrySampleResult, user); return result; } Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/FilterPagerBean.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/FilterPagerBean.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/FilterPagerBean.java 2012-02-16 23:14:23 UTC (rev 318) @@ -1,294 +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; - -import com.google.common.collect.Lists; -import org.apache.commons.collections.CollectionUtils; -import org.nuiton.util.PagerUtil; - -import java.io.Serializable; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * Pager bean with filtering datas. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class FilterPagerBean extends PagerUtil.PagerBean { - - private static final long serialVersionUID = 1L; - - public enum OperationGroup { - OR, AND - } - - public enum Operation { - /** Equals operator. */ - eq { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " = :" + paramName; - filterParams.put(paramName, data); - return ruleFilter; - } - }, - /** Not equals operator. */ - ne { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " != :" + paramName; - filterParams.put(paramName, data); - return ruleFilter; - } - }, - /** Contains operator. */ - cn { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " like :" + paramName; - filterParams.put(paramName, "%" + data + "%"); - return ruleFilter; - } - }, - /** Not contains operator. */ - nc { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " not like :" + paramName; - filterParams.put(paramName, "%" + data + "%"); - return ruleFilter; - } - }, - /** Begins with operator. */ - bw { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " like :" + paramName; - filterParams.put(paramName, data + "%"); - return ruleFilter; - } - }, - /** Not between with operator. */ - bn { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " not like :" + paramName; - filterParams.put(paramName, data + "%"); - return ruleFilter; - } - }, - /** Ends with operator. */ - ew { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " like :" + paramName; - filterParams.put(paramName, "%" + data); - return ruleFilter; - } - }, - /** Not End with operator. */ - en { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " not like :" + paramName; - filterParams.put(paramName, "%" + data); - return ruleFilter; - } - }, - /** Lesser than operator. */ - lt { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " < :" + paramName; - filterParams.put(paramName, data); - return ruleFilter; - } - }, - /** Lesser or equals operator. */ - le { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " <= :" + paramName; - filterParams.put(paramName, data); - return ruleFilter; - } - }, - /** Greater than operator. */ - gt { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " > :" + paramName; - filterParams.put(paramName, data); - return ruleFilter; - } - }, - /** Greater or equals operator. */ - ge { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " >= :" + paramName; - filterParams.put(paramName, data); - return ruleFilter; - } - }, - /** Is null operator. */ - nu { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " is null"; - return ruleFilter; - } - }, - /** Is not null operator. */ - nn { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - String ruleFilter = propertyName + " is not null"; - return ruleFilter; - } - }, - /** Is among operator. */ - in { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - throw new UnsupportedOperationException(); - } - }, - /** Not is among operator. */ - ni { - @Override - public String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams) { - throw new UnsupportedOperationException(); - } - }; - - public abstract String toHql(String paramName, String propertyName, Object data, Map<String, Object> filterParams); - } - - public static class FilterRule implements Serializable { - - private static final long serialVersionUID = 1L; - - protected final Operation op; - - protected final String field; - - protected final String data; - - public FilterRule(Operation op, - String field, - String data) { - this.op = op; - this.field = field; - this.data = data; - } - - public Operation getOp() { - return op; - } - - public String getField() { - return field; - } - - public String getData() { - return data; - } - } - - public static FilterPagerBeanBuilder newFilterPagerBeanBuilder(String operationGroup) { - OperationGroup operationGroup1 = OperationGroup.valueOf(operationGroup); - FilterPagerBeanBuilder builder = new FilterPagerBeanBuilder(operationGroup1); - return builder; - } - - public FilterPagerBean() { - } - - public boolean canFilter() { - return groupOp != null && CollectionUtils.isNotEmpty(rules); - } - - protected OperationGroup groupOp; - - private List<FilterRule> rules; - - public OperationGroup getGroupOp() { - return groupOp; - } - - public void setGroupOp(OperationGroup groupOp) { - this.groupOp = groupOp; - } - - public List<FilterRule> getRules() { - return rules; - } - - public void setRules(List<FilterRule> rules) { - this.rules = rules; - } - - public static class FilterPagerBeanBuilder { - - protected final OperationGroup groupOp; - - protected final List<FilterRule> rules; - - public FilterPagerBeanBuilder(OperationGroup groupOp) { - this.groupOp = groupOp; - rules = Lists.newLinkedList(); - } - - public FilterPagerBeanBuilder addOperations(Collection<Map<String, String>> operations) { - for (Map<String, String> operation : operations) { - addRule(operation); - } - return this; - } - - public FilterPagerBeanBuilder addRule(Map<String, String> ruleMap) { - String op = ruleMap.get("op"); - String property = ruleMap.get("field"); - String value = ruleMap.get("data"); - Operation operator = Operation.valueOf(op); - return addRule(new FilterRule(operator, property, value)); - } - - public FilterPagerBeanBuilder addRule(FilterRule rule) { - rules.add(rule); - return this; - } - - public void flush(FilterPagerBean bean) { - bean.setGroupOp(groupOp); - bean.setRules(rules); - } - - - } -} 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-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/OperationImportService.java 2012-02-16 23:14:23 UTC (rev 318) @@ -50,6 +50,8 @@ import fr.ifremer.echobase.services.csv.OperationImportModelRow; import fr.ifremer.echobase.services.csv.OperationMetadataValueImportModel; import fr.ifremer.echobase.services.csv.OperationMetadataValueImportModelRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportRuntimeException; @@ -70,6 +72,10 @@ */ public class OperationImportService extends AbstractImportDataService<OperationImportConfiguration> { + /** Logger. */ + private static final Log log = + LogFactory.getLog(OperationImportService.class); + @Override protected String getImportLabel() { return l_(getLocale(), ImportDataMode.Operation.getI18nKey()); @@ -94,9 +100,9 @@ Map<String, Vessel> vesselMap = Maps.uniqueIndex( Arrays.asList(vessel), EchoBaseFunctions.VESSEL_NAME); - // get all gears by their gear code + // get all gears by their casino gear name Map<String, Gear> gearMap = getEntitiesMap( - Gear.class, EchoBaseFunctions.GEAR_GEAR_CODE); + Gear.class, EchoBaseFunctions.GEAR_CASINO_GEAR_NAME); CsvImportResult nbOperations = importOperationFile( configuration.getOperationFile(), @@ -145,6 +151,9 @@ inputFile.getFileName(), false); + if (log.isInfoEnabled()) { + log.info("Starts import of operations from file "+inputFile.getFileName()); + } Map<String, DepthStratum> depthStratumMap = getEntitiesMap( DepthStratum.class, EchoBaseFunctions.DEPTH_STRATUM_ID); @@ -195,10 +204,15 @@ Map<String, Operation> operationMap) throws ImportException { CsvImportResult importResult = new CsvImportResult( - EchoBaseEntityEnum.OperationMetadata, + EchoBaseEntityEnum.OperationMetadataValue, inputFile.getFileName(), false); + if (log.isInfoEnabled()) { + log.info("Starts import of operation metadata values from file "+ + inputFile.getFileName()); + } + Map<String, OperationMetadata> operationMetadatasByName = getEntitiesMap(OperationMetadata.class, EchoBaseFunctions.OPERATION_METADATA_NAME); @@ -245,10 +259,15 @@ Map<String, Operation> operationMap) throws ImportException { CsvImportResult importResult = new CsvImportResult( - EchoBaseEntityEnum.GearMetadata, + EchoBaseEntityEnum.GearMetadataValue, inputFile.getFileName(), false); + if (log.isInfoEnabled()) { + log.info("Starts import of gear metadata values from file "+ + inputFile.getFileName()); + } + Map<String, GearMetadata> gearMetadatasByType = getEntitiesMap(GearMetadata.class, EchoBaseFunctions.GEAR_METADATA_NAME); Deleted: 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-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AccousticDataImportConfiguration.java 2012-02-16 23:14:23 UTC (rev 318) @@ -1,267 +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.configurations; - -import fr.ifremer.echobase.InputFile; - -import java.util.Locale; - -import static org.nuiton.i18n.I18n.l_; - -/** - * Configuration of a "accoustic datas" import. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class AccousticDataImportConfiguration extends AbstractImportConfiguration { - - private static final long serialVersionUID = 1L; - - /** Selected voyage id where to import datas. */ - protected String voyageId; - - /** Selected vessel id to find out transect where to import datas. */ - protected String vesselId; - - /** Flag to always add new dataAcquisition when a new instrument is found in movies file. */ - protected boolean addDataAcquisition = true; - - /** Manual transceiverAcquisitionAbsorptionDescription. */ - protected String transceiverAcquisitionAbsorptionDescription = "(i) Equation: Francois and garrison 1982,(ii) CTD, (iii) nominal value for entire data set"; - - /** Manual acquisitionSoftwareVersion (ER60 instrument). */ - protected String acquisitionSoftwareVersionER60; - - /** Manual acquisitionSoftwareVersion (ME70 instrument). */ - protected String acquisitionSoftwareVersionME70; - - /** Manual loggedDataFormat. */ - protected String loggedDataFormat = ".hac and .raw formats"; - - /** Manual loggedDataDatatype. */ - protected String loggedDataDatatype = "‘raw’ digitisation samples"; - - /** Manual pingDutyCycle. */ - protected String pingDutyCycle = "Ifremer's standard ping duty cycle"; - - /** Manual echosounderSoundSpeed. */ - protected String echosounderSoundSpeed = "Variable"; - - /** Manual soundSpeedCalculations (ER60 instrument). */ - protected String soundSpeedCalculationsER60 = "(i) Equation: Mackenzie (1980), (ii) CTD, (iii) nominal value for entire data set"; - - /** Manual soundSpeedCalculations (ME70 instrument). */ - protected String soundSpeedCalculationsME70 = "(i) Equation: Mackenzie (1980), (ii) Hull-mounted thermosalinometer, (iii) surface absorption value recomputed every 30s and applied to the entire data set"; - - /** Manual sounderConstant. */ - protected Float sounderConstant; - - /** Manual processingTemplate. */ - protected String processingTemplate; - - /** Manual processingDescription. */ - protected String processingDescription; - - /** Manual digitThreshold. */ - protected float digitThreshold = -100f; - - /** Manual acousticDensityUnit. */ - protected String acousticDensityUnit = "sA"; - - /** Manual notes. */ - protected String notes; - - /** Cell position reference for esdu cell datas. */ - protected CellPositionReference cellPositionReference; - - /** Movies file to import. */ - protected final InputFile moviesFile; - - - public AccousticDataImportConfiguration(Locale locale) { - moviesFile = InputFile.newFile(l_(locale, "echobase.common.moviesFile")); - } - - public String getVoyageId() { - return voyageId; - } - - public void setVoyageId(String voyageId) { - this.voyageId = voyageId; - } - - public String getVesselId() { - return vesselId; - } - - public void setVesselId(String vesselId) { - this.vesselId = vesselId; - } - - public boolean isAddDataAcquisition() { - return addDataAcquisition; - } - - public void setAddDataAcquisition(boolean addDataAcquisition) { - this.addDataAcquisition = addDataAcquisition; - } - - public String getTransceiverAcquisitionAbsorptionDescription() { - return transceiverAcquisitionAbsorptionDescription; - } - - public void setTransceiverAcquisitionAbsorptionDescription(String transceiverAcquisitionAbsorptionDescription) { - this.transceiverAcquisitionAbsorptionDescription = transceiverAcquisitionAbsorptionDescription; - } - - public String getAcquisitionSoftwareVersionER60() { - return acquisitionSoftwareVersionER60; - } - - public void setAcquisitionSoftwareVersionER60(String acquisitionSoftwareVersionER60) { - this.acquisitionSoftwareVersionER60 = acquisitionSoftwareVersionER60; - } - - public String getAcquisitionSoftwareVersionME70() { - return acquisitionSoftwareVersionME70; - } - - public void setAcquisitionSoftwareVersionME70(String acquisitionSoftwareVersionME70) { - this.acquisitionSoftwareVersionME70 = acquisitionSoftwareVersionME70; - } - - public String getLoggedDataFormat() { - return loggedDataFormat; - } - - public void setLoggedDataFormat(String loggedDataFormat) { - this.loggedDataFormat = loggedDataFormat; - } - - public String getLoggedDataDatatype() { - return loggedDataDatatype; - } - - public void setLoggedDataDatatype(String loggedDataDatatype) { - this.loggedDataDatatype = loggedDataDatatype; - } - - public String getPingDutyCycle() { - return pingDutyCycle; - } - - public void setPingDutyCycle(String pingDutyCycle) { - this.pingDutyCycle = pingDutyCycle; - } - - public String getEchosounderSoundSpeed() { - return echosounderSoundSpeed; - } - - public void setEchosounderSoundSpeed(String echosounderSoundSpeed) { - this.echosounderSoundSpeed = echosounderSoundSpeed; - } - - public String getSoundSpeedCalculationsER60() { - return soundSpeedCalculationsER60; - } - - public void setSoundSpeedCalculationsER60(String soundSpeedCalculationsER60) { - this.soundSpeedCalculationsER60 = soundSpeedCalculationsER60; - } - - public String getSoundSpeedCalculationsME70() { - return soundSpeedCalculationsME70; - } - - public void setSoundSpeedCalculationsME70(String soundSpeedCalculationsME70) { - this.soundSpeedCalculationsME70 = soundSpeedCalculationsME70; - } - - public Float getSounderConstant() { - return sounderConstant; - } - - public void setSounderConstant(Float sounderConstant) { - this.sounderConstant = sounderConstant; - } - - public float getDigitThreshold() { - return digitThreshold; - } - - public void setDigitThreshold(float digitThreshold) { - this.digitThreshold = digitThreshold; - } - - public String getAcousticDensityUnit() { - return acousticDensityUnit; - } - - public void setAcousticDensityUnit(String acousticDensityUnit) { - this.acousticDensityUnit = acousticDensityUnit; - } - - public String getNotes() { - return notes; - } - - public void setNotes(String notes) { - this.notes = notes; - } - - public InputFile getMoviesFile() { - return moviesFile; - } - - public String getProcessingTemplate() { - return processingTemplate; - } - - public void setProcessingTemplate(String processingTemplate) { - this.processingTemplate = processingTemplate; - } - - public String getProcessingDescription() { - return processingDescription; - } - - public void setProcessingDescription(String processingDescription) { - this.processingDescription = processingDescription; - } - - public CellPositionReference getCellPositionReference() { - return cellPositionReference; - } - - public void setCellPositionReference(CellPositionReference cellPositionReference) { - this.cellPositionReference = cellPositionReference; - } - - @Override - public InputFile[] getInputFiles() { - return new InputFile[]{moviesFile}; - } -} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AcousticDataImportConfiguration.java (from rev 314, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AccousticDataImportConfiguration.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AcousticDataImportConfiguration.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AcousticDataImportConfiguration.java 2012-02-16 23:14:23 UTC (rev 318) @@ -0,0 +1,267 @@ +/* + * #%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.configurations; + +import fr.ifremer.echobase.InputFile; + +import java.util.Locale; + +import static org.nuiton.i18n.I18n.l_; + +/** + * Configuration of a "accoustic datas" import. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class AcousticDataImportConfiguration extends AbstractImportConfiguration { + + private static final long serialVersionUID = 1L; + + /** Selected voyage id where to import datas. */ + protected String voyageId; + + /** Selected vessel id to find out transect where to import datas. */ + protected String vesselId; + + /** Flag to always add new dataAcquisition when a new instrument is found in movies file. */ + protected boolean addDataAcquisition = true; + + /** Manual transceiverAcquisitionAbsorptionDescription. */ + protected String transceiverAcquisitionAbsorptionDescription = "(i) Equation: Francois and garrison 1982,(ii) CTD, (iii) nominal value for entire data set"; + + /** Manual acquisitionSoftwareVersion (ER60 instrument). */ + protected String acquisitionSoftwareVersionER60; + + /** Manual acquisitionSoftwareVersion (ME70 instrument). */ + protected String acquisitionSoftwareVersionME70; + + /** Manual loggedDataFormat. */ + protected String loggedDataFormat = ".hac and .raw formats"; + + /** Manual loggedDataDatatype. */ + protected String loggedDataDatatype = "‘raw’ digitisation samples"; + + /** Manual pingDutyCycle. */ + protected String pingDutyCycle = "Ifremer's standard ping duty cycle"; + + /** Manual echosounderSoundSpeed. */ + protected String echosounderSoundSpeed = "Variable"; + + /** Manual soundSpeedCalculations (ER60 instrument). */ + protected String soundSpeedCalculationsER60 = "(i) Equation: Mackenzie (1980), (ii) CTD, (iii) nominal value for entire data set"; + + /** Manual soundSpeedCalculations (ME70 instrument). */ + protected String soundSpeedCalculationsME70 = "(i) Equation: Mackenzie (1980), (ii) Hull-mounted thermosalinometer, (iii) surface absorption value recomputed every 30s and applied to the entire data set"; + + /** Manual sounderConstant. */ + protected Float sounderConstant; + + /** Manual processingTemplate. */ + protected String processingTemplate; + + /** Manual processingDescription. */ + protected String processingDescription; + + /** Manual digitThreshold. */ + protected float digitThreshold = -100f; + + /** Manual acousticDensityUnit. */ + protected String acousticDensityUnit = "sA"; + + /** Manual notes. */ + protected String notes; + + /** Cell position reference for esdu cell datas. */ + protected CellPositionReference cellPositionReference; + + /** Movies file to import. */ + protected final InputFile moviesFile; + + + public AcousticDataImportConfiguration(Locale locale) { + moviesFile = InputFile.newFile(l_(locale, "echobase.common.moviesFile")); + } + + public String getVoyageId() { + return voyageId; + } + + public void setVoyageId(String voyageId) { + this.voyageId = voyageId; + } + + public String getVesselId() { + return vesselId; + } + + public void setVesselId(String vesselId) { + this.vesselId = vesselId; + } + + public boolean isAddDataAcquisition() { + return addDataAcquisition; + } + + public void setAddDataAcquisition(boolean addDataAcquisition) { + this.addDataAcquisition = addDataAcquisition; + } + + public String getTransceiverAcquisitionAbsorptionDescription() { + return transceiverAcquisitionAbsorptionDescription; + } + + public void setTransceiverAcquisitionAbsorptionDescription(String transceiverAcquisitionAbsorptionDescription) { + this.transceiverAcquisitionAbsorptionDescription = transceiverAcquisitionAbsorptionDescription; + } + + public String getAcquisitionSoftwareVersionER60() { + return acquisitionSoftwareVersionER60; + } + + public void setAcquisitionSoftwareVersionER60(String acquisitionSoftwareVersionER60) { + this.acquisitionSoftwareVersionER60 = acquisitionSoftwareVersionER60; + } + + public String getAcquisitionSoftwareVersionME70() { + return acquisitionSoftwareVersionME70; + } + + public void setAcquisitionSoftwareVersionME70(String acquisitionSoftwareVersionME70) { + this.acquisitionSoftwareVersionME70 = acquisitionSoftwareVersionME70; + } + + public String getLoggedDataFormat() { + return loggedDataFormat; + } + + public void setLoggedDataFormat(String loggedDataFormat) { + this.loggedDataFormat = loggedDataFormat; + } + + public String getLoggedDataDatatype() { + return loggedDataDatatype; + } + + public void setLoggedDataDatatype(String loggedDataDatatype) { + this.loggedDataDatatype = loggedDataDatatype; + } + + public String getPingDutyCycle() { + return pingDutyCycle; + } + + public void setPingDutyCycle(String pingDutyCycle) { + this.pingDutyCycle = pingDutyCycle; + } + + public String getEchosounderSoundSpeed() { + return echosounderSoundSpeed; + } + + public void setEchosounderSoundSpeed(String echosounderSoundSpeed) { + this.echosounderSoundSpeed = echosounderSoundSpeed; + } + + public String getSoundSpeedCalculationsER60() { + return soundSpeedCalculationsER60; + } + + public void setSoundSpeedCalculationsER60(String soundSpeedCalculationsER60) { + this.soundSpeedCalculationsER60 = soundSpeedCalculationsER60; + } + + public String getSoundSpeedCalculationsME70() { + return soundSpeedCalculationsME70; + } + + public void setSoundSpeedCalculationsME70(String soundSpeedCalculationsME70) { + this.soundSpeedCalculationsME70 = soundSpeedCalculationsME70; + } + + public Float getSounderConstant() { + return sounderConstant; + } + + public void setSounderConstant(Float sounderConstant) { + this.sounderConstant = sounderConstant; + } + + public float getDigitThreshold() { + return digitThreshold; + } + + public void setDigitThreshold(float digitThreshold) { + this.digitThreshold = digitThreshold; + } + + public String getAcousticDensityUnit() { + return acousticDensityUnit; + } + + public void setAcousticDensityUnit(String acousticDensityUnit) { + this.acousticDensityUnit = acousticDensityUnit; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public InputFile getMoviesFile() { + return moviesFile; + } + + public String getProcessingTemplate() { + return processingTemplate; + } + + public void setProcessingTemplate(String processingTemplate) { + this.processingTemplate = processingTemplate; + } + + public String getProcessingDescription() { + return processingDescription; + } + + public void setProcessingDescription(String processingDescription) { + this.processingDescription = processingDescription; + } + + public CellPositionReference getCellPositionReference() { + return cellPositionReference; + } + + public void setCellPositionReference(CellPositionReference cellPositionReference) { + this.cellPositionReference = cellPositionReference; + } + + @Override + public InputFile[] getInputFiles() { + return new InputFile[]{moviesFile}; + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AcousticDataImportConfiguration.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/CsvModelUtil.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/CsvModelUtil.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/CsvModelUtil.java 2012-02-16 23:14:23 UTC (rev 318) @@ -228,7 +228,7 @@ // can not find entity this is a big problem for us... throw new EchoBaseTechnicalException( - "Could not find entity with name " + value); + "Could not find entity of type "+entityType.getName()+" with name " + value); } } return result; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/GearMetadataValueImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/GearMetadataValueImportModel.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/GearMetadataValueImportModel.java 2012-02-16 23:14:23 UTC (rev 318) @@ -55,10 +55,10 @@ */ newMandatoryColumn("vesselName", GearMetadataValueImportModelRow.PROPERTY_VESSEL, CsvModelUtil.newForeignKeyValue(Vessel.class, vesselMap)); - newMandatoryColumn("id", GearMetadataValueImportModelRow.PROPERTY_OPERATION, CsvModelUtil.newForeignKeyValue(Operation.class, operationMap)); + newMandatoryColumn("operationID", GearMetadataValueImportModelRow.PROPERTY_OPERATION, CsvModelUtil.newForeignKeyValue(Operation.class, operationMap)); newMandatoryColumn("metadataType", GearMetadataValue.PROPERTY_GEAR_METADATA, CsvModelUtil.newForeignKeyValue(GearMetadata.class, gearMetadataMap)); - newMandatoryColumn("gearID", GearMetadataValue.PROPERTY_GEAR, CsvModelUtil.newForeignKeyValue(Gear.class, gearMap)); + newMandatoryColumn("gearCode", GearMetadataValue.PROPERTY_GEAR, CsvModelUtil.newForeignKeyValue(Gear.class, gearMap)); newMandatoryColumn("gearMetadataValue", GearMetadataValue.PROPERTY_DATA_VALUE); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/GearMetadataValueImportModelRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/GearMetadataValueImportModelRow.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/GearMetadataValueImportModelRow.java 2012-02-16 23:14:23 UTC (rev 318) @@ -27,6 +27,7 @@ import fr.ifremer.echobase.entities.data.GearMetadataValueImpl; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.Transect; +import fr.ifremer.echobase.entities.references.Gear; import fr.ifremer.echobase.entities.references.GearMetadata; import fr.ifremer.echobase.entities.references.Vessel; @@ -64,6 +65,10 @@ gearMetadataValue.setDataValue(dataValue); } + public void setGear(Gear gear) { + gearMetadataValue.setGear(gear); + } + public Operation getOperation() { return operation; } 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-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModel.java 2012-02-16 23:14:23 UTC (rev 318) @@ -60,9 +60,9 @@ */ newMandatoryColumn("vesselName", OperationImportModelRow.PROPERTY_VESSEL, CsvModelUtil.newForeignKeyValue(Vessel.class, vesselMap)); - newMandatoryColumn("gearName", Operation.PROPERTY_GEAR, CsvModelUtil.newForeignKeyValue(Gear.class, gearMap)); + newMandatoryColumn("gearCode", Operation.PROPERTY_GEAR, CsvModelUtil.newForeignKeyValue(Gear.class, gearMap)); newMandatoryColumn("depthStratumID", Operation.PROPERTY_DEPTH_STRATUM, CsvModelUtil.newForeignKeyValue(DepthStratum.class, depthStratumMap)); - newMandatoryColumn(Operation.PROPERTY_ID); + newMandatoryColumn("operationID",Operation.PROPERTY_ID); 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); 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-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationImportModelRow.java 2012-02-16 23:14:23 UTC (rev 318) @@ -90,11 +90,11 @@ operation.setGearShootingEndLongitude(gearShootingEndLongitude); } - public void setMidHauleLatitude(float midHauleLatitude) { + public void setMidHaulLatitude(float midHauleLatitude) { operation.setMidHaulLatitude(midHauleLatitude); } - public void setMidHauleLongitude(float midHauleLongitude) { + public void setMidHaulLongitude(float midHauleLongitude) { operation.setMidHaulLongitude(midHauleLongitude); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationMetadataValueImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationMetadataValueImportModel.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/OperationMetadataValueImportModel.java 2012-02-16 23:14:23 UTC (rev 318) @@ -52,7 +52,7 @@ */ newMandatoryColumn("vesselName", OperationMetadataValueImportModelRow.PROPERTY_VESSEL, CsvModelUtil.newForeignKeyValue(Vessel.class, vesselMap)); - newMandatoryColumn("id", OperationMetadataValueImportModelRow.PROPERTY_OPERATION, CsvModelUtil.newForeignKeyValue(Operation.class, operationMap)); + newMandatoryColumn("operationID", OperationMetadataValueImportModelRow.PROPERTY_OPERATION, CsvModelUtil.newForeignKeyValue(Operation.class, operationMap)); newMandatoryColumn("metadataType", OperationMetadataValue.PROPERTY_OPERATION_METADATA, CsvModelUtil.newForeignKeyValue(OperationMetadata.class, operationMetadataMap)); newMandatoryColumn("operationMetadataValue", OperationMetadataValue.PROPERTY_DATA_VALUE); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModel.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/SubSampleImportModel.java 2012-02-16 23:14:23 UTC (rev 318) @@ -73,7 +73,7 @@ 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(Sample.PROPERTY_NUMBER_SAMPLED, CsvModelUtil.PRIMITIVE_INTEGER); newMandatoryColumn(SubSampleImportModelRow.PROPERTY_NUMBER_AT_LENGTH, CsvModelUtil.PRIMITIVE_FLOAT); newMandatoryColumn(SubSampleImportModelRow.PROPERTY_WEIGHT_AT_LENGTH, CsvModelUtil.FLOAT); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModel.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/TotalSampleImportModel.java 2012-02-16 23:14:23 UTC (rev 318) @@ -61,13 +61,12 @@ 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(Sample.PROPERTY_NUMBER_SAMPLED, CsvModelUtil.PRIMITIVE_INTEGER); - 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); - + newMandatoryColumn(TotalSampleImportModelRow.PROPERTY_MEAN_LENGTH, CsvModelUtil.FLOAT); + newMandatoryColumn(TotalSampleImportModelRow.PROPERTY_MEAN_WEIGHT, CsvModelUtil.FLOAT); + newMandatoryColumn(TotalSampleImportModelRow.PROPERTY_NO_PER_KG, CsvModelUtil.FLOAT); + newMandatoryColumn(TotalSampleImportModelRow.PROPERTY_SORTED_WEIGHT, CsvModelUtil.PRIMITIVE_FLOAT); } @Override Modified: trunk/echobase-services/src/main/resources/embedded/echobase-embedded.properties =================================================================== --- trunk/echobase-services/src/main/resources/embedded/echobase-embedded.properties 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-services/src/main/resources/embedded/echobase-embedded.properties 2012-02-16 23:14:23 UTC (rev 318) @@ -22,8 +22,13 @@ # #L% ### +data.directory=. + hibernate.dialect=org.hibernate.dialect.H2Dialect hibernate.connection.username=sa hibernate.connection.password=sa hibernate.connection.driver_class=org.h2.Driver hibernate.connection.url=jdbc:h2:file:./db/echobase + +# Replication configuration +topia.service.replication=org.nuiton.topia.replication.TopiaReplicationServiceImpl 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-16 22:53:05 UTC (rev 317) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAccousticData.java 2012-02-16 23:14:23 UTC (rev 318) @@ -25,7 +25,7 @@ import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.configurations.AccousticDataImportConfiguration; +import fr.ifremer.echobase.services.configurations.AcousticDataImportConfiguration; import fr.ifremer.echobase.services.configurations.CellPositionReference; import java.io.File; @@ -37,7 +37,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.3 */ -public class ConfigureAccousticData extends AbstractConfigureImport<AccousticDataImportConfiguration> { +public class ConfigureAccousticData extends AbstractConfigureImport<AcousticDataImportConfiguration> { private static final long serialVersionUID = 1L; @@ -47,12 +47,12 @@ protected Map<String, String> cellPositionReferences; public ConfigureAccousticData() { - super(AccousticDataImportConfiguration.class); + super(AcousticDataImportConfiguration.class); } @Override - protected AccousticDataImportConfiguration createModel() { - return new AccousticDataImportConfiguration(getLocale()); + protected AcousticDataImportConfiguration createModel() { + return new AcousticDataImportConfiguration(getLocale()); } @Override Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchAccousticData.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchAccousticData.java 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchAccousticData.java 2012-02-16 23:14:23 UTC (rev 318) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.importData; -import fr.ifremer.echobase.services.AccousticDataImportService; -import fr.ifremer.echobase.services.configurations.AccousticDataImportConfiguration; +import fr.ifremer.echobase.services.AcousticDataImportService; +import fr.ifremer.echobase.services.configurations.AcousticDataImportConfiguration; /** * Configure a accoustic data import. @@ -32,12 +32,12 @@ * @author tchemit <chemit@codelutin.com> * @since 0.3 */ -public class LaunchAccousticData extends AbstractLaunchImport<AccousticDataImportConfiguration, AccousticDataImportService> { +public class LaunchAccousticData extends AbstractLaunchImport<AcousticDataImportConfiguration, AcousticDataImportService> { private static final long serialVersionUID = 1L; public LaunchAccousticData() { - super(AccousticDataImportConfiguration.class, AccousticDataImportService.class); + super(AcousticDataImportConfiguration.class, AcousticDataImportService.class); } } Modified: 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 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureResults-ConfigureResults-modeRegion-validation.xml 2012-02-16 23:14:23 UTC (rev 318) @@ -2,8 +2,8 @@ #%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... $ + $Id$ + $HeadURL$ %% Copyright (C) 2011 Ifremer, Codelutin %% Property changes on: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importData/ConfigureResults-ConfigureResults-modeRegion-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/includes/importDataResults.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/includes/importDataResults.jsp 2012-02-16 22:53:05 UTC (rev 317) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/includes/importDataResults.jsp 2012-02-16 23:14:23 UTC (rev 318) @@ -2,8 +2,8 @@ #%L EchoBase :: UI - $Id: resultResults.jsp 304 2012-02-02 22:58:29Z tchemit $ - $HeadURL: http://svn.forge.codelutin.com/svn/echobase/trunk/echobase-ui/src/main/webap... $ + $Id$ + $HeadURL$ %% Copyright (C) 2011 Ifremer, Codelutin %% Property changes on: trunk/echobase-ui/src/main/webapp/WEB-INF/includes/importDataResults.jsp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native