Author: tchemit Date: 2013-08-15 12:53:16 +0200 (Thu, 15 Aug 2013) New Revision: 842 Url: http://forge.codelutin.com/projects/echobase/repository/revisions/842 Log: - use last topia api - add spatialDataCache - improve projet design Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseApplicationConfigProvider.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfiguration.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfigurationOption.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBaseInternalPersistenceContext.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBasePersistenceContext.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBaseInternalPersistenceContext.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBasePersistenceContext.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/CellPoint.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialData.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialDataCache.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/DbChangedEvent.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/VoyageChangedEvent.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/WorkingDbChangeListener.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ProgressModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DbEditorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DecoratorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/InternalDbPersistenceService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/WorkingDbPersistenceService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbMode.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryCsvModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryInvalidNameException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryNameAlreadyExistException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryNotFoundException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/GenericSQLQuery.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/DecoratorServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/embeddedapplication/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportdb/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportdb/ExportDbServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportquery/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AcousticImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CatchesImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonAllImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonTransectImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonTransitImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonVoyageImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/OperationImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsEsduCellImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsMapFishCellImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsMapOtherCellImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsRegionCellImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdb/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdb/ImportDbServiceTest.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ConfigureShowSpatialData.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetSpatialData.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageDataMetadata.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageEchotype.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageSpecies.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Save.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialModel.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java trunk/echobase-ui/src/main/resources/config/struts-spatial.xml trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatial-validation.xml trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showData.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showDataMap.jsp Removed: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseApplicationConfigProvider.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfigurationOption.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ProgressModel.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ServiceFactoryAware.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/UserService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryCsvModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryInvalidNameException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNameAlreadyExistException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNotFoundException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/GenericSQLQuery.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/workingDb/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/DecoratorServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportdb/ExportDbServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportquery/ExportQueryServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdb/ Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBasePredicates.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/DriverType.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBasePersistenceHelper.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchobaseTopiaContexts.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/JdbcConfiguration.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/MigrationCallBackForVersion2_2.java trunk/echobase-domain/src/main/resources/META-INF/services/org.nuiton.config.ApplicationConfigProvider trunk/echobase-domain/src/main/xmi/echobase.zargo trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AcousticImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AcousticImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CatchesImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CatchesImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CellPositionReference.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonAllImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonTransectImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonTransitImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonVoyageImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/EchoBaseCsvFileImportResult.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ImportException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/MissionNameAlreadyExistException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/OperationImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/OperationImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsEsduCellImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsMapFishCellImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsMapOtherCellImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsRegionCellImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/BiometrySampleImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/BiometrySampleImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EchotypeImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EchotypeImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeAndSpeciesCategoryImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeAndSpeciesCategoryImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndAgeCategoryImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndAgeCategoryImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndSizeCategoryImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndSizeCategoryImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/GearMetadataValueImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/GearMetadataValueImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthAgeKeyImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthAgeKeyImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthWeightKeyImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthWeightKeyImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MapCellImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MapCellImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationMetadataValueImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationMetadataValueImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellAssociationImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellAssociationImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellResultImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellResultImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/SubSampleImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/SubSampleImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransectImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransectImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransitImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransitImportRow.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageImportModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/EchoBaseImportModelFactory.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbMode.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/AbstractImportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/EchoBaseImportStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/FreeImportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/ReferentialImportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AbstractRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AcousticRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CatchesRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonAllRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonTransectRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonTransitRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonVoyageRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/LegacyVoyageRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/OperationRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultEsduRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultMapFishRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultMapOtherRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultRegionRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultVoyageRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationAlreadyExistException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationNotFoundException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationService.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseTestServiceSupport.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/FakeEchoBaseServiceContext.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/FixCellsIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AcousticRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CatchesRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonAllRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransectRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransitRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonVoyageRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/OperationRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultEsduRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveFishDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveOtherDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultRegionRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultVoyageRemoveDataServiceTest.java trunk/echobase-services/update-import-data-db.sh trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/CellLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/DataMetadataLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearMetadataLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationMetadataLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/ReferenceDatumLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/SampleLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/SpeciesCategoryLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/StrataLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VesselLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VoyageLoader.java trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/AbstractToolTest.java trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/loaders/AbstractLoaderIT.java trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/loaders/CellLoaderIT.java trunk/echobase-ui/pom.xml trunk/echobase-ui/src/main/assembly/dist/help.sql trunk/echobase-ui/src/main/assembly/dist/postgis-structure.sql trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationContext.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseInternalDbTransactionFilter.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseSession.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractConfigureAction.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractWaitAndExecAction.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/Home.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/AbstractLoadPage.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ExportTable.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntity.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetForeignEntities.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/SaveEntity.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Build.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Configure.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Download.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Download.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Export.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DownloadExportQueryResult.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ExportQueryResult.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/GetExportQueryResult.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractConfigureImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractLaunchImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAcousticImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCommonImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureOperationImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureResultsImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/CreateMission.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetDataProcessingsForVoyage.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchAcousticImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchCatchesImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchCommonImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchOperationImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchResultsImport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/SelectImportType.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ConfirmDelete.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/Delete.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ImportLogs.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Create.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Delete.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/GetUsers.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Login.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Logout.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Update.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/AbstractWorkingDbAction.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Create.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Delete.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DownloadDriver.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Information.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckLogguedInterceptor.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckUserIsAdmin.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckWorkingDbSelected.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/validators/LoginValidator.java trunk/echobase-ui/src/main/resources/config/struts-user.xml trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties trunk/echobase-ui/src/main/resources/struts.xml trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml trunk/echobase-ui/src/main/webapp/WEB-INF/decorators/layout-default.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Create.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Delete.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Update.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/manage.jsp trunk/echobase-ui/src/main/webapp/js/gridHelper.js trunk/pom.xml Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseApplicationConfigProvider.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseApplicationConfigProvider.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseApplicationConfigProvider.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,61 +0,0 @@ -package fr.ifremer.echobase; - -/* - * #%L - * EchoBase :: Domain - * $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% - */ - -import org.nuiton.config.ApplicationConfigProvider; -import org.nuiton.config.ConfigActionDef; -import org.nuiton.config.ConfigOptionDef; - -import java.util.Locale; - -import static org.nuiton.i18n.I18n.l_; - -/** - * To generate configuration report. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.1 - */ -public class EchoBaseApplicationConfigProvider implements ApplicationConfigProvider { - - @Override - public String getName() { - return "echobase"; - } - - @Override - public String getDescription(Locale locale) { - return l_(locale, "echobase.configuration.description"); - } - - @Override - public ConfigOptionDef[] getOptions() { - return EchoBaseConfigurationOption.values(); - } - - @Override - public ConfigActionDef[] getActions() { - return new ConfigActionDef[0]; - } -} Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,239 +0,0 @@ -/* - * #%L - * EchoBase :: Domain - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase; - -import com.google.common.base.Preconditions; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.config.ApplicationConfig; -import org.nuiton.config.ArgumentsParserException; -import org.nuiton.util.FileUtil; -import org.nuiton.util.Version; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.Map; -import java.util.Properties; - -/** - * EchoBase configuration. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class EchoBaseConfiguration { - - /** Logger. */ - protected static final Log log = - LogFactory.getLog(EchoBaseConfiguration.class); - - public static final String OPTION_UPDATE_SCHEMA = "updateSchema"; - - public static final String OPTION_AUTO_LOGIN = "autoLogin"; - - /** Delegate application config object containing configuration. */ - protected ApplicationConfig applicationConfig; - - public EchoBaseConfiguration() { - this(null); - } - - public EchoBaseConfiguration(Properties propos) { - - EchoBaseDateConverter.initDateConverter(); - - applicationConfig = new ApplicationConfig(); - applicationConfig.setConfigFileName("echobase.properties"); - - if (log.isInfoEnabled()) { - log.info(this + " is initializing..."); - } - try { - applicationConfig.loadDefaultOptions( - EchoBaseConfigurationOption.values()); - if (propos != null) { - for (Map.Entry<Object, Object> entry : propos.entrySet()) { - - applicationConfig.setDefaultOption( - String.valueOf(entry.getKey()), - String.valueOf(entry.getValue()) - ); - } - } - applicationConfig.parse(); - - File dataDirectory = getDataDirectory(); - String dataDirectoryPath = dataDirectory.getAbsolutePath(); - if (log.isInfoEnabled()) { - log.info("Data directory = " + dataDirectoryPath); - } - if (dataDirectoryPath.endsWith(".")) { - dataDirectoryPath = dataDirectory.getParentFile().getAbsolutePath(); - if (log.isInfoEnabled()) { - log.info("Not absolute data directory " + dataDirectory + " will use " + dataDirectoryPath); - } - - // always use the absolue path (in cas of embedded db, - // we wants to have it. - applicationConfig.setOption( - EchoBaseConfigurationOption.DATA_DIRECTORY.key, - dataDirectoryPath - ); - } - - } catch (ArgumentsParserException e) { - throw new EchoBaseTechnicalException( - "Could not parse configuration", e); - } - - createDirectory(EchoBaseConfigurationOption.DATA_DIRECTORY); - try { -// FileUtils.forceMkdir(getWarDirectory()); - FileUtils.forceMkdir(getLibDirectory()); - } catch (IOException e) { - throw new EchoBaseTechnicalException(e); - } - - if (log.isDebugEnabled()) { - log.debug("parsed options in config file" + - applicationConfig.getOptions()); - } - } - - @Override - public String toString() { - return ReflectionToStringBuilder.toString(this); - } - - public Properties getProperties() { - Properties result = applicationConfig.getFlatOptions(); - return result; - } - - public File getDataDirectory() { - File file = applicationConfig.getOptionAsFile( - EchoBaseConfigurationOption.DATA_DIRECTORY.key); - Preconditions.checkNotNull(file); - return file; - } - - public File getInternalDbDirectory() { - File file = applicationConfig.getOptionAsFile( - EchoBaseConfigurationOption.INTERNAL_DB_DIRECTORY.key); - Preconditions.checkNotNull(file); - return file; - } - - public File getLibDirectory() { - File file = new File(getDataDirectory(), "lib"); - Preconditions.checkNotNull(file); - return file; - } - - public File getWarLocation() { - File file = applicationConfig.getOptionAsFile( - EchoBaseConfigurationOption.WAR_LOCATION.key); - Preconditions.checkNotNull(file); - return file; - } - - public char getCsvSeparator() { - char csvSeparator = applicationConfig.getOption( - char.class, EchoBaseConfigurationOption.CSV_SEPARATOR.key); - Preconditions.checkNotNull(csvSeparator); - return csvSeparator; - } - - public Version getApplicationVersion() { - Version v = applicationConfig.getOptionAsVersion( - EchoBaseConfigurationOption.VERSION.key); - Preconditions.checkNotNull(v); - return v; - } - - public String getH2Version() { - String v = applicationConfig.getOption( - EchoBaseConfigurationOption.H2_VERSION.key); - Preconditions.checkNotNull(v); - return v; - } - - public String getPostgresqlVersion() { - String v = applicationConfig.getOption( - EchoBaseConfigurationOption.POSTGRESQL_VERSION.key); - Preconditions.checkNotNull(v); - return v; - } - - public boolean isEmbedded() { - Boolean result = applicationConfig.getOptionAsBoolean( - EchoBaseConfigurationOption.EMBEDDED.key); - return result != null && result; - } - - public URL getDocumentationUrl() { - URL result = applicationConfig.getOptionAsURL( - EchoBaseConfigurationOption.DOCUMENTATION_URL.key); - return result; - } - - public boolean getOptionAsBoolean(String propertyName) { - Boolean result = applicationConfig.getOptionAsBoolean(propertyName); - return result != null && result; - } - - public boolean isUpdateSchema() { - Boolean result = applicationConfig.getOptionAsBoolean(OPTION_UPDATE_SCHEMA); - return result != null && result; - } - - /** - * Creates a directory given the configuration given key. - * - * @param key the configuration option key which contains the location of - * the directory to create - */ - private void createDirectory(EchoBaseConfigurationOption key) { - - File directory = applicationConfig.getOptionAsFile(key.getKey()); - - Preconditions.checkNotNull( - directory, - "Could not find directory " + directory + " (key " + - key + - "in your configuration file named echobase.properties)" - ); - if (log.isInfoEnabled()) { - log.info(key + " = " + directory); - } - try { - FileUtil.createDirectoryIfNecessary(directory); - } catch (IOException e) { - throw new EchoBaseTechnicalException( - "Could not create directory " + directory, e); - } - } -} Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfigurationOption.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfigurationOption.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfigurationOption.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,140 +0,0 @@ -/* - * #%L - * EchoBase :: Domain - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase; - -import org.nuiton.util.Version; -import org.nuiton.config.ConfigOptionDef; - -import java.io.File; -import java.net.URL; - -import static org.nuiton.i18n.I18n.n_; - -/** - * All EchoBase configuration options. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public enum EchoBaseConfigurationOption implements ConfigOptionDef { - - /** Main directory where to put echobase data (logs, and others...). */ - DATA_DIRECTORY("echobase.data.directory", - n_("echobase.config.data.directory.description"), - "/var/local/echobase", - File.class), - INTERNAL_DB_DIRECTORY( - "echobase.internal.db.directory", - n_("echobase.config.internal.db.directory.description"), - "${echobase.data.directory}/internaldb", File.class), - EMBEDDED("echobase.embedded", - n_("echobase.config.embedded.description"), - "false", boolean.class), - VERSION("echobase.version", - n_("echobase.config.version.description"), - "", Version.class), - H2_VERSION("echobase.h2Version", - n_("echobase.config.h2Version.description"), - "", String.class), - POSTGRESQL_VERSION("echobase.postgresqlVersion", - n_("echobase.config.postgresqlVersion.description"), - "", String.class), - CSV_SEPARATOR("echobase.csv.separator", - n_("echobase.config.csv.separator.description"), - ";", char.class), - WAR_LOCATION("echobase.war.location", - n_("echobase.config.war.location.description"), - "${echobase.data.directory}/war/echobase-ui-${echobase.version}-embedded.war", - File.class), - DOCUMENTATION_URL("echobase.documentationUrl", - n_("echobase.config.documentationUrl.description"), - "http://maven-site.forge.codelutin.com/echobase", - URL.class); - - /** Configuration key. */ - protected final String key; - - /** I18n key of option description */ - protected final String description; - - /** Type of option */ - protected final Class<?> type; - - /** Default value of option. */ - protected String defaultValue; - - EchoBaseConfigurationOption(String key, - String description, - String defaultValue, - Class<?> type) { - this.key = key; - this.description = description; - this.defaultValue = defaultValue; - this.type = type; - } - - @Override - public String getKey() { - return key; - } - - @Override - public Class<?> getType() { - return type; - } - - @Override - public String getDescription() { - return description; - } - - @Override - public String getDefaultValue() { - return defaultValue; - } - - @Override - public boolean isTransient() { - return true; - } - - @Override - public boolean isFinal() { - return true; - } - - @Override - public void setDefaultValue(String defaultValue) { - this.defaultValue = defaultValue; - } - - @Override - public void setTransient(boolean newValue) { - // not used - } - - @Override - public void setFinal(boolean newValue) { - // not used - } -} Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2013-08-15 10:53:16 UTC (rev 842) @@ -26,9 +26,11 @@ import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.spatial.CellPoint; import fr.ifremer.echobase.entities.data.DataProcessing; import fr.ifremer.echobase.entities.data.Echotype; import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AcousticInstrument; @@ -139,6 +141,13 @@ } }; + public static final Function<Result, Cell> RESULT_CELL = new Function<Result, Cell>() { + @Override + public Cell apply(Result input) { + return input.getCell(); + } + }; + public static final Function<Mission, String> MISSION_NAME = new Function<Mission, String>() { @Override public String apply(Mission input) { @@ -324,6 +333,13 @@ } }; + public static final Function<CellPoint,String> CELL_POINT_CELL_ID_FUNCTION = new Function<CellPoint, String>() { + @Override + public String apply(CellPoint input) { + return input.getCellId(); + } + }; + public static String getSpeciesCategoryKey(Species species, SizeCategory sizeCategory, SexCategory sexCategory) { String key = species.getBaracoudaCode(); if (sizeCategory != null) { Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBasePredicates.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBasePredicates.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBasePredicates.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,6 +23,7 @@ package fr.ifremer.echobase; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.Sets; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Echotype; @@ -72,6 +73,24 @@ } }; + public static final Predicate<CellType> IS_ESDU_CELL_TYPE = new Predicate<CellType>() { + + @Override + public boolean apply(CellType input) { + boolean result = "esdu".equals(input.getId().toLowerCase()); + return result; + } + }; + + public static final Predicate<CellType> IS_ELEMENTARY_CELL_TYPE = new Predicate<CellType>() { + + @Override + public boolean apply(CellType input) { + boolean result = "elementary".equals(input.getId().toLowerCase()); + return result; + } + }; + public static final Predicate<CellType> IS_MAP_CELL_TYPE = new Predicate<CellType>() { public final Set<String> acceptedNames = Sets.newHashSet( @@ -105,6 +124,28 @@ } }; + public static final Predicate<Cell> IS_ELEMENTARY_CELL = new Predicate<Cell>() { + @Override + public boolean apply(Cell input) { + CellType cellType = input.getCellType(); + boolean result = cellType != null && + IS_ELEMENTARY_CELL_TYPE.apply(cellType); + return result; + } + }; + + public static final Predicate<Cell> IS_ESDU_CELL = new Predicate<Cell>() { + @Override + public boolean apply(Cell input) { + CellType cellType = input.getCellType(); + boolean result = cellType != null && + IS_ESDU_CELL_TYPE.apply(cellType); + return result; + } + }; + + public static final Predicate<Cell> IS_POINT_CELL = Predicates.or(IS_ELEMENTARY_CELL, IS_ESDU_CELL); + public static final Predicate<Operation> OPERATION_WITH_TOTAL_OR_UNSORTED_SAMPLE = new Predicate<Operation>() { @Override public boolean apply(Operation input) { Copied: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseApplicationConfigProvider.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseApplicationConfigProvider.java) =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseApplicationConfigProvider.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseApplicationConfigProvider.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,61 @@ +package fr.ifremer.echobase.config; + +/* + * #%L + * EchoBase :: Domain + * $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% + */ + +import org.nuiton.config.ApplicationConfigProvider; +import org.nuiton.config.ConfigActionDef; +import org.nuiton.config.ConfigOptionDef; + +import java.util.Locale; + +import static org.nuiton.i18n.I18n.l_; + +/** + * To generate configuration report. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class EchoBaseApplicationConfigProvider implements ApplicationConfigProvider { + + @Override + public String getName() { + return "echobase"; + } + + @Override + public String getDescription(Locale locale) { + return l_(locale, "echobase.configuration.description"); + } + + @Override + public ConfigOptionDef[] getOptions() { + return EchoBaseConfigurationOption.values(); + } + + @Override + public ConfigActionDef[] getActions() { + return new ConfigActionDef[0]; + } +} Copied: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfiguration.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfiguration.java) =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfiguration.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,241 @@ +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.config; + +import com.google.common.base.Preconditions; +import fr.ifremer.echobase.EchoBaseDateConverter; +import fr.ifremer.echobase.EchoBaseTechnicalException; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.config.ApplicationConfig; +import org.nuiton.config.ArgumentsParserException; +import org.nuiton.util.FileUtil; +import org.nuiton.util.Version; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.Map; +import java.util.Properties; + +/** + * EchoBase configuration. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class EchoBaseConfiguration { + + /** Logger. */ + protected static final Log log = + LogFactory.getLog(EchoBaseConfiguration.class); + + public static final String OPTION_UPDATE_SCHEMA = "updateSchema"; + + public static final String OPTION_AUTO_LOGIN = "autoLogin"; + + /** Delegate application config object containing configuration. */ + protected ApplicationConfig applicationConfig; + + public EchoBaseConfiguration() { + this(null); + } + + public EchoBaseConfiguration(Properties propos) { + + EchoBaseDateConverter.initDateConverter(); + + applicationConfig = new ApplicationConfig(); + applicationConfig.setConfigFileName("echobase.properties"); + + if (log.isInfoEnabled()) { + log.info(this + " is initializing..."); + } + try { + applicationConfig.loadDefaultOptions( + EchoBaseConfigurationOption.values()); + if (propos != null) { + for (Map.Entry<Object, Object> entry : propos.entrySet()) { + + applicationConfig.setDefaultOption( + String.valueOf(entry.getKey()), + String.valueOf(entry.getValue()) + ); + } + } + applicationConfig.parse(); + + File dataDirectory = getDataDirectory(); + String dataDirectoryPath = dataDirectory.getAbsolutePath(); + if (log.isInfoEnabled()) { + log.info("Data directory = " + dataDirectoryPath); + } + if (dataDirectoryPath.endsWith(".")) { + dataDirectoryPath = dataDirectory.getParentFile().getAbsolutePath(); + if (log.isInfoEnabled()) { + log.info("Not absolute data directory " + dataDirectory + " will use " + dataDirectoryPath); + } + + // always use the absolue path (in cas of embedded db, + // we wants to have it. + applicationConfig.setOption( + EchoBaseConfigurationOption.DATA_DIRECTORY.key, + dataDirectoryPath + ); + } + + } catch (ArgumentsParserException e) { + throw new EchoBaseTechnicalException( + "Could not parse configuration", e); + } + + createDirectory(EchoBaseConfigurationOption.DATA_DIRECTORY); + try { +// FileUtils.forceMkdir(getWarDirectory()); + FileUtils.forceMkdir(getLibDirectory()); + } catch (IOException e) { + throw new EchoBaseTechnicalException(e); + } + + if (log.isDebugEnabled()) { + log.debug("parsed options in config file" + + applicationConfig.getOptions()); + } + } + + @Override + public String toString() { + return ReflectionToStringBuilder.toString(this); + } + + public Properties getProperties() { + Properties result = applicationConfig.getFlatOptions(); + return result; + } + + public File getDataDirectory() { + File file = applicationConfig.getOptionAsFile( + EchoBaseConfigurationOption.DATA_DIRECTORY.key); + Preconditions.checkNotNull(file); + return file; + } + + public File getInternalDbDirectory() { + File file = applicationConfig.getOptionAsFile( + EchoBaseConfigurationOption.INTERNAL_DB_DIRECTORY.key); + Preconditions.checkNotNull(file); + return file; + } + + public File getLibDirectory() { + File file = new File(getDataDirectory(), "lib"); + Preconditions.checkNotNull(file); + return file; + } + + public File getWarLocation() { + File file = applicationConfig.getOptionAsFile( + EchoBaseConfigurationOption.WAR_LOCATION.key); + Preconditions.checkNotNull(file); + return file; + } + + public char getCsvSeparator() { + char csvSeparator = applicationConfig.getOption( + char.class, EchoBaseConfigurationOption.CSV_SEPARATOR.key); + Preconditions.checkNotNull(csvSeparator); + return csvSeparator; + } + + public Version getApplicationVersion() { + Version v = applicationConfig.getOptionAsVersion( + EchoBaseConfigurationOption.VERSION.key); + Preconditions.checkNotNull(v); + return v; + } + + public String getH2Version() { + String v = applicationConfig.getOption( + EchoBaseConfigurationOption.H2_VERSION.key); + Preconditions.checkNotNull(v); + return v; + } + + public String getPostgresqlVersion() { + String v = applicationConfig.getOption( + EchoBaseConfigurationOption.POSTGRESQL_VERSION.key); + Preconditions.checkNotNull(v); + return v; + } + + public boolean isEmbedded() { + Boolean result = applicationConfig.getOptionAsBoolean( + EchoBaseConfigurationOption.EMBEDDED.key); + return result != null && result; + } + + public URL getDocumentationUrl() { + URL result = applicationConfig.getOptionAsURL( + EchoBaseConfigurationOption.DOCUMENTATION_URL.key); + return result; + } + + public boolean getOptionAsBoolean(String propertyName) { + Boolean result = applicationConfig.getOptionAsBoolean(propertyName); + return result != null && result; + } + + public boolean isUpdateSchema() { + Boolean result = applicationConfig.getOptionAsBoolean(OPTION_UPDATE_SCHEMA); + return result != null && result; + } + + /** + * Creates a directory given the configuration given key. + * + * @param key the configuration option key which contains the location of + * the directory to create + */ + private void createDirectory(EchoBaseConfigurationOption key) { + + File directory = applicationConfig.getOptionAsFile(key.getKey()); + + Preconditions.checkNotNull( + directory, + "Could not find directory " + directory + " (key " + + key + + "in your configuration file named echobase.properties)" + ); + if (log.isInfoEnabled()) { + log.info(key + " = " + directory); + } + try { + FileUtil.createDirectoryIfNecessary(directory); + } catch (IOException e) { + throw new EchoBaseTechnicalException( + "Could not create directory " + directory, e); + } + } +} Copied: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfigurationOption.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseConfigurationOption.java) =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfigurationOption.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfigurationOption.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,140 @@ +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.config; + +import org.nuiton.util.Version; +import org.nuiton.config.ConfigOptionDef; + +import java.io.File; +import java.net.URL; + +import static org.nuiton.i18n.I18n.n_; + +/** + * All EchoBase configuration options. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public enum EchoBaseConfigurationOption implements ConfigOptionDef { + + /** Main directory where to put echobase data (logs, and others...). */ + DATA_DIRECTORY("echobase.data.directory", + n_("echobase.config.data.directory.description"), + "/var/local/echobase", + File.class), + INTERNAL_DB_DIRECTORY( + "echobase.internal.db.directory", + n_("echobase.config.internal.db.directory.description"), + "${echobase.data.directory}/internaldb", File.class), + EMBEDDED("echobase.embedded", + n_("echobase.config.embedded.description"), + "false", boolean.class), + VERSION("echobase.version", + n_("echobase.config.version.description"), + "", Version.class), + H2_VERSION("echobase.h2Version", + n_("echobase.config.h2Version.description"), + "", String.class), + POSTGRESQL_VERSION("echobase.postgresqlVersion", + n_("echobase.config.postgresqlVersion.description"), + "", String.class), + CSV_SEPARATOR("echobase.csv.separator", + n_("echobase.config.csv.separator.description"), + ";", char.class), + WAR_LOCATION("echobase.war.location", + n_("echobase.config.war.location.description"), + "${echobase.data.directory}/war/echobase-ui-${echobase.version}-embedded.war", + File.class), + DOCUMENTATION_URL("echobase.documentationUrl", + n_("echobase.config.documentationUrl.description"), + "http://maven-site.forge.codelutin.com/echobase", + URL.class); + + /** Configuration key. */ + protected final String key; + + /** I18n key of option description */ + protected final String description; + + /** Type of option */ + protected final Class<?> type; + + /** Default value of option. */ + protected String defaultValue; + + EchoBaseConfigurationOption(String key, + String description, + String defaultValue, + Class<?> type) { + this.key = key; + this.description = description; + this.defaultValue = defaultValue; + this.type = type; + } + + @Override + public String getKey() { + return key; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isTransient() { + return true; + } + + @Override + public boolean isFinal() { + return true; + } + + @Override + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + @Override + public void setTransient(boolean newValue) { + // not used + } + + @Override + public void setFinal(boolean newValue) { + // not used + } +} Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/DriverType.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/DriverType.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/DriverType.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,7 +23,7 @@ * #L% */ -import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfiguration; import fr.ifremer.echobase.I18nAble; import org.hibernate.dialect.H2Dialect; import org.hibernate.dialect.PostgreSQL82Dialect; @@ -91,4 +91,15 @@ return i18nKey; } + public static DriverType valueOfDriverName(String driverName) { + DriverType result = null; + for (DriverType driverType : values()) { + if (driverName.equals(driverType.getDriverClass().getName())) { + result = driverType; + break; + } + } + return result; + } + } Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBaseInternalPersistenceContext.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBaseInternalPersistenceContext.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBaseInternalPersistenceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,14 @@ +package fr.ifremer.echobase.entities; + +import org.nuiton.topia.TopiaPersistenceContext; +import org.nuiton.topia.TopiaReplicationSupport; +import org.nuiton.topia.TopiaTransaction; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public interface EchoBaseInternalPersistenceContext extends TopiaTransaction, TopiaPersistenceContext, TopiaReplicationSupport { +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBaseInternalPersistenceContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBasePersistenceContext.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBasePersistenceContext.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBasePersistenceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,17 @@ +package fr.ifremer.echobase.entities; + +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaPersistenceContext; +import org.nuiton.topia.TopiaSqlSupport; +import org.nuiton.topia.TopiaTransaction; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public interface EchoBasePersistenceContext extends TopiaTransaction, TopiaPersistenceContext, TopiaSqlSupport { + + TopiaContext getContext(); +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/EchoBasePersistenceContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBaseInternalPersistenceContext.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBaseInternalPersistenceContext.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBaseInternalPersistenceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,150 @@ +package fr.ifremer.echobase.entities; + +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaPersistenceContext; +import org.nuiton.topia.TopiaReplicationSupport; +import org.nuiton.topia.TopiaTransaction; +import org.nuiton.topia.framework.TopiaSQLQuery; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaIdFactory; + +import java.util.List; +import java.util.Properties; + +public class TopiaEchoBaseInternalPersistenceContext extends AbstractTopiaEchoBaseInternalPersistenceContext { + + public TopiaEchoBaseInternalPersistenceContext(TopiaContext context) { + super(context); + } + + @Override + public void commitTransaction() { + getTransaction().commitTransaction(); + } + + @Override + public void rollbackTransaction() { + getTransaction().rollbackTransaction(); + } + + @Override + public void closeContext() { + getTransaction().closeContext(); + } + + @Override + public boolean isClosed() { + return getTransaction().isClosed(); + } + + @Override + public <E extends TopiaEntity> E findByTopiaId(java.lang.String topiaId) { + return getPersistenceContext().findByTopiaId(topiaId); + } + + @Override + public void update(TopiaEntity entity) { + getPersistenceContext().update(entity); + } + + @Override + public TopiaIdFactory getTopiaIdFactory() { + return getPersistenceContext().getTopiaIdFactory(); + } + + @Override + public List<Class<?>> getPersistenceClasses() { + return getPersistenceContext().getPersistenceClasses(); + } + + @Override + public void setUseFlushMode(boolean useFlushMode) { + getPersistenceContext().setUseFlushMode(useFlushMode); + } + + @Override + public Properties getConfig() { + return getPersistenceContext().getConfig(); + } + + @Override + public <E extends TopiaEntity> TopiaDAO<E> getDAO(Class<E> entityClass) { + return getPersistenceContext().getDAO(entityClass); + } + + @Override + public <E extends TopiaEntity, D extends TopiaDAO<E>> D getDAO(Class<E> entityClass, Class<D> daoClass) { + return getPersistenceContext().getDAO(entityClass, daoClass); + } + + @Override + public boolean isSchemaEmpty() { + return getPersistenceContext().isSchemaEmpty(); + } + + @Override + public boolean isTableExists(Class<?> clazz) { + return getPersistenceContext().isTableExists(clazz); + } + + @Override + public java.lang.String getSchemaName() { + return getPersistenceContext().getSchemaName(); + } + + @Override + public void createSchema() { + getPersistenceContext().createSchema(); + } + + @Override + public void showCreateSchema() { + getPersistenceContext().showCreateSchema(); + } + + @Override + public void updateSchema() { + getPersistenceContext().updateSchema(); + } + + @Override + public void dropSchema() { + getPersistenceContext().dropSchema(); + } + + @Override + public void replicate(TopiaContext destinationContext, Object... entityAndCondition) throws IllegalArgumentException { + getReplicationSupport().replicate(destinationContext, entityAndCondition); + } + + @Override + public <T extends TopiaEntity> void replicateEntity(TopiaContext destinationContext, T entity) throws IllegalArgumentException { + getReplicationSupport().replicateEntity(destinationContext, entity); + } + + @Override + public <T extends TopiaEntity> void replicateEntities(TopiaContext destinationContext, List<T> entities) throws IllegalArgumentException { + getReplicationSupport().replicateEntities(destinationContext, entities); + } + + public <R> R findSingleResult(TopiaSQLQuery<R> sqlQuery) { + return sqlQuery.findSingleResult(context); + } + + public <R> List<R> findMultipleResult(TopiaSQLQuery<R> sqlQuery) { + return sqlQuery.findMultipleResult(context); + } + + protected TopiaTransaction getTransaction() { + return context; + } + + protected TopiaPersistenceContext getPersistenceContext() { + return context; + } + + protected TopiaReplicationSupport getReplicationSupport() { + return context; + } +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBaseInternalPersistenceContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBasePersistenceContext.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBasePersistenceContext.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBasePersistenceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,205 @@ +package fr.ifremer.echobase.entities; + +import com.google.common.base.Preconditions; +import fr.ifremer.echobase.EchoBaseTechnicalException; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaContextFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.TopiaPersistenceContext; +import org.nuiton.topia.TopiaSqlSupport; +import org.nuiton.topia.TopiaTransaction; +import org.nuiton.topia.framework.TopiaSQLQuery; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaIdFactory; + +import java.util.List; +import java.util.Properties; + +public class TopiaEchoBasePersistenceContext extends AbstractTopiaEchoBasePersistenceContext { + + public TopiaEchoBasePersistenceContext(TopiaContext context) { + super(context); + } + + @Override + public void commitTransaction() { + getTransaction().commitTransaction(); + } + + @Override + public void rollbackTransaction() { + getTransaction().rollbackTransaction(); + } + + @Override + public void closeContext() { + getTransaction().closeContext(); + } + + @Override + public boolean isClosed() { + return getTransaction().isClosed(); + } + + @Override + public <E extends TopiaEntity> E findByTopiaId(java.lang.String topiaId) { + return getPersistenceContext().findByTopiaId(topiaId); + } + + @Override + public void update(TopiaEntity entity) { + getPersistenceContext().update(entity); + } + + @Override + public TopiaIdFactory getTopiaIdFactory() { + return getPersistenceContext().getTopiaIdFactory(); + } + + @Override + public List<Class<?>> getPersistenceClasses() { + return getPersistenceContext().getPersistenceClasses(); + } + + @Override + public void setUseFlushMode(boolean useFlushMode) { + getPersistenceContext().setUseFlushMode(useFlushMode); + } + + @Override + public Properties getConfig() { + return getPersistenceContext().getConfig(); + } + + @Override + public <E extends TopiaEntity> TopiaDAO<E> getDAO(Class<E> entityClass) { + return getPersistenceContext().getDAO(entityClass); + } + + @Override + public <E extends TopiaEntity, D extends TopiaDAO<E>> D getDAO(Class<E> entityClass, Class<D> daoClass) { + return getPersistenceContext().getDAO(entityClass, daoClass); + } + + @Override + public boolean isSchemaEmpty() { + return getPersistenceContext().isSchemaEmpty(); + } + + @Override + public boolean isTableExists(Class<?> clazz) { + return getPersistenceContext().isTableExists(clazz); + } + + @Override + public java.lang.String getSchemaName() { + return getPersistenceContext().getSchemaName(); + } + + @Override + public void createSchema() { + getPersistenceContext().createSchema(); + } + + @Override + public void showCreateSchema() { + getPersistenceContext().showCreateSchema(); + } + + @Override + public void updateSchema() { + getPersistenceContext().updateSchema(); + } + + @Override + public void dropSchema() { + getPersistenceContext().dropSchema(); + } + + @Override + public void executeSQL(String sqlScript) { + getTopiaSqlSupport().executeSQL(sqlScript); + } + + public final <E extends TopiaEntity> E getEntityById(Class<E> entityType, String id) { + Preconditions.checkNotNull(entityType); + Preconditions.checkArgument(StringUtils.isNotEmpty(id)); + try { + E result = getDAO(entityType).findByTopiaId(id); + return result; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException( + "Could not obtain data of id [" + id + "] for type " + + entityType, eee); + } + } + + public final <E extends TopiaEntity> E getEntityOrNullById(Class<E> entityType, String id) { + Preconditions.checkNotNull(entityType); + if (StringUtils.isBlank(id)) { + return null; + } + return getEntityById(entityType, id); + } + + public void flush() { + context.getHibernateSession().flush(); + } + + public void clear() { + context.getHibernateSession().clear(); + } + + protected TopiaTransaction getTransaction() { + return context; + } + + protected TopiaSqlSupport getTopiaSqlSupport() { + return context; + } + + protected TopiaPersistenceContext getPersistenceContext() { + return context; + } + + @Override + public TopiaContext getContext() { + return context; + } + + public <R> R findSingleResult(TopiaSQLQuery<R> sqlQuery) { + return sqlQuery.findSingleResult(context); + } + + public <R> List<R> findMultipleResult(TopiaSQLQuery<R> sqlQuery) { + return sqlQuery.findMultipleResult(context); + } + + + public boolean canUpdatePostgis() { + String dialect = context.getHibernateConfiguration().getProperty(TopiaContextFactory.CONFIG_DIALECT); + + return DriverType.POSTGRESQL.getDialectClass().getName().equals(dialect); + } + + public boolean isSpatialAware() { + boolean result = canUpdatePostgis(); + + if (result) { + + // on pg db, check there is now a echobase_spatial_cell + try { + executeSQL("select count(*) from echobase_cell_spatial;"); + } catch (Exception e) { + // table not found (or other, ...) + result = false; + // rollback (otherwise transaction will stay dirty) + rollbackTransaction(); + } + } + return result; + } + +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/TopiaEchoBasePersistenceContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,104 @@ +package fr.ifremer.echobase.entities.data; + +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import com.google.common.collect.Lists; +import fr.ifremer.echobase.EchoBasePredicates; +import fr.ifremer.echobase.entities.spatial.CellPoint; +import org.nuiton.topia.framework.TopiaSQLQuery; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +public class CellDAOImpl<E extends Cell> extends CellDAOAbstract<E> { + + public List<CellPoint> getVoyageCellPoints(Voyage voyage) { + + List<CellPoint> result = Lists.newArrayList(); + + TopiaSQLQuery<CellPoint> queryPoint = newLatLongSqlQuery(voyage.getTopiaId()); + TopiaSQLQuery<CellPoint> queryPoint3D = newLatLongDepthSqlQuery(voyage.getTopiaId()); + + result.addAll(queryPoint.findMultipleResult(context)); + result.addAll(queryPoint3D.findMultipleResult(context)); + return result; + } + + public CellPoint getPoint(E cell) { + + TopiaSQLQuery<CellPoint> query = null; + if (EchoBasePredicates.IS_ESDU_CELL.apply(cell)) { + + query = newLatLongSqlQuery(cell.getTopiaId()); + } else if (EchoBasePredicates.IS_ELEMENTARY_CELL.apply(cell)) { + query = newLatLongDepthSqlQuery(cell.getTopiaId()); + } + CellPoint result = query == null ? null : query.findSingleResult(context); + return result; + } + + protected TopiaSQLQuery<CellPoint> newLatLongSqlQuery(final String voyageId) { + return new TopiaSQLQuery<CellPoint>() { + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + + PreparedStatement ps = connection.prepareStatement("SELECT cellId, ST_Y(ST_ASTEXT(coordinate)), ST_X(ST_ASTEXT(coordinate)) FROM echobase_cell_spatial WHERE coordinate IS NOT NULL AND voyageId = ?"); + ps.setString(1, voyageId); + return ps; + } + + @Override + protected CellPoint prepareResult(ResultSet set) throws SQLException { + String cellId = set.getString(1); + Double latitude = set.getDouble(2); + Double longitude = set.getDouble(3); + return new CellPoint(cellId, latitude, longitude, 0d); + } + }; + } + + protected TopiaSQLQuery<CellPoint> newLatLongDepthSqlQuery(final String voyageId) { + return new TopiaSQLQuery<CellPoint>() { + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + + PreparedStatement ps = connection.prepareStatement("SELECT cellId, ST_Y(ST_ASTEXT(coordinate3D)), ST_X(ST_ASTEXT(coordinate3D)) , ST_Y(ST_ASTEXT(coordinate3D)) FROM echobase_cell_spatial WHERE coordinate3D IS NOT NULL AND voyageId = ?"); + ps.setString(1, voyageId); + return ps; + } + + @Override + protected CellPoint prepareResult(ResultSet set) throws SQLException { + String cellId = set.getString(1); + Double latitude = set.getDouble(2); + Double longitude = set.getDouble(3); + Double depth = set.getDouble(4); + return new CellPoint(cellId, latitude, longitude, depth); + } + }; + } +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/CellPoint.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/CellPoint.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/CellPoint.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,64 @@ +package fr.ifremer.echobase.entities.spatial; + +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import java.io.Serializable; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class CellPoint implements Serializable { + + private static final long serialVersionUID = 1L; + + protected final String cellId; + + protected final double x, y, z; + + public CellPoint(String cellId, double x, double y, double z) { + this.cellId = cellId; + this.x = x; + this.y = y; + this.z = z; + } + + public String getCellId() { + return cellId; + } + + public double getX() { + return x; + } + + public double getY() { + return y; + } + + public double getZ() { + return z; + } +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/CellPoint.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,116 @@ +package fr.ifremer.echobase.entities.spatial; + +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL:$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import java.io.Serializable; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class SpatialConfiguration implements Serializable { + + private static final long serialVersionUID = 1L; + + /** Selected jdbc url (can't be null). */ + protected String jdbcUrl; + + /** Selected voyage id (can't be null). */ + protected String voyageId; + + /** Selected data metadata id (can't be null). */ + protected String dataMetadataId; + + /** Selected species id (can be null). */ + protected String speciesId; + + /** Selected echotype id (can be null). */ + protected String echotypeId; + + public String getJdbcUrl() { + return jdbcUrl; + } + + public void setJdbcUrl(String jdbcUrl) { + this.jdbcUrl = jdbcUrl; + } + + public String getVoyageId() { + return voyageId; + } + + public void setVoyageId(String voyageId) { + this.voyageId = voyageId; + } + + public String getDataMetadataId() { + return dataMetadataId; + } + + public void setDataMetadataId(String dataMetadataId) { + this.dataMetadataId = dataMetadataId; + } + + public String getSpeciesId() { + return speciesId; + } + + public void setSpeciesId(String speciesId) { + this.speciesId = speciesId; + } + + public String getEchotypeId() { + return echotypeId; + } + + public void setEchotypeId(String echotypeId) { + this.echotypeId = echotypeId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SpatialConfiguration)) return false; + + SpatialConfiguration that = (SpatialConfiguration) o; + + return !(jdbcUrl != null ? !jdbcUrl.equals(that.jdbcUrl) : that.jdbcUrl != null) && + !(dataMetadataId != null ? !dataMetadataId.equals(that.dataMetadataId) : that.dataMetadataId != null) && + !(echotypeId != null ? !echotypeId.equals(that.echotypeId) : that.echotypeId != null) && + !(speciesId != null ? !speciesId.equals(that.speciesId) : that.speciesId != null) && + !(voyageId != null ? !voyageId.equals(that.voyageId) : that.voyageId != null); + } + + @Override + public int hashCode() { + int result = jdbcUrl == null ? 0 : jdbcUrl.hashCode(); + result = 31 * result + (voyageId == null ? 0 : voyageId.hashCode()); + result = 31 * result + (dataMetadataId == null ? 0 : dataMetadataId.hashCode()); + result = 31 * result + (speciesId == null ? 0 : speciesId.hashCode()); + result = 31 * result + (echotypeId == null ? 0 : echotypeId.hashCode()); + return result; + } +} \ No newline at end of file Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialData.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialData.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialData.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,73 @@ +package fr.ifremer.echobase.entities.spatial; + +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + + +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.references.DataMetadata; + +import java.io.Serializable; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class SpatialData implements Serializable { + + private static final long serialVersionUID = 1L; + + protected CellPoint point; + + protected Result result; + + public void setPoint(CellPoint point) { + this.point = point; + } + + public void setResult(Result result) { + this.result = result; + } + + public double getLatitude() { + return point.getY(); + } + + public double getLongitude() { + return point.getX(); + } + + public double getDepth() { + return point.getZ(); + } + + public DataMetadata getDataMetadata() { + return result.getDataMetadata(); + } + + public Serializable getDataValue() { + return result.getResultValue(); + } +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialData.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialDataCache.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialDataCache.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialDataCache.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,72 @@ +package fr.ifremer.echobase.entities.spatial; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.Serializable; +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class SpatialDataCache implements Serializable { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(SpatialDataCache.class); + + protected final Map<SpatialConfiguration, Set<SpatialData>> cache = + Maps.newHashMap(); + + + public Set<SpatialData> get(SpatialConfiguration configuration) { + return cache.get(configuration); + } + + public void put(SpatialConfiguration configuration, Set<SpatialData> data) { + cache.put(configuration, Collections.unmodifiableSet(data)); + } + + public void onDbChanged(String jdbcUrl) { + + if (log.isInfoEnabled()) { + log.info("Revoking spatial data cache for db: " + jdbcUrl); + } + + Set<SpatialConfiguration> keys = Sets.newHashSet(cache.keySet()); + for (SpatialConfiguration key : keys) { + if (jdbcUrl.equals(key.getJdbcUrl())) { + cache.remove(key); + } + } + } + + public void onVoyageChanged(String jdbcUrl, String voyageId) { + + if (log.isInfoEnabled()) { + log.info("Revoking spatial data cache for db/voyage: " + jdbcUrl + + "/" + voyageId); + } + + Set<SpatialConfiguration> keys = Sets.newHashSet(cache.keySet()); + for (SpatialConfiguration key : keys) { + if (jdbcUrl.equals(key.getJdbcUrl()) && + voyageId.equals(key.getVoyageId())) { + cache.remove(key); + } + } + } + + public void clear() { + cache.clear(); + } + +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialDataCache.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBasePersistenceHelper.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBasePersistenceHelper.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBasePersistenceHelper.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,11 +23,9 @@ * #L% */ -import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseDAOHelper; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaPersistenceHelper; @@ -56,12 +54,36 @@ return (TopiaDAO<E>) getDAO(tx, type.getContract()); } - public final void flushTransaction(TopiaContext tx, String errorMessage) { - try { - tx.getHibernateSession().flush(); - } catch (TopiaException e) { - throw new EchoBaseTechnicalException(errorMessage, e); - } - } +// public final void flushTransaction(TopiaContext tx, String errorMessage) { +// try { +// tx.getHibernateSession().flush(); +// } catch (TopiaException e) { +// throw new EchoBaseTechnicalException(errorMessage, e); +// } +// } +// public boolean canUpdatePostgis(TopiaContext tx) { +// String dialect = tx.getHibernateConfiguration().getProperty(TopiaContextFactory.CONFIG_DIALECT); +// +// return DriverType.POSTGRESQL.getDialectClass().getName().equals(dialect); +// } + +// public boolean isSpatialAware(TopiaContext tx) { +// boolean result = canUpdatePostgis(tx); +// +// if (result) { +// +// // on pg db, check there is now a echobase_spatial_cell +// try { +// ((TopiaSqlSupport) tx).executeSQL("select count(*) from echobase_cell_spatial;"); +// } catch (Exception e) { +// // table not found (or other, ...) +// result = false; +// // rollback (otherwise transaction will stay dirty) +// ((TopiaTransaction) tx).rollbackTransaction(); +// } +// } +// return result; +// } + } Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchobaseTopiaContexts.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchobaseTopiaContexts.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchobaseTopiaContexts.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,7 @@ */ import com.google.common.base.Charsets; -import fr.ifremer.echobase.EchoBaseConfigurationOption; +import fr.ifremer.echobase.config.EchoBaseConfigurationOption; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.DriverType; import fr.ifremer.echobase.entities.EchoBaseDAOHelper; @@ -197,17 +197,11 @@ return result; } - public static void reloadProperty(Properties properties, + private static void reloadProperty(Properties properties, String propertyName, String propertyNameToRemove) { Object o = properties.getProperty(propertyName); properties.put(propertyName, o); properties.remove(propertyNameToRemove); } - - public static boolean canUpdatePostgis(TopiaContext tx) { - String dialect = tx.getHibernateConfiguration().getProperty(TopiaContextFactory.CONFIG_DIALECT); - - return DriverType.POSTGRESQL.getDialectClass().getName().equals(dialect); - } } Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/JdbcConfiguration.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/JdbcConfiguration.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/JdbcConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,12 +23,25 @@ package fr.ifremer.echobase.persistence; import fr.ifremer.echobase.entities.DriverType; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaContextFactory; import java.io.File; import java.io.Serializable; +import java.util.Properties; public class JdbcConfiguration implements Serializable { + public static JdbcConfiguration newConfig(TopiaContext context) { + Properties config = context.getConfig(); + JdbcConfiguration result = new JdbcConfiguration(); + result.setDriverType(DriverType.valueOfDriverName(config.getProperty(TopiaContextFactory.CONFIG_DRIVER))); + result.setUrl(config.getProperty(TopiaContextFactory.CONFIG_URL)); + result.setLogin(config.getProperty(TopiaContextFactory.CONFIG_USER)); + result.setPassword(config.getProperty(TopiaContextFactory.CONFIG_PASS)); + return result; + } + public static JdbcConfiguration newConfig(DriverType driverType, String url, String login, Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/DbChangedEvent.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/DbChangedEvent.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/DbChangedEvent.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,24 @@ +package fr.ifremer.echobase.persistence.event; + +import java.util.EventObject; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class DbChangedEvent extends EventObject { + + private static final long serialVersionUID = 1L; + + public DbChangedEvent(String jdbcUrl) { + super(jdbcUrl); + } + + + @Override + public String getSource() { + return (String) super.getSource(); + } +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/DbChangedEvent.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/VoyageChangedEvent.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/VoyageChangedEvent.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/VoyageChangedEvent.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,35 @@ +package fr.ifremer.echobase.persistence.event; + +import java.util.EventObject; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class VoyageChangedEvent extends EventObject { + + private static final long serialVersionUID = 1L; + + protected String voyageId; + + /** + * Constructs a prototypical Event. + * + * @param voyageId id of the voyage changed . + */ + public VoyageChangedEvent(String jdbcUrl, String voyageId) { + super(jdbcUrl); + this.voyageId = voyageId; + } + + public String getVoyageId() { + return voyageId; + } + + @Override + public String getSource() { + return (String) super.getSource(); + } +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/VoyageChangedEvent.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/WorkingDbChangeListener.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/WorkingDbChangeListener.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/WorkingDbChangeListener.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,26 @@ +package fr.ifremer.echobase.persistence.event; + +import java.util.EventListener; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public interface WorkingDbChangeListener extends EventListener { + + /** + * When a db changed (import db) + * + * @param event event + */ + void onDbChanged(DbChangedEvent event); + + /** + * When a voyage changed (by import / remove import). + * + * @param event event + */ + void onVoyageChanged(VoyageChangedEvent event); +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/event/WorkingDbChangeListener.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/MigrationCallBackForVersion2_2.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/MigrationCallBackForVersion2_2.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/MigrationCallBackForVersion2_2.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,7 +23,7 @@ * #L% */ -import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; @@ -59,26 +59,40 @@ // remove result category NotNull Constrainst (http://forge.codelutin.com/issues/3029) removeResultCategoryNotNullConstrainst(queries); + // migrate import type id (http://forge.codelutin.com/issues/3028) + migrateImportTypeId(queries); + // compute all spatial data (http://forge.codelutin.com/issues/3037) updatePostgis(tx); } + protected void migrateImportTypeId(List<String> queries) { + queries.add("UPDATE ImportLog SET importType = importType + 2 WHERE importType BETWEEN 2 AND 9;"); + } + protected void removeResultCategoryNotNullConstrainst(List<String> queries) { queries.add("ALTER TABLE Result ALTER COLUMN category DROP NOT NULL;"); } protected void updatePostgis(TopiaContext tx) { - boolean updatePostgis = EchobaseTopiaContexts.canUpdatePostgis(tx); + TopiaEchoBasePersistenceContext persistenceContext = + new TopiaEchoBasePersistenceContext(tx); + boolean spatialAware = + persistenceContext.isSpatialAware(); - if (updatePostgis) { - try { - // compute all spatial data - ((TopiaSqlSupport) tx).executeSQL("SELECT echobase_compute_all_spatial_data();"); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Could not update spatial datas", e); + try { + if (spatialAware) { + try { + // compute all spatial data + ((TopiaSqlSupport) tx).executeSQL("SELECT echobase_compute_all_spatial_data();"); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Could not update spatial datas", e); + } } } + } finally { + persistenceContext.rollbackTransaction(); } } } \ No newline at end of file Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,209 +0,0 @@ -/* - * #%L - * EchoBase :: Domain - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services; - -import org.nuiton.util.StringUtil; - -import java.io.IOException; -import java.io.Serializable; - -/** - * Abstract long action configuration. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public abstract class AbstractEchobaseActionConfiguration implements Serializable, ProgressModel { - - private static final long serialVersionUID = 1L; - - private final ProgressModel progressModel; - - private Exception error; - - private String resultMessage; - - protected AbstractEchobaseActionConfiguration() { - progressModel = new DefaultProgressModel(); - } - - protected AbstractEchobaseActionConfiguration(ProgressModel progressModel) { - this.progressModel = progressModel; - } - - @Override - public final long getNbSteps() { - return progressModel.getNbSteps(); - } - - @Override - public final float getProgress() { - return progressModel.getProgress(); - } - - @Override - public final void setProgress(float progress) { - progressModel.setProgress(progress); - } - - @Override - public final void incrementsProgress() { - progressModel.incrementsProgress(); - } - - @Override - public final void setNbSteps(long nbSteps) { - progressModel.setNbSteps(nbSteps); - } - - @Override - public final long getStartTime() { - return progressModel.getStartTime(); - } - - @Override - public final void setStartTime(long startTime) { - progressModel.setStartTime(startTime); - } - - @Override - public final long getEndTime() { - return progressModel.getEndTime(); - } - - @Override - public final void setEndTime(long endTime) { - progressModel.setEndTime(endTime); - } - - public Exception getError() { - return error; - } - - public void setError(Exception error) { - this.error = error; - } - - public boolean hasError() { - return error != null; - } - - public String getResultMessage() { - return resultMessage; - } - - public void setResultMessage(String resultMessage) { - this.resultMessage = resultMessage; - } - - @Override - public String getActionTime() { - return progressModel.getActionTime(); - } - - public void beginAction() { - setStartTime(System.nanoTime()); - } - - public void endAction() { - setEndTime(System.nanoTime()); - } - - public void destroy() throws IOException { - } - - /** - * Default progression model implementation. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ - public static class DefaultProgressModel implements ProgressModel { - - private static final long serialVersionUID = 1L; - - private long nbSteps; - - private float stepIncrement; - - private float progression; - - private long startTime; - - private long endTime; - - @Override - public long getNbSteps() { - return nbSteps; - } - - @Override - public float getProgress() { - return progression; - } - - @Override - public void setProgress(float progress) { - this.progression = progress; - } - - @Override - public long getStartTime() { - return startTime; - } - - @Override - public void setStartTime(long startTime) { - this.startTime = startTime; - } - - @Override - public long getEndTime() { - return endTime; - } - - @Override - public void setEndTime(long endTime) { - this.endTime = endTime; - } - - @Override - public final void incrementsProgress() { - setProgress(progression + stepIncrement); - } - - @Override - public final void setNbSteps(long nbSteps) { - - this.nbSteps = nbSteps; - this.stepIncrement = 100f / nbSteps; - } - - @Override - public String getActionTime() { - long sTime = getStartTime(); - long eTime = getEndTime(); - return StringUtil.convertTime(eTime - sTime); - } - } -} Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,173 +0,0 @@ -/* - * #%L - * EchoBase :: Domain - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services; - -import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; -import fr.ifremer.echobase.EchoBaseConfiguration; -import fr.ifremer.echobase.EchoBaseTechnicalException; -import fr.ifremer.echobase.persistence.EchoBaseDbMeta; -import org.apache.commons.lang3.time.DateUtils; -import org.nuiton.topia.TopiaContext; - -import java.lang.reflect.InvocationTargetException; -import java.util.Date; -import java.util.Locale; -import java.util.Map; - -/** - * Instances of this class will be given to service factory. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class DefaultEchoBaseServiceContext implements EchoBaseServiceContext { - - protected TopiaContext internalTransaction; - - protected TopiaContext transaction; - - protected ServiceFactory serviceFactory; - - protected EchoBaseConfiguration configuration; - - protected Locale locale; - - protected EchoBaseDbMeta dbMeta; - - public static EchoBaseServiceContext newContext( - Locale locale, - TopiaContext internalTransaction, - TopiaContext transaction, - EchoBaseConfiguration configuration, - EchoBaseDbMeta dbMeta) { - return new DefaultEchoBaseServiceContext(locale, - internalTransaction, - transaction, - configuration, - dbMeta - ); - } - - protected DefaultEchoBaseServiceContext(Locale locale, - TopiaContext internalTransaction, - TopiaContext transaction, - EchoBaseConfiguration configuration, - EchoBaseDbMeta dbMeta) { - this.locale = locale; - this.internalTransaction = internalTransaction; - this.transaction = transaction; - this.configuration = configuration; - this.dbMeta = dbMeta; - this.serviceFactory = new ServiceFactory(); - } - - @Override - public TopiaContext getInternalTransaction() { - return internalTransaction; - } - - @Override - public void setInternalTransaction(TopiaContext internalTransaction) { - this.internalTransaction = internalTransaction; - } - - @Override - public TopiaContext getTransaction() { - Preconditions.checkNotNull(transaction); - return transaction; - } - - @Override - public void setTransaction(TopiaContext transaction) { - this.transaction = transaction; - } - - @Override - public Locale getLocale() { - return locale; - } - - @Override - public Date newDate() { - Date result = new Date(); - DateUtils.setMilliseconds(result, 0); - return result; - } - - @Override - public EchoBaseConfiguration getConfiguration() { - return configuration; - } - - @Override - public EchoBaseDbMeta getDbMeta() { - return dbMeta; - } - - @Override - public final <E extends EchoBaseService> E getService(Class<E> serviceClass) { - return serviceFactory.getService(serviceClass, this); - } - - public static class ServiceFactory { - - protected Map<Class<?>, EchoBaseService> services; - - public final <E extends EchoBaseService> E getService(Class<E> serviceClass, - EchoBaseServiceContext serviceContext) { - if (services == null) { - services = Maps.newHashMap(); - } - E service = (E) services.get(serviceClass); - if (service == null) { - service = newService(serviceClass, serviceContext); - services.put(serviceClass, service); - } - return service; - } - - public <E extends EchoBaseService> E newService(Class<E> clazz, - EchoBaseServiceContext serviceContext) { - // instantiate service using empty constructor - E service; - try { - service = clazz.getConstructor().newInstance(); - } catch (InstantiationException e) { - throw new EchoBaseTechnicalException(e); - } catch (IllegalAccessException e) { - throw new EchoBaseTechnicalException(e); - } catch (InvocationTargetException e) { - throw new EchoBaseTechnicalException(e); - } catch (NoSuchMethodException e) { - throw new EchoBaseTechnicalException(e); - } - - service.setServiceContext(serviceContext); - - return service; - } - - } - -} Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,38 +0,0 @@ -/* - * #%L - * EchoBase :: Domain - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ - -package fr.ifremer.echobase.services; - -/** - * Contract to place on each EchoBase service to push the {@code serviceContext} - * inside the service. - * - * @author tchemit <chemit@codelutin.com> - * @see EchoBaseServiceContext - * @since 0.1 - */ -public interface EchoBaseService { - - void setServiceContext(EchoBaseServiceContext serviceContext); - -} Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,87 +0,0 @@ -/* - * #%L - * EchoBase :: Domain - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ - -package fr.ifremer.echobase.services; - -import fr.ifremer.echobase.EchoBaseConfiguration; -import fr.ifremer.echobase.persistence.EchoBaseDbMeta; -import org.nuiton.topia.TopiaContext; - -import java.util.Date; -import java.util.Locale; - -/** - * This contract represents objects you must provide when asking for a service. - * Objects provided may be injected in services returned by - * {@link ServiceFactoryAware#getService(Class)} - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public interface EchoBaseServiceContext extends ServiceFactoryAware { - - /** - * Get the internal db current transaction. - * <p/> - * Internal db is the db with everything but not any echobase data - * (security, db connexion, sql queries ?). - * - * @return current internal db transaction - */ - TopiaContext getInternalTransaction(); - - /** - * Set the internal db current transaction. - * - * @param transaction internal db transaction to set - */ - void setInternalTransaction(TopiaContext transaction); - - /** - * Get the working db transaction. - * <p/> - * Working db contains echobase data, but nothing about technical - * stuff (security, connexon,...). - * <p/> - * This transaction can be {@code null} if no working db is used. - * - * @return the current working db transaction (or {@code null} if not setted) - */ - TopiaContext getTransaction(); - - /** - * Set the working db transaction. - * - * @param transaction working db transaction to set - */ - void setTransaction(TopiaContext transaction); - - Locale getLocale(); - - EchoBaseConfiguration getConfiguration(); - - EchoBaseDbMeta getDbMeta(); - - Date newDate(); - -} Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,273 +0,0 @@ -/* - * #%L - * EchoBase :: Domain - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services; - -import com.google.common.base.Preconditions; -import fr.ifremer.echobase.EchoBaseConfiguration; -import fr.ifremer.echobase.EchoBaseTechnicalException; -import fr.ifremer.echobase.entities.EchoBaseDAOHelper; -import fr.ifremer.echobase.entities.EchoBaseInternalDAOHelper; -import fr.ifremer.echobase.entities.EchobaseInternalEntity; -import fr.ifremer.echobase.persistence.EchoBaseDbMeta; -import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaSqlSupport; -import org.nuiton.topia.TopiaTransaction; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.TopiaEntity; - -import java.util.Date; -import java.util.List; -import java.util.Locale; - -/** - * @author sletellier <letellier@codelutin.com> - * @since 0.1 - */ -public class EchoBaseServiceSupport implements EchoBaseService { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(EchoBaseServiceSupport.class); - - protected EchoBaseServiceContext serviceContext; - - @Override - public void setServiceContext(EchoBaseServiceContext serviceContext) { - this.serviceContext = serviceContext; - } - - public final <E extends TopiaEntity> List<E> getEntities(Class<E> entityType) { - Preconditions.checkNotNull(entityType); - try { - List<E> result = getDAO(entityType).findAll(); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException( - "Could not obtain data for type " + entityType, eee); - } - } - - public final <E extends TopiaEntity> long countEntities(Class<E> entityType) { - Preconditions.checkNotNull(entityType); - try { - long result = getDAO(entityType).count(); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException( - "Could not count data for type " + entityType, eee); - } - } - - public final <E extends TopiaEntity> E getEntityById(Class<E> entityType, String id) { - Preconditions.checkNotNull(entityType); - Preconditions.checkArgument(StringUtils.isNotEmpty(id)); - try { - E result = getDAO(entityType).findByTopiaId(id); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException( - "Could not obtain data of id [" + id + "] for type " + - entityType, eee); - } - } - - public final <E extends TopiaEntity> E getEntityByProperty(Class<E> entityType, - String propertyId, - Object propertyValue) { - Preconditions.checkNotNull(entityType); - Preconditions.checkArgument(StringUtils.isNotEmpty(propertyId)); - try { - E result = getDAO(entityType).findByProperty(propertyId, propertyValue); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException( - "Could not obtain data of property [" + propertyId + "] for type " + - entityType, eee); - } - } - - public TopiaContext getInternalTransaction() { - return serviceContext.getInternalTransaction(); - } - - public final EchoBaseConfiguration getConfiguration() { - return serviceContext.getConfiguration(); - } - - protected final TopiaContext getTransaction() { - return serviceContext.getTransaction(); - } - - protected final Locale getLocale() { - return serviceContext.getLocale(); - } - - protected final EchoBaseDbMeta getDbMeta() { - return serviceContext.getDbMeta(); - } - - protected final Date newDate() { - return serviceContext.newDate(); - } - - protected char getCsvSeparator() { - return getConfiguration().getCsvSeparator(); - } - - public final <E extends EchoBaseService> E getService(Class<E> serviceClass) { - E result = serviceContext.getService(serviceClass); - return result; - } - -// protected final <E extends TopiaEntity> TopiaDAO<E> getDAO(EchoBaseEntityEnum entityEnum) { -// TopiaDAO<E> dao = getDAO((Class<E>) entityEnum.getContract()); -// return dao; -// } - - protected final <E extends TopiaEntity> TopiaDAO<E> getDAO(Class<E> entityType) { - try { - TopiaContext tx = getTransaction(entityType); - TopiaDAO<E> dao; - if (EchobaseInternalEntity.class.isAssignableFrom(entityType)) { - dao = EchoBaseInternalDAOHelper.<E, TopiaDAO<E>>getDAO(tx, entityType); - } else { - dao = EchoBaseDAOHelper.<E, TopiaDAO<E>>getDAO(tx, entityType); - } - - return dao; - } catch (TopiaException e) { - throw new EchoBaseTechnicalException("Could not obtain dao for type " + entityType, e); - } - } - - protected <E extends TopiaEntity> E create(TopiaDAO<E> dao, - Object... properties) { - try { - E result = dao.create(properties); - return result; - } catch (TopiaException e) { - throw new EchoBaseTechnicalException("Could not create entity", e); - } - } - - protected final <E extends TopiaEntity> void delete(TopiaDAO<E> dao, E entity) { - - try { - dao.delete(entity); - } catch (TopiaException e) { - - throw new EchoBaseTechnicalException("Could not delete entity " + entity, e); - } - } - - protected <E extends TopiaEntity> E findByProperties(TopiaDAO<E> dao, - String propertyName, - Object value, - Object... others) { - try { - E result = dao.findByProperties(propertyName, value, others); - return result; - } catch (TopiaException e) { - throw new EchoBaseTechnicalException("Could not obtain query db", e); - } - } - - protected final <E extends TopiaEntity, D extends TopiaDAO<E>> D getDAO(Class<E> entityType, Class<D> daoType) { - TopiaDAO<E> dao = getDAO(entityType); - Preconditions.checkState(daoType.isAssignableFrom(dao.getClass())); - return (D) dao; - } - - public final void commitTransaction(String errorMessage) { - try { - ((TopiaTransaction) getTransaction()).commitTransaction(); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(errorMessage, eee); - } - } - - public final void commitInternalTransaction(String errorMessage) { - try { - ((TopiaTransaction) getInternalTransaction()).commitTransaction(); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(errorMessage, eee); - } - } - - protected final void flushTransaction(String errorMessage) { - try { - getTransaction().getHibernateSession().flush(); - } catch (TopiaException e) { - throw new EchoBaseTechnicalException(errorMessage, e); - } - } - - protected final void clearCache() { - try { - getTransaction().getHibernateSession().clear(); - } catch (TopiaException e) { - throw new EchoBaseTechnicalException("Could not clear hibernate cache", e); - } - } - - protected <E extends TopiaEntity> TopiaContext getTransaction(Class<E> entitytype) { - TopiaContext result; - if (EchobaseInternalEntity.class.isAssignableFrom(entitytype)) { - result = getInternalTransaction(); - } else { - result = getTransaction(); - } - return result; - } - - /** - * To update the {@code echobase_cell_spatial} table from the filled - * table {@code echobase_cell_sptaial_temp}. - * - * @since 2.2 - */ - public void updatePostgisTable() { - - if (EchobaseTopiaContexts.canUpdatePostgis(getTransaction())) { - - // try the update only for postgresql - try { - if (log.isInfoEnabled()) { - log.info("Will try to compute spatial data from temp table..."); - } - ((TopiaSqlSupport) getTransaction()).executeSQL("SELECT echobase_fill_cell_spatial_table();"); - commitTransaction("Could not compute spatial data"); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Could not compute spatial data", e); - } - } - } - } - -} Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ProgressModel.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ProgressModel.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ProgressModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,46 +0,0 @@ -/* - * #%L - * EchoBase :: Domain - * $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 org.nuiton.topia.persistence.csv.CsvProgressModel; - -import java.io.Serializable; - -/** - * Contract for a progression model while long service actions. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public interface ProgressModel extends CsvProgressModel, Serializable { - - long getStartTime(); - - void setStartTime(long startTime); - - long getEndTime(); - - void setEndTime(long endTime); - - String getActionTime(); -} Deleted: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ServiceFactoryAware.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ServiceFactoryAware.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ServiceFactoryAware.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,36 +0,0 @@ -package fr.ifremer.echobase.services; - -/* - * #%L - * EchoBase :: Domain - * $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% - */ - -/** - * Contract to provide some services. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.1 - */ -public interface ServiceFactoryAware { - - <S extends EchoBaseService> S getService(Class<S> serviceClass); - -} Modified: trunk/echobase-domain/src/main/resources/META-INF/services/org.nuiton.config.ApplicationConfigProvider =================================================================== --- trunk/echobase-domain/src/main/resources/META-INF/services/org.nuiton.config.ApplicationConfigProvider 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-domain/src/main/resources/META-INF/services/org.nuiton.config.ApplicationConfigProvider 2013-08-15 10:53:16 UTC (rev 842) @@ -1 +1 @@ -fr.ifremer.echobase.EchoBaseApplicationConfigProvider \ No newline at end of file +fr.ifremer.echobase.config.EchoBaseApplicationConfigProvider \ No newline at end of file Modified: trunk/echobase-domain/src/main/xmi/echobase.zargo =================================================================== (Binary files differ) Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchobaseActionConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,209 @@ +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services; + +import org.nuiton.util.StringUtil; + +import java.io.IOException; +import java.io.Serializable; + +/** + * Abstract long action configuration. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public abstract class AbstractEchobaseActionConfiguration implements Serializable, ProgressModel { + + private static final long serialVersionUID = 1L; + + private final ProgressModel progressModel; + + private Exception error; + + private String resultMessage; + + protected AbstractEchobaseActionConfiguration() { + progressModel = new DefaultProgressModel(); + } + + protected AbstractEchobaseActionConfiguration(ProgressModel progressModel) { + this.progressModel = progressModel; + } + + @Override + public final long getNbSteps() { + return progressModel.getNbSteps(); + } + + @Override + public final float getProgress() { + return progressModel.getProgress(); + } + + @Override + public final void setProgress(float progress) { + progressModel.setProgress(progress); + } + + @Override + public final void incrementsProgress() { + progressModel.incrementsProgress(); + } + + @Override + public final void setNbSteps(long nbSteps) { + progressModel.setNbSteps(nbSteps); + } + + @Override + public final long getStartTime() { + return progressModel.getStartTime(); + } + + @Override + public final void setStartTime(long startTime) { + progressModel.setStartTime(startTime); + } + + @Override + public final long getEndTime() { + return progressModel.getEndTime(); + } + + @Override + public final void setEndTime(long endTime) { + progressModel.setEndTime(endTime); + } + + public Exception getError() { + return error; + } + + public void setError(Exception error) { + this.error = error; + } + + public boolean hasError() { + return error != null; + } + + public String getResultMessage() { + return resultMessage; + } + + public void setResultMessage(String resultMessage) { + this.resultMessage = resultMessage; + } + + @Override + public String getActionTime() { + return progressModel.getActionTime(); + } + + public void beginAction() { + setStartTime(System.nanoTime()); + } + + public void endAction() { + setEndTime(System.nanoTime()); + } + + public void destroy() throws IOException { + } + + /** + * Default progression model implementation. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ + public static class DefaultProgressModel implements ProgressModel { + + private static final long serialVersionUID = 1L; + + private long nbSteps; + + private float stepIncrement; + + private float progression; + + private long startTime; + + private long endTime; + + @Override + public long getNbSteps() { + return nbSteps; + } + + @Override + public float getProgress() { + return progression; + } + + @Override + public void setProgress(float progress) { + this.progression = progress; + } + + @Override + public long getStartTime() { + return startTime; + } + + @Override + public void setStartTime(long startTime) { + this.startTime = startTime; + } + + @Override + public long getEndTime() { + return endTime; + } + + @Override + public void setEndTime(long endTime) { + this.endTime = endTime; + } + + @Override + public final void incrementsProgress() { + setProgress(progression + stepIncrement); + } + + @Override + public final void setNbSteps(long nbSteps) { + + this.nbSteps = nbSteps; + this.stepIncrement = 100f / nbSteps; + } + + @Override + public String getActionTime() { + long sTime = getStartTime(); + long eTime = getEndTime(); + return StringUtil.convertTime(eTime - sTime); + } + } +} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,787 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services; - -import com.google.common.base.Joiner; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import fr.ifremer.echobase.EchoBaseTechnicalException; -import fr.ifremer.echobase.csv.EchoBaseCsvUtil; -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.entities.EntityModificationLog; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.csv.EntityCsvModel; -import org.nuiton.topia.persistence.metadata.ColumnMeta; -import org.nuiton.topia.persistence.metadata.DbMeta; -import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.topia.persistence.pager.FilterRule; -import org.nuiton.topia.persistence.pager.FilterRuleGroupOperator; -import org.nuiton.topia.persistence.pager.FilterRuleOperator; -import org.nuiton.topia.persistence.pager.TopiaPagerBean; -import org.nuiton.util.PagerBeanUtil; -import org.nuiton.util.beans.BeanMonitor; -import org.nuiton.util.beans.PropertyDiff; -import org.nuiton.csv.ExportModel; -import org.nuiton.csv.ExportableColumn; -import org.nuiton.csv.ImportExportModel; -import org.nuiton.csv.ImportableColumn; -import org.nuiton.decorator.Decorator; -import org.nuiton.decorator.JXPathDecorator; - -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import static org.nuiton.i18n.I18n.l_; - -/** - * Service to edit the database. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class DbEditorService extends EchoBaseServiceSupport { - - /** Logger. */ - private static final Log log = LogFactory.getLog(DbEditorService.class); - - protected DecoratorService getDecoratorService() { - return getService(DecoratorService.class); - } - - public <E extends TopiaEntity> List<E> getForeignData(Class<E> entityType) { - Preconditions.checkNotNull(entityType); - try { - TopiaDAO<E> dao = getDAO(entityType); - - List<E> result = dao.findAll(); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException("Could not obtain data", eee); - } - } - - public TableMeta<EchoBaseEntityEnum> getTableMeta(EchoBaseEntityEnum tableName) { - DbMeta<EchoBaseEntityEnum> dbMeta = getDbMeta(); - TableMeta<EchoBaseEntityEnum> result = dbMeta.getTable(tableName); - return result; - } - - public Map<?, ?>[] getData(EchoBaseEntityEnum type, TopiaPagerBean pager) { - - TableMeta<EchoBaseEntityEnum> meta = getTableMeta(type); - - List<TopiaEntity> entities = getEntities(meta, pager); - - Map<?, ?>[] rows = new Map[entities.size()]; - - ExportModel<TopiaEntity> model = buildForLoad(meta, "id", true); - - int i = 0; - for (Object o : entities) { - TopiaEntity entity = (TopiaEntity) o; - Map<String, Object> row = loadRow(entity, model); - rows[i++] = row; - } - return rows; - } - - public <E extends TopiaEntity> List<E> getEntities(TableMeta<EchoBaseEntityEnum> tableMeta, - TopiaPagerBean pager) { - - EchoBaseEntityEnum entityEnum = tableMeta.getSource(); - try { - TopiaDAO<E> dao = (TopiaDAO<E>) getDAO(entityEnum.getContract()); - - List<Object> paramsList = Lists.newArrayList(); - - String hql = dao.createSimpleQuery("e"); - - if (pager != null && pager.canFilter()) { - String filterHql = getFilterHql(tableMeta, pager, paramsList); - hql += " WHERE " + filterHql; - } - - Object[] params = paramsList.toArray(); - - if (log.isInfoEnabled()) { - log.info("filterHql = " + hql + "\n" + Joiner.on('\n').join(params)); - } - - - long count = dao.countByQuery("SELECT COUNT(*) " + hql, params); - - if (pager != null) { - - pager.setRecords(count); - PagerBeanUtil.computeRecordIndexesAndPagesNumber(pager); - } - - List<E> result = dao.findAllByQueryAndPager(hql, pager, params); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException("Could not obtain data", eee); - } - } - - public <E extends TopiaEntity> Iterable<E> iterateOnEntities(TableMeta<EchoBaseEntityEnum> tableMeta, - String extraWhereQuery) { - - try { - TopiaDAO<E> dao = (TopiaDAO<E>) getDAO(tableMeta.getSource().getContract()); - - String hql = "FROM " + - dao.getTopiaEntityEnum().getImplementationFQN() + " e"; - if (extraWhereQuery != null) { - hql += " WHERE " + extraWhereQuery; - } - hql += " ORDER BY e.id"; - Iterable<E> result = dao.findAllLazyByQuery(5000, hql); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException("Could not obtain data", eee); - } - } - - public Map<?, ?> getData(TableMeta<EchoBaseEntityEnum> tableMeta, String topiaId) { - - EchoBaseEntityEnum entityEnum = tableMeta.getSource(); - try { - TopiaDAO<?> dao = getDAO(entityEnum.getContract()); - TopiaEntity entity = dao.findByTopiaId(topiaId); - ExportModel<TopiaEntity> model = buildForLoad(tableMeta, TopiaEntity.PROPERTY_TOPIA_ID, true); - return loadRow(entity, model); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException("Could not obtain data", eee); - } - } - - public <E extends TopiaEntity> void decorateForeignKey( - Map data, - Class<E> propertyType, - String property, - String decoratorContext) { - - DecoratorService decoratorService = getService(DecoratorService.class); - - E mission = getEntityById(propertyType, (String) data.get(property)); - String voyageToString = decoratorService.decorate(getLocale(), mission, decoratorContext); - data.put(property + "_lbl", voyageToString); - } - - public void saveEntity(TableMeta<EchoBaseEntityEnum> meta, - Map<String, String> properties, - EchoBaseUser user) { - - // transform properties entity - ImportExportModel<TopiaEntity> model = buildForSave(meta); - - TopiaEntity entity = model.newEmptyInstance(); - - for (ImportableColumn<TopiaEntity, Object> column : model.getColumnsForImport()) { - String propertyName = column.getHeaderName(); - String stringValue = properties.get(propertyName); - Object o; - try { - o = column.parseValue(stringValue); - } catch (Exception e) { - throw new EchoBaseTechnicalException("Could not parse property [" + propertyName + "] with value " + stringValue, e); - } - try { - column.setValue(entity, o); - } catch (Exception e) { - throw new EchoBaseTechnicalException( - "Could not set property [" + propertyName + "] with value " + stringValue + " to entity " + entity, e); - } - } - - saveEntity(meta, - "Modification utilisateur", - entity, - user, - false - ); - commitTransaction("Could not commit transaction"); - } - - public boolean saveEntity(TableMeta<EchoBaseEntityEnum> tableMeta, - String messagePrefix, - TopiaEntity entity, - EchoBaseUser user, - boolean createIfNotFound) { - String[] columnNames = tableMeta.getColumnNamesAsArray(); - BeanMonitor monitor = null; - - String id = entity.getTopiaId(); - - try { - TopiaDAO<?> dao = getDAO(tableMeta.getSource().getContract()); - - TopiaEntity entityToSave; - - // Find or create entity if no id - boolean create = StringUtils.isEmpty(id); - - if (create) { - - // get naturalIds or not-null properties - Map<String, Object> properties = - tableMeta.prepareCreate(entity, null); - - entityToSave = dao.create(properties); - - // push back topiaId (could be used by caller) - entity.setTopiaId(entityToSave.getTopiaId()); - - } else { - - entityToSave = dao.findByTopiaId(id); - if (entityToSave == null) { - - if (!createIfNotFound) { - - // this is an error - throw new EchoBaseTechnicalException( - "Could not found entity with id " + id); - } else { - entityToSave = dao.create(TopiaEntity.PROPERTY_TOPIA_ID, id); - create = true; - } - } - } - - if (user != null && !create) { - - // monitor the existing bean - monitor = new BeanMonitor(columnNames); - monitor.setBean(entityToSave); - } - - tableMeta.copy(entity, entityToSave); - - if (user != null) { - - createEntityModificationLog( - tableMeta, - messagePrefix, - entityToSave, - user, - monitor - ); - } - return create; - } catch (Exception eee) { - throw new EchoBaseTechnicalException("Could not update entity", eee); - } finally { - if (monitor != null) { - monitor.setBean(null); - } - } - } - - protected <O> Decorator<O> getDecorator(Class<O> type) { - return getDecoratorService().getDecorator(getLocale(), type, null); - } - - protected String getFilterHql(TableMeta<EchoBaseEntityEnum> tableMeta, - TopiaPagerBean pager, - List<Object> params) { - Preconditions.checkNotNull(pager); - Preconditions.checkState(pager.canFilter()); - - String filterHql = null; - - Map<String, Object> filterParams = Maps.newHashMap(); - - List<String> strFilterRules = Lists.newLinkedList(); - - long timestamp = System.currentTimeMillis(); - int index = 0; - for (FilterRule rule : pager.getRules()) { - String ruleFilter; - - String field = rule.getField(); - - ColumnMeta columnMeta = tableMeta.getColumns(field); - Preconditions.checkNotNull(columnMeta, - "no property named " + columnMeta); - - FilterRuleOperator op = rule.getOp(); - String data = rule.getData(); - String paramName = field + "_" + timestamp + (index++); - String propertyName = "e." + field; - Object realData = data; - if (columnMeta.isFK()) { - - if (op == FilterRuleOperator.nu || op == FilterRuleOperator.nn) { - - // is null or is not null is a simple case - - ruleFilter = op.toHql(propertyName, - propertyName, - data, - filterParams); - } else { - // must do a select in using the decoration pattern - JXPathDecorator<?> decorator = - (JXPathDecorator<?>) getDecorator(columnMeta.getType()); - - if (decorator.getNbToken() == 1) { - - String fName = "f_" + timestamp + (index++); - - // simple case one token - String token = fName + "." + decorator.getProperty(0); - - String subQuery = op.toHql(paramName, - token, - data, - filterParams); - - ruleFilter = propertyName + " IN ( FROM " + - columnMeta.getType().getName() + " " + - fName + " WHERE " + subQuery + ")"; - } else { - - throw new UnsupportedOperationException(); - } - } - - } else { - - if (columnMeta.isNumber()) { - - if (op == FilterRuleOperator.cn || - op == FilterRuleOperator.nc || - op == FilterRuleOperator.bw || - op == FilterRuleOperator.bn || - op == FilterRuleOperator.ew || - op == FilterRuleOperator.en) { - - // string operation - -// realData = "'" + realData + "'"; - propertyName = "str(" + propertyName + ")"; - } else { - - // real number operation - - if (columnMeta.getType() == int.class || - columnMeta.getType() == Integer.class) { - realData = Integer.valueOf(data); - } else { - - realData = Double.valueOf(data); - } - } - } else if (columnMeta.isDate()) { - propertyName = "str(" + propertyName + ")"; - } - ruleFilter = op.toHql(paramName, - propertyName, - realData, - filterParams); - } - - strFilterRules.add("(" + ruleFilter + ")"); - - if (CollectionUtils.isNotEmpty(strFilterRules)) { - FilterRuleGroupOperator groupOp = - pager.getGroupOp(); - filterHql = StringUtils.join(strFilterRules, groupOp.name()); - } - - for (Map.Entry<String, Object> entry : filterParams.entrySet()) { - params.add(entry.getKey()); - params.add(entry.getValue()); - } - } - return filterHql; - } - - protected void createEntityModificationLog(TableMeta<EchoBaseEntityEnum> tableMeta, - String messagePrefix, - TopiaEntity entity, - EchoBaseUser user, - BeanMonitor monitor) throws TopiaException { - - StringBuilder buffer; - - String topiaId = entity.getTopiaId(); - - buffer = new StringBuilder(messagePrefix).append('\n'); - Locale l = getLocale(); - if (monitor == null) { - - // no monitor, means this is a creation of an object - buffer.append(l_(l, "echobase.info.newEntityCreated", topiaId)); - } else { - - PropertyDiff[] propertyDiffs = monitor.getPropertyDiffs(); - - int length = propertyDiffs.length; - - if (length == 0) { - - // no property modified, do nothing - return; - } - - if (length == 1) { - buffer.append(l_(l, "echobase.info.onePropertyModified")); - } else { - buffer.append( - l_(l, "echobase.info.somePropertiesModified", length)); - } - for (PropertyDiff diff : propertyDiffs) { - - Object sourceValue = diff.getSourceValue(); - Object targetValue = diff.getTargetValue(); - - String propertyName = diff.getSourceProperty(); - - if (tableMeta.getColumns(propertyName).isFK()) { - - // replace by the decorate value - if (sourceValue != null) { - sourceValue = getDecoratorService().decorate( - l, sourceValue, null); - } - if (targetValue != null) { - targetValue = getDecoratorService().decorate( - l, targetValue, null); - } - } - buffer.append("\n "); - buffer.append( - l_(l, "echobase.info.modifiedProperty", propertyName, - sourceValue, - targetValue)); - } - } - - getDAO(EntityModificationLog.class).create( - EntityModificationLog.PROPERTY_ENTITY_TYPE, tableMeta.getSource().name(), - EntityModificationLog.PROPERTY_ENTITY_ID, topiaId, - EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), - EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), - EntityModificationLog.PROPERTY_MODIFICATION_TEXT, buffer.toString() - ); - } - - protected <E extends TopiaEntity> Map<String, Object> loadRow( - E entity, - ExportModel<E> loadModel) { - - Map<String, Object> row = Maps.newLinkedHashMap(); - - Iterable<ExportableColumn<E, Object>> columns = - loadModel.getColumnsForExport(); - - for (ExportableColumn<E, Object> column : columns) { - String propertyName = column.getHeaderName(); - Object value; - try { - value = column.getValue(entity); - } catch (Exception eee) { - throw new EchoBaseTechnicalException( - "Could not obtain property [" + propertyName + - "] value from entity " + entity.getTopiaId(), eee); - } - String formatedValue; - try { - formatedValue = column.formatValue(value); - } catch (Exception eee) { - throw new EchoBaseTechnicalException( - "Could not format property [" + propertyName + - "] from value [" + value + - "] from entity " + entity.getTopiaId(), eee); - } - row.put(propertyName, formatedValue); - - } - return row; - } - - protected <E extends TopiaEntity> ImportExportModel<E> buildForSave(TableMeta<EchoBaseEntityEnum> meta) { - - EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( - getConfiguration().getCsvSeparator(), - meta, - TopiaEntity.PROPERTY_TOPIA_ID - ); - - for (ColumnMeta columnMeta : meta) { - String propertyName = columnMeta.getName(); - Class<?> type = columnMeta.getType(); - if (columnMeta.isFK()) { - - Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; - Collection<TopiaEntity> universe = getForeignData(entityType); - - // translate foreign key to his id - model.addForeignKeyForImport(propertyName, entityType, universe); - - } else if (Date.class.equals(type)) { - model.newMandatoryColumn( - propertyName, - EchoBaseCsvUtil.DATE_TIME_VALUE_PARSER); - } else { - model.addDefaultColumn(propertyName, type); - } - } - return model; - } - - protected <E extends TopiaEntity> ExportModel<E> buildForLoad(TableMeta<EchoBaseEntityEnum> meta, - String idName, - boolean addDecorated) { - - EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( - getConfiguration().getCsvSeparator(), - meta, - idName - ); - - for (ColumnMeta columnMeta : meta) { - String propertyName = columnMeta.getName(); - Class<?> type = columnMeta.getType(); - if (columnMeta.isFK()) { - - Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; - - // translate foreign key to his id - model.addForeignKeyForExport(propertyName, entityType); - - if (addDecorated) { - - // translate foreign key to his decorated value - Decorator<TopiaEntity> decorator = getDecorator(entityType); - model.addDecoratedForeignKeyForExport( - propertyName + "_lib", - propertyName, - decorator - ); - } - - } else if ("id".equals(propertyName)) { - - if ("id".equals(idName)) { - - // there will be a conflict with this meta, rename it to ID - model.addDefaultColumn("ID", propertyName, type); - } else { - - // no id conflict - model.addDefaultColumn(propertyName, type); - - } - } else if ("importId".equals(propertyName) && - Collection.class.equals(type)) { - - // special case we do not want to deal with {@link ImportLog#importId} - } else { - model.addDefaultColumn(propertyName, type); - } - } - return model; - } - -// public <E extends TopiaEntity> List<E> getEntities(TableMeta<EchoBaseEntityEnum> tableMeta, TopiaPagerBean pager) { -// -// //TODO-tchemit-2012-08-19 Replace TopiaQuery with simple hql query -// List<E> result; -// EchoBaseEntityEnum entityEnum = tableMeta.getSource(); -// try { -// TopiaDAO<E> dao = (TopiaDAO<E>) getDAO(entityEnum.getContract()); -// -// // first query to count datas -// TopiaQuery countQuery = dao.createQuery("e"); -// countQuery.addSelect("count(*)"); -// String filterHql = null; -// -// Map<String, Object> filterParams = Maps.newHashMap(); -// -// if (pager != null && pager.canFilter()) { -// -// DecoratorService decoratorService = getDecoratorService(); -// -// // prepare the filter hql code -// List<FilterRule> rules = pager.getRules(); -// List<String> strFilterRules = Lists.newLinkedList(); -// long timestamp = System.currentTimeMillis(); -// int index = 0; -// for (FilterRule rule : rules) { -// String ruleFilter; -// -// String field = rule.getField(); -// -// ColumnMeta columnMeta = tableMeta.getColumns(field); -// Preconditions.checkNotNull( -// columnMeta, "no property named " + columnMeta); -// -// FilterRuleOperator op = rule.getOp(); -// String data = rule.getData(); -// String paramName = field + "_" + timestamp + (index++); -// String propertyName = "e." + field; -// Object realData = data; -// if (columnMeta.isFK()) { -// -// // must do a select in using the decoration pattern -// -// JXPathDecorator<?> decorator = -// (JXPathDecorator<?>) decoratorService.getDecorator(getLocale(), -// columnMeta.getType(), -// null); -// -// if (decorator.getNbToken() == 1) { -// -// // simple case one token -// String token = "f." + decorator.getProperty(0); -// -// String subQuery = op.toHql(paramName, -// token, -// data, -// filterParams); -// -// ruleFilter = propertyName + " in ( SELECT f FROM " + columnMeta.getType().getName() + " f WHERE " + subQuery + ")"; -// } else { -// -// throw new UnsupportedOperationException(); -// } -// -// -// } else { -// -// if (columnMeta.isNumber()) { -// if (columnMeta.getType() == int.class || -// columnMeta.getType() == Integer.class) { -// realData = Integer.valueOf(data); -// } else { -// -// realData = Double.valueOf(data); -// } -// } else if (columnMeta.isDate()) { -// propertyName = "str(" + propertyName + ")"; -// } -// ruleFilter = op.toHql(paramName, -// propertyName, -// realData, -// filterParams); -// -// } -// -// strFilterRules.add("(" + ruleFilter + ")"); -// } -// -// if (CollectionUtils.isNotEmpty(strFilterRules)) { -// FilterRuleGroupOperator groupOp = -// pager.getGroupOp(); -// filterHql = StringUtils.join(strFilterRules, groupOp.name()); -// } -// } -// -// if (filterHql != null) { -// if (log.isInfoEnabled()) { -// log.info("filterHql = " + filterHql); -// } -// for (Map.Entry<String, Object> e : filterParams.entrySet()) { -// String paramName = e.getKey(); -// Object paramValue = e.getValue(); -// if (log.isInfoEnabled()) { -// log.info("filterParam = " + -// paramName + "/" + paramValue); -// } -// countQuery.addParam(paramName, paramValue); -// } -// countQuery.addWhere(filterHql); -// -// String fullQuery = countQuery.fullQuery(); -// if (log.isInfoEnabled()) { -// log.info("fullquery = " + fullQuery); -// } -// } -// -// int count = dao.countByQuery(countQuery); -// -// TopiaQuery query = dao.createQuery("e"); -// -// if (pager != null) { -// -// pager.setRecords(count); -// PagerBeanUtil.computeRecordIndexesAndPagesNumber(pager); -// -// long from = pager.getRecordStartIndex(); -// long to = pager.getRecordEndIndex(); -// -// if (log.isDebugEnabled()) { -// log.debug("Count = " + count); -// log.debug("page = " + pager.getPageIndex()); -// log.debug("pageSize = " + pager.getPageSize()); -// log.debug("from = " + from); -// log.debug("to = " + to); -// log.debug("pageCount= " + pager.getPagesNumber()); -// } -// -// if (filterHql != null) { -// for (Map.Entry<String, Object> entry : filterParams.entrySet()) { -// String paramName = entry.getKey(); -// Object paramValue = entry.getValue(); -// query.addParam(paramName, paramValue); -// } -// query.addWhere(filterHql); -// } -// -// String sidx = pager.getSortColumn(); -// boolean ascendantOrder = pager.isSortAscendant(); -// -// if (StringUtils.isNotEmpty(sidx)) { -// if (ascendantOrder) { -// query.addOrder(sidx); -// } else { -// query.addOrderDesc(sidx); -// } -// } -// -// query.setLimit((int) from, (int) to - 1); -// } -// -// dao.findAllByQueryAndPager("hql", pager, filterParams.toString()); -// result = dao.findAllByQuery(query); -// return result; -// } catch (TopiaException eee) { -// throw new EchoBaseTechnicalException("Could not obtain data", eee); -// } -// } -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,372 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services; - -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.entities.ExportQuery; -import fr.ifremer.echobase.entities.ImportLog; -import fr.ifremer.echobase.entities.WorkingDbConfiguration; -import fr.ifremer.echobase.entities.data.Category; -import fr.ifremer.echobase.entities.data.Cell; -import fr.ifremer.echobase.entities.data.Data; -import fr.ifremer.echobase.entities.data.DataAcquisition; -import fr.ifremer.echobase.entities.data.DataProcessing; -import fr.ifremer.echobase.entities.data.Echotype; -import fr.ifremer.echobase.entities.data.GearMetadataValue; -import fr.ifremer.echobase.entities.data.LengthAgeKey; -import fr.ifremer.echobase.entities.data.LengthWeightKey; -import fr.ifremer.echobase.entities.data.Operation; -import fr.ifremer.echobase.entities.data.OperationMetadataValue; -import fr.ifremer.echobase.entities.data.Result; -import fr.ifremer.echobase.entities.data.Sample; -import fr.ifremer.echobase.entities.data.SampleData; -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.AgeCategory; -import fr.ifremer.echobase.entities.references.AreaOfOperation; -import fr.ifremer.echobase.entities.references.Calibration; -import fr.ifremer.echobase.entities.references.CategoryMeaning; -import fr.ifremer.echobase.entities.references.CategoryRef; -import fr.ifremer.echobase.entities.references.CategoryType; -import fr.ifremer.echobase.entities.references.CellMethod; -import fr.ifremer.echobase.entities.references.CellType; -import fr.ifremer.echobase.entities.references.DataMetadata; -import fr.ifremer.echobase.entities.references.DataProtocol; -import fr.ifremer.echobase.entities.references.DataQuality; -import fr.ifremer.echobase.entities.references.DataType; -import fr.ifremer.echobase.entities.references.DepthStratum; -import fr.ifremer.echobase.entities.references.EchotypeCategory; -import fr.ifremer.echobase.entities.references.Gear; -import fr.ifremer.echobase.entities.references.GearCharacteristic; -import fr.ifremer.echobase.entities.references.GearCharacteristicValue; -import fr.ifremer.echobase.entities.references.GearMetadata; -import fr.ifremer.echobase.entities.references.Impacte; -import fr.ifremer.echobase.entities.references.MeasureType; -import fr.ifremer.echobase.entities.references.MeasurementMetadata; -import fr.ifremer.echobase.entities.references.Mission; -import fr.ifremer.echobase.entities.references.OperationEvent; -import fr.ifremer.echobase.entities.references.OperationMetadata; -import fr.ifremer.echobase.entities.references.ReferenceDatum; -import fr.ifremer.echobase.entities.references.ReferenceDatumType; -import fr.ifremer.echobase.entities.references.ReferencingMethod; -import fr.ifremer.echobase.entities.references.SampleDataType; -import fr.ifremer.echobase.entities.references.SampleType; -import fr.ifremer.echobase.entities.references.SexCategory; -import fr.ifremer.echobase.entities.references.SizeCategory; -import fr.ifremer.echobase.entities.references.Species; -import fr.ifremer.echobase.entities.references.SpeciesCategory; -import fr.ifremer.echobase.entities.references.Strata; -import fr.ifremer.echobase.entities.references.TSParameters; -import fr.ifremer.echobase.entities.references.Vessel; -import fr.ifremer.echobase.entities.references.VesselType; -import org.apache.commons.collections.CollectionUtils; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.decorator.Decorator; -import org.nuiton.decorator.DecoratorMulti18nProvider; -import org.nuiton.decorator.DecoratorUtil; -import org.nuiton.decorator.JXPathDecorator; - -import java.util.Collection; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -/** - * Service to decorate entities. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class DecoratorService extends EchoBaseServiceSupport { - - public static final String DATE_ONLY = "dateOnly"; - - protected final DecoratorMulti18nProvider decoratorProvider; - - public DecoratorService() { - decoratorProvider = new EchoBaseDecoratorProvider(); - } - - public <O> Decorator<O> getDecorator(Locale locale, - Class<O> type, - String context) { - Preconditions.checkNotNull(type, "Decorator type can not be null!"); - Decorator<O> decorator = decoratorProvider.getDecoratorByType(locale, type, context); - Preconditions.checkNotNull( - decorator, - "Could not find decorator for type " + type + - " and context " + context - ); - return decorator; - } - - public String decorate(Locale locale, Object o, String context) { - Decorator<?> decorator = getDecorator(locale, o.getClass(), context); - String result = decorator.toString(o); - return result; - } - - public <O> List<O> sortToList(Locale locale, Collection<O> beans, String context) { - Preconditions.checkNotNull(beans); - List<O> list = Lists.newArrayList(beans); - getDecoratorAndSort(locale, context, list); - return list; - } - - public <E extends TopiaEntity> Map<String, String> sortAndDecorate(Locale locale, - Collection<E> beans, - String context) { - Preconditions.checkNotNull(beans); - List<E> list = Lists.newArrayList(beans); - - Decorator<E> decorator = getDecoratorAndSort(locale, context, list); - Map<String, String> result = Maps.newLinkedHashMap(); - for (E bean : list) { - result.put(bean.getTopiaId(), decorator.toString(bean)); - } - return result; - } - - protected <O> Decorator<O> getDecoratorAndSort(Locale locale, - String context, - List<O> list) { - Decorator<O> decorator = null; - if (CollectionUtils.isNotEmpty(list)) { - O object = list.get(0); - Preconditions.checkNotNull(object); - decorator = decoratorProvider.getDecorator(locale, object, context); - Preconditions.checkNotNull( - decorator, - "Could not find decorator for type " + object.getClass() + - " and context " + context - ); - DecoratorUtil.sort((JXPathDecorator<O>) decorator, list, 0); - } - return decorator; - } - - static class EchoBaseDecoratorProvider extends DecoratorMulti18nProvider { - - @Override - protected void loadDecorators(Locale locale) { - - // EchoBaseUser decorator - registerJXPathDecorator(locale, EchoBaseUser.class, "${email}$s"); - - // ExportQuery decorator - registerJXPathDecorator(locale, ExportQuery.class, "${name}$s - ${description}$s"); - - // ImportLog decorator - registerJXPathDecorator(locale, ImportLog.class, "${importType}$s - ${importDate}$s - ${importText}$s"); - - // ImportLog decorator - registerJXPathDecorator(locale, ImportLog.class, DATE_ONLY, "${importDate}$s"); - - - // WorkingDbConfiguration decorator - registerJXPathDecorator(locale, WorkingDbConfiguration.class, "${url}$s - (${description}$s)"); - - // AcousticInstrument decorator - registerJXPathDecorator(locale, AcousticInstrument.class, "${id}$s"); - - // AgeCategory decorator - registerJXPathDecorator(locale, AgeCategory.class, "${name}$s"); - - // AreaOfOperation decorator - registerJXPathDecorator(locale, AreaOfOperation.class, "${name}$s"); - - // Calibration decorator - registerJXPathDecorator(locale, Calibration.class, "${date}$s - acquisition ${aquisitionMethod}$s"); - - // Category decorator - registerJXPathDecorator(locale, Category.class, "${echotypeLabel}$s ${speciesLabel}$s ${processedAgeLabel}$s ${processedLengthLabel}$s"); - - // CategoryMeaning decorator - registerJXPathDecorator(locale, CategoryMeaning.class, "${name}$s"); - - // CategoryRef decorator - registerJXPathDecorator(locale, CategoryRef.class, "${genusSpecies}$s"); - - // CategoryType decorator - registerJXPathDecorator(locale, CategoryType.class, "${name}$s"); - - // CellMethod decorator - registerJXPathDecorator(locale, CellMethod.class, "${name}$s"); - - // CellType decorator - registerJXPathDecorator(locale, CellType.class, "${name}$s"); - - // DataMetadata decorator - registerJXPathDecorator(locale, DataMetadata.class, "${name}$s - ${standardName}$s"); - //registerJXPathDecorator(locale, DataMetadata.class, "${name}$s"); - - // DataProtocol decorator - registerJXPathDecorator(locale, DataProtocol.class, "${description}$s [ ${validSince}$td/%2$tm/%2$tY - ${invalidSince}$td/%3$tm/%3$tY ]"); - - // DataQuality decorator - //registerJXPathDecorator(locale, DataQuality.class, "${qualityDataFlagValues}$s - ${flagMeanings}$s"); - registerJXPathDecorator(locale, DataQuality.class, "${flagMeanings}$s"); - - // DataType decorator - registerJXPathDecorator(locale, DataType.class, "${name}$s"); - - // DepthStratum decorator - //registerJXPathDecorator(locale, DepthStratum.class, "${id}$s - ${meaning}$s"); - registerJXPathDecorator(locale, DepthStratum.class, "${meaning}$s"); - - // Echotype decorator - //registerJXPathDecorator(locale, Echotype.class, "${id}$s - ${name}$s"); - registerJXPathDecorator(locale, Echotype.class, "${name}$s"); - - // EchotypeCategory decorator - registerJXPathDecorator(locale, EchotypeCategory.class, "${name}$s"); - - // Gear decorator - //registerJXPathDecorator(locale, Gear.class, "${name}$s [ ${validSince}$td/%2$tm/%2$tY - ${invalidSince}$td/%3$tm/%3$tY ]"); - registerJXPathDecorator(locale, Gear.class, "${name}$s"); - - // GearCaracteristic decorator - registerJXPathDecorator(locale, GearCharacteristic.class, "${name}$s"); - - // GearMetadata decorator - //registerJXPathDecorator(locale, GearMetadata.class, "${name}$s (${operationEvent/name}$s)"); - registerJXPathDecorator(locale, GearMetadata.class, "${name}$s"); - - // GearCharacteristicValue decorator - registerJXPathDecorator(locale, GearCharacteristicValue.class, "${dataValue}$s"); - - // GearMetadataValue decorator - registerJXPathDecorator(locale, GearMetadataValue.class, "${dataValue}$s"); - - // Impacte decorator - //registerJXPathDecorator(locale, Impacte.class, "${measurementUnit}$s - ${species/genusSpecies}"); - registerJXPathDecorator(locale, Impacte.class, "${measurementUnit}$s"); - - // LengthAgeKey decorator - registerJXPathDecorator(locale, LengthAgeKey.class, "Age ${age}$s - Length ${length}"); - - // MeasurementMetadata decorator - registerJXPathDecorator(locale, MeasurementMetadata.class, "${name}$s"); - - // MeasureType decorator - registerJXPathDecorator(locale, MeasureType.class, "${name}$s"); - - // Mission decorator - registerJXPathDecorator(locale, Mission.class, "${name}$s"); - - // OperationEvent decorator - registerJXPathDecorator(locale, OperationEvent.class, "${name}$s"); - - // OperationMetadata decorator - registerJXPathDecorator(locale, OperationMetadata.class, "${name}$s"); - - // ReferenceDatum decorator - registerJXPathDecorator(locale, ReferenceDatum.class, "${id}$s"); - - // ReferenceDatumType decorator - registerJXPathDecorator(locale, ReferenceDatumType.class, "${name}$s"); - - // ReferencingMethod decorator - registerJXPathDecorator(locale, ReferencingMethod.class, "${name}$s"); - - // SampleDataType decorator - registerJXPathDecorator(locale, SampleDataType.class, "${name}$s"); - - // SampleType decorator - //registerJXPathDecorator(locale, SampleType.class, "${name}$s - level ${level}$s"); - registerJXPathDecorator(locale, SampleType.class, "${name}$s"); - - // SexCategory decorator - registerJXPathDecorator(locale, SexCategory.class, "${name}$s"); - - // SizeCategory decorator - registerJXPathDecorator(locale, SizeCategory.class, "${name}$s"); - - // Species decorator - //registerJXPathDecorator(locale, Species.class, "${genusSpecies}$s (${baracoudaCode}$s)"); - registerJXPathDecorator(locale, Species.class, "${genusSpecies}$s"); - - // SpeciesCategory decorator - registerJXPathDecorator(locale, SpeciesCategory.class, "${species/genusSpecies}$s ${sizeCategoryLabel}$s ${ageCategoryLabel}$s ${sexCategoryLabel}$s"); - - // Strata decorator - registerJXPathDecorator(locale, Strata.class, "Latitude <${minLatitude}$s - ${maxLatitude}$s>, Longitude <${minLongitude}$s - ${maxLongitude}$s>"); - - //TODO - // TSParameters decorator - registerJXPathDecorator(locale, TSParameters.class, "${}$s"); - - // Vessel decorator - registerJXPathDecorator(locale, Vessel.class, "${name}$s"); - - // VesselType decorator - registerJXPathDecorator(locale, VesselType.class, "${name}$s"); - - // LengthWeightKey decorator - registerJXPathDecorator(locale, LengthWeightKey.class, "Species ${species/genusSpecies}$s - a=${aParameter}$s, b=${bParameter}$s"); - - // Cell decorator - registerJXPathDecorator(locale, Cell.class, "${name}$s"); - - // Data decorator - registerJXPathDecorator(locale, Data.class, "${dataValue}$s"); - - // DataAcquisition decorator - registerJXPathDecorator(locale, DataAcquisition.class, "${acousticInstrument/id}$s "); - - // DataProcessing decorator - registerJXPathDecorator(locale, DataProcessing.class, "${id}$s"); - - // Operation decorator - registerJXPathDecorator(locale, Operation.class, "${startDate}$td/%1$tm/%1$tY - ${endDate}$td/%2$tm/%2$tY"); - - // OperationMetadataValue decorator - registerJXPathDecorator(locale, OperationMetadataValue.class, "${operationMetadata/name} - ${dataValue}$s"); - - // Result decorator - registerJXPathDecorator(locale, Result.class, "${resultvalue}$s"); - - // Sample decorator - registerJXPathDecorator(locale, Sample.class, "${resultvalue}$s"); - - // SampleData decorator - registerJXPathDecorator(locale, SampleData.class, "${resultvalue}$s"); - - // Transect decorator - registerJXPathDecorator(locale, Transect.class, "${title}$s - Vessel ${vessel/name}$s"); - - // Transit decorator - registerJXPathDecorator(locale, Transit.class, "${startTime}$td/%1$tm/%1$tY - ${endTime}$td/%2$tm/%2$tY"); - - // Voyage decorator - registerJXPathDecorator(locale, Voyage.class, "${name}$s [ ${startDate}$td/%2$tm/%2$tY - ${endDate}$td/%3$tm/%3$tY ]"); - } - } - -} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DefaultEchoBaseServiceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,153 @@ +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services; + +import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.config.EchoBaseConfiguration; +import fr.ifremer.echobase.entities.TopiaEchoBaseInternalPersistenceContext; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; +import fr.ifremer.echobase.entities.spatial.SpatialDataCache; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; +import org.apache.commons.lang3.time.DateUtils; +import org.nuiton.topia.TopiaContextFactory; + +import java.lang.reflect.InvocationTargetException; +import java.util.Date; +import java.util.Locale; + +/** + * Instances of this class will be given to service factory. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class DefaultEchoBaseServiceContext implements EchoBaseServiceContext { + + protected final Locale locale; + + protected TopiaEchoBasePersistenceContext echoBasePersistenceContext; + + protected TopiaEchoBaseInternalPersistenceContext echoBaseInternalPersistenceContext; + + protected EchoBaseConfiguration configuration; + + protected EchoBaseDbMeta dbMeta; + + private SpatialDataCache spatialCache; + + public static EchoBaseServiceContext newContext( + Locale locale, + EchoBaseConfiguration configuration, + EchoBaseDbMeta dbMeta, + SpatialDataCache spatialCache) { + return new DefaultEchoBaseServiceContext(locale, + configuration, + dbMeta, + spatialCache); + } + + protected DefaultEchoBaseServiceContext(Locale locale, + EchoBaseConfiguration configuration, + EchoBaseDbMeta dbMeta, + SpatialDataCache spatialCache) { + this.locale = locale; + this.configuration = configuration; + this.dbMeta = dbMeta; + this.spatialCache = spatialCache; + } + + @Override + public SpatialDataCache getSpatialDataCache() { + return spatialCache; + } + + @Override + public TopiaEchoBasePersistenceContext getEchoBasePersistenceContext() { + return echoBasePersistenceContext; + } + + @Override + public void setEchoBasePersistenceContext(TopiaEchoBasePersistenceContext echoBasePersistenceContext) { + this.echoBasePersistenceContext = echoBasePersistenceContext; + } + + @Override + public TopiaEchoBaseInternalPersistenceContext getEchoBaseInternalPersistenceContext() { + return echoBaseInternalPersistenceContext; + } + + @Override + public void setEchoBaseInternalPersistenceContext(TopiaEchoBaseInternalPersistenceContext echoBaseInternalPersistenceContext) { + this.echoBaseInternalPersistenceContext = echoBaseInternalPersistenceContext; + } + + @Override + public Locale getLocale() { + return locale; + } + + @Override + public Date newDate() { + Date result = new Date(); + DateUtils.setMilliseconds(result, 0); + return result; + } + + @Override + public EchoBaseConfiguration getConfiguration() { + return configuration; + } + + @Override + public EchoBaseDbMeta getDbMeta() { + return dbMeta; + } + + @Override + public <S extends EchoBaseService> S newService(Class<S> serviceClass) { + // instantiate service using empty constructor + S service; + try { + service = serviceClass.getConstructor().newInstance(); + } catch (InstantiationException e) { + throw new EchoBaseTechnicalException(e); + } catch (IllegalAccessException e) { + throw new EchoBaseTechnicalException(e); + } catch (InvocationTargetException e) { + throw new EchoBaseTechnicalException(e); + } catch (NoSuchMethodException e) { + throw new EchoBaseTechnicalException(e); + } + + service.setServiceContext(this); + + return service; + } + + @Override + public String getWorkgingDbUrl() { + String result = getEchoBasePersistenceContext().getConfig().getProperty(TopiaContextFactory.CONFIG_URL); + return result; + } + +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,38 @@ +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +package fr.ifremer.echobase.services; + +/** + * Contract to place on each EchoBase service to push the {@code serviceContext} + * inside the service. + * + * @author tchemit <chemit@codelutin.com> + * @see EchoBaseServiceContext + * @since 0.1 + */ +public interface EchoBaseService { + + void setServiceContext(EchoBaseServiceContext serviceContext); + +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,66 @@ +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +package fr.ifremer.echobase.services; + +import fr.ifremer.echobase.config.EchoBaseConfiguration; +import fr.ifremer.echobase.entities.TopiaEchoBaseInternalPersistenceContext; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; +import fr.ifremer.echobase.entities.spatial.SpatialDataCache; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; + +import java.util.Date; +import java.util.Locale; + +/** + * This contract represents objects you must provide when asking for a service. + * Objects provided may be injected in services returned by + * {@link #newService(Class)} + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public interface EchoBaseServiceContext { + + SpatialDataCache getSpatialDataCache(); + + TopiaEchoBasePersistenceContext getEchoBasePersistenceContext(); + + void setEchoBasePersistenceContext(TopiaEchoBasePersistenceContext internalPersistenceContext); + + TopiaEchoBaseInternalPersistenceContext getEchoBaseInternalPersistenceContext(); + + void setEchoBaseInternalPersistenceContext(TopiaEchoBaseInternalPersistenceContext internalPersistenceContext); + + Locale getLocale(); + + EchoBaseConfiguration getConfiguration(); + + EchoBaseDbMeta getDbMeta(); + + Date newDate(); + + String getWorkgingDbUrl(); + + <S extends EchoBaseService> S newService(Class<S> serviceClass); +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,147 @@ +/* + * #%L + * EchoBase :: Domain + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services; + +import fr.ifremer.echobase.config.EchoBaseConfiguration; +import fr.ifremer.echobase.entities.TopiaEchoBaseInternalPersistenceContext; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; +import fr.ifremer.echobase.entities.spatial.SpatialDataCache; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; +import fr.ifremer.echobase.services.service.exportdb.ExportDbService; +import fr.ifremer.echobase.services.service.exportdb.ExportService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; +import fr.ifremer.echobase.services.service.importdb.ImportDbService; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.DbEditorService; +import fr.ifremer.echobase.services.service.DecoratorService; +import fr.ifremer.echobase.services.service.InternalDbPersistenceService; +import fr.ifremer.echobase.services.service.UserService; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; +import fr.ifremer.echobase.services.service.spatial.SpatialService; + +import java.util.Date; +import java.util.Locale; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 0.1 + */ +public class EchoBaseServiceSupport implements EchoBaseService { + + protected EchoBaseServiceContext serviceContext; + + @Override + public void setServiceContext(EchoBaseServiceContext serviceContext) { + this.serviceContext = serviceContext; + } + + protected <E extends EchoBaseService> E newService(Class<E> serviceClass) { + return serviceContext.newService(serviceClass); + } + + public TopiaEchoBasePersistenceContext getEchoBasePersistenceContext() { + return serviceContext.getEchoBasePersistenceContext(); + } + + public TopiaEchoBaseInternalPersistenceContext getEchoBaseInternalPersistenceContext() { + return serviceContext.getEchoBaseInternalPersistenceContext(); + } + + public final EchoBaseConfiguration getConfiguration() { + return serviceContext.getConfiguration(); + } + + protected final String getWorkgingDbUrl() { + return serviceContext.getWorkgingDbUrl(); + } + + protected final SpatialDataCache getSpatialDataCache() { + return serviceContext.getSpatialDataCache(); + } + + protected final Locale getLocale() { + return serviceContext.getLocale(); + } + + protected final Date newDate() { + return serviceContext.newDate(); + } + + protected final EchoBaseDbMeta getDbMeta() { + return serviceContext.getDbMeta(); + } + + protected char getCsvSeparator() { + return getConfiguration().getCsvSeparator(); + } + + public DbEditorService getDbEditorService() { + return newService(DbEditorService.class); + } + + public DecoratorService getDecoratorService() { + return newService(DecoratorService.class); + } + + public InternalDbPersistenceService getInternalDbPersistenceService() { + return newService(InternalDbPersistenceService.class); + } + + public WorkingDbPersistenceService getWorkingDbPersistenceService() { + return newService(WorkingDbPersistenceService.class); + } + + public UserService getUserService() { + return newService(UserService.class); + } + + public SpatialService getSpatialService() { + return newService(SpatialService.class); + } + + public ExportService getExportService() { + return newService(ExportService.class); + } + + public ExportDbService getExportDbService() { + return newService(ExportDbService.class); + } + + public ImportDbService getImportDbService() { + return newService(ImportDbService.class); + } + + public RemoveDataService getRemoveDataService() { + return newService(RemoveDataService.class); + } + + public ExportQueryService getExportQueryService() { + return newService(ExportQueryService.class); + } + +// public final <E extends EchoBaseService> E getService(Class<E> serviceClass) { +// E result = serviceContext.newService(serviceClass); +// return result; +// } + +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ProgressModel.java (from rev 839, trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/ProgressModel.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ProgressModel.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ProgressModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,46 @@ +/* + * #%L + * EchoBase :: Domain + * $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 org.nuiton.topia.persistence.csv.CsvProgressModel; + +import java.io.Serializable; + +/** + * Contract for a progression model while long service actions. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public interface ProgressModel extends CsvProgressModel, Serializable { + + long getStartTime(); + + void setStartTime(long startTime); + + long getEndTime(); + + void setEndTime(long endTime); + + String getActionTime(); +} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/UserService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/UserService.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/UserService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,166 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services; - -import com.google.common.base.Preconditions; -import fr.ifremer.echobase.EchoBaseTechnicalException; -import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.entities.EchoBaseUserDAO; -import org.apache.commons.lang3.StringUtils; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.pager.TopiaPagerBean; -import org.nuiton.util.StringUtil; - -import java.util.List; - -/** - * @author sletellier <letellier@codelutin.com> - * @since 0.1 - */ -public class UserService extends EchoBaseServiceSupport { - - public static final String DEFAULT_ADMIN_EMAIL = "admin"; - - public static final String DEFAULT_ADMIN_PASSWORD = "admin"; - - public static final String DEFAULT_USER_EMAIL = "user"; - - public static final String DEFAULT_USER_PASSWORD = "user"; - - public List<EchoBaseUser> getUsers() { - return getUsers(null); - } - - public List<EchoBaseUser> getUsers(TopiaPagerBean pager) { - try { - EchoBaseUserDAO dao = getDAO(); - List<EchoBaseUser> users = dao.findAll(pager); - return users; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(eee); - } - } - - public EchoBaseUser getUserByEmail(String email) { - Preconditions.checkNotNull(email); - try { - EchoBaseUserDAO dao = getDAO(); - EchoBaseUser user = dao.findByEmail(email); - return user; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(eee); - } - } - - public EchoBaseUser getUserById(String userId) { - Preconditions.checkNotNull(userId); - try { - EchoBaseUser user = getDAO().findByTopiaId(userId); - EchoBaseUser result = newUser(); - result.setEmail(user.getEmail()); - result.setPassword(user.getPassword()); - result.setAdmin(user.isAdmin()); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(eee); - } - } - - public void createOrUpdate(EchoBaseUser user) { - try { - EchoBaseUser userToCreateOrUpdate; - - // No id, creating new one entity - String id = user.getTopiaId(); - String password = user.getPassword(); - if (StringUtils.isEmpty(id)) { - userToCreateOrUpdate = getDAO().create( - EchoBaseUser.PROPERTY_EMAIL, user.getEmail(), - EchoBaseUser.PROPERTY_PASSWORD, encodePassword(password) - ); - } else { - userToCreateOrUpdate = getEntityById(EchoBaseUser.class, id); - - userToCreateOrUpdate.setEmail(user.getEmail()); - if (StringUtils.isNotEmpty(password)) { - userToCreateOrUpdate.setPassword(encodePassword(password)); - } - } - userToCreateOrUpdate.setAdmin(user.isAdmin()); - commitInternalTransaction("Could not create or update user"); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(eee); - } - } - - public void delete(EchoBaseUser user) { - try { - EchoBaseUser userToDelete = getEntityById(EchoBaseUser.class, - user.getTopiaId()); - getDAO().delete(userToDelete); - commitInternalTransaction("Could not delete user"); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(eee); - } - } - - public boolean checkPassword(EchoBaseUser user, - String password) throws Exception { - String s = encodePassword(password); - return s.equals(user.getPassword()); - } - - public void createDefaultUsers() { - EchoBaseUser user; - - user = newUser(); - user.setEmail(DEFAULT_ADMIN_EMAIL); - user.setPassword(DEFAULT_ADMIN_PASSWORD); - user.setAdmin(true); - createOrUpdate(user); - - user = newUser(); - user.setEmail(DEFAULT_USER_EMAIL); - user.setPassword(DEFAULT_USER_PASSWORD); - user.setAdmin(false); - createOrUpdate(user); - } - - public static String encodePassword(String password) { - String encodedPassword = StringUtil.encodeMD5(password); - return encodedPassword; - } - - public EchoBaseUser newUser() { - try { - return getDAO().newInstance(); - } catch (TopiaException e) { - throw new EchoBaseTechnicalException(e); - } - } - - protected EchoBaseUserDAO getDAO() { - return getDAO(EchoBaseUser.class, EchoBaseUserDAO.class); - } -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,105 +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.embeddedapplication; - -import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; -import org.apache.commons.io.FileUtils; - -import java.io.File; -import java.io.IOException; -import java.util.Arrays; - -/** - * Configuration of a embedded application creation. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public class EmbeddedApplicationConfiguration extends AbstractEchobaseActionConfiguration { - - private static final long serialVersionUID = 1L; - - /** File name of the embedded application archive (without the zip extension). */ - private String fileName; - - /** Working directory where to generate the archive of embedded application. */ - private File workingDirectory; - - /** Embedded application archive file. */ - private File embeddedApplicationFile; - - /** Location of the war file to push in embedded application. */ - private File warLocation; - - /** Ids of voyages to push in embedded application (with all their datas). */ - private String[] voyageIds; - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public File getWorkingDirectory() { - return workingDirectory; - } - - public void setWorkingDirectory(File workingDirectory) { - this.workingDirectory = workingDirectory; - } - - public File getEmbeddedApplicationFile() { - return embeddedApplicationFile; - } - - public void setEmbeddedApplicationFile(File embeddedApplicationFile) { - this.embeddedApplicationFile = embeddedApplicationFile; - } - - public String[] getVoyageIds() { - return voyageIds; - } - - // Attention on ne peut pas utiliser un ... car sinon ça plante dans l'ui - public void setVoyageIds(String[] voyageIds) { - this.voyageIds = Arrays.copyOf(voyageIds, voyageIds.length); - } - - public File getWarLocation() { - return warLocation; - } - - public void setWarLocation(File warLocation) { - this.warLocation = warLocation; - } - - @Override - public void destroy() throws IOException { - if (workingDirectory != null) { - FileUtils.deleteDirectory(workingDirectory); - } - } -} \ No newline at end of file Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,415 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.embeddedapplication; - -import com.google.common.base.Charsets; -import com.google.common.base.Preconditions; -import fr.ifremer.echobase.EchoBaseTechnicalException; -import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.entities.ExportQuery; -import fr.ifremer.echobase.entities.WorkingDbConfiguration; -import fr.ifremer.echobase.io.EchoBaseIOUtil; -import fr.ifremer.echobase.persistence.EchoBaseEntityHelper; -import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; -import fr.ifremer.echobase.persistence.JdbcConfiguration; -import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; -import fr.ifremer.echobase.services.EchoBaseServiceContext; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.UserService; -import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; -import fr.ifremer.echobase.services.exportdb.ExportDbMode; -import fr.ifremer.echobase.services.exportdb.ExportDbService; -import fr.ifremer.echobase.services.exportquery.ExportQueryInvalidNameException; -import fr.ifremer.echobase.services.exportquery.ExportQueryNameAlreadyExistException; -import fr.ifremer.echobase.services.exportquery.ExportQueryService; -import fr.ifremer.echobase.services.importdata.ImportException; -import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; -import fr.ifremer.echobase.services.importdb.ImportDbMode; -import fr.ifremer.echobase.services.importdb.ImportDbService; -import fr.ifremer.echobase.services.workingDb.WorkingDbConfigurationAlreadyExistException; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.util.FileUtil; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.util.List; - -/** - * To create embedded application. - * - * @author tchemit <chemit@codelutin.com> - * @author sletellier <letellier@codelutin.com> - * @since 0.1 - */ -public class EmbeddedApplicationService extends EchoBaseServiceSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(EmbeddedApplicationService.class); - - public static final String EMBEDDED_PATH = "/embedded/"; - - public File createEmbeddedApplication(EmbeddedApplicationConfiguration model) { - - int nbSteps = computeNbSteps(model); - model.setNbSteps(nbSteps); - - String fileName = model.getFileName(); - - File tempDirectory = model.getWorkingDirectory(); - tempDirectory.deleteOnExit(); - - File zipFile = new File(tempDirectory, fileName + ".zip"); - model.setEmbeddedApplicationFile(zipFile); - - File dir = new File(tempDirectory, fileName); - - if (log.isInfoEnabled()) { - log.info("Creates embedded application to file [" + zipFile + "]"); - } - - // export db to csv - File exportZipFile = exportDb(model, tempDirectory); - - // create static archive structure - createStaticArchiveStructure(model, dir); - - model.incrementsProgress(); - - // create new service context - EchoBaseServiceContext newServiceContext = - DefaultEchoBaseServiceContext.newContext( - getLocale(), - null, - null, - getConfiguration(), - getDbMeta()); - - EchoBaseUser admin; - try { - admin = importInternalDb(model, dir, newServiceContext); - } catch (Exception e) { - throw new EchoBaseTechnicalException( - "Could not create internal db", e); - } - - // create working db in /db - try { - importWorkingDb(model, dir, exportZipFile, newServiceContext, admin); - - } catch (Exception eee) { - - throw new EchoBaseTechnicalException( - "Could not create h2 working database at " + dir, eee); - } - - try { - EchoBaseIOUtil.compressZipFile(zipFile, dir); - } catch (IOException eee) { - throw new EchoBaseTechnicalException( - "Could not create zip file at " + zipFile, eee); - } - - return zipFile; - } - - protected EchoBaseUser importInternalDb(EmbeddedApplicationConfiguration model, - File dir, - EchoBaseServiceContext newServiceContext) throws TopiaException, ExportQueryNameAlreadyExistException, WorkingDbConfigurationAlreadyExistException, ExportQueryInvalidNameException { - - File internalDir = new File(dir, "internaldb"); - - TopiaContext internalRootContext = - EchobaseTopiaContexts.newInternalDb(internalDir); - - newServiceContext.setInternalTransaction( - internalRootContext.beginTransaction()); - - - try { - // get user service from h2 db - UserService userService = newServiceContext.getService(UserService.class); - - // create admin user - userService.createDefaultUsers(); - - // get admin from h2 db - EchoBaseUser admin = userService.getUserByEmail( - UserService.DEFAULT_ADMIN_EMAIL); - - model.incrementsProgress(); - - // get all export queries from application - List<ExportQuery> queries = getEntities(ExportQuery.class); - - // replicate queries - getInternalTransaction().replicateEntities( - newServiceContext.getInternalTransaction(), queries); - - // create export sql service from h2 db - ExportQueryService exportQueryService = - newServiceContext.getService(ExportQueryService.class); - - // get all queries from h2 db - queries = exportQueryService.getEntities(ExportQuery.class); - - // attach them to default created admin user in the db - for (ExportQuery query : queries) { - exportQueryService.createOrUpdate(query, admin); - } - - model.incrementsProgress(); - - // get all working db configuration from application - - List<WorkingDbConfiguration> confs = - getEntities(WorkingDbConfiguration.class); - - // replicate configs - getInternalTransaction().replicateEntities( - newServiceContext.getInternalTransaction(), confs); - - model.incrementsProgress(); - - return admin; - - } finally { - newServiceContext.setInternalTransaction(null); - EchoBaseEntityHelper.releaseRootContext(internalRootContext); - } - } - - protected void importWorkingDb(EmbeddedApplicationConfiguration model, - File dir, - File exportZipFile, - EchoBaseServiceContext newServiceContext, - EchoBaseUser admin) throws IOException, ImportException, TopiaException { - - JdbcConfiguration dbConf = JdbcConfiguration.newEmbeddedConfig(dir); - TopiaContext rootContext = EchobaseTopiaContexts.newWorkingDb( - dbConf); - try { - - // inject a new transaction in service context - newServiceContext.setTransaction(rootContext.beginTransaction()); - - model.incrementsProgress(); - - // prepare import configuration - ImportDbConfiguration importConfiguration = - new ImportDbConfiguration(model, getLocale()); - importConfiguration.getInput().setFile(exportZipFile); - File importTempDir = new File(model.getWorkingDirectory(), "importDb"); - importConfiguration.setWorkingDirectory(importTempDir); - importConfiguration.setImportDbMode(ImportDbMode.FREE); - importConfiguration.setComputeSteps(false); - importConfiguration.setCommitAfterEachFile(true); - - // do import to embedded working db - newServiceContext.getService(ImportDbService.class).doImport( - importConfiguration, admin); - - } finally { - // remove current transaction - newServiceContext.setTransaction(null); - - // release any connexion to the working db - EchoBaseEntityHelper.releaseRootContext(rootContext); - } - } - - protected void closeContext(TopiaContext tx, String message) { - try { - tx.closeContext(); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(message, eee); - } - } - - protected TopiaContext beginTransaction(TopiaContext tx, String message) { - try { - return tx.beginTransaction(); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(message, eee); - } - } - - protected void rollbackTransaction(TopiaContext tx, String message) { - try { - if (tx != null) { - tx.rollbackTransaction(); - } - } catch (TopiaException eee) { - if (log.isErrorEnabled()) { - log.error(message, eee); - } - } - } - - protected int computeNbSteps(EmbeddedApplicationConfiguration model) { - int nbSteps = 5; - - // export db steps - - nbSteps += getDbMeta().getReferenceEntriesSize(); - if (model.getVoyageIds() != null) { - nbSteps += model.getVoyageIds().length; - } - - // import db stesp - nbSteps += getDbMeta().getEntriesSize(); - return nbSteps; - } - - protected void createStaticArchiveStructure(EmbeddedApplicationConfiguration model, File dir) { - - try { - - // create / - FileUtil.createDirectoryIfNecessary(dir); - - // copy embedded files to / - copyEmbeddedTextFile("echobase.properties", dir, false); - copyEmbeddedTextFile("startEchobase.bat", dir, true); - copyEmbeddedTextFile("startEchobase.sh", dir, true); - copyEmbeddedTextFile("README.txt", dir, false); - - // copy war to / - File warLocation = model.getWarLocation(); - FileUtils.copyFile(warLocation, - new File(dir, warLocation.getName())); - } catch (Exception eee) { - throw new EchoBaseTechnicalException( - "Could not create embedded zip structure at " + dir, eee); - } - } - - protected File exportDb(EmbeddedApplicationConfiguration model, File dir) { - - try { - // create export zip file - ExportDbConfiguration exportconfiguration = - new ExportDbConfiguration(model); - exportconfiguration.setFileName("echobase-export"); - File exportTempDir = new File(dir, "exportDb"); - exportconfiguration.setWorkingDirectory(exportTempDir); - exportconfiguration.setVoyageIds(model.getVoyageIds()); - exportconfiguration.setComputeSteps(false); - exportconfiguration.setExportDbMode(ExportDbMode.REFERENTIAL_AND_DATA); - - TopiaContext transaction = serviceContext.getTransaction(); - - TopiaContext newTx = beginTransaction( - transaction, - "Could not begin transaction on main db"); - try { - serviceContext.setTransaction(newTx); - ExportDbService exportDbService = getService(ExportDbService.class); - exportDbService.doExport(exportconfiguration); - } catch (IOException eee) { - rollbackTransaction( - newTx, - "Could not rollback transaction on db"); - throw eee; - } catch (RuntimeException eee) { - rollbackTransaction( - newTx, - "Could not rollback transaction on db"); - throw eee; - } finally { - serviceContext.setTransaction(transaction); - closeContext(newTx, "Could not close transaction on main db"); - } - File exportZipFile = exportconfiguration.getExportFile(); - if (log.isInfoEnabled()) { - log.info("Export zip file = " + exportZipFile); - } - return exportZipFile; - } catch (IOException eee) { - throw new EchoBaseTechnicalException( - "Could not export db to zip", eee); - } - } - - public void copyEmbeddedTextFile(String resourceName, - File targetDirectory, - boolean executable) throws IOException { - String resourcePath = EMBEDDED_PATH + resourceName; - InputStream inputStream = getClass().getResourceAsStream(resourcePath); - Preconditions.checkNotNull(inputStream, - "could not find resource " + resourcePath); - try { - File outputFile = new File(targetDirectory, resourceName); - if (log.isInfoEnabled()) { - log.info("Copy configuration to " + resourceName + " to " + outputFile); - } - OutputStreamWriter outputStream = new OutputStreamWriter( - new FileOutputStream(outputFile), Charsets.UTF_8); - try { - IOUtils.copy(inputStream, outputStream); - } finally { - outputStream.close(); - } - if (executable) { - outputFile.setExecutable(true); - } - } finally { - inputStream.close(); - } - } - - public void copyEmbeddedBinaryFile(String resourceName, - File targetDirectory) throws IOException { - String resourcePath = EMBEDDED_PATH + resourceName; - InputStream inputStream = getClass().getResourceAsStream(resourcePath); - Preconditions.checkNotNull(inputStream, - "could not find resource " + resourcePath); - try { - File outputFile = new File(targetDirectory, resourceName); - if (log.isInfoEnabled()) { - log.info("Copy binary file from " + resourceName + " to " + - outputFile); - } - OutputStream outputStream = new FileOutputStream(outputFile); - try { - IOUtils.copy(inputStream, outputStream); - outputStream.close(); - } finally { - IOUtils.closeQuietly(outputStream); - } - inputStream.close(); - } finally { - IOUtils.closeQuietly(inputStream); - } - } -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,119 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.exportdb; - -import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; -import fr.ifremer.echobase.services.ProgressModel; -import org.apache.commons.io.FileUtils; - -import java.io.File; -import java.io.IOException; - -/** - * Configuration of a complete db export. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public class ExportDbConfiguration extends AbstractEchobaseActionConfiguration { - - private static final long serialVersionUID = 1L; - - private String fileName; - - private File workingDirectory; - - private File exportFile; - - private ExportDbMode exportDbMode; - - /** Ids of voyages to push in embedded application (with all their datas). */ - private String[] voyageIds; - - private boolean computeSteps; - - public ExportDbConfiguration() { - } - - public ExportDbConfiguration(ProgressModel progressModel) { - super(progressModel); - } - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public File getWorkingDirectory() { - return workingDirectory; - } - - public void setWorkingDirectory(File workingDirectory) { - this.workingDirectory = workingDirectory; - } - - public File getExportFile() { - return exportFile; - } - - public void setExportFile(File exportFile) { - this.exportFile = exportFile; - } - - public String[] getVoyageIds() { - return voyageIds; - } - - // Attention on ne peut pas utiliser un ... car sinon ça plante dans l'ui - public void setVoyageIds(String[] voyageIds) { - this.voyageIds = voyageIds; - } - - public ExportDbMode getExportDbMode() { - return exportDbMode; - } - - public void setExportDbMode(ExportDbMode exportDbMode) { - this.exportDbMode = exportDbMode; - } - - public boolean isComputeSteps() { - return computeSteps; - } - - public void setComputeSteps(boolean computeSteps) { - this.computeSteps = computeSteps; - } - - @Override - public void destroy() throws IOException { - if (workingDirectory != null) { - FileUtils.deleteDirectory(workingDirectory); - } - } - -} \ No newline at end of file Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,71 +0,0 @@ -package fr.ifremer.echobase.services.exportdb; - -/* - * #%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% - */ - -import fr.ifremer.echobase.I18nAble; - -import static org.nuiton.i18n.I18n.n_; - -/** - * Db export mode. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.2 - */ -public enum ExportDbMode implements I18nAble { - - /** Export only referential. */ - REFERENTIAL(n_("echobase.common.exportDbMode.referential"), true, false), - - /** Export selected data + referential. */ - REFERENTIAL_AND_DATA(n_("echobase.common.exportDbMode.referentialAndData"), true, true), - - /** Export all the db. */ - ALL(n_("echobase.common.exportDbMode.all"), true, true); - - private final String i18nKey; - - private final boolean exportReferential; - - private final boolean exportData; - - ExportDbMode(String i18nKey, boolean exportReferential, boolean exportData) { - this.i18nKey = i18nKey; - this.exportReferential = exportReferential; - this.exportData = exportData; - } - - @Override - public String getI18nKey() { - return i18nKey; - } - - public boolean isExportReferential() { - return exportReferential; - } - - public boolean isExportData() { - return exportData; - } -} \ No newline at end of file Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,267 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.exportdb; - -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.entities.data.Cell; -import fr.ifremer.echobase.entities.data.Result; -import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.io.EchoBaseIOUtil; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.TopiaPersistenceHelper; -import org.nuiton.topia.persistence.csv.out.ExportEntityVisitor; -import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; -import org.nuiton.topia.persistence.metadata.AssociationMeta; -import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.util.FileUtil; -import org.nuiton.util.TimeLog; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * Service to import / export a complete db. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public class ExportDbService extends EchoBaseServiceSupport { - - /** Logger. */ - private static final Log log = LogFactory.getLog(ExportDbService.class); - - public static final TimeLog timeLog = new TimeLog(ExportDbService.class); - - public void doExport(ExportDbConfiguration model) throws IOException { - - String fileName = model.getFileName(); - - File tempDirectory = model.getWorkingDirectory(); - - File zipFile = new File(tempDirectory, fileName + ".echobase"); - - if (log.isInfoEnabled()) { - log.info("Will export db to " + zipFile); - } - model.setExportFile(zipFile); - - File dir = new File(tempDirectory, "echobase"); - - FileUtil.createDirectoryIfNecessary(dir); - - ExportDbMode exportDbMode = model.getExportDbMode(); - - ExportService exportService = getService(ExportService.class); - - boolean exportVoyagesByVisitor = exportDbMode.isExportData(); - - if (exportVoyagesByVisitor) { - - long nbVoyages = exportService.countEntities(Voyage.class); - if (exportDbMode == ExportDbMode.ALL || - model.getVoyageIds().length == nbVoyages) { - - // no need to export via visitor, can export all data tables - exportVoyagesByVisitor = false; - } - } - - List<TableMeta<EchoBaseEntityEnum>> tablesToExport = Lists.newArrayList(); - List<AssociationMeta<EchoBaseEntityEnum>> associationsToExport = Lists.newArrayList(); - - if (exportDbMode.isExportReferential()) { - - // add referential tables - tablesToExport.addAll(getDbMeta().getReferenceTables()); - associationsToExport.addAll(getDbMeta().getReferenceAssociations()); - } - - if (exportDbMode.isExportData() && !exportVoyagesByVisitor) { - - // will export complete data tables - tablesToExport.addAll(getDbMeta().getDataTables()); - associationsToExport.addAll(getDbMeta().getDataAssociations()); - } - - if (model.isComputeSteps()) { - - int nbSteps = tablesToExport.size() + associationsToExport.size(); - - if (exportVoyagesByVisitor) { - nbSteps += model.getVoyageIds().length; - } - - if (log.isInfoEnabled()) { - log.info("NB steps: " + nbSteps); - } - model.setNbSteps(nbSteps); - } - - exportTables(model, dir, tablesToExport, exportService); - - exportAssociations(model, dir, associationsToExport, exportService); - - if (exportVoyagesByVisitor) { - - exportVoyages(model, dir, exportService); - } - - EchoBaseIOUtil.compressZipFile(zipFile, dir); - } - - private void exportTables(ExportDbConfiguration model, - File dir, - List<TableMeta<EchoBaseEntityEnum>> tablesToExport, - ExportService exportService) { - for (TableMeta<EchoBaseEntityEnum> meta : tablesToExport) { - - model.incrementsProgress(); - - File entryFile = new File(dir, meta.getFilename()); - exportService.exportData(meta, entryFile); - } - } - - private void exportAssociations(ExportDbConfiguration model, - File dir, - List<AssociationMeta<EchoBaseEntityEnum>> associationsToExport, - ExportService exportService) { - for (AssociationMeta<EchoBaseEntityEnum> associationMeta : associationsToExport) { - - model.incrementsProgress(); - - File entryFile = new File(dir, associationMeta.getFilename()); - exportService.exportData(associationMeta, entryFile); - } - } - - private void exportVoyages(ExportDbConfiguration model, - File dir, - ExportService exportService) throws IOException { - - Map<EchoBaseEntityEnum, TopiaCsvExports.EntityExportContext<EchoBaseEntityEnum>> contexts = - TopiaCsvExports.createReplicateEntityVisitorContexts( - exportService.getModelFactory(false), - getDbMeta().getDataTables(), - getDbMeta().getDataAssociations(), - dir); - - ReplicateEntityVisitor visitor = new ReplicateEntityVisitor( - getDbMeta().getPersistenceHelper(), - contexts); - - try { - for (String voyageId : model.getVoyageIds()) { - - model.incrementsProgress(); - - Voyage voyage = getEntityById(Voyage.class, voyageId); - visitor.export(voyage); - } - } finally { - - // close visitor to close export files - visitor.close(); - } - } - - /** - * entity visitor to export data to csv files. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ - static class ReplicateEntityVisitor extends ExportEntityVisitor<EchoBaseEntityEnum> { - - protected final Set<String> categoryIds; - - public ReplicateEntityVisitor(TopiaPersistenceHelper<EchoBaseEntityEnum> typeProvider, - Map<EchoBaseEntityEnum, TopiaCsvExports.EntityExportContext<EchoBaseEntityEnum>> entityExporters) { - super(typeProvider, entityExporters); - categoryIds = Sets.newHashSet(); - } - - @Override - public void visit(TopiaEntity entity, String propertyName, - Class<?> type, Object value) { - if (Result.PROPERTY_CATEGORY.equals(propertyName) && - entity instanceof Result) { - - // export category - try { - TopiaEntity topiaEntity = (TopiaEntity) value; - if (categoryIds.add(topiaEntity.getTopiaId())) { - // add this new category - topiaEntity.accept(this); - } - - } catch (TopiaException e) { - if (log.isErrorEnabled()) { - log.error("Can not visit entity " + value, e); - } - } - } - } - - @Override - protected void visitEntityCollection(TopiaEntity entity, - String propertyName, - Class<?> collectionType, - Class<?> type, - Collection<?> cValue) { - if (Voyage.PROPERTY_POST_CELL.equals(propertyName) && entity instanceof Voyage) { - - // special case, we don not want to visit childs of cells - for (Object o : cValue) { - Cell cell = (Cell) o; - - cell.acceptWithNoChild(this); - } - } else { - // normal entity collection visit - super.visitEntityCollection(entity, - propertyName, - collectionType, - type, - cValue); - } - } - - @Override - public void close() throws IOException { - categoryIds.clear(); - super.close(); - } - } -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportService.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,209 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.exportdb; - -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.DbEditorService; -import fr.ifremer.echobase.services.DecoratorService; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.csv.EntityCsvModel; -import org.nuiton.topia.persistence.csv.out.EntityAssociationExportModel; -import org.nuiton.topia.persistence.csv.out.ExportModelFactory; -import org.nuiton.topia.persistence.csv.out.PrepareDataForExport; -import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; -import org.nuiton.topia.persistence.metadata.AssociationMeta; -import org.nuiton.topia.persistence.metadata.ColumnMeta; -import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.csv.ExportModel; -import org.nuiton.decorator.Decorator; - -import java.io.File; - -/** - * To export datas from db to csv files. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public class ExportService extends EchoBaseServiceSupport { - - /** Logger. */ - private static final Log log = LogFactory.getLog(ExportService.class); - - public String exportData(TableMeta<EchoBaseEntityEnum> meta, boolean asSeen) { - - if (log.isInfoEnabled()) { - log.info("Export " + meta); - } - String result = TopiaCsvExports.exportData(meta, - getModelFactory(asSeen), - defaultPrepareDataForExport); - return result; - } - - public void exportData(TableMeta<EchoBaseEntityEnum> meta, File file) { - - if (log.isInfoEnabled()) { - log.info("Export " + meta + " to " + file); - } - - TopiaCsvExports.exportData(meta, - defaultExportFactory, - defaultPrepareDataForExport, - file); - - clearCache(); - } - - - public void exportData(AssociationMeta<EchoBaseEntityEnum> meta, File file) { - - if (log.isInfoEnabled()) { - log.info("Export " + meta + " to " + file); - } - TopiaCsvExports.exportData(meta, - defaultExportFactory, - defaultPrepareDataForExport, - file); - - clearCache(); - } - - public ExportModelFactory<EchoBaseEntityEnum> getModelFactory(boolean asSeen) { - ExportModelFactory<EchoBaseEntityEnum> result; - if (asSeen) { - result = asSeenExportFactory; - } else { - result = defaultExportFactory; - } - return result; - } - - private ExportModelFactory<EchoBaseEntityEnum> defaultExportFactory = new ExportModelFactory<EchoBaseEntityEnum>() { - - @Override - public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta) { - - // normal export add topiaId column - EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( - getConfiguration().getCsvSeparator(), - meta, - TopiaEntity.PROPERTY_TOPIA_ID - ); - - for (ColumnMeta columnMeta : meta) { - String propertyName = columnMeta.getName(); - Class<?> type = columnMeta.getType(); - if (columnMeta.isFK()) { - - Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; - - - // export foreign key value as his topiaId - model.addForeignKeyForExport(propertyName, entityType); - - } else { - model.addDefaultColumn(propertyName, type); - } - } - return model; - } - - @Override - public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { - ExportModel<E> model = EntityAssociationExportModel.newExportModel( - getConfiguration().getCsvSeparator(), - associationMeta - ); - return model; - } - }; - - private ExportModelFactory<EchoBaseEntityEnum> asSeenExportFactory = new ExportModelFactory<EchoBaseEntityEnum>() { - - @Override - public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta) { - - - // no need to have topiaId as first column - EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( - getConfiguration().getCsvSeparator(), - meta - ); - - - DecoratorService service = getService(DecoratorService.class); - - for (ColumnMeta columnMeta : meta) { - String propertyName = columnMeta.getName(); - Class<?> type = columnMeta.getType(); - if (columnMeta.isFK()) { - - Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; - - // export decorated foreign key value - Decorator<TopiaEntity> decorator = - service.getDecorator(getLocale(), entityType, null); - model.addDecoratedForeignKeyForExport(propertyName, propertyName, decorator); - - } else { - model.addDefaultColumn(propertyName, type); - } - } - return model; - } - - @Override - public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { - ExportModel<E> model = EntityAssociationExportModel.newExportModel( - getConfiguration().getCsvSeparator(), - associationMeta - ); - return model; - } - }; - - private PrepareDataForExport<EchoBaseEntityEnum> defaultPrepareDataForExport = new PrepareDataForExport<EchoBaseEntityEnum>() { - - @Override - public <E extends TopiaEntity> Iterable<E> prepareData(TableMeta<EchoBaseEntityEnum> tableMeta) { - DbEditorService service = getService(DbEditorService.class); - - Iterable<E> data = service.iterateOnEntities(tableMeta, null); - return data; - } - - @Override - public <E extends TopiaEntity> Iterable<E> prepareData(AssociationMeta<EchoBaseEntityEnum> associationMeta) { - DbEditorService service = getService(DbEditorService.class); - - TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(associationMeta.getSource()); - Iterable<E> data = service.iterateOnEntities(tableMeta, "size(e." + associationMeta.getName() + ") > 0"); - return data; - } - }; -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryCsvModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryCsvModel.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryCsvModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,49 +0,0 @@ -package fr.ifremer.echobase.services.exportquery; - -/* - * #%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% - */ - -import fr.ifremer.echobase.csv.EchoBaseCsvUtil; -import org.nuiton.csv.ext.AbstractExportModel; - -import java.util.Map; - -/** - * Csv model to export sql in {@link ExportQueryService}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public class ExportQueryCsvModel extends AbstractExportModel<Map<String, Object>> { - - public ExportQueryCsvModel(char separator, String[] columnHeaders) { - super(separator); - for (String columnHeader : columnHeaders) { - newColumnForExport( - columnHeader, - EchoBaseCsvUtil.TO_STRING_FORMATTER - ); - } - } - -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryInvalidNameException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryInvalidNameException.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryInvalidNameException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,35 +0,0 @@ -package fr.ifremer.echobase.services.exportquery; - -/* - * #%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% - */ - -/** - * To be thrown if a query has not a valid query name. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.4 - */ -public class ExportQueryInvalidNameException extends Exception { - - private static final long serialVersionUID = 1L; -} \ No newline at end of file Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNameAlreadyExistException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNameAlreadyExistException.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNameAlreadyExistException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,35 +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.exportquery; - -/** - * TODO - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class ExportQueryNameAlreadyExistException extends Exception { - - private static final long serialVersionUID = 1L; -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNotFoundException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNotFoundException.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNotFoundException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,35 +0,0 @@ -package fr.ifremer.echobase.services.exportquery; - -/* - * #%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% - */ - -/** - * When a export query is not found. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.4 - */ -public class ExportQueryNotFoundException extends Exception { - - private static final long serialVersionUID = 1L; -} \ No newline at end of file Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryService.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,243 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.exportquery; - -import com.google.common.base.Charsets; -import fr.ifremer.echobase.EchoBaseTechnicalException; -import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.entities.ExportQueries; -import fr.ifremer.echobase.entities.ExportQuery; -import fr.ifremer.echobase.entities.ExportQueryDAO; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import org.apache.commons.lang3.StringUtils; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.pager.TopiaPagerBean; -import org.nuiton.util.RecursiveProperties; -import org.nuiton.csv.Export; - -import java.util.List; -import java.util.Map; - -/** - * Service to deal with sql export. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public class ExportQueryService extends EchoBaseServiceSupport { - - public ExportQuery getExportQuery(String topiaId) throws ExportQueryNotFoundException { - ExportQuery exportQuery = getEntityById(ExportQuery.class, topiaId); - - if (exportQuery == null) { - throw new ExportQueryNotFoundException(); - } - ExportQuery entityToSave = newExportQuery(); - entityToSave.setTopiaId(exportQuery.getTopiaId()); - entityToSave.setName(exportQuery.getName()); - entityToSave.setDescription(exportQuery.getDescription()); - entityToSave.setSqlQuery(exportQuery.getSqlQuery()); - entityToSave.setLastModifiedDate(exportQuery.getLastModifiedDate()); - entityToSave.setLastModifiedUser(exportQuery.getLastModifiedUser()); - return entityToSave; - } - - - public ExportQuery createOrUpdate(ExportQuery exportQuery, - EchoBaseUser user) throws ExportQueryNameAlreadyExistException, ExportQueryInvalidNameException { - try { - - ExportQueryDAO dao = getDAO(); - - // No id, creating new one entity - String id = exportQuery.getTopiaId(); - - boolean mustCreate = StringUtils.isEmpty(id); - - String queryName = exportQuery.getName(); - - if (!ExportQueries.isQueryNameValid(queryName)) { - - // can not accept a non alpha numeric name - throw new ExportQueryInvalidNameException(); - } - - // check query does not already exists with this name - if (mustCreate) { - - boolean queryExists = dao.isQueryExists(id, queryName); - - if (queryExists) { - throw new ExportQueryNameAlreadyExistException(); - } - } - - ExportQuery entityToSave; - - exportQuery.setLastModifiedDate(newDate()); - exportQuery.setLastModifiedUser(user.getEmail()); - - if (mustCreate) { - entityToSave = dao.create(exportQuery); - } else { - entityToSave = dao.findByTopiaId(id); - entityToSave.setName(queryName); - entityToSave.setDescription(exportQuery.getDescription()); - entityToSave.setSqlQuery(exportQuery.getSqlQuery()); - entityToSave.setLastModifiedDate(exportQuery.getLastModifiedDate()); - entityToSave.setLastModifiedUser(exportQuery.getLastModifiedUser()); - } - -// dao.update(entityToSave); - commitInternalTransaction("Could not create export query"); - return entityToSave; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(eee); - } - } - - public void delete(String topiaId) { - try { - ExportQueryDAO dao = getDAO(); - - ExportQuery entityToDelete = dao.findByTopiaId(topiaId); - dao.delete(entityToDelete); - - commitInternalTransaction("Could not delete export query"); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException(eee); - } - } - - public String getSqlQuery(String queryId) throws ExportQueryNotFoundException { - - ExportQuery exportQuery = getExportQuery(queryId); - - String result = getSafeSql(exportQuery.getSqlQuery()); - return result; - } - - protected String getSafeSql(String sql) { - RecursiveProperties sqls = new RecursiveProperties(); - List<ExportQuery> queries = getEntities(ExportQuery.class); - for (ExportQuery query : queries) { - sqls.put(query.getName(), query.getSqlQuery()); - } - if (!sqls.containsKey(sql)) { - - sqls.put(sql, sql); - } - - String result = sqls.getProperty(sql); - return result; - } - - public void testSql(String sql) throws TopiaException { - - String safeSql = getSafeSql(sql); - GenericSQLQuery sqlQuery = new GenericSQLQuery(safeSql, null); - - sqlQuery.getColumnNames(getTransaction()); - } - - public Map<String, Object>[] executeExportquery(String queryId, - TopiaPagerBean pager) throws ExportQueryNotFoundException { - - String sql = getSqlQuery(queryId); - - // get a query to count all rows for the request - GenericSQLQuery sqlQuery = new GenericSQLQuery(sql, pager); - try { - List<Map<String, Object>> result = - sqlQuery.getResult(getTransaction()); - return result.toArray(new Map[result.size()]); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException( - "Could not execute sql query", eee); - } - } - - public String[] getColumnNames(String sql) { - - String limitSql = sql.trim(); - if (limitSql.endsWith(";")) { - limitSql = limitSql.substring(0, limitSql.length() - 1); - limitSql += " LIMIT 1"; - } - try { - // do a limit query to one result and obtain the column names - // from the meta data of the result set - GenericSQLQuery sqlQuery = new GenericSQLQuery(limitSql, null); - String[] result = sqlQuery.getColumnNames(getTransaction()); - return result; - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException( - "Could not execute query " + limitSql + " for reason " + eee.getCause().getMessage(), eee); - } catch (Exception eee) { - throw new EchoBaseTechnicalException( - "Could not execute query " + limitSql + " for reason " + eee.getMessage(), eee); - } - } - - public String createCsvFileContent(String queryId) throws ExportQueryNotFoundException { - - String sql = getSqlQuery(queryId); - - GenericSQLQuery sqlQuery = new GenericSQLQuery(sql, null); - List<Map<String, Object>> rows; - try { - rows = sqlQuery.getResult(getTransaction()); - } catch (TopiaException eee) { - throw new EchoBaseTechnicalException( - "Could not execute sql query", eee); - } - char csvSeparator = getConfiguration().getCsvSeparator(); - ExportQueryCsvModel csvModel = sqlQuery.generateCsvModel(csvSeparator); - Export<Map<String, Object>> exporter = Export.newExport(csvModel, rows); - try { - String content = exporter.toString(Charsets.UTF_8); - return content; - } catch (Exception eee) { - throw new EchoBaseTechnicalException("Could not export sql", eee); - } - } - - public ExportQuery newExportQuery() { - try { - return getDAO().newInstance(); - } catch (TopiaException e) { - throw new EchoBaseTechnicalException(e); - } - } - - public String processLibreOfficeSqlQuery(String libreOfficeQuery) { - - String result = libreOfficeQuery.replaceAll("\\\"", ""); - return result; - } - - protected ExportQueryDAO getDAO() { - return getDAO(ExportQuery.class, ExportQueryDAO.class); - } -} Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/GenericSQLQuery.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/GenericSQLQuery.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/GenericSQLQuery.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,138 +0,0 @@ -package fr.ifremer.echobase.services.exportquery; - -/* - * #%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% - */ - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.framework.TopiaSQLQuery; -import org.nuiton.util.PagerBean; -import org.nuiton.util.PagerBeanUtil; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; -import java.util.Map; - -/** - * TODO - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0 - */ -public class GenericSQLQuery extends TopiaSQLQuery<Map<String, Object>> { - - /** Logger. */ - private static final Log log = LogFactory.getLog(GenericSQLQuery.class); - - protected String[] columnNames; - - private final String sql; - - private final PagerBean pager; - - public GenericSQLQuery(String sql, PagerBean pager) { - this.sql = sql; - this.pager = pager; - } - - public String[] getColumnNames() { - return columnNames; - } - - public ExportQueryCsvModel generateCsvModel(char charSeparator) { - ExportQueryCsvModel model = new ExportQueryCsvModel( - charSeparator, - columnNames - ); - return model; - } - - public List<Map<String, Object>> getResult(TopiaContext tx) throws TopiaException { - List<Map<String, Object>> rows = - findMultipleResult(tx); - return rows; - } - - public void testQuery(TopiaContext tx) throws TopiaException { - findSingleResult(tx); - } - - public String[] getColumnNames(TopiaContext tx) throws TopiaException { - findSingleResult(tx); - return columnNames; - } - - @Override - protected PreparedStatement prepareQuery(Connection connection) throws SQLException { - return connection.prepareStatement( - sql, - ResultSet.TYPE_SCROLL_INSENSITIVE, - ResultSet.CONCUR_READ_ONLY - ); - } - - @Override - protected void afterExecuteQuery(ResultSet set) throws SQLException { - super.afterExecuteQuery(set); - - // obtain columnNames - columnNames = getColumnNames(set); - - if (pager != null) { - - // must count rows - long nbRows = getNbRows(set); - if (log.isInfoEnabled()) { - log.info("For request " + sql + ", nb rows = " + nbRows); - } - pager.setRecords(nbRows); - PagerBeanUtil.computeRecordIndexesAndPagesNumber(pager); - } - } - - @Override - protected Map<String, Object> prepareResult(ResultSet set) throws SQLException { - - if (pager != null) { - - // get row number (getRow() begins at 1) - int rowNumber = set.getRow() - 1; - if (rowNumber < pager.getRecordStartIndex() || - rowNumber >= pager.getRecordEndIndex()) { - - // out of pager bound, by returning null - // result will not be take in account - return null; - } - } - - Map<String, Object> result = getRowAsMap(columnNames, set); - return result; - } - -} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DbEditorService.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DbEditorService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DbEditorService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,785 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service; + +import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.csv.EchoBaseCsvUtil; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EntityModificationLog; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ExportModel; +import org.nuiton.csv.ExportableColumn; +import org.nuiton.csv.ImportExportModel; +import org.nuiton.csv.ImportableColumn; +import org.nuiton.decorator.Decorator; +import org.nuiton.decorator.JXPathDecorator; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.csv.EntityCsvModel; +import org.nuiton.topia.persistence.metadata.ColumnMeta; +import org.nuiton.topia.persistence.metadata.DbMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.topia.persistence.pager.FilterRule; +import org.nuiton.topia.persistence.pager.FilterRuleGroupOperator; +import org.nuiton.topia.persistence.pager.FilterRuleOperator; +import org.nuiton.topia.persistence.pager.TopiaPagerBean; +import org.nuiton.util.PagerBeanUtil; +import org.nuiton.util.beans.BeanMonitor; +import org.nuiton.util.beans.PropertyDiff; + +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static org.nuiton.i18n.I18n.l_; + +/** + * Service to edit the database. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class DbEditorService extends EchoBaseServiceSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DbEditorService.class); + + public <E extends TopiaEntity> List<E> getForeignData(Class<E> entityType) { + Preconditions.checkNotNull(entityType); + try { + TopiaDAO<E> dao = getEchoBasePersistenceContext().getDAO(entityType); + + List<E> result = dao.findAll(); + return result; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException("Could not obtain data", eee); + } + } + + public TableMeta<EchoBaseEntityEnum> getTableMeta(EchoBaseEntityEnum tableName) { + DbMeta<EchoBaseEntityEnum> dbMeta = getDbMeta(); + TableMeta<EchoBaseEntityEnum> result = dbMeta.getTable(tableName); + return result; + } + + public Map<?, ?>[] getData(EchoBaseEntityEnum type, TopiaPagerBean pager) { + + TableMeta<EchoBaseEntityEnum> meta = getTableMeta(type); + + List<TopiaEntity> entities = getEntities(meta, pager); + + Map<?, ?>[] rows = new Map[entities.size()]; + + ExportModel<TopiaEntity> model = buildForLoad(meta, "id", true); + + int i = 0; + for (Object o : entities) { + TopiaEntity entity = (TopiaEntity) o; + Map<String, Object> row = loadRow(entity, model); + rows[i++] = row; + } + return rows; + } + + public <E extends TopiaEntity> List<E> getEntities(TableMeta<EchoBaseEntityEnum> tableMeta, + TopiaPagerBean pager) { + + EchoBaseEntityEnum entityEnum = tableMeta.getSource(); + try { + TopiaDAO<E> dao = (TopiaDAO<E>) getEchoBasePersistenceContext().getDAO(entityEnum.getContract()); + + List<Object> paramsList = Lists.newArrayList(); + + String hql = dao.createSimpleQuery("e"); + + if (pager != null && pager.canFilter()) { + String filterHql = getFilterHql(tableMeta, pager, paramsList); + hql += " WHERE " + filterHql; + } + + Object[] params = paramsList.toArray(); + + if (log.isInfoEnabled()) { + log.info("filterHql = " + hql + "\n" + Joiner.on('\n').join(params)); + } + + + long count = dao.countByQuery("SELECT COUNT(*) " + hql, params); + + if (pager != null) { + + pager.setRecords(count); + PagerBeanUtil.computeRecordIndexesAndPagesNumber(pager); + } + + List<E> result = dao.findAllByQueryAndPager(hql, pager, params); + return result; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException("Could not obtain data", eee); + } + } + + public <E extends TopiaEntity> Iterable<E> iterateOnEntities(TableMeta<EchoBaseEntityEnum> tableMeta, + String extraWhereQuery) { + + try { + TopiaDAO<E> dao = (TopiaDAO<E>) getEchoBasePersistenceContext().getDAO(tableMeta.getSource().getContract()); + + String hql = "FROM " + + dao.getTopiaEntityEnum().getImplementationFQN() + " e"; + if (extraWhereQuery != null) { + hql += " WHERE " + extraWhereQuery; + } + hql += " ORDER BY e.id"; + Iterable<E> result = dao.findAllLazyByQuery(5000, hql); + return result; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException("Could not obtain data", eee); + } + } + + public Map<?, ?> getData(TableMeta<EchoBaseEntityEnum> tableMeta, String topiaId) { + + EchoBaseEntityEnum entityEnum = tableMeta.getSource(); + try { + TopiaDAO<?> dao = getEchoBasePersistenceContext().getDAO(entityEnum.getContract()); + TopiaEntity entity = dao.findByTopiaId(topiaId); + ExportModel<TopiaEntity> model = buildForLoad(tableMeta, TopiaEntity.PROPERTY_TOPIA_ID, true); + return loadRow(entity, model); + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException("Could not obtain data", eee); + } + } + + public <E extends TopiaEntity> void decorateForeignKey( + Map data, + Class<E> propertyType, + String property, + String decoratorContext) { + + DecoratorService decoratorService = + serviceContext.newService(DecoratorService.class); + + E mission = getEchoBasePersistenceContext().getEntityById(propertyType, (String) data.get(property)); + String voyageToString = decoratorService.decorate(getLocale(), mission, decoratorContext); + data.put(property + "_lbl", voyageToString); + } + + public void saveEntity(TableMeta<EchoBaseEntityEnum> meta, + Map<String, String> properties, + EchoBaseUser user) { + + // transform properties entity + ImportExportModel<TopiaEntity> model = buildForSave(meta); + + TopiaEntity entity = model.newEmptyInstance(); + + for (ImportableColumn<TopiaEntity, Object> column : model.getColumnsForImport()) { + String propertyName = column.getHeaderName(); + String stringValue = properties.get(propertyName); + Object o; + try { + o = column.parseValue(stringValue); + } catch (Exception e) { + throw new EchoBaseTechnicalException("Could not parse property [" + propertyName + "] with value " + stringValue, e); + } + try { + column.setValue(entity, o); + } catch (Exception e) { + throw new EchoBaseTechnicalException( + "Could not set property [" + propertyName + "] with value " + stringValue + " to entity " + entity, e); + } + } + + saveEntity(meta, + "Modification utilisateur", + entity, + user, + false + ); + getEchoBasePersistenceContext().commitTransaction(); + } + + public boolean saveEntity(TableMeta<EchoBaseEntityEnum> tableMeta, + String messagePrefix, + TopiaEntity entity, + EchoBaseUser user, + boolean createIfNotFound) { + String[] columnNames = tableMeta.getColumnNamesAsArray(); + BeanMonitor monitor = null; + + String id = entity.getTopiaId(); + + try { + TopiaDAO<?> dao = getEchoBasePersistenceContext().getDAO(tableMeta.getSource().getContract()); + + TopiaEntity entityToSave; + + // Find or create entity if no id + boolean create = StringUtils.isEmpty(id); + + if (create) { + + // get naturalIds or not-null properties + Map<String, Object> properties = + tableMeta.prepareCreate(entity, null); + + entityToSave = dao.create(properties); + + // push back topiaId (could be used by caller) + entity.setTopiaId(entityToSave.getTopiaId()); + + } else { + + entityToSave = dao.findByTopiaId(id); + if (entityToSave == null) { + + if (!createIfNotFound) { + + // this is an error + throw new EchoBaseTechnicalException( + "Could not found entity with id " + id); + } else { + entityToSave = dao.create(TopiaEntity.PROPERTY_TOPIA_ID, id); + create = true; + } + } + } + + if (user != null && !create) { + + // monitor the existing bean + monitor = new BeanMonitor(columnNames); + monitor.setBean(entityToSave); + } + + tableMeta.copy(entity, entityToSave); + + if (user != null) { + + createEntityModificationLog( + tableMeta, + messagePrefix, + entityToSave, + user, + monitor + ); + } + return create; + } catch (Exception eee) { + throw new EchoBaseTechnicalException("Could not update entity", eee); + } finally { + if (monitor != null) { + monitor.setBean(null); + } + } + } + + protected <O> Decorator<O> getDecorator(Class<O> type) { + return getDecoratorService().getDecorator(getLocale(), type, null); + } + + protected String getFilterHql(TableMeta<EchoBaseEntityEnum> tableMeta, + TopiaPagerBean pager, + List<Object> params) { + Preconditions.checkNotNull(pager); + Preconditions.checkState(pager.canFilter()); + + String filterHql = null; + + Map<String, Object> filterParams = Maps.newHashMap(); + + List<String> strFilterRules = Lists.newLinkedList(); + + long timestamp = System.currentTimeMillis(); + int index = 0; + for (FilterRule rule : pager.getRules()) { + String ruleFilter; + + String field = rule.getField(); + + ColumnMeta columnMeta = tableMeta.getColumns(field); + Preconditions.checkNotNull(columnMeta, + "no property named " + columnMeta); + + FilterRuleOperator op = rule.getOp(); + String data = rule.getData(); + String paramName = field + "_" + timestamp + (index++); + String propertyName = "e." + field; + Object realData = data; + if (columnMeta.isFK()) { + + if (op == FilterRuleOperator.nu || op == FilterRuleOperator.nn) { + + // is null or is not null is a simple case + + ruleFilter = op.toHql(propertyName, + propertyName, + data, + filterParams); + } else { + // must do a select in using the decoration pattern + JXPathDecorator<?> decorator = + (JXPathDecorator<?>) getDecorator(columnMeta.getType()); + + if (decorator.getNbToken() == 1) { + + String fName = "f_" + timestamp + (index++); + + // simple case one token + String token = fName + "." + decorator.getProperty(0); + + String subQuery = op.toHql(paramName, + token, + data, + filterParams); + + ruleFilter = propertyName + " IN ( FROM " + + columnMeta.getType().getName() + " " + + fName + " WHERE " + subQuery + ")"; + } else { + + throw new UnsupportedOperationException(); + } + } + + } else { + + if (columnMeta.isNumber()) { + + if (op == FilterRuleOperator.cn || + op == FilterRuleOperator.nc || + op == FilterRuleOperator.bw || + op == FilterRuleOperator.bn || + op == FilterRuleOperator.ew || + op == FilterRuleOperator.en) { + + // string operation + +// realData = "'" + realData + "'"; + propertyName = "str(" + propertyName + ")"; + } else { + + // real number operation + + if (columnMeta.getType() == int.class || + columnMeta.getType() == Integer.class) { + realData = Integer.valueOf(data); + } else { + + realData = Double.valueOf(data); + } + } + } else if (columnMeta.isDate()) { + propertyName = "str(" + propertyName + ")"; + } + ruleFilter = op.toHql(paramName, + propertyName, + realData, + filterParams); + } + + strFilterRules.add("(" + ruleFilter + ")"); + + if (CollectionUtils.isNotEmpty(strFilterRules)) { + FilterRuleGroupOperator groupOp = + pager.getGroupOp(); + filterHql = StringUtils.join(strFilterRules, groupOp.name()); + } + + for (Map.Entry<String, Object> entry : filterParams.entrySet()) { + params.add(entry.getKey()); + params.add(entry.getValue()); + } + } + return filterHql; + } + + protected void createEntityModificationLog(TableMeta<EchoBaseEntityEnum> tableMeta, + String messagePrefix, + TopiaEntity entity, + EchoBaseUser user, + BeanMonitor monitor) throws TopiaException { + + StringBuilder buffer; + + String topiaId = entity.getTopiaId(); + + buffer = new StringBuilder(messagePrefix).append('\n'); + Locale l = getLocale(); + if (monitor == null) { + + // no monitor, means this is a creation of an object + buffer.append(l_(l, "echobase.info.newEntityCreated", topiaId)); + } else { + + PropertyDiff[] propertyDiffs = monitor.getPropertyDiffs(); + + int length = propertyDiffs.length; + + if (length == 0) { + + // no property modified, do nothing + return; + } + + if (length == 1) { + buffer.append(l_(l, "echobase.info.onePropertyModified")); + } else { + buffer.append( + l_(l, "echobase.info.somePropertiesModified", length)); + } + for (PropertyDiff diff : propertyDiffs) { + + Object sourceValue = diff.getSourceValue(); + Object targetValue = diff.getTargetValue(); + + String propertyName = diff.getSourceProperty(); + + if (tableMeta.getColumns(propertyName).isFK()) { + + // replace by the decorate value + if (sourceValue != null) { + sourceValue = getDecoratorService().decorate( + l, sourceValue, null); + } + if (targetValue != null) { + targetValue = getDecoratorService().decorate( + l, targetValue, null); + } + } + buffer.append("\n "); + buffer.append( + l_(l, "echobase.info.modifiedProperty", propertyName, + sourceValue, + targetValue)); + } + } + + getEchoBasePersistenceContext().getEntityModificationLogDAO().create( + EntityModificationLog.PROPERTY_ENTITY_TYPE, tableMeta.getSource().name(), + EntityModificationLog.PROPERTY_ENTITY_ID, topiaId, + EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), + EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, buffer.toString() + ); + } + + protected <E extends TopiaEntity> Map<String, Object> loadRow( + E entity, + ExportModel<E> loadModel) { + + Map<String, Object> row = Maps.newLinkedHashMap(); + + Iterable<ExportableColumn<E, Object>> columns = + loadModel.getColumnsForExport(); + + for (ExportableColumn<E, Object> column : columns) { + String propertyName = column.getHeaderName(); + Object value; + try { + value = column.getValue(entity); + } catch (Exception eee) { + throw new EchoBaseTechnicalException( + "Could not obtain property [" + propertyName + + "] value from entity " + entity.getTopiaId(), eee); + } + String formatedValue; + try { + formatedValue = column.formatValue(value); + } catch (Exception eee) { + throw new EchoBaseTechnicalException( + "Could not format property [" + propertyName + + "] from value [" + value + + "] from entity " + entity.getTopiaId(), eee); + } + row.put(propertyName, formatedValue); + + } + return row; + } + + protected <E extends TopiaEntity> ImportExportModel<E> buildForSave(TableMeta<EchoBaseEntityEnum> meta) { + + EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( + getConfiguration().getCsvSeparator(), + meta, + TopiaEntity.PROPERTY_TOPIA_ID + ); + + for (ColumnMeta columnMeta : meta) { + String propertyName = columnMeta.getName(); + Class<?> type = columnMeta.getType(); + if (columnMeta.isFK()) { + + Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; + Collection<TopiaEntity> universe = getForeignData(entityType); + + // translate foreign key to his id + model.addForeignKeyForImport(propertyName, entityType, universe); + + } else if (Date.class.equals(type)) { + model.newMandatoryColumn( + propertyName, + EchoBaseCsvUtil.DATE_TIME_VALUE_PARSER); + } else { + model.addDefaultColumn(propertyName, type); + } + } + return model; + } + + protected <E extends TopiaEntity> ExportModel<E> buildForLoad(TableMeta<EchoBaseEntityEnum> meta, + String idName, + boolean addDecorated) { + + EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( + getConfiguration().getCsvSeparator(), + meta, + idName + ); + + for (ColumnMeta columnMeta : meta) { + String propertyName = columnMeta.getName(); + Class<?> type = columnMeta.getType(); + if (columnMeta.isFK()) { + + Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; + + // translate foreign key to his id + model.addForeignKeyForExport(propertyName, entityType); + + if (addDecorated) { + + // translate foreign key to his decorated value + Decorator<TopiaEntity> decorator = getDecorator(entityType); + model.addDecoratedForeignKeyForExport( + propertyName + "_lib", + propertyName, + decorator + ); + } + + } else if ("id".equals(propertyName)) { + + if ("id".equals(idName)) { + + // there will be a conflict with this meta, rename it to ID + model.addDefaultColumn("ID", propertyName, type); + } else { + + // no id conflict + model.addDefaultColumn(propertyName, type); + + } + } else if ("importId".equals(propertyName) && + Collection.class.equals(type)) { + + // special case we do not want to deal with {@link ImportLog#importId} + } else { + model.addDefaultColumn(propertyName, type); + } + } + return model; + } + +// public <E extends TopiaEntity> List<E> getEntities(TableMeta<EchoBaseEntityEnum> tableMeta, TopiaPagerBean pager) { +// +// //TODO-tchemit-2012-08-19 Replace TopiaQuery with simple hql query +// List<E> result; +// EchoBaseEntityEnum entityEnum = tableMeta.getSource(); +// try { +// TopiaDAO<E> dao = (TopiaDAO<E>) getDAO(entityEnum.getContract()); +// +// // first query to count datas +// TopiaQuery countQuery = dao.createQuery("e"); +// countQuery.addSelect("count(*)"); +// String filterHql = null; +// +// Map<String, Object> filterParams = Maps.newHashMap(); +// +// if (pager != null && pager.canFilter()) { +// +// DecoratorService decoratorService = getDecoratorService(); +// +// // prepare the filter hql code +// List<FilterRule> rules = pager.getRules(); +// List<String> strFilterRules = Lists.newLinkedList(); +// long timestamp = System.currentTimeMillis(); +// int index = 0; +// for (FilterRule rule : rules) { +// String ruleFilter; +// +// String field = rule.getField(); +// +// ColumnMeta columnMeta = tableMeta.getColumns(field); +// Preconditions.checkNotNull( +// columnMeta, "no property named " + columnMeta); +// +// FilterRuleOperator op = rule.getOp(); +// String data = rule.getData(); +// String paramName = field + "_" + timestamp + (index++); +// String propertyName = "e." + field; +// Object realData = data; +// if (columnMeta.isFK()) { +// +// // must do a select in using the decoration pattern +// +// JXPathDecorator<?> decorator = +// (JXPathDecorator<?>) decoratorService.getDecorator(getLocale(), +// columnMeta.getType(), +// null); +// +// if (decorator.getNbToken() == 1) { +// +// // simple case one token +// String token = "f." + decorator.getProperty(0); +// +// String subQuery = op.toHql(paramName, +// token, +// data, +// filterParams); +// +// ruleFilter = propertyName + " in ( SELECT f FROM " + columnMeta.getType().getName() + " f WHERE " + subQuery + ")"; +// } else { +// +// throw new UnsupportedOperationException(); +// } +// +// +// } else { +// +// if (columnMeta.isNumber()) { +// if (columnMeta.getType() == int.class || +// columnMeta.getType() == Integer.class) { +// realData = Integer.valueOf(data); +// } else { +// +// realData = Double.valueOf(data); +// } +// } else if (columnMeta.isDate()) { +// propertyName = "str(" + propertyName + ")"; +// } +// ruleFilter = op.toHql(paramName, +// propertyName, +// realData, +// filterParams); +// +// } +// +// strFilterRules.add("(" + ruleFilter + ")"); +// } +// +// if (CollectionUtils.isNotEmpty(strFilterRules)) { +// FilterRuleGroupOperator groupOp = +// pager.getGroupOp(); +// filterHql = StringUtils.join(strFilterRules, groupOp.name()); +// } +// } +// +// if (filterHql != null) { +// if (log.isInfoEnabled()) { +// log.info("filterHql = " + filterHql); +// } +// for (Map.Entry<String, Object> e : filterParams.entrySet()) { +// String paramName = e.getKey(); +// Object paramValue = e.getValue(); +// if (log.isInfoEnabled()) { +// log.info("filterParam = " + +// paramName + "/" + paramValue); +// } +// countQuery.addParam(paramName, paramValue); +// } +// countQuery.addWhere(filterHql); +// +// String fullQuery = countQuery.fullQuery(); +// if (log.isInfoEnabled()) { +// log.info("fullquery = " + fullQuery); +// } +// } +// +// int count = dao.countByQuery(countQuery); +// +// TopiaQuery query = dao.createQuery("e"); +// +// if (pager != null) { +// +// pager.setRecords(count); +// PagerBeanUtil.computeRecordIndexesAndPagesNumber(pager); +// +// long from = pager.getRecordStartIndex(); +// long to = pager.getRecordEndIndex(); +// +// if (log.isDebugEnabled()) { +// log.debug("Count = " + count); +// log.debug("page = " + pager.getPageIndex()); +// log.debug("pageSize = " + pager.getPageSize()); +// log.debug("from = " + from); +// log.debug("to = " + to); +// log.debug("pageCount= " + pager.getPagesNumber()); +// } +// +// if (filterHql != null) { +// for (Map.Entry<String, Object> entry : filterParams.entrySet()) { +// String paramName = entry.getKey(); +// Object paramValue = entry.getValue(); +// query.addParam(paramName, paramValue); +// } +// query.addWhere(filterHql); +// } +// +// String sidx = pager.getSortColumn(); +// boolean ascendantOrder = pager.isSortAscendant(); +// +// if (StringUtils.isNotEmpty(sidx)) { +// if (ascendantOrder) { +// query.addOrder(sidx); +// } else { +// query.addOrderDesc(sidx); +// } +// } +// +// query.setLimit((int) from, (int) to - 1); +// } +// +// dao.findAllByQueryAndPager("hql", pager, filterParams.toString()); +// result = dao.findAllByQuery(query); +// return result; +// } catch (TopiaException eee) { +// throw new EchoBaseTechnicalException("Could not obtain data", eee); +// } +// } +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DecoratorService.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DecoratorService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DecoratorService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,384 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import fr.ifremer.echobase.I18nAble; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.WorkingDbConfiguration; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.DataAcquisition; +import fr.ifremer.echobase.entities.data.DataProcessing; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.GearMetadataValue; +import fr.ifremer.echobase.entities.data.LengthAgeKey; +import fr.ifremer.echobase.entities.data.LengthWeightKey; +import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.OperationMetadataValue; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Sample; +import fr.ifremer.echobase.entities.data.SampleData; +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.AgeCategory; +import fr.ifremer.echobase.entities.references.AreaOfOperation; +import fr.ifremer.echobase.entities.references.Calibration; +import fr.ifremer.echobase.entities.references.CategoryMeaning; +import fr.ifremer.echobase.entities.references.CategoryRef; +import fr.ifremer.echobase.entities.references.CategoryType; +import fr.ifremer.echobase.entities.references.CellMethod; +import fr.ifremer.echobase.entities.references.CellType; +import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.entities.references.DataProtocol; +import fr.ifremer.echobase.entities.references.DataQuality; +import fr.ifremer.echobase.entities.references.DataType; +import fr.ifremer.echobase.entities.references.DepthStratum; +import fr.ifremer.echobase.entities.references.EchotypeCategory; +import fr.ifremer.echobase.entities.references.Gear; +import fr.ifremer.echobase.entities.references.GearCharacteristic; +import fr.ifremer.echobase.entities.references.GearCharacteristicValue; +import fr.ifremer.echobase.entities.references.GearMetadata; +import fr.ifremer.echobase.entities.references.Impacte; +import fr.ifremer.echobase.entities.references.MeasureType; +import fr.ifremer.echobase.entities.references.MeasurementMetadata; +import fr.ifremer.echobase.entities.references.Mission; +import fr.ifremer.echobase.entities.references.OperationEvent; +import fr.ifremer.echobase.entities.references.OperationMetadata; +import fr.ifremer.echobase.entities.references.ReferenceDatum; +import fr.ifremer.echobase.entities.references.ReferenceDatumType; +import fr.ifremer.echobase.entities.references.ReferencingMethod; +import fr.ifremer.echobase.entities.references.SampleDataType; +import fr.ifremer.echobase.entities.references.SampleType; +import fr.ifremer.echobase.entities.references.SexCategory; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.entities.references.SpeciesCategory; +import fr.ifremer.echobase.entities.references.Strata; +import fr.ifremer.echobase.entities.references.TSParameters; +import fr.ifremer.echobase.entities.references.Vessel; +import fr.ifremer.echobase.entities.references.VesselType; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.apache.commons.collections.CollectionUtils; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.decorator.Decorator; +import org.nuiton.decorator.DecoratorMulti18nProvider; +import org.nuiton.decorator.DecoratorUtil; +import org.nuiton.decorator.JXPathDecorator; + +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static org.nuiton.i18n.I18n._; + +/** + * Service to decorate entities. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class DecoratorService extends EchoBaseServiceSupport { + + public static final String DATE_ONLY = "dateOnly"; + + protected final DecoratorMulti18nProvider decoratorProvider; + + public DecoratorService() { + decoratorProvider = new EchoBaseDecoratorProvider(); + } + + public <O> Decorator<O> getDecorator(Locale locale, + Class<O> type, + String context) { + Preconditions.checkNotNull(type, "Decorator type can not be null!"); + Decorator<O> decorator = decoratorProvider.getDecoratorByType(locale, type, context); + Preconditions.checkNotNull( + decorator, + "Could not find decorator for type " + type + + " and context " + context + ); + return decorator; + } + + public String decorate(Locale locale, Object o, String context) { + Decorator<?> decorator = getDecorator(locale, o.getClass(), context); + String result = decorator.toString(o); + return result; + } + + public final <E extends Enum<E> & I18nAble> Map<String, String> decorateEnums(E... enumValues) { + Map<String, String> result = Maps.newLinkedHashMap(); + for (E enumValue : enumValues) { + result.put(enumValue.name(), _(enumValue.getI18nKey())); + } + return result; + } + + public <O> List<O> sortToList(Locale locale, Collection<O> beans, String context) { + Preconditions.checkNotNull(beans); + List<O> list = Lists.newArrayList(beans); + getDecoratorAndSort(locale, context, list); + return list; + } + + public <E extends TopiaEntity> Map<String, String> sortAndDecorate(Locale locale, + Collection<E> beans, + String context) { + Preconditions.checkNotNull(beans); + List<E> list = Lists.newArrayList(beans); + + Decorator<E> decorator = getDecoratorAndSort(locale, context, list); + Map<String, String> result = Maps.newLinkedHashMap(); + for (E bean : list) { + result.put(bean.getTopiaId(), decorator.toString(bean)); + } + return result; + } + + protected <O> Decorator<O> getDecoratorAndSort(Locale locale, + String context, + List<O> list) { + Decorator<O> decorator = null; + if (CollectionUtils.isNotEmpty(list)) { + O object = list.get(0); + Preconditions.checkNotNull(object); + decorator = decoratorProvider.getDecorator(locale, object, context); + Preconditions.checkNotNull( + decorator, + "Could not find decorator for type " + object.getClass() + + " and context " + context + ); + DecoratorUtil.sort((JXPathDecorator<O>) decorator, list, 0); + } + return decorator; + } + + static class EchoBaseDecoratorProvider extends DecoratorMulti18nProvider { + + @Override + protected void loadDecorators(Locale locale) { + + // EchoBaseUser decorator + registerJXPathDecorator(locale, EchoBaseUser.class, "${email}$s"); + + // ExportQuery decorator + registerJXPathDecorator(locale, ExportQuery.class, "${name}$s - ${description}$s"); + + // ImportLog decorator + registerJXPathDecorator(locale, ImportLog.class, "${importType}$s - ${importDate}$s - ${importText}$s"); + + // ImportLog decorator + registerJXPathDecorator(locale, ImportLog.class, DATE_ONLY, "${importDate}$s"); + + + // WorkingDbConfiguration decorator + registerJXPathDecorator(locale, WorkingDbConfiguration.class, "${url}$s - (${description}$s)"); + + // AcousticInstrument decorator + registerJXPathDecorator(locale, AcousticInstrument.class, "${id}$s"); + + // AgeCategory decorator + registerJXPathDecorator(locale, AgeCategory.class, "${name}$s"); + + // AreaOfOperation decorator + registerJXPathDecorator(locale, AreaOfOperation.class, "${name}$s"); + + // Calibration decorator + registerJXPathDecorator(locale, Calibration.class, "${date}$s - acquisition ${aquisitionMethod}$s"); + + // Category decorator + registerJXPathDecorator(locale, Category.class, "${echotypeLabel}$s ${speciesLabel}$s ${processedAgeLabel}$s ${processedLengthLabel}$s"); + + // CategoryMeaning decorator + registerJXPathDecorator(locale, CategoryMeaning.class, "${name}$s"); + + // CategoryRef decorator + registerJXPathDecorator(locale, CategoryRef.class, "${genusSpecies}$s"); + + // CategoryType decorator + registerJXPathDecorator(locale, CategoryType.class, "${name}$s"); + + // CellMethod decorator + registerJXPathDecorator(locale, CellMethod.class, "${name}$s"); + + // CellType decorator + registerJXPathDecorator(locale, CellType.class, "${name}$s"); + + // DataMetadata decorator + registerJXPathDecorator(locale, DataMetadata.class, "${name}$s - ${standardName}$s"); + //registerJXPathDecorator(locale, DataMetadata.class, "${name}$s"); + + // DataProtocol decorator + registerJXPathDecorator(locale, DataProtocol.class, "${description}$s [ ${validSince}$td/%2$tm/%2$tY - ${invalidSince}$td/%3$tm/%3$tY ]"); + + // DataQuality decorator + //registerJXPathDecorator(locale, DataQuality.class, "${qualityDataFlagValues}$s - ${flagMeanings}$s"); + registerJXPathDecorator(locale, DataQuality.class, "${flagMeanings}$s"); + + // DataType decorator + registerJXPathDecorator(locale, DataType.class, "${name}$s"); + + // DepthStratum decorator + //registerJXPathDecorator(locale, DepthStratum.class, "${id}$s - ${meaning}$s"); + registerJXPathDecorator(locale, DepthStratum.class, "${meaning}$s"); + + // Echotype decorator + //registerJXPathDecorator(locale, Echotype.class, "${id}$s - ${name}$s"); + registerJXPathDecorator(locale, Echotype.class, "${name}$s"); + + // EchotypeCategory decorator + registerJXPathDecorator(locale, EchotypeCategory.class, "${name}$s"); + + // Gear decorator + //registerJXPathDecorator(locale, Gear.class, "${name}$s [ ${validSince}$td/%2$tm/%2$tY - ${invalidSince}$td/%3$tm/%3$tY ]"); + registerJXPathDecorator(locale, Gear.class, "${name}$s"); + + // GearCaracteristic decorator + registerJXPathDecorator(locale, GearCharacteristic.class, "${name}$s"); + + // GearMetadata decorator + //registerJXPathDecorator(locale, GearMetadata.class, "${name}$s (${operationEvent/name}$s)"); + registerJXPathDecorator(locale, GearMetadata.class, "${name}$s"); + + // GearCharacteristicValue decorator + registerJXPathDecorator(locale, GearCharacteristicValue.class, "${dataValue}$s"); + + // GearMetadataValue decorator + registerJXPathDecorator(locale, GearMetadataValue.class, "${dataValue}$s"); + + // Impacte decorator + //registerJXPathDecorator(locale, Impacte.class, "${measurementUnit}$s - ${species/genusSpecies}"); + registerJXPathDecorator(locale, Impacte.class, "${measurementUnit}$s"); + + // LengthAgeKey decorator + registerJXPathDecorator(locale, LengthAgeKey.class, "Age ${age}$s - Length ${length}"); + + // MeasurementMetadata decorator + registerJXPathDecorator(locale, MeasurementMetadata.class, "${name}$s"); + + // MeasureType decorator + registerJXPathDecorator(locale, MeasureType.class, "${name}$s"); + + // Mission decorator + registerJXPathDecorator(locale, Mission.class, "${name}$s"); + + // OperationEvent decorator + registerJXPathDecorator(locale, OperationEvent.class, "${name}$s"); + + // OperationMetadata decorator + registerJXPathDecorator(locale, OperationMetadata.class, "${name}$s"); + + // ReferenceDatum decorator + registerJXPathDecorator(locale, ReferenceDatum.class, "${id}$s"); + + // ReferenceDatumType decorator + registerJXPathDecorator(locale, ReferenceDatumType.class, "${name}$s"); + + // ReferencingMethod decorator + registerJXPathDecorator(locale, ReferencingMethod.class, "${name}$s"); + + // SampleDataType decorator + registerJXPathDecorator(locale, SampleDataType.class, "${name}$s"); + + // SampleType decorator + //registerJXPathDecorator(locale, SampleType.class, "${name}$s - level ${level}$s"); + registerJXPathDecorator(locale, SampleType.class, "${name}$s"); + + // SexCategory decorator + registerJXPathDecorator(locale, SexCategory.class, "${name}$s"); + + // SizeCategory decorator + registerJXPathDecorator(locale, SizeCategory.class, "${name}$s"); + + // Species decorator + //registerJXPathDecorator(locale, Species.class, "${genusSpecies}$s (${baracoudaCode}$s)"); + registerJXPathDecorator(locale, Species.class, "${genusSpecies}$s"); + + // SpeciesCategory decorator + registerJXPathDecorator(locale, SpeciesCategory.class, "${species/genusSpecies}$s ${sizeCategoryLabel}$s ${ageCategoryLabel}$s ${sexCategoryLabel}$s"); + + // Strata decorator + registerJXPathDecorator(locale, Strata.class, "Latitude <${minLatitude}$s - ${maxLatitude}$s>, Longitude <${minLongitude}$s - ${maxLongitude}$s>"); + + //TODO + // TSParameters decorator + registerJXPathDecorator(locale, TSParameters.class, "${}$s"); + + // Vessel decorator + registerJXPathDecorator(locale, Vessel.class, "${name}$s"); + + // VesselType decorator + registerJXPathDecorator(locale, VesselType.class, "${name}$s"); + + // LengthWeightKey decorator + registerJXPathDecorator(locale, LengthWeightKey.class, "Species ${species/genusSpecies}$s - a=${aParameter}$s, b=${bParameter}$s"); + + // Cell decorator + registerJXPathDecorator(locale, Cell.class, "${name}$s"); + + // Data decorator + registerJXPathDecorator(locale, Data.class, "${dataValue}$s"); + + // DataAcquisition decorator + registerJXPathDecorator(locale, DataAcquisition.class, "${acousticInstrument/id}$s "); + + // DataProcessing decorator + registerJXPathDecorator(locale, DataProcessing.class, "${id}$s"); + + // Operation decorator + registerJXPathDecorator(locale, Operation.class, "${startDate}$td/%1$tm/%1$tY - ${endDate}$td/%2$tm/%2$tY"); + + // OperationMetadataValue decorator + registerJXPathDecorator(locale, OperationMetadataValue.class, "${operationMetadata/name} - ${dataValue}$s"); + + // Result decorator + registerJXPathDecorator(locale, Result.class, "${resultvalue}$s"); + + // Sample decorator + registerJXPathDecorator(locale, Sample.class, "${resultvalue}$s"); + + // SampleData decorator + registerJXPathDecorator(locale, SampleData.class, "${resultvalue}$s"); + + // Transect decorator + registerJXPathDecorator(locale, Transect.class, "${title}$s - Vessel ${vessel/name}$s"); + + // Transit decorator + registerJXPathDecorator(locale, Transit.class, "${startTime}$td/%1$tm/%1$tY - ${endTime}$td/%2$tm/%2$tY"); + + // Voyage decorator + registerJXPathDecorator(locale, Voyage.class, "${name}$s [ ${startDate}$td/%2$tm/%2$tY - ${endDate}$td/%3$tm/%3$tY ]"); + } + } + +} Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/InternalDbPersistenceService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/InternalDbPersistenceService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/InternalDbPersistenceService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,159 @@ +package fr.ifremer.echobase.services.service; + +import fr.ifremer.echobase.entities.AbstractTopiaEchoBaseInternalPersistenceContext; +import fr.ifremer.echobase.entities.EchoBaseInternalEntityEnum; +import fr.ifremer.echobase.entities.EchoBaseUserDAO; +import fr.ifremer.echobase.entities.ExportQueryDAO; +import fr.ifremer.echobase.entities.WorkingDbConfigurationDAO; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaIdFactory; + +import java.util.List; +import java.util.Map; +import java.util.Properties; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class InternalDbPersistenceService extends EchoBaseServiceSupport { + + + public void commitTransaction() { + getEchoBaseInternalPersistenceContext().commitTransaction(); + } + + public WorkingDbConfigurationDAO getWorkingDbConfigurationDAO() throws TopiaException { + return getEchoBaseInternalPersistenceContext().getWorkingDbConfigurationDAO(); + } + + public <E extends TopiaEntity> TopiaDAO<E> getDAO(Class<E> entityClass) { + return getEchoBaseInternalPersistenceContext().getDAO(entityClass); + } + + public <E extends TopiaEntity, D extends TopiaDAO<E>> D getDAO(Class<E> entityClass, Class<D> daoClass) { + return getEchoBaseInternalPersistenceContext().getDAO(entityClass, daoClass); + } + + public boolean isTableExists(Class<?> clazz) { + return getEchoBaseInternalPersistenceContext().isTableExists(clazz); + } + + public <T extends TopiaEntity> void replicateEntity(TopiaContext destinationContext, T entity) throws IllegalArgumentException { + getEchoBaseInternalPersistenceContext().replicateEntity(destinationContext, entity); + } + + public static String getModelName() { + return AbstractTopiaEchoBaseInternalPersistenceContext.getModelName(); + } + + public Properties getConfig() { + return getEchoBaseInternalPersistenceContext().getConfig(); + } + + public static <T extends TopiaEntity> Class<T> getContractClass(Class<T> klass) { + return AbstractTopiaEchoBaseInternalPersistenceContext.getContractClass(klass); + } + + + public List<Class<?>> getPersistenceClasses() { + return getEchoBaseInternalPersistenceContext().getPersistenceClasses(); + } + + public void rollbackTransaction() { + getEchoBaseInternalPersistenceContext().rollbackTransaction(); + } + + public static String getModelVersion() { + return AbstractTopiaEchoBaseInternalPersistenceContext.getModelVersion(); + } + + public void createSchema() { + getEchoBaseInternalPersistenceContext().createSchema(); + } + + public EchoBaseUserDAO getEchoBaseUserDAO() throws TopiaException { + return getEchoBaseInternalPersistenceContext().getEchoBaseUserDAO(); + } + + public boolean isClosed() { + return getEchoBaseInternalPersistenceContext().isClosed(); + } + + public TopiaIdFactory getTopiaIdFactory() { + return getEchoBaseInternalPersistenceContext().getTopiaIdFactory(); + } + + public void setUseFlushMode(boolean useFlushMode) { + getEchoBaseInternalPersistenceContext().setUseFlushMode(useFlushMode); + } + + public <E extends TopiaEntity> E findByTopiaId(String topiaId) { + return getEchoBaseInternalPersistenceContext().findByTopiaId(topiaId); + } + + public static EchoBaseInternalEntityEnum[] getContracts() { + return AbstractTopiaEchoBaseInternalPersistenceContext.getContracts(); + } + + public void closeContext() { + getEchoBaseInternalPersistenceContext().closeContext(); + } + + public String getSchemaName() { + return getEchoBaseInternalPersistenceContext().getSchemaName(); + } + + public ExportQueryDAO getExportQueryDAO() throws TopiaException { + return getEchoBaseInternalPersistenceContext().getExportQueryDAO(); + } + + public void dropSchema() { + getEchoBaseInternalPersistenceContext().dropSchema(); + } + + public void updateSchema() { + getEchoBaseInternalPersistenceContext().updateSchema(); + } + + public void update(TopiaEntity entity) { + getEchoBaseInternalPersistenceContext().update(entity); + } + + public void replicate(TopiaContext destinationContext, Object... entityAndCondition) throws IllegalArgumentException { + getEchoBaseInternalPersistenceContext().replicate(destinationContext, entityAndCondition); + } + + public <T extends TopiaEntity> void replicateEntities(TopiaContext destinationContext, List<T> entities) throws IllegalArgumentException { + getEchoBaseInternalPersistenceContext().replicateEntities(destinationContext, entities); + } + + public void showCreateSchema() { + getEchoBaseInternalPersistenceContext().showCreateSchema(); + } + + public static String getImplementationClassesAsString() { + return AbstractTopiaEchoBaseInternalPersistenceContext.getImplementationClassesAsString(); + } + + public boolean isSchemaEmpty() { + return getEchoBaseInternalPersistenceContext().isSchemaEmpty(); + } + +// public <E extends TopiaEntity> E getEntityById(Class<E> entityType, String id) { +// return getEchoBaseInternalPersistenceContext().getEntityById(entityType, id); +// } + + public <E extends TopiaEntity> Map<String, String> loadSortAndDecorate(Class<E> beanType) { + + List<E> beans = getEchoBaseInternalPersistenceContext().getDAO(beanType).findAll(); + return getDecoratorService().sortAndDecorate(getLocale(), beans, null); + } + +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/InternalDbPersistenceService.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserService.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/UserService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,166 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service; + +import com.google.common.base.Preconditions; +import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EchoBaseUserDAO; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.pager.TopiaPagerBean; +import org.nuiton.util.StringUtil; + +import java.util.List; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 0.1 + */ +public class UserService extends EchoBaseServiceSupport { + + public static final String DEFAULT_ADMIN_EMAIL = "admin"; + + public static final String DEFAULT_ADMIN_PASSWORD = "admin"; + + public static final String DEFAULT_USER_EMAIL = "user"; + + public static final String DEFAULT_USER_PASSWORD = "user"; + + public List<EchoBaseUser> getUsers() { + return getUsers(null); + } + + public List<EchoBaseUser> getUsers(TopiaPagerBean pager) { + try { + EchoBaseUserDAO dao = getDAO(); + List<EchoBaseUser> users = dao.findAll(pager); + return users; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException(eee); + } + } + + public EchoBaseUser getUserByEmail(String email) { + Preconditions.checkNotNull(email); + try { + EchoBaseUserDAO dao = getDAO(); + EchoBaseUser user = dao.findByEmail(email); + return user; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException(eee); + } + } + + public EchoBaseUser getUserById(String userId) { + Preconditions.checkNotNull(userId); + try { + EchoBaseUser user = getDAO().findByTopiaId(userId); + EchoBaseUser result = newUser(); + result.setEmail(user.getEmail()); + result.setPassword(user.getPassword()); + result.setAdmin(user.isAdmin()); + return result; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException(eee); + } + } + + public void createOrUpdate(EchoBaseUser user) { + try { + EchoBaseUser userToCreateOrUpdate; + + // No id, creating new one entity + String id = user.getTopiaId(); + String password = user.getPassword(); + if (StringUtils.isEmpty(id)) { + userToCreateOrUpdate = getDAO().create( + EchoBaseUser.PROPERTY_EMAIL, user.getEmail(), + EchoBaseUser.PROPERTY_PASSWORD, encodePassword(password) + ); + } else { + userToCreateOrUpdate = getDAO().findByTopiaId(id); + + userToCreateOrUpdate.setEmail(user.getEmail()); + if (StringUtils.isNotEmpty(password)) { + userToCreateOrUpdate.setPassword(encodePassword(password)); + } + } + userToCreateOrUpdate.setAdmin(user.isAdmin()); + getEchoBaseInternalPersistenceContext().commitTransaction(); + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException(eee); + } + } + + public void delete(EchoBaseUser user) { + try { + EchoBaseUser userToDelete = getDAO().findByTopiaId(user.getTopiaId()); + getDAO().delete(userToDelete); + getEchoBaseInternalPersistenceContext().commitTransaction(); + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException(eee); + } + } + + public boolean checkPassword(EchoBaseUser user, + String password) throws Exception { + String s = encodePassword(password); + return s.equals(user.getPassword()); + } + + public void createDefaultUsers() { + EchoBaseUser user; + + user = newUser(); + user.setEmail(DEFAULT_ADMIN_EMAIL); + user.setPassword(DEFAULT_ADMIN_PASSWORD); + user.setAdmin(true); + createOrUpdate(user); + + user = newUser(); + user.setEmail(DEFAULT_USER_EMAIL); + user.setPassword(DEFAULT_USER_PASSWORD); + user.setAdmin(false); + createOrUpdate(user); + } + + public static String encodePassword(String password) { + String encodedPassword = StringUtil.encodeMD5(password); + return encodedPassword; + } + + public EchoBaseUser newUser() { + try { + return getDAO().newInstance(); + } catch (TopiaException e) { + throw new EchoBaseTechnicalException(e); + } + } + + protected EchoBaseUserDAO getDAO() { + return getEchoBaseInternalPersistenceContext().getEchoBaseUserDAO(); + } +} Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/WorkingDbPersistenceService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/WorkingDbPersistenceService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/WorkingDbPersistenceService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,310 @@ +package fr.ifremer.echobase.services.service; + +import fr.ifremer.echobase.entities.EntityModificationLogDAO; +import fr.ifremer.echobase.entities.ImportLogDAO; +import fr.ifremer.echobase.entities.data.CategoryDAO; +import fr.ifremer.echobase.entities.data.CellDAO; +import fr.ifremer.echobase.entities.data.DataAcquisitionDAO; +import fr.ifremer.echobase.entities.data.DataDAO; +import fr.ifremer.echobase.entities.data.DataProcessingDAO; +import fr.ifremer.echobase.entities.data.EchotypeDAO; +import fr.ifremer.echobase.entities.data.GearMetadataValueDAO; +import fr.ifremer.echobase.entities.data.LengthAgeKeyDAO; +import fr.ifremer.echobase.entities.data.LengthWeightKeyDAO; +import fr.ifremer.echobase.entities.data.OperationDAO; +import fr.ifremer.echobase.entities.data.OperationMetadataValueDAO; +import fr.ifremer.echobase.entities.data.ResultDAO; +import fr.ifremer.echobase.entities.data.SampleDAO; +import fr.ifremer.echobase.entities.data.SampleDataDAO; +import fr.ifremer.echobase.entities.data.TransectDAO; +import fr.ifremer.echobase.entities.data.TransitDAO; +import fr.ifremer.echobase.entities.data.VoyageDAO; +import fr.ifremer.echobase.entities.references.AcousticInstrumentDAO; +import fr.ifremer.echobase.entities.references.AgeCategoryDAO; +import fr.ifremer.echobase.entities.references.AreaOfOperationDAO; +import fr.ifremer.echobase.entities.references.CalibrationDAO; +import fr.ifremer.echobase.entities.references.CategoryMeaningDAO; +import fr.ifremer.echobase.entities.references.CategoryRefDAO; +import fr.ifremer.echobase.entities.references.CategoryTypeDAO; +import fr.ifremer.echobase.entities.references.CellMethodDAO; +import fr.ifremer.echobase.entities.references.CellTypeDAO; +import fr.ifremer.echobase.entities.references.DataMetadataDAO; +import fr.ifremer.echobase.entities.references.DataProtocolDAO; +import fr.ifremer.echobase.entities.references.DataQualityDAO; +import fr.ifremer.echobase.entities.references.DataTypeDAO; +import fr.ifremer.echobase.entities.references.DepthStratumDAO; +import fr.ifremer.echobase.entities.references.EchotypeCategoryDAO; +import fr.ifremer.echobase.entities.references.GearCharacteristicDAO; +import fr.ifremer.echobase.entities.references.GearCharacteristicValueDAO; +import fr.ifremer.echobase.entities.references.GearDAO; +import fr.ifremer.echobase.entities.references.GearMetadataDAO; +import fr.ifremer.echobase.entities.references.ImpacteDAO; +import fr.ifremer.echobase.entities.references.MeasureTypeDAO; +import fr.ifremer.echobase.entities.references.MeasurementMetadataDAO; +import fr.ifremer.echobase.entities.references.MissionDAO; +import fr.ifremer.echobase.entities.references.OperationEventDAO; +import fr.ifremer.echobase.entities.references.OperationMetadataDAO; +import fr.ifremer.echobase.entities.references.ReferenceDatumDAO; +import fr.ifremer.echobase.entities.references.ReferenceDatumTypeDAO; +import fr.ifremer.echobase.entities.references.ReferencingMethodDAO; +import fr.ifremer.echobase.entities.references.SampleDataTypeDAO; +import fr.ifremer.echobase.entities.references.SampleTypeDAO; +import fr.ifremer.echobase.entities.references.SexCategoryDAO; +import fr.ifremer.echobase.entities.references.SizeCategoryDAO; +import fr.ifremer.echobase.entities.references.SpeciesCategoryDAO; +import fr.ifremer.echobase.entities.references.SpeciesDAO; +import fr.ifremer.echobase.entities.references.StrataDAO; +import fr.ifremer.echobase.entities.references.TSParametersDAO; +import fr.ifremer.echobase.entities.references.VesselDAO; +import fr.ifremer.echobase.entities.references.VesselTypeDAO; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaEntity; + +import java.util.List; +import java.util.Map; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class WorkingDbPersistenceService extends EchoBaseServiceSupport { + + public EntityModificationLogDAO getEntityModificationLogDAO() throws TopiaException { + return getEchoBasePersistenceContext().getEntityModificationLogDAO(); + } + + public ImportLogDAO getImportLogDAO() throws TopiaException { + return getEchoBasePersistenceContext().getImportLogDAO(); + } + + public CategoryDAO getCategoryDAO() throws TopiaException { + return getEchoBasePersistenceContext().getCategoryDAO(); + } + + public CellDAO getCellDAO() throws TopiaException { + return getEchoBasePersistenceContext().getCellDAO(); + } + + public DataDAO getDataDAO() throws TopiaException { + return getEchoBasePersistenceContext().getDataDAO(); + } + + public DataAcquisitionDAO getDataAcquisitionDAO() throws TopiaException { + return getEchoBasePersistenceContext().getDataAcquisitionDAO(); + } + + public DataProcessingDAO getDataProcessingDAO() throws TopiaException { + return getEchoBasePersistenceContext().getDataProcessingDAO(); + } + + public EchotypeDAO getEchotypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getEchotypeDAO(); + } + + public GearMetadataValueDAO getGearMetadataValueDAO() throws TopiaException { + return getEchoBasePersistenceContext().getGearMetadataValueDAO(); + } + + public LengthAgeKeyDAO getLengthAgeKeyDAO() throws TopiaException { + return getEchoBasePersistenceContext().getLengthAgeKeyDAO(); + } + + public LengthWeightKeyDAO getLengthWeightKeyDAO() throws TopiaException { + return getEchoBasePersistenceContext().getLengthWeightKeyDAO(); + } + + public OperationDAO getOperationDAO() throws TopiaException { + return getEchoBasePersistenceContext().getOperationDAO(); + } + + public OperationMetadataValueDAO getOperationMetadataValueDAO() throws TopiaException { + return getEchoBasePersistenceContext().getOperationMetadataValueDAO(); + } + + public ResultDAO getResultDAO() throws TopiaException { + return getEchoBasePersistenceContext().getResultDAO(); + } + + public SampleDAO getSampleDAO() throws TopiaException { + return getEchoBasePersistenceContext().getSampleDAO(); + } + + public SampleDataDAO getSampleDataDAO() throws TopiaException { + return getEchoBasePersistenceContext().getSampleDataDAO(); + } + + public TransectDAO getTransectDAO() throws TopiaException { + return getEchoBasePersistenceContext().getTransectDAO(); + } + + public TransitDAO getTransitDAO() throws TopiaException { + return getEchoBasePersistenceContext().getTransitDAO(); + } + + public VoyageDAO getVoyageDAO() throws TopiaException { + return getEchoBasePersistenceContext().getVoyageDAO(); + } + + public AcousticInstrumentDAO getAcousticInstrumentDAO() throws TopiaException { + return getEchoBasePersistenceContext().getAcousticInstrumentDAO(); + } + + public AgeCategoryDAO getAgeCategoryDAO() throws TopiaException { + return getEchoBasePersistenceContext().getAgeCategoryDAO(); + } + + public AreaOfOperationDAO getAreaOfOperationDAO() throws TopiaException { + return getEchoBasePersistenceContext().getAreaOfOperationDAO(); + } + + public CalibrationDAO getCalibrationDAO() throws TopiaException { + return getEchoBasePersistenceContext().getCalibrationDAO(); + } + + public CategoryMeaningDAO getCategoryMeaningDAO() throws TopiaException { + return getEchoBasePersistenceContext().getCategoryMeaningDAO(); + } + + public CategoryRefDAO getCategoryRefDAO() throws TopiaException { + return getEchoBasePersistenceContext().getCategoryRefDAO(); + } + + public CategoryTypeDAO getCategoryTypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getCategoryTypeDAO(); + } + + public CellMethodDAO getCellMethodDAO() throws TopiaException { + return getEchoBasePersistenceContext().getCellMethodDAO(); + } + + public CellTypeDAO getCellTypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getCellTypeDAO(); + } + + public DataMetadataDAO getDataMetadataDAO() throws TopiaException { + return getEchoBasePersistenceContext().getDataMetadataDAO(); + } + + public DataProtocolDAO getDataProtocolDAO() throws TopiaException { + return getEchoBasePersistenceContext().getDataProtocolDAO(); + } + + public DataQualityDAO getDataQualityDAO() throws TopiaException { + return getEchoBasePersistenceContext().getDataQualityDAO(); + } + + public DataTypeDAO getDataTypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getDataTypeDAO(); + } + + public DepthStratumDAO getDepthStratumDAO() throws TopiaException { + return getEchoBasePersistenceContext().getDepthStratumDAO(); + } + + public EchotypeCategoryDAO getEchotypeCategoryDAO() throws TopiaException { + return getEchoBasePersistenceContext().getEchotypeCategoryDAO(); + } + + public GearDAO getGearDAO() throws TopiaException { + return getEchoBasePersistenceContext().getGearDAO(); + } + + public GearCharacteristicDAO getGearCharacteristicDAO() throws TopiaException { + return getEchoBasePersistenceContext().getGearCharacteristicDAO(); + } + + public GearCharacteristicValueDAO getGearCharacteristicValueDAO() throws TopiaException { + return getEchoBasePersistenceContext().getGearCharacteristicValueDAO(); + } + + public GearMetadataDAO getGearMetadataDAO() throws TopiaException { + return getEchoBasePersistenceContext().getGearMetadataDAO(); + } + + public ImpacteDAO getImpacteDAO() throws TopiaException { + return getEchoBasePersistenceContext().getImpacteDAO(); + } + + public MeasureTypeDAO getMeasureTypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getMeasureTypeDAO(); + } + + public MeasurementMetadataDAO getMeasurementMetadataDAO() throws TopiaException { + return getEchoBasePersistenceContext().getMeasurementMetadataDAO(); + } + + public MissionDAO getMissionDAO() throws TopiaException { + return getEchoBasePersistenceContext().getMissionDAO(); + } + + public OperationEventDAO getOperationEventDAO() throws TopiaException { + return getEchoBasePersistenceContext().getOperationEventDAO(); + } + + public OperationMetadataDAO getOperationMetadataDAO() throws TopiaException { + return getEchoBasePersistenceContext().getOperationMetadataDAO(); + } + + public ReferenceDatumDAO getReferenceDatumDAO() throws TopiaException { + return getEchoBasePersistenceContext().getReferenceDatumDAO(); + } + + public ReferenceDatumTypeDAO getReferenceDatumTypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getReferenceDatumTypeDAO(); + } + + public ReferencingMethodDAO getReferencingMethodDAO() throws TopiaException { + return getEchoBasePersistenceContext().getReferencingMethodDAO(); + } + + public SampleDataTypeDAO getSampleDataTypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getSampleDataTypeDAO(); + } + + public SampleTypeDAO getSampleTypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getSampleTypeDAO(); + } + + public SexCategoryDAO getSexCategoryDAO() throws TopiaException { + return getEchoBasePersistenceContext().getSexCategoryDAO(); + } + + public SizeCategoryDAO getSizeCategoryDAO() throws TopiaException { + return getEchoBasePersistenceContext().getSizeCategoryDAO(); + } + + public SpeciesDAO getSpeciesDAO() throws TopiaException { + return getEchoBasePersistenceContext().getSpeciesDAO(); + } + + public SpeciesCategoryDAO getSpeciesCategoryDAO() throws TopiaException { + return getEchoBasePersistenceContext().getSpeciesCategoryDAO(); + } + + public StrataDAO getStrataDAO() throws TopiaException { + return getEchoBasePersistenceContext().getStrataDAO(); + } + + public TSParametersDAO getTSParametersDAO() throws TopiaException { + return getEchoBasePersistenceContext().getTSParametersDAO(); + } + + public VesselDAO getVesselDAO() throws TopiaException { + return getEchoBasePersistenceContext().getVesselDAO(); + } + + public VesselTypeDAO getVesselTypeDAO() throws TopiaException { + return getEchoBasePersistenceContext().getVesselTypeDAO(); + } + + public <E extends TopiaEntity> Map<String, String> loadSortAndDecorate(Class<E> beanType) { + + List<E> beans = getEchoBasePersistenceContext().getDAO(beanType).findAll(); + + return getDecoratorService().sortAndDecorate(getLocale(), beans, null); + } + +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/WorkingDbPersistenceService.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationConfiguration.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationConfiguration.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,105 @@ +/* + * #%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.service.embeddedapplication; + +import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; + +/** + * Configuration of a embedded application creation. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public class EmbeddedApplicationConfiguration extends AbstractEchobaseActionConfiguration { + + private static final long serialVersionUID = 1L; + + /** File name of the embedded application archive (without the zip extension). */ + private String fileName; + + /** Working directory where to generate the archive of embedded application. */ + private File workingDirectory; + + /** Embedded application archive file. */ + private File embeddedApplicationFile; + + /** Location of the war file to push in embedded application. */ + private File warLocation; + + /** Ids of voyages to push in embedded application (with all their datas). */ + private String[] voyageIds; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public File getWorkingDirectory() { + return workingDirectory; + } + + public void setWorkingDirectory(File workingDirectory) { + this.workingDirectory = workingDirectory; + } + + public File getEmbeddedApplicationFile() { + return embeddedApplicationFile; + } + + public void setEmbeddedApplicationFile(File embeddedApplicationFile) { + this.embeddedApplicationFile = embeddedApplicationFile; + } + + public String[] getVoyageIds() { + return voyageIds; + } + + // Attention on ne peut pas utiliser un ... car sinon ça plante dans l'ui + public void setVoyageIds(String[] voyageIds) { + this.voyageIds = Arrays.copyOf(voyageIds, voyageIds.length); + } + + public File getWarLocation() { + return warLocation; + } + + public void setWarLocation(File warLocation) { + this.warLocation = warLocation; + } + + @Override + public void destroy() throws IOException { + if (workingDirectory != null) { + FileUtils.deleteDirectory(workingDirectory); + } + } +} \ No newline at end of file Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationService.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,419 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.embeddedapplication; + +import com.google.common.base.Charsets; +import com.google.common.base.Preconditions; +import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.entities.TopiaEchoBaseInternalPersistenceContext; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; +import fr.ifremer.echobase.entities.WorkingDbConfiguration; +import fr.ifremer.echobase.io.EchoBaseIOUtil; +import fr.ifremer.echobase.persistence.EchoBaseEntityHelper; +import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; +import fr.ifremer.echobase.persistence.JdbcConfiguration; +import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; +import fr.ifremer.echobase.services.EchoBaseServiceContext; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import fr.ifremer.echobase.services.service.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.service.exportdb.ExportDbMode; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryInvalidNameException; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryNameAlreadyExistException; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; +import fr.ifremer.echobase.services.service.importdata.ImportException; +import fr.ifremer.echobase.services.service.importdb.ImportDbConfiguration; +import fr.ifremer.echobase.services.service.importdb.ImportDbMode; +import fr.ifremer.echobase.services.service.importdb.ImportDbService; +import fr.ifremer.echobase.services.service.UserService; +import fr.ifremer.echobase.services.service.workingDb.WorkingDbConfigurationAlreadyExistException; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.util.FileUtil; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.List; + +/** + * To create embedded application. + * + * @author tchemit <chemit@codelutin.com> + * @author sletellier <letellier@codelutin.com> + * @since 0.1 + */ +public class EmbeddedApplicationService extends EchoBaseServiceSupport { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(EmbeddedApplicationService.class); + + public static final String EMBEDDED_PATH = "/embedded/"; + + public File createEmbeddedApplication(EmbeddedApplicationConfiguration model) { + + int nbSteps = computeNbSteps(model); + model.setNbSteps(nbSteps); + + String fileName = model.getFileName(); + + File tempDirectory = model.getWorkingDirectory(); + tempDirectory.deleteOnExit(); + + File zipFile = new File(tempDirectory, fileName + ".zip"); + model.setEmbeddedApplicationFile(zipFile); + + File dir = new File(tempDirectory, fileName); + + if (log.isInfoEnabled()) { + log.info("Creates embedded application to file [" + zipFile + "]"); + } + + // export db to csv + File exportZipFile = exportDb(model, tempDirectory); + + // create static archive structure + createStaticArchiveStructure(model, dir); + + model.incrementsProgress(); + + // create new service context + EchoBaseServiceContext newServiceContext = + DefaultEchoBaseServiceContext.newContext( + getLocale(), + getConfiguration(), + getDbMeta(), + getSpatialDataCache()); + + EchoBaseUser admin; + try { + admin = importInternalDb(model, dir, newServiceContext); + } catch (Exception e) { + throw new EchoBaseTechnicalException( + "Could not create internal db", e); + } + + // create working db in /db + try { + importWorkingDb(model, dir, exportZipFile, newServiceContext, admin); + + } catch (Exception eee) { + + throw new EchoBaseTechnicalException( + "Could not create h2 working database at " + dir, eee); + } + + try { + EchoBaseIOUtil.compressZipFile(zipFile, dir); + } catch (IOException eee) { + throw new EchoBaseTechnicalException( + "Could not create zip file at " + zipFile, eee); + } + + return zipFile; + } + + protected EchoBaseUser importInternalDb(EmbeddedApplicationConfiguration model, + File dir, + EchoBaseServiceContext newServiceContext) throws TopiaException, ExportQueryNameAlreadyExistException, WorkingDbConfigurationAlreadyExistException, ExportQueryInvalidNameException { + + File internalDir = new File(dir, "internaldb"); + + TopiaContext internalRootContext = + EchobaseTopiaContexts.newInternalDb(internalDir); + + TopiaContext internalTransaction = internalRootContext.beginTransaction(); + TopiaEchoBaseInternalPersistenceContext newPersistenceContext = new TopiaEchoBaseInternalPersistenceContext( + internalTransaction + ); + newServiceContext.setEchoBaseInternalPersistenceContext(newPersistenceContext); +// newServiceContext.setInternalTransaction( +// internalRootContext.beginTransaction()); + + + try { + // get user service from h2 db + UserService userService = newServiceContext.newService(UserService.class); + + // create admin user + userService.createDefaultUsers(); + + // get admin from h2 db + EchoBaseUser admin = userService.getUserByEmail( + UserService.DEFAULT_ADMIN_EMAIL); + + model.incrementsProgress(); + + // get all export queries from application + List<ExportQuery> queries = getEchoBaseInternalPersistenceContext().getExportQueryDAO().findAll(); + + // replicate queries + getEchoBaseInternalPersistenceContext().replicateEntities( + internalTransaction, queries); + + // create export sql service from h2 db + ExportQueryService exportQueryService = + newServiceContext.newService(ExportQueryService.class); + + // get all queries from h2 db + queries = newPersistenceContext.getExportQueryDAO().findAll(); + + // attach them to default created admin user in the db + for (ExportQuery query : queries) { + exportQueryService.createOrUpdate(query, admin); + } + + model.incrementsProgress(); + + // get all working db configuration from application + + List<WorkingDbConfiguration> confs = + getEchoBaseInternalPersistenceContext().getWorkingDbConfigurationDAO().findAll(); + + // replicate configs + getEchoBaseInternalPersistenceContext().replicateEntities( + internalTransaction, confs); + + model.incrementsProgress(); + + return admin; + + } finally { + newServiceContext.setEchoBaseInternalPersistenceContext(null); + EchoBaseEntityHelper.releaseRootContext(internalRootContext); + } + } + + protected void importWorkingDb(EmbeddedApplicationConfiguration model, + File dir, + File exportZipFile, + EchoBaseServiceContext newServiceContext, + EchoBaseUser admin) throws IOException, ImportException, TopiaException { + + JdbcConfiguration dbConf = JdbcConfiguration.newEmbeddedConfig(dir); + TopiaContext rootContext = EchobaseTopiaContexts.newWorkingDb( + dbConf); + try { + + // inject a new transaction in service context + newServiceContext.setEchoBasePersistenceContext(new TopiaEchoBasePersistenceContext(rootContext.beginTransaction())); + + model.incrementsProgress(); + + // prepare import configuration + ImportDbConfiguration importConfiguration = + new ImportDbConfiguration(model, getLocale()); + importConfiguration.getInput().setFile(exportZipFile); + File importTempDir = new File(model.getWorkingDirectory(), "importDb"); + importConfiguration.setWorkingDirectory(importTempDir); + importConfiguration.setImportDbMode(ImportDbMode.FREE); + importConfiguration.setComputeSteps(false); + importConfiguration.setCommitAfterEachFile(true); + + // do import to embedded working db + newServiceContext.newService(ImportDbService.class).doImport( + importConfiguration, admin); + + } finally { + // remove current transaction + newServiceContext.setEchoBasePersistenceContext(null); + + // release any connexion to the working db + EchoBaseEntityHelper.releaseRootContext(rootContext); + } + } + +// protected void closeContext(TopiaContext tx, String message) { +// try { +// tx.closeContext(); +// } catch (TopiaException eee) { +// throw new EchoBaseTechnicalException(message, eee); +// } +// } + +// protected TopiaContext beginTransaction(TopiaContext tx, String message) { +// try { +// return tx.beginTransaction(); +// } catch (TopiaException eee) { +// throw new EchoBaseTechnicalException(message, eee); +// } +// } + +// protected void rollbackTransaction(TopiaContext tx, String message) { +// try { +// if (tx != null) { +// tx.rollbackTransaction(); +// } +// } catch (TopiaException eee) { +// if (log.isErrorEnabled()) { +// log.error(message, eee); +// } +// } +// } + + protected int computeNbSteps(EmbeddedApplicationConfiguration model) { + int nbSteps = 5; + + // export db steps + + nbSteps += getDbMeta().getReferenceEntriesSize(); + if (model.getVoyageIds() != null) { + nbSteps += model.getVoyageIds().length; + } + + // import db stesp + nbSteps += getDbMeta().getEntriesSize(); + return nbSteps; + } + + protected void createStaticArchiveStructure(EmbeddedApplicationConfiguration model, File dir) { + + try { + + // create / + FileUtil.createDirectoryIfNecessary(dir); + + // copy embedded files to / + copyEmbeddedTextFile("echobase.properties", dir, false); + copyEmbeddedTextFile("startEchobase.bat", dir, true); + copyEmbeddedTextFile("startEchobase.sh", dir, true); + copyEmbeddedTextFile("README.txt", dir, false); + + // copy war to / + File warLocation = model.getWarLocation(); + FileUtils.copyFile(warLocation, + new File(dir, warLocation.getName())); + } catch (Exception eee) { + throw new EchoBaseTechnicalException( + "Could not create embedded zip structure at " + dir, eee); + } + } + + protected File exportDb(EmbeddedApplicationConfiguration model, File dir) { + + try { + // create export zip file + ExportDbConfiguration exportconfiguration = + new ExportDbConfiguration(model); + exportconfiguration.setFileName("echobase-export"); + File exportTempDir = new File(dir, "exportDb"); + exportconfiguration.setWorkingDirectory(exportTempDir); + exportconfiguration.setVoyageIds(model.getVoyageIds()); + exportconfiguration.setComputeSteps(false); + exportconfiguration.setExportDbMode(ExportDbMode.REFERENTIAL_AND_DATA); + + TopiaEchoBasePersistenceContext persistenceContext = serviceContext.getEchoBasePersistenceContext(); + + TopiaContext newTx = persistenceContext.getContext().beginTransaction(); + + TopiaEchoBasePersistenceContext newPersistenceContext = new TopiaEchoBasePersistenceContext(newTx); + +// TopiaContext transaction = serviceContext.getTransaction(); + + + try { + serviceContext.setEchoBasePersistenceContext(newPersistenceContext); + getExportDbService().doExport(exportconfiguration); + } catch (IOException eee) { + newPersistenceContext.rollbackTransaction(); + throw eee; + } catch (RuntimeException eee) { + newPersistenceContext.rollbackTransaction(); + throw eee; + } finally { + serviceContext.setEchoBasePersistenceContext(persistenceContext); + newPersistenceContext.closeContext(); + } + File exportZipFile = exportconfiguration.getExportFile(); + if (log.isInfoEnabled()) { + log.info("Export zip file = " + exportZipFile); + } + return exportZipFile; + } catch (IOException eee) { + throw new EchoBaseTechnicalException( + "Could not export db to zip", eee); + } + } + + public void copyEmbeddedTextFile(String resourceName, + File targetDirectory, + boolean executable) throws IOException { + String resourcePath = EMBEDDED_PATH + resourceName; + InputStream inputStream = getClass().getResourceAsStream(resourcePath); + Preconditions.checkNotNull(inputStream, + "could not find resource " + resourcePath); + try { + File outputFile = new File(targetDirectory, resourceName); + if (log.isInfoEnabled()) { + log.info("Copy configuration to " + resourceName + " to " + outputFile); + } + OutputStreamWriter outputStream = new OutputStreamWriter( + new FileOutputStream(outputFile), Charsets.UTF_8); + try { + IOUtils.copy(inputStream, outputStream); + } finally { + outputStream.close(); + } + if (executable) { + outputFile.setExecutable(true); + } + } finally { + inputStream.close(); + } + } + + public void copyEmbeddedBinaryFile(String resourceName, + File targetDirectory) throws IOException { + String resourcePath = EMBEDDED_PATH + resourceName; + InputStream inputStream = getClass().getResourceAsStream(resourcePath); + Preconditions.checkNotNull(inputStream, + "could not find resource " + resourcePath); + try { + File outputFile = new File(targetDirectory, resourceName); + if (log.isInfoEnabled()) { + log.info("Copy binary file from " + resourceName + " to " + + outputFile); + } + OutputStream outputStream = new FileOutputStream(outputFile); + try { + IOUtils.copy(inputStream, outputStream); + outputStream.close(); + } finally { + IOUtils.closeQuietly(outputStream); + } + inputStream.close(); + } finally { + IOUtils.closeQuietly(inputStream); + } + } +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbConfiguration.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbConfiguration.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,119 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.exportdb; + +import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; +import fr.ifremer.echobase.services.ProgressModel; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.IOException; + +/** + * Configuration of a complete db export. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public class ExportDbConfiguration extends AbstractEchobaseActionConfiguration { + + private static final long serialVersionUID = 1L; + + private String fileName; + + private File workingDirectory; + + private File exportFile; + + private ExportDbMode exportDbMode; + + /** Ids of voyages to push in embedded application (with all their datas). */ + private String[] voyageIds; + + private boolean computeSteps; + + public ExportDbConfiguration() { + } + + public ExportDbConfiguration(ProgressModel progressModel) { + super(progressModel); + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public File getWorkingDirectory() { + return workingDirectory; + } + + public void setWorkingDirectory(File workingDirectory) { + this.workingDirectory = workingDirectory; + } + + public File getExportFile() { + return exportFile; + } + + public void setExportFile(File exportFile) { + this.exportFile = exportFile; + } + + public String[] getVoyageIds() { + return voyageIds; + } + + // Attention on ne peut pas utiliser un ... car sinon ça plante dans l'ui + public void setVoyageIds(String[] voyageIds) { + this.voyageIds = voyageIds; + } + + public ExportDbMode getExportDbMode() { + return exportDbMode; + } + + public void setExportDbMode(ExportDbMode exportDbMode) { + this.exportDbMode = exportDbMode; + } + + public boolean isComputeSteps() { + return computeSteps; + } + + public void setComputeSteps(boolean computeSteps) { + this.computeSteps = computeSteps; + } + + @Override + public void destroy() throws IOException { + if (workingDirectory != null) { + FileUtils.deleteDirectory(workingDirectory); + } + } + +} \ No newline at end of file Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbMode.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbMode.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbMode.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,71 @@ +package fr.ifremer.echobase.services.service.exportdb; + +/* + * #%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% + */ + +import fr.ifremer.echobase.I18nAble; + +import static org.nuiton.i18n.I18n.n_; + +/** + * Db export mode. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public enum ExportDbMode implements I18nAble { + + /** Export only referential. */ + REFERENTIAL(n_("echobase.common.exportDbMode.referential"), true, false), + + /** Export selected data + referential. */ + REFERENTIAL_AND_DATA(n_("echobase.common.exportDbMode.referentialAndData"), true, true), + + /** Export all the db. */ + ALL(n_("echobase.common.exportDbMode.all"), true, true); + + private final String i18nKey; + + private final boolean exportReferential; + + private final boolean exportData; + + ExportDbMode(String i18nKey, boolean exportReferential, boolean exportData) { + this.i18nKey = i18nKey; + this.exportReferential = exportReferential; + this.exportData = exportData; + } + + @Override + public String getI18nKey() { + return i18nKey; + } + + public boolean isExportReferential() { + return exportReferential; + } + + public boolean isExportData() { + return exportData; + } +} \ No newline at end of file Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbService.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportDbService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,272 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.exportdb; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.io.EchoBaseIOUtil; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaPersistenceHelper; +import org.nuiton.topia.persistence.csv.out.ExportEntityVisitor; +import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.util.FileUtil; +import org.nuiton.util.TimeLog; + +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Service to import / export a complete db. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public class ExportDbService extends EchoBaseServiceSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ExportDbService.class); + + public static final TimeLog timeLog = new TimeLog(ExportDbService.class); + + public void doExport(ExportDbConfiguration model) throws IOException { + + String fileName = model.getFileName(); + + File tempDirectory = model.getWorkingDirectory(); + + File zipFile = new File(tempDirectory, fileName + ".echobase"); + + if (log.isInfoEnabled()) { + log.info("Will export db to " + zipFile); + } + model.setExportFile(zipFile); + + File dir = new File(tempDirectory, "echobase"); + + FileUtil.createDirectoryIfNecessary(dir); + + ExportDbMode exportDbMode = model.getExportDbMode(); + + ExportService exportService = getExportService(); + + boolean exportVoyagesByVisitor = exportDbMode.isExportData(); + + if (exportVoyagesByVisitor) { + + long nbVoyages = getEchoBasePersistenceContext().getVoyageDAO().count(); + if (exportDbMode == ExportDbMode.ALL || + model.getVoyageIds().length == nbVoyages) { + + // no need to export via visitor, can export all data tables + exportVoyagesByVisitor = false; + } + } + + List<TableMeta<EchoBaseEntityEnum>> tablesToExport = Lists.newArrayList(); + List<AssociationMeta<EchoBaseEntityEnum>> associationsToExport = Lists.newArrayList(); + + EchoBaseDbMeta dbMeta = getDbMeta(); + + if (exportDbMode.isExportReferential()) { + + // add referential tables + tablesToExport.addAll(dbMeta.getReferenceTables()); + associationsToExport.addAll(dbMeta.getReferenceAssociations()); + } + + if (exportDbMode.isExportData() && !exportVoyagesByVisitor) { + + // will export complete data tables + tablesToExport.addAll(dbMeta.getDataTables()); + associationsToExport.addAll(dbMeta.getDataAssociations()); + } + + if (model.isComputeSteps()) { + + int nbSteps = tablesToExport.size() + associationsToExport.size(); + + if (exportVoyagesByVisitor) { + nbSteps += model.getVoyageIds().length; + } + + if (log.isInfoEnabled()) { + log.info("NB steps: " + nbSteps); + } + model.setNbSteps(nbSteps); + } + + exportTables(model, dir, tablesToExport, exportService); + + exportAssociations(model, dir, associationsToExport, exportService); + + if (exportVoyagesByVisitor) { + + exportVoyages(model, dir, exportService); + } + + EchoBaseIOUtil.compressZipFile(zipFile, dir); + } + + private void exportTables(ExportDbConfiguration model, + File dir, + List<TableMeta<EchoBaseEntityEnum>> tablesToExport, + ExportService exportService) { + for (TableMeta<EchoBaseEntityEnum> meta : tablesToExport) { + + model.incrementsProgress(); + + File entryFile = new File(dir, meta.getFilename()); + exportService.exportData(meta, entryFile); + } + } + + private void exportAssociations(ExportDbConfiguration model, + File dir, + List<AssociationMeta<EchoBaseEntityEnum>> associationsToExport, + ExportService exportService) { + for (AssociationMeta<EchoBaseEntityEnum> associationMeta : associationsToExport) { + + model.incrementsProgress(); + + File entryFile = new File(dir, associationMeta.getFilename()); + exportService.exportData(associationMeta, entryFile); + } + } + + private void exportVoyages(ExportDbConfiguration model, + File dir, + ExportService exportService) throws IOException { + + EchoBaseDbMeta dbMeta = getDbMeta(); + + Map<EchoBaseEntityEnum, TopiaCsvExports.EntityExportContext<EchoBaseEntityEnum>> contexts = + TopiaCsvExports.createReplicateEntityVisitorContexts( + exportService.getModelFactory(false), + dbMeta.getDataTables(), + dbMeta.getDataAssociations(), + dir); + + ReplicateEntityVisitor visitor = new ReplicateEntityVisitor( + dbMeta.getPersistenceHelper(), + contexts); + + try { + for (String voyageId : model.getVoyageIds()) { + + model.incrementsProgress(); + + Voyage voyage = getEchoBasePersistenceContext().getVoyageDAO().findByTopiaId(voyageId); + visitor.export(voyage); + } + } finally { + + // close visitor to close export files + visitor.close(); + } + } + + /** + * entity visitor to export data to csv files. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ + static class ReplicateEntityVisitor extends ExportEntityVisitor<EchoBaseEntityEnum> { + + protected final Set<String> categoryIds; + + public ReplicateEntityVisitor(TopiaPersistenceHelper<EchoBaseEntityEnum> typeProvider, + Map<EchoBaseEntityEnum, TopiaCsvExports.EntityExportContext<EchoBaseEntityEnum>> entityExporters) { + super(typeProvider, entityExporters); + categoryIds = Sets.newHashSet(); + } + + @Override + public void visit(TopiaEntity entity, String propertyName, + Class<?> type, Object value) { + if (Result.PROPERTY_CATEGORY.equals(propertyName) && + entity instanceof Result) { + + // export category + try { + TopiaEntity topiaEntity = (TopiaEntity) value; + if (categoryIds.add(topiaEntity.getTopiaId())) { + // add this new category + topiaEntity.accept(this); + } + + } catch (TopiaException e) { + if (log.isErrorEnabled()) { + log.error("Can not visit entity " + value, e); + } + } + } + } + + @Override + protected void visitEntityCollection(TopiaEntity entity, + String propertyName, + Class<?> collectionType, + Class<?> type, + Collection<?> cValue) { + if (Voyage.PROPERTY_POST_CELL.equals(propertyName) && entity instanceof Voyage) { + + // special case, we don not want to visit childs of cells + for (Object o : cValue) { + Cell cell = (Cell) o; + + cell.acceptWithNoChild(this); + } + } else { + // normal entity collection visit + super.visitEntityCollection(entity, + propertyName, + collectionType, + type, + cValue); + } + } + + @Override + public void close() throws IOException { + categoryIds.clear(); + super.close(); + } + } +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportService.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportdb/ExportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,209 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.exportdb; + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import fr.ifremer.echobase.services.service.DbEditorService; +import fr.ifremer.echobase.services.service.DecoratorService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ExportModel; +import org.nuiton.decorator.Decorator; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.csv.EntityCsvModel; +import org.nuiton.topia.persistence.csv.out.EntityAssociationExportModel; +import org.nuiton.topia.persistence.csv.out.ExportModelFactory; +import org.nuiton.topia.persistence.csv.out.PrepareDataForExport; +import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.ColumnMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.io.File; + +/** + * To export datas from db to csv files. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public class ExportService extends EchoBaseServiceSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ExportService.class); + + public String exportData(TableMeta<EchoBaseEntityEnum> meta, boolean asSeen) { + + if (log.isInfoEnabled()) { + log.info("Export " + meta); + } + String result = TopiaCsvExports.exportData(meta, + getModelFactory(asSeen), + defaultPrepareDataForExport); + return result; + } + + public void exportData(TableMeta<EchoBaseEntityEnum> meta, File file) { + + if (log.isInfoEnabled()) { + log.info("Export " + meta + " to " + file); + } + + TopiaCsvExports.exportData(meta, + defaultExportFactory, + defaultPrepareDataForExport, + file); + + getEchoBasePersistenceContext().clear(); + } + + + public void exportData(AssociationMeta<EchoBaseEntityEnum> meta, File file) { + + if (log.isInfoEnabled()) { + log.info("Export " + meta + " to " + file); + } + TopiaCsvExports.exportData(meta, + defaultExportFactory, + defaultPrepareDataForExport, + file); + + getEchoBasePersistenceContext().clear(); + } + + public ExportModelFactory<EchoBaseEntityEnum> getModelFactory(boolean asSeen) { + ExportModelFactory<EchoBaseEntityEnum> result; + if (asSeen) { + result = asSeenExportFactory; + } else { + result = defaultExportFactory; + } + return result; + } + + private ExportModelFactory<EchoBaseEntityEnum> defaultExportFactory = new ExportModelFactory<EchoBaseEntityEnum>() { + + @Override + public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta) { + + // normal export add topiaId column + EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( + getConfiguration().getCsvSeparator(), + meta, + TopiaEntity.PROPERTY_TOPIA_ID + ); + + for (ColumnMeta columnMeta : meta) { + String propertyName = columnMeta.getName(); + Class<?> type = columnMeta.getType(); + if (columnMeta.isFK()) { + + Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; + + + // export foreign key value as his topiaId + model.addForeignKeyForExport(propertyName, entityType); + + } else { + model.addDefaultColumn(propertyName, type); + } + } + return model; + } + + @Override + public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { + ExportModel<E> model = EntityAssociationExportModel.newExportModel( + getConfiguration().getCsvSeparator(), + associationMeta + ); + return model; + } + }; + + private ExportModelFactory<EchoBaseEntityEnum> asSeenExportFactory = new ExportModelFactory<EchoBaseEntityEnum>() { + + @Override + public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta) { + + + // no need to have topiaId as first column + EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( + getConfiguration().getCsvSeparator(), + meta + ); + + + DecoratorService service = getDecoratorService(); + + for (ColumnMeta columnMeta : meta) { + String propertyName = columnMeta.getName(); + Class<?> type = columnMeta.getType(); + if (columnMeta.isFK()) { + + Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; + + // export decorated foreign key value + Decorator<TopiaEntity> decorator = + service.getDecorator(getLocale(), entityType, null); + model.addDecoratedForeignKeyForExport(propertyName, propertyName, decorator); + + } else { + model.addDefaultColumn(propertyName, type); + } + } + return model; + } + + @Override + public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { + ExportModel<E> model = EntityAssociationExportModel.newExportModel( + getConfiguration().getCsvSeparator(), + associationMeta + ); + return model; + } + }; + + private PrepareDataForExport<EchoBaseEntityEnum> defaultPrepareDataForExport = new PrepareDataForExport<EchoBaseEntityEnum>() { + + @Override + public <E extends TopiaEntity> Iterable<E> prepareData(TableMeta<EchoBaseEntityEnum> tableMeta) { + DbEditorService service = getDbEditorService(); + + Iterable<E> data = service.iterateOnEntities(tableMeta, null); + return data; + } + + @Override + public <E extends TopiaEntity> Iterable<E> prepareData(AssociationMeta<EchoBaseEntityEnum> associationMeta) { + DbEditorService service = getDbEditorService(); + + TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(associationMeta.getSource()); + Iterable<E> data = service.iterateOnEntities(tableMeta, "size(e." + associationMeta.getName() + ") > 0"); + return data; + } + }; +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryCsvModel.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryCsvModel.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryCsvModel.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryCsvModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,49 @@ +package fr.ifremer.echobase.services.service.exportquery; + +/* + * #%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% + */ + +import fr.ifremer.echobase.csv.EchoBaseCsvUtil; +import org.nuiton.csv.ext.AbstractExportModel; + +import java.util.Map; + +/** + * Csv model to export sql in {@link ExportQueryService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public class ExportQueryCsvModel extends AbstractExportModel<Map<String, Object>> { + + public ExportQueryCsvModel(char separator, String[] columnHeaders) { + super(separator); + for (String columnHeader : columnHeaders) { + newColumnForExport( + columnHeader, + EchoBaseCsvUtil.TO_STRING_FORMATTER + ); + } + } + +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryInvalidNameException.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryInvalidNameException.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryInvalidNameException.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryInvalidNameException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,35 @@ +package fr.ifremer.echobase.services.service.exportquery; + +/* + * #%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% + */ + +/** + * To be thrown if a query has not a valid query name. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.4 + */ +public class ExportQueryInvalidNameException extends Exception { + + private static final long serialVersionUID = 1L; +} \ No newline at end of file Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryNameAlreadyExistException.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNameAlreadyExistException.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryNameAlreadyExistException.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryNameAlreadyExistException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,35 @@ +/* + * #%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.service.exportquery; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ExportQueryNameAlreadyExistException extends Exception { + + private static final long serialVersionUID = 1L; +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryNotFoundException.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryNotFoundException.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryNotFoundException.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryNotFoundException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,35 @@ +package fr.ifremer.echobase.services.service.exportquery; + +/* + * #%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% + */ + +/** + * When a export query is not found. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.4 + */ +public class ExportQueryNotFoundException extends Exception { + + private static final long serialVersionUID = 1L; +} \ No newline at end of file Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryService.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ExportQueryService.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,245 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.exportquery; + +import com.google.common.base.Charsets; +import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.ExportQueries; +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.entities.ExportQueryDAO; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.csv.Export; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.pager.TopiaPagerBean; +import org.nuiton.util.RecursiveProperties; + +import java.util.List; +import java.util.Map; + +/** + * Service to deal with sql export. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class ExportQueryService extends EchoBaseServiceSupport { + + public ExportQuery getExportQuery(String topiaId) throws ExportQueryNotFoundException { + + ExportQuery exportQuery = getDAO().findByTopiaId(topiaId); + + if (exportQuery == null) { + throw new ExportQueryNotFoundException(); + } + ExportQuery entityToSave = newExportQuery(); + entityToSave.setTopiaId(exportQuery.getTopiaId()); + entityToSave.setName(exportQuery.getName()); + entityToSave.setDescription(exportQuery.getDescription()); + entityToSave.setSqlQuery(exportQuery.getSqlQuery()); + entityToSave.setLastModifiedDate(exportQuery.getLastModifiedDate()); + entityToSave.setLastModifiedUser(exportQuery.getLastModifiedUser()); + return entityToSave; + } + + + public ExportQuery createOrUpdate(ExportQuery exportQuery, + EchoBaseUser user) throws ExportQueryNameAlreadyExistException, ExportQueryInvalidNameException { + try { + + ExportQueryDAO dao = getDAO(); + + // No id, creating new one entity + String id = exportQuery.getTopiaId(); + + boolean mustCreate = StringUtils.isEmpty(id); + + String queryName = exportQuery.getName(); + + if (!ExportQueries.isQueryNameValid(queryName)) { + + // can not accept a non alpha numeric name + throw new ExportQueryInvalidNameException(); + } + + // check query does not already exists with this name + if (mustCreate) { + + boolean queryExists = dao.isQueryExists(id, queryName); + + if (queryExists) { + throw new ExportQueryNameAlreadyExistException(); + } + } + + ExportQuery entityToSave; + + exportQuery.setLastModifiedDate(newDate()); + exportQuery.setLastModifiedUser(user.getEmail()); + + if (mustCreate) { + entityToSave = dao.create(exportQuery); + } else { + entityToSave = dao.findByTopiaId(id); + entityToSave.setName(queryName); + entityToSave.setDescription(exportQuery.getDescription()); + entityToSave.setSqlQuery(exportQuery.getSqlQuery()); + entityToSave.setLastModifiedDate(exportQuery.getLastModifiedDate()); + entityToSave.setLastModifiedUser(exportQuery.getLastModifiedUser()); + } + +// dao.update(entityToSave); + getEchoBaseInternalPersistenceContext().commitTransaction(); + return entityToSave; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException(eee); + } + } + + public void delete(String topiaId) { + try { + ExportQueryDAO dao = getDAO(); + + ExportQuery entityToDelete = dao.findByTopiaId(topiaId); + dao.delete(entityToDelete); + + getEchoBaseInternalPersistenceContext().commitTransaction(); + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException(eee); + } + } + + public String getSqlQuery(String queryId) throws ExportQueryNotFoundException { + + ExportQuery exportQuery = getExportQuery(queryId); + + String result = getSafeSql(exportQuery.getSqlQuery()); + return result; + } + + protected String getSafeSql(String sql) { + RecursiveProperties sqls = new RecursiveProperties(); + List<ExportQuery> queries = getEchoBaseInternalPersistenceContext().getExportQueryDAO().findAll(); + for (ExportQuery query : queries) { + sqls.put(query.getName(), query.getSqlQuery()); + } + if (!sqls.containsKey(sql)) { + + sqls.put(sql, sql); + } + + String result = sqls.getProperty(sql); + return result; + } + + public void testSql(String sql) throws TopiaException { + + String safeSql = getSafeSql(sql); + GenericSQLQuery sqlQuery = new GenericSQLQuery(safeSql, null); + getEchoBaseInternalPersistenceContext().findSingleResult(sqlQuery); + sqlQuery.getColumnNames(); + } + + public Map<String, Object>[] executeExportquery(String queryId, + TopiaPagerBean pager) throws ExportQueryNotFoundException { + + String sql = getSqlQuery(queryId); + + // get a query to count all rows for the request + GenericSQLQuery sqlQuery = new GenericSQLQuery(sql, pager); + try { + List<Map<String, Object>> result = + getEchoBaseInternalPersistenceContext().findMultipleResult(sqlQuery); + return result.toArray(new Map[result.size()]); + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException( + "Could not execute sql query", eee); + } + } + + public String[] getColumnNames(String sql) { + + String limitSql = sql.trim(); + if (limitSql.endsWith(";")) { + limitSql = limitSql.substring(0, limitSql.length() - 1); + limitSql += " LIMIT 1"; + } + try { + // do a limit query to one result and obtain the column names + // from the meta data of the result set + GenericSQLQuery sqlQuery = new GenericSQLQuery(limitSql, null); + getEchoBaseInternalPersistenceContext().findSingleResult(sqlQuery); + String[] result = sqlQuery.getColumnNames(); + return result; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException( + "Could not execute query " + limitSql + " for reason " + eee.getCause().getMessage(), eee); + } catch (Exception eee) { + throw new EchoBaseTechnicalException( + "Could not execute query " + limitSql + " for reason " + eee.getMessage(), eee); + } + } + + public String createCsvFileContent(String queryId) throws ExportQueryNotFoundException { + + String sql = getSqlQuery(queryId); + + GenericSQLQuery sqlQuery = new GenericSQLQuery(sql, null); + List<Map<String, Object>> rows; + try { + rows = getEchoBaseInternalPersistenceContext().findMultipleResult(sqlQuery); + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException( + "Could not execute sql query", eee); + } + char csvSeparator = getConfiguration().getCsvSeparator(); + ExportQueryCsvModel csvModel = sqlQuery.generateCsvModel(csvSeparator); + Export<Map<String, Object>> exporter = Export.newExport(csvModel, rows); + try { + String content = exporter.toString(Charsets.UTF_8); + return content; + } catch (Exception eee) { + throw new EchoBaseTechnicalException("Could not export sql", eee); + } + } + + public ExportQuery newExportQuery() { + try { + return getDAO().newInstance(); + } catch (TopiaException e) { + throw new EchoBaseTechnicalException(e); + } + } + + public String processLibreOfficeSqlQuery(String libreOfficeQuery) { + + String result = libreOfficeQuery.replaceAll("\\\"", ""); + return result; + } + + protected ExportQueryDAO getDAO() { + return getEchoBaseInternalPersistenceContext().getExportQueryDAO(); + } +} Copied: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/GenericSQLQuery.java (from rev 839, trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/GenericSQLQuery.java) =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/GenericSQLQuery.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/GenericSQLQuery.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,138 @@ +package fr.ifremer.echobase.services.service.exportquery; + +/* + * #%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% + */ + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaSQLQuery; +import org.nuiton.util.PagerBean; +import org.nuiton.util.PagerBeanUtil; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0 + */ +public class GenericSQLQuery extends TopiaSQLQuery<Map<String, Object>> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(GenericSQLQuery.class); + + protected String[] columnNames; + + private final String sql; + + private final PagerBean pager; + + public GenericSQLQuery(String sql, PagerBean pager) { + this.sql = sql; + this.pager = pager; + } + + public String[] getColumnNames() { + return columnNames; + } + + public ExportQueryCsvModel generateCsvModel(char charSeparator) { + ExportQueryCsvModel model = new ExportQueryCsvModel( + charSeparator, + columnNames + ); + return model; + } + + public List<Map<String, Object>> getResult(TopiaContext tx) throws TopiaException { + List<Map<String, Object>> rows = + findMultipleResult(tx); + return rows; + } + + public void testQuery(TopiaContext tx) throws TopiaException { + findSingleResult(tx); + } + + public String[] getColumnNames(TopiaContext tx) throws TopiaException { + findSingleResult(tx); + return columnNames; + } + + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + return connection.prepareStatement( + sql, + ResultSet.TYPE_SCROLL_INSENSITIVE, + ResultSet.CONCUR_READ_ONLY + ); + } + + @Override + protected void afterExecuteQuery(ResultSet set) throws SQLException { + super.afterExecuteQuery(set); + + // obtain columnNames + columnNames = getColumnNames(set); + + if (pager != null) { + + // must count rows + long nbRows = getNbRows(set); + if (log.isInfoEnabled()) { + log.info("For request " + sql + ", nb rows = " + nbRows); + } + pager.setRecords(nbRows); + PagerBeanUtil.computeRecordIndexesAndPagesNumber(pager); + } + } + + @Override + protected Map<String, Object> prepareResult(ResultSet set) throws SQLException { + + if (pager != null) { + + // get row number (getRow() begins at 1) + int rowNumber = set.getRow() - 1; + if (rowNumber < pager.getRecordStartIndex() || + rowNumber >= pager.getRecordEndIndex()) { + + // out of pager bound, by returning null + // result will not be take in account + return null; + } + } + + Map<String, Object> result = getRowAsMap(columnNames, set); + return result; + } + +} Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportConfiguration.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.collect.Lists; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.base.Charsets; import com.google.common.base.Function; @@ -115,11 +115,16 @@ String result = computeResultAndLogBookEntry(configuration, user); // do commit - commitTransaction("Could not execute import " + - getImportLabel(configuration)); + getEchoBasePersistenceContext().commitTransaction(); - updatePostgisTable(); + // revoke spatial data memory cache + getSpatialDataCache().onVoyageChanged( + serviceContext.getWorkgingDbUrl(), + configuration.getVoyageId()); + // update sql spatial data + getSpatialService().updatePostgisTable(); + s0 = TIME_LOG.log(s0, "postgis update"); TIME_LOG.log(s0, "importCommited"); @@ -173,13 +178,13 @@ } String importText = buffer.toString().trim(); - ImportLog importLog = create(getDAO(ImportLog.class), - ImportLog.PROPERTY_VOYAGE_ID, configuration.getVoyageId(), - ImportLog.PROPERTY_IMPORT_TYPE, configuration.getImportType(), - ImportLog.PROPERTY_IMPORT_USER, importUser, - ImportLog.PROPERTY_IMPORT_DATE, importDate, - ImportLog.PROPERTY_IMPORT_TEXT, importText, - ImportLog.PROPERTY_IMPORT_ID, importIds + ImportLog importLog = getEchoBasePersistenceContext().getImportLogDAO().create( + ImportLog.PROPERTY_VOYAGE_ID, configuration.getVoyageId(), + ImportLog.PROPERTY_IMPORT_TYPE, configuration.getImportType(), + ImportLog.PROPERTY_IMPORT_USER, importUser, + ImportLog.PROPERTY_IMPORT_DATE, importDate, + ImportLog.PROPERTY_IMPORT_TEXT, importText, + ImportLog.PROPERTY_IMPORT_ID, importIds ); return importLog; } @@ -196,12 +201,12 @@ String result = importLog.getImportText(); - create(getDAO(EntityModificationLog.class), - EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import", - EntityModificationLog.PROPERTY_ENTITY_ID, importType, - EntityModificationLog.PROPERTY_MODIFICATION_USER, importUser, - EntityModificationLog.PROPERTY_MODIFICATION_DATE, importDate, - EntityModificationLog.PROPERTY_MODIFICATION_TEXT, result + getEchoBasePersistenceContext().getEntityModificationLogDAO().create( + EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import", + EntityModificationLog.PROPERTY_ENTITY_ID, importType, + EntityModificationLog.PROPERTY_MODIFICATION_USER, importUser, + EntityModificationLog.PROPERTY_MODIFICATION_DATE, importDate, + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, result ); return result; } @@ -239,7 +244,7 @@ protected <E extends TopiaEntity, K> Map<K, E> getEntitiesMap( Class<E> entityType, Function<E, K> function) { - List<E> allVoyages = getEntities(entityType); + List<E> allVoyages = getEchoBasePersistenceContext().getDAO(entityType).findAll(); Map<K, E> voyageMap = Maps.uniqueIndex( allVoyages, function); return voyageMap; @@ -255,35 +260,35 @@ } } - protected <E extends TopiaEntity> E create(TopiaDAO<E> dao) { - try { - E result = dao.create(); - return result; - } catch (TopiaException e) { - throw new EchoBaseTechnicalException("Could not create entity", e); - } - } +// protected <E extends TopiaEntity> E create(TopiaDAO<E> dao) { +// try { +// E result = dao.create(); +// return result; +// } catch (TopiaException e) { +// throw new EchoBaseTechnicalException("Could not create entity", e); +// } +// } - protected <E extends TopiaEntity> E create(TopiaDAO<E> dao, E entity) { - try { - E result = dao.create(entity); - return result; - } catch (TopiaException e) { - throw new EchoBaseTechnicalException("Could not create entity", e); - } - } +// protected <E extends TopiaEntity> E create(TopiaDAO<E> dao, E entity) { +// try { +// E result = dao.create(entity); +// return result; +// } catch (TopiaException e) { +// throw new EchoBaseTechnicalException("Could not create entity", e); +// } +// } - protected <E extends TopiaEntity> E findByProperties(TopiaDAO<E> dao, - String propertyName, - Object value, - Object... others) { - try { - E result = dao.findByProperties(propertyName, value, others); - return result; - } catch (TopiaException e) { - throw new EchoBaseTechnicalException("Could not obtain query db", e); - } - } +// protected <E extends TopiaEntity> E findByProperties(TopiaDAO<E> dao, +// String propertyName, +// Object value, +// Object... others) { +// try { +// E result = dao.findByProperties(propertyName, value, others); +// return result; +// } catch (TopiaException e) { +// throw new EchoBaseTechnicalException("Could not obtain query db", e); +// } +// } protected String getImportMessage(M configuration, InputFile inputFile) { String message = l_(getLocale(), "echobase.importLabel.withFile", @@ -298,7 +303,7 @@ if (rowNumber % 1000 == 0) { // flush each 1000 imported rows String message = getImportMessage(configuration, inputFile); - flushTransaction("Could not flush transaction " + message); + getEchoBasePersistenceContext().flush(); } } @@ -323,8 +328,7 @@ // try to find it in db - category = findByProperties( - speciesCategoryDAO, + category = speciesCategoryDAO.findByProperties( SpeciesCategory.PROPERTY_SPECIES, species, SpeciesCategory.PROPERTY_AGE_CATEGORY, ageCategory, SpeciesCategory.PROPERTY_SIZE_CATEGORY, sizeCategory, @@ -335,11 +339,11 @@ // not found in db, create it - category = create(speciesCategoryDAO, - SpeciesCategory.PROPERTY_SPECIES, species, - SpeciesCategory.PROPERTY_SIZE_CATEGORY, sizeCategory, - SpeciesCategory.PROPERTY_AGE_CATEGORY, ageCategory, - SpeciesCategory.PROPERTY_SEX_CATEGORY, sexCategory + category = speciesCategoryDAO.create( + SpeciesCategory.PROPERTY_SPECIES, species, + SpeciesCategory.PROPERTY_SIZE_CATEGORY, sizeCategory, + SpeciesCategory.PROPERTY_AGE_CATEGORY, ageCategory, + SpeciesCategory.PROPERTY_SEX_CATEGORY, sexCategory ); importResult.incrementsNumberCreated(EchoBaseEntityEnum.SpeciesCategory); } @@ -392,8 +396,7 @@ // try to find it in db - category = findByProperties( - categoryDAO, + category = categoryDAO.findByProperties( Category.PROPERTY_ECHOTYPE, echotype, Category.PROPERTY_SPECIES_CATEGORY, speciesCategory ); @@ -401,8 +404,7 @@ if (category == null) { // not found in db, create it - category = create( - categoryDAO, + category = categoryDAO.create( Category.PROPERTY_ECHOTYPE, echotype, Category.PROPERTY_SPECIES_CATEGORY, speciesCategory ); @@ -455,9 +457,8 @@ DataQuality dataQuality, EchoBaseCsvFileImportResult importResult) { - Data data = create(dao, - Data.PROPERTY_DATA_METADATA, dataMetaData, - Data.PROPERTY_DATA_VALUE, dataValue); + Data data = dao.create(Data.PROPERTY_DATA_METADATA, dataMetaData, + Data.PROPERTY_DATA_VALUE, dataValue); cell.addData(data); cell.setDataQuality(dataQuality); @@ -479,7 +480,7 @@ result.setCategory(category); result.setResultLabel(resultLabel); - Result resultCreated = create(dao, result); + Result resultCreated = dao.create(result); cell.addResult(resultCreated); if (collecIds) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AcousticImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticImportConfiguration.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AcousticImportConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.io.InputFile; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AcousticImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AcousticImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -33,7 +33,6 @@ 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; @@ -48,8 +47,8 @@ import fr.ifremer.echobase.entities.references.DataQuality; import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.AcousticImportModel; -import fr.ifremer.echobase.services.importdata.csv.AcousticImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.AcousticImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.AcousticImportRow; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -85,19 +84,19 @@ EchoBaseUser user) throws ImportException { // get selected voyage - Voyage voyage = getEntityById(Voyage.class, - configuration.getVoyageId()); + Voyage voyage = getEchoBasePersistenceContext().getVoyageDAO().findByTopiaId( + configuration.getVoyageId()); // get selected vessel - Vessel vessel = getEntityById(Vessel.class, - configuration.getVesselId()); + Vessel vessel = getEchoBasePersistenceContext().getVesselDAO().findByTopiaId( + configuration.getVesselId()); - CellType esduCellType = getEntityByProperty( - CellType.class, CellType.PROPERTY_ID, "Esdu"); + CellType esduCellType = getEchoBasePersistenceContext().getCellTypeDAO().findByProperty( + CellType.PROPERTY_ID, "Esdu"); Preconditions.checkNotNull(esduCellType); - CellType elementaryCellType = getEntityByProperty( - CellType.class, CellType.PROPERTY_ID, "Elementary"); + CellType elementaryCellType = getEchoBasePersistenceContext().getCellTypeDAO().findByProperty( + CellType.PROPERTY_ID, "Elementary"); Preconditions.checkNotNull(elementaryCellType); EchoBaseCsvFileImportResult importResult = @@ -163,11 +162,11 @@ getCsvSeparator(), instrumentsById, dataQualityMap); DataAcquisitionDAO dataAcquisitionDAO = - getDAO(DataAcquisition.class, DataAcquisitionDAO.class); + getEchoBasePersistenceContext().getDataAcquisitionDAO(); DataProcessingDAO dataProcessingDAO = - getDAO(DataProcessing.class, DataProcessingDAO.class); - CellDAO cellDAO = getDAO(Cell.class, CellDAO.class); - DataDAO dataDAO = getDAO(Data.class, DataDAO.class); + getEchoBasePersistenceContext().getDataProcessingDAO(); + CellDAO cellDAO = getEchoBasePersistenceContext().getCellDAO(); + DataDAO dataDAO = getEchoBasePersistenceContext().getDataDAO(); boolean addDataAcquisition = configuration.isAddDataAcquisition(); @@ -354,9 +353,9 @@ // this is a esdu cell row // create esdu cell - Cell esduCell = create(cellDAO, - Cell.PROPERTY_CELL_TYPE, esduCellType, - Cell.PROPERTY_NAME, esduCellId + Cell esduCell = cellDAO.create( + Cell.PROPERTY_CELL_TYPE, esduCellType, + Cell.PROPERTY_NAME, esduCellId ); esduCell.setDataQuality(dataQuality); @@ -403,9 +402,9 @@ } // create the elementary cell - elementaryCell = create(cellDAO, - Cell.PROPERTY_CELL_TYPE, elementaryCellType, - Cell.PROPERTY_NAME, elementaryCellId + elementaryCell = cellDAO.create( + Cell.PROPERTY_CELL_TYPE, elementaryCellType, + Cell.PROPERTY_NAME, elementaryCellId ); elementaryCell.setDataQuality(dataQuality); @@ -456,8 +455,8 @@ // create Depth data dataValue = row.getEsduCellDataDepth(); - createCellData(dao, cell, dataMetadatas, "DepthRefSurface" + suffix, - dataValue, dataQuality, importResult); + createCellData(dao, cell, dataMetadatas, "DepthRefSurface" + suffix, + dataValue, dataQuality, importResult); // create Time Start data dataValue = cellDateFormat.format(row.getCellDateStart()); @@ -605,8 +604,7 @@ String loggedDataDatatype = configuration.getLoggedDataDatatype(); String pingDutyCycle = configuration.getPingDutyCycle(); - DataAcquisition dataAcquisition = create( - dataAcquisitionDAO, + DataAcquisition dataAcquisition = dataAcquisitionDAO.create( DataAcquisition.PROPERTY_ACOUSTIC_INSTRUMENT, instrument ); @@ -666,8 +664,7 @@ String acousticDensityUnit = configuration.getAcousticDensityUnit(); String notes = configuration.getNotes(); - DataProcessing dataProcessing = create( - dataProcessingDAO, + DataProcessing dataProcessing = dataProcessingDAO.create( DataProcessing.PROPERTY_ID, id, DataProcessing.PROPERTY_PROCESSING_TEMPLATE, processingTemplate ); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CatchesImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CatchesImportConfiguration.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CatchesImportConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.io.InputFile; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CatchesImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CatchesImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CatchesImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.base.Preconditions; import com.google.common.collect.Collections2; @@ -47,12 +47,12 @@ import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.entities.references.SpeciesCategoryDAO; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.BiometrySampleImportModel; -import fr.ifremer.echobase.services.importdata.csv.BiometrySampleImportRow; -import fr.ifremer.echobase.services.importdata.csv.SubSampleImportModel; -import fr.ifremer.echobase.services.importdata.csv.SubSampleImportRow; -import fr.ifremer.echobase.services.importdata.csv.TotalSampleImportModel; -import fr.ifremer.echobase.services.importdata.csv.TotalSampleImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.BiometrySampleImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.BiometrySampleImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.SubSampleImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.SubSampleImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.TotalSampleImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.TotalSampleImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -81,7 +81,7 @@ protected void startImport(CatchesImportConfiguration configuration, EchoBaseUser user) throws ImportException { - Voyage voyage = getEntityById(Voyage.class, + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, configuration.getVoyageId()); // get all operation for this voyage and this vessel @@ -171,24 +171,24 @@ sizeCategoryMap ); - SampleDAO sampleDAO = getDAO(Sample.class, SampleDAO.class); - SampleDataDAO sampleDataDAO = getDAO(SampleData.class, SampleDataDAO.class); - SampleTypeDAO sampleTypeDAO = getDAO(SampleType.class, SampleTypeDAO.class); - SampleDataTypeDAO sampleDataTypeDAO = getDAO(SampleDataType.class, SampleDataTypeDAO.class); - SpeciesCategoryDAO speciesCategoryDAO = getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + SampleDAO sampleDAO = getEchoBasePersistenceContext().getSampleDAO(); + SampleDataDAO sampleDataDAO = getEchoBasePersistenceContext().getSampleDataDAO(); + SampleTypeDAO sampleTypeDAO = getEchoBasePersistenceContext().getSampleTypeDAO(); + SampleDataTypeDAO sampleDataTypeDAO = getEchoBasePersistenceContext().getSampleDataTypeDAO(); + SpeciesCategoryDAO speciesCategoryDAO = getEchoBasePersistenceContext().getSpeciesCategoryDAO(); - SampleType sampleTypeTotal = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, SampleTypeImpl.TOTAL_SAMPLE_TYPE); + SampleType sampleTypeTotal = sampleTypeDAO.findByProperties(SampleType.PROPERTY_NAME, SampleTypeImpl.TOTAL_SAMPLE_TYPE); Preconditions.checkNotNull(sampleTypeTotal); - SampleType sampleTypeUnsorted = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, SampleTypeImpl.UNSORTED_SAMPLE_TYPE); + SampleType sampleTypeUnsorted = sampleTypeDAO.findByProperties(SampleType.PROPERTY_NAME, SampleTypeImpl.UNSORTED_SAMPLE_TYPE); Preconditions.checkNotNull(sampleTypeUnsorted); - SampleType sampleTypeSorted = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, SampleTypeImpl.SORTED_SAMPLE_TYPE); + SampleType sampleTypeSorted = sampleTypeDAO.findByProperties(SampleType.PROPERTY_NAME, SampleTypeImpl.SORTED_SAMPLE_TYPE); Preconditions.checkNotNull(sampleTypeSorted); - SampleDataType sampleDataTypeMeanLength = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "MeanLengthcm"); + SampleDataType sampleDataTypeMeanLength = sampleDataTypeDAO.findByProperties(SampleDataType.PROPERTY_NAME, "MeanLengthcm"); Preconditions.checkNotNull(sampleDataTypeMeanLength); - SampleDataType sampleDataTypeMeanWeight = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "MeanWeightg"); + SampleDataType sampleDataTypeMeanWeight = sampleDataTypeDAO.findByProperties(SampleDataType.PROPERTY_NAME, "MeanWeightg"); Preconditions.checkNotNull(sampleDataTypeMeanWeight); - SampleDataType sampleDataTypeNoPerKg = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "NoPerKg"); + SampleDataType sampleDataTypeNoPerKg = sampleDataTypeDAO.findByProperties(SampleDataType.PROPERTY_NAME, "NoPerKg"); Preconditions.checkNotNull(sampleDataTypeNoPerKg); Reader reader = getInputFileReader(inputFile); @@ -332,22 +332,22 @@ sizeCategoryMap, sexCategoryMap); - SampleDAO sampleDAO = getDAO(Sample.class, SampleDAO.class); - SampleDataDAO sampleDataDAO = getDAO(SampleData.class, SampleDataDAO.class); - SampleTypeDAO sampleTypeDAO = getDAO(SampleType.class, SampleTypeDAO.class); - SampleDataTypeDAO sampleDataTypeDAO = getDAO(SampleDataType.class, SampleDataTypeDAO.class); - SpeciesCategoryDAO speciesCategoryDAO = getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + SampleDAO sampleDAO = getEchoBasePersistenceContext().getSampleDAO(); + SampleDataDAO sampleDataDAO = getEchoBasePersistenceContext().getSampleDataDAO(); + SampleTypeDAO sampleTypeDAO = getEchoBasePersistenceContext().getSampleTypeDAO(); + SampleDataTypeDAO sampleDataTypeDAO = getEchoBasePersistenceContext().getSampleDataTypeDAO(); + SpeciesCategoryDAO speciesCategoryDAO = getEchoBasePersistenceContext().getSpeciesCategoryDAO(); - SampleType sampleTypeSubsample = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, SampleTypeImpl.SUB_SAMPLE_TYPE); + SampleType sampleTypeSubsample = sampleTypeDAO.findByProperties(SampleType.PROPERTY_NAME, SampleTypeImpl.SUB_SAMPLE_TYPE); Preconditions.checkNotNull(sampleTypeSubsample); - SampleDataType sampleDataTypeNumberAtLength = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "NumberAtLength"); + SampleDataType sampleDataTypeNumberAtLength = sampleDataTypeDAO.findByProperties(SampleDataType.PROPERTY_NAME, "NumberAtLength"); Preconditions.checkNotNull(sampleDataTypeNumberAtLength); - SampleDataType sampleDataTypeNumberAtLength05cm = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "LTcm0.5"); + SampleDataType sampleDataTypeNumberAtLength05cm = sampleDataTypeDAO.findByProperties(SampleDataType.PROPERTY_NAME, "LTcm0.5"); Preconditions.checkNotNull(sampleDataTypeNumberAtLength05cm); - SampleDataType sampleDataTypeNumberAtLength1cm = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "LTcm1"); + SampleDataType sampleDataTypeNumberAtLength1cm = sampleDataTypeDAO.findByProperties(SampleDataType.PROPERTY_NAME, "LTcm1"); Preconditions.checkNotNull(sampleDataTypeNumberAtLength1cm); - SampleDataType sampleDataTypeWeightAtLength = findByProperties(sampleDataTypeDAO, SampleDataType.PROPERTY_NAME, "WeightAtLengthkg"); + SampleDataType sampleDataTypeWeightAtLength = sampleDataTypeDAO.findByProperties(SampleDataType.PROPERTY_NAME, "WeightAtLengthkg"); Preconditions.checkNotNull(sampleDataTypeWeightAtLength); Reader reader = getInputFileReader(inputFile); @@ -473,12 +473,12 @@ speciesMap, sampleDataTypeMap); - SampleDAO sampleDAO = getDAO(Sample.class, SampleDAO.class); - SampleDataDAO sampleDataDAO = getDAO(SampleData.class, SampleDataDAO.class); - SampleTypeDAO sampleTypeDAO = getDAO(SampleType.class, SampleTypeDAO.class); - SpeciesCategoryDAO speciesCategoryDAO = getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + SampleDAO sampleDAO = getEchoBasePersistenceContext().getSampleDAO(); + SampleDataDAO sampleDataDAO = getEchoBasePersistenceContext().getSampleDataDAO(); + SampleTypeDAO sampleTypeDAO = getEchoBasePersistenceContext().getSampleTypeDAO(); + SpeciesCategoryDAO speciesCategoryDAO = getEchoBasePersistenceContext().getSpeciesCategoryDAO(); - SampleType sampleTypeIndividual = findByProperties(sampleTypeDAO, SampleType.PROPERTY_NAME, SampleTypeImpl.INDIVIDUAL_SAMPLE_TYPE); + SampleType sampleTypeIndividual = sampleTypeDAO.findByProperties(SampleType.PROPERTY_NAME, SampleTypeImpl.INDIVIDUAL_SAMPLE_TYPE); Preconditions.checkNotNull(sampleTypeIndividual); Map<String, Sample> samples = Maps.newTreeMap(); @@ -538,7 +538,7 @@ SampleData sampleData = row.getSampleData(); - SampleData sampleDataCreated = create(sampleDataDAO, sampleData); + SampleData sampleDataCreated = sampleDataDAO.create(sampleData); sample.addSampleData(sampleDataCreated); importResult.incrementsNumberCreated(EchoBaseEntityEnum.SampleData); } @@ -557,7 +557,7 @@ EchoBaseCsvFileImportResult importResult) { Preconditions.checkNotNull(operation); Preconditions.checkNotNull(sample); - Sample result = create(dao, sample); + Sample result = dao.create(sample); operation.addSample(result); // collect ids @@ -571,8 +571,7 @@ float value, Sample sample, EchoBaseCsvFileImportResult importResult) { - SampleData sampleData = create( - dao, + SampleData sampleData = dao.create( SampleData.PROPERTY_SAMPLE_DATA_TYPE, sampleDataType, SampleData.PROPERTY_DATA_VALUE, value, SampleData.PROPERTY_DATA_LABEL, label Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CellPositionReference.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CellPositionReference.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CellPositionReference.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import fr.ifremer.echobase.I18nAble; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonAllImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonAllImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonAllImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.entities.EchoBaseUser; @@ -47,13 +47,13 @@ EchoBaseCsvFileImportResult importResult; - importResult = getService(CommonVoyageImportService.class).importFile(configuration); + importResult = newService(CommonVoyageImportService.class).importFile(configuration); configuration.addResult(importResult); - importResult = getService(CommonTransitImportService.class).importFile(configuration, false); + importResult = newService(CommonTransitImportService.class).importFile(configuration, false); configuration.addResult(importResult); - importResult = getService(CommonTransectImportService.class).importFile(vesselMap, configuration, false); + importResult = newService(CommonTransectImportService.class).importFile(vesselMap, configuration, false); configuration.addResult(importResult); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonImportConfiguration.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonImportConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import fr.ifremer.echobase.io.InputFile; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.base.Preconditions; import fr.ifremer.echobase.EchoBaseTechnicalException; @@ -50,19 +50,19 @@ switch (importMode) { case COMMON_ALL: - service = getService(CommonAllImportService.class); + service = newService(CommonAllImportService.class); break; case COMMON_VOYAGE: - service = getService(CommonVoyageImportService.class); + service = newService(CommonVoyageImportService.class); break; case COMMON_TRANSIT: - service = getService(CommonTransitImportService.class); + service = newService(CommonTransitImportService.class); break; case COMMON_TRANSECT: - service = getService(CommonTransectImportService.class); + service = newService(CommonTransectImportService.class); break; default: @@ -77,7 +77,7 @@ Preconditions.checkNotNull(mission); try { - MissionDAO dao = getDAO(Mission.class, MissionDAO.class); + MissionDAO dao = getEchoBasePersistenceContext().getMissionDAO(); // check mission name is unique boolean exists = dao.existByProperties(Mission.PROPERTY_NAME, @@ -86,8 +86,8 @@ if (exists) { throw new MissionNameAlreadyExistException(); } - Mission result = create(dao, mission); - commitTransaction("Could not create mission " + mission.getName()); + Mission result = getEchoBasePersistenceContext().getMissionDAO().create(mission); + getEchoBasePersistenceContext().commitTransaction(); return result; } catch (TopiaException eee) { throw new EchoBaseTechnicalException(eee); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonTransectImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonTransectImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonTransectImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseFunctions; @@ -33,8 +33,8 @@ import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.TransectImportModel; -import fr.ifremer.echobase.services.importdata.csv.TransectImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.TransectImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.TransectImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -89,7 +89,7 @@ EchoBaseCsvFileImportResult importResult = newImportResult(inputFile); // get voyage - Voyage voyage = getEntityById(Voyage.class, + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, configuration.getVoyageId()); // restrict voyage to use to this voyage @@ -107,7 +107,7 @@ voyageMap, vesselMap); - TransectDAO dao = getDAO(Transect.class, TransectDAO.class); + TransectDAO dao = getEchoBasePersistenceContext().getTransectDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -137,7 +137,7 @@ geospatialVerticalPositive); transect.setBinUnitsPingAxis(binUnitsPingAxis); - Transect createdTransect = create(dao, transect); + Transect createdTransect = dao.create(transect); transit.addTransect(createdTransect); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonTransitImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonTransitImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonTransitImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; /* * #%L @@ -31,8 +31,8 @@ import fr.ifremer.echobase.entities.data.TransitDAO; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.TransitImportModel; -import fr.ifremer.echobase.services.importdata.csv.TransitImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.TransitImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.TransitImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -77,7 +77,7 @@ EchoBaseCsvFileImportResult importResult = newImportResult(inputFile); // get voyage - Voyage voyage = getEntityById(Voyage.class, + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, configuration.getVoyageId()); // restrict voyage to use to this voyage @@ -89,7 +89,7 @@ TransitImportModel csvModel = new TransitImportModel(getCsvSeparator(), voyageMap); - TransitDAO dao = getDAO(Transit.class, TransitDAO.class); + TransitDAO dao = getEchoBasePersistenceContext().getTransitDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -104,7 +104,7 @@ transit.setRelatedActivity(relatedActivity); - Transit createdTransit = create(dao, transit); + Transit createdTransit = dao.create(transit); voyage.addTransit(createdTransit); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonVoyageImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonVoyageImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/CommonVoyageImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; /* * #%L @@ -30,7 +30,7 @@ import fr.ifremer.echobase.entities.references.AreaOfOperation; import fr.ifremer.echobase.entities.references.Mission; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.VoyageImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.VoyageImportModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -75,10 +75,10 @@ inputFile.getFileName()); } - Mission mission = getEntityById(Mission.class, + Mission mission = getEchoBasePersistenceContext().getEntityById(Mission.class, configuration.getMissionId()); AreaOfOperation areaOfOperation = - getEntityById(AreaOfOperation.class, + getEchoBasePersistenceContext().getEntityById(AreaOfOperation.class, configuration.getAreaOfOperationId()); EchoBaseCsvFileImportResult result = newImportResult(inputFile); @@ -86,7 +86,7 @@ String voyageDescription = configuration.getVoyageDescription(); String datum = configuration.getDatum(); - VoyageDAO dao = getDAO(Voyage.class, VoyageDAO.class); + VoyageDAO dao = getEchoBasePersistenceContext().getVoyageDAO(); ImportModel<Voyage> csvModel = new VoyageImportModel(getCsvSeparator()); @@ -106,7 +106,7 @@ voyage.setDescription(voyageDescription); voyage.setDatum(datum); - Voyage createdVoyage = create(dao, voyage); + Voyage createdVoyage = dao.create(voyage); if (newVoyage == null) { newVoyage = createdVoyage; } else { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/EchoBaseCsvFileImportResult.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/EchoBaseCsvFileImportResult.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/EchoBaseCsvFileImportResult.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; /* * #%L Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ImportException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ImportException.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ImportException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import fr.ifremer.echobase.io.InputFile; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/MissionNameAlreadyExistException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/MissionNameAlreadyExistException.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/MissionNameAlreadyExistException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; /** * TODO Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/OperationImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/OperationImportConfiguration.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/OperationImportConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.io.InputFile; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/OperationImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/OperationImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/OperationImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseFunctions; @@ -42,12 +42,12 @@ import fr.ifremer.echobase.entities.references.OperationMetadata; import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.GearMetadataValueImportModel; -import fr.ifremer.echobase.services.importdata.csv.GearMetadataValueImportRow; -import fr.ifremer.echobase.services.importdata.csv.OperationImportModel; -import fr.ifremer.echobase.services.importdata.csv.OperationImportRow; -import fr.ifremer.echobase.services.importdata.csv.OperationMetadataValueImportModel; -import fr.ifremer.echobase.services.importdata.csv.OperationMetadataValueImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.GearMetadataValueImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.GearMetadataValueImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.OperationImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.OperationImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.OperationMetadataValueImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.OperationMetadataValueImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -76,7 +76,7 @@ EchoBaseUser user) throws ImportException { // get selected voyage - Voyage voyage = getEntityById(Voyage.class, + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, configuration.getVoyageId()); // get usable vessels from the voyage by their name @@ -139,7 +139,7 @@ gearMap, depthStratumMap); - OperationDAO dao = getDAO(Operation.class, OperationDAO.class); + OperationDAO dao = getEchoBasePersistenceContext().getOperationDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -162,7 +162,7 @@ Transect transect = transit.getTransect(vessel); - Operation createdOperation = create(dao, operation); + Operation createdOperation = dao.create(operation); // collect ids importResult.addId(EchoBaseEntityEnum.Operation, @@ -203,9 +203,8 @@ operationMetadatasByName, operationMap); - OperationMetadataValueDAO dao = getDAO( - OperationMetadataValue.class, - OperationMetadataValueDAO.class); + OperationMetadataValueDAO dao = + getEchoBasePersistenceContext().getOperationMetadataValueDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -221,8 +220,8 @@ OperationMetadataValue operationMetadataValueToCreate = row.getOperationMetadataValue(); - OperationMetadataValue operationMetadataValue = create( - dao, operationMetadataValueToCreate); + OperationMetadataValue operationMetadataValue = dao.create( + operationMetadataValueToCreate); operation.addOperationMetadataValue(operationMetadataValue); importResult.incrementsNumberCreated(EchoBaseEntityEnum.OperationMetadataValue); @@ -261,8 +260,8 @@ gearMap, operationMap); - GearMetadataValueDAO dao = getDAO(GearMetadataValue.class, - GearMetadataValueDAO.class); + GearMetadataValueDAO dao = + getEchoBasePersistenceContext().getGearMetadataValueDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -278,8 +277,8 @@ GearMetadataValue gearMetadataValuetoCreate = row.getGearMetadataValue(); - GearMetadataValue gearMetadataValue = create( - dao, gearMetadataValuetoCreate); + GearMetadataValue gearMetadataValue = dao.create( + gearMetadataValuetoCreate); operation.addGearMetadataValue(gearMetadataValue); importResult.incrementsNumberCreated(EchoBaseEntityEnum.GearMetadataValue); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsEsduCellImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsEsduCellImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseFunctions; @@ -32,7 +32,6 @@ import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.DataProcessing; import fr.ifremer.echobase.entities.data.Echotype; -import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.entities.data.ResultDAO; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AgeCategory; @@ -42,17 +41,16 @@ import fr.ifremer.echobase.entities.references.SizeCategory; import fr.ifremer.echobase.entities.references.SizeCategoryDAO; import fr.ifremer.echobase.entities.references.Species; -import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.entities.references.SpeciesCategoryDAO; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.EsduResultByEchotypeAndSpeciesCategoryImportModel; -import fr.ifremer.echobase.services.importdata.csv.EsduResultByEchotypeAndSpeciesCategoryImportRow; -import fr.ifremer.echobase.services.importdata.csv.EsduResultByEchotypeImportModel; -import fr.ifremer.echobase.services.importdata.csv.EsduResultByEchotypeImportRow; -import fr.ifremer.echobase.services.importdata.csv.EsduResultBySpeciesAndAgeCategoryImportModel; -import fr.ifremer.echobase.services.importdata.csv.EsduResultBySpeciesAndAgeCategoryImportRow; -import fr.ifremer.echobase.services.importdata.csv.EsduResultBySpeciesAndSizeCategoryImportModel; -import fr.ifremer.echobase.services.importdata.csv.EsduResultBySpeciesAndSizeCategoryImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.EsduResultByEchotypeAndSpeciesCategoryImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.EsduResultByEchotypeAndSpeciesCategoryImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.EsduResultByEchotypeImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.EsduResultByEchotypeImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.EsduResultBySpeciesAndAgeCategoryImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.EsduResultBySpeciesAndAgeCategoryImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.EsduResultBySpeciesAndSizeCategoryImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.EsduResultBySpeciesAndSizeCategoryImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -100,11 +98,11 @@ // get selected voyage - Voyage voyage = getEntityById(Voyage.class, + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, configuration.getVoyageId()); // get selected dataProcessing - DataProcessing dataProcessing = getEntityById( + DataProcessing dataProcessing = getEchoBasePersistenceContext().getEntityById( DataProcessing.class, configuration.getDataProcessingId()); @@ -220,8 +218,8 @@ metas, dataQualityMap); - CategoryDAO categoryDAO = (CategoryDAO) getDAO(Category.class); - ResultDAO dao = getDAO(Result.class, ResultDAO.class); + CategoryDAO categoryDAO = getEchoBasePersistenceContext().getCategoryDAO(); + ResultDAO dao = getEchoBasePersistenceContext().getResultDAO(); String resultLabel = configuration.getResultLabel(); @@ -285,11 +283,12 @@ header); SpeciesCategoryDAO speciesCategoryDAO = - getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + getEchoBasePersistenceContext().getSpeciesCategoryDAO(); - CategoryDAO categoryDAO = getDAO(Category.class, CategoryDAO.class); + CategoryDAO categoryDAO = + getEchoBasePersistenceContext().getCategoryDAO(); - ResultDAO dao = getDAO(Result.class, ResultDAO.class); + ResultDAO dao = getEchoBasePersistenceContext().getResultDAO(); EsduResultByEchotypeAndSpeciesCategoryImportModel csvModel = new EsduResultByEchotypeAndSpeciesCategoryImportModel( getCsvSeparator(), @@ -365,12 +364,11 @@ header); SpeciesCategoryDAO speciesCategoryDAO = - getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + getEchoBasePersistenceContext().getSpeciesCategoryDAO(); SizeCategoryDAO sizeCategoryDAO = - getDAO(SizeCategory.class, SizeCategoryDAO.class); + getEchoBasePersistenceContext().getSizeCategoryDAO(); - ResultDAO dao = getDAO(Result.class, ResultDAO.class); EsduResultBySpeciesAndSizeCategoryImportModel csvModel = new EsduResultBySpeciesAndSizeCategoryImportModel( getCsvSeparator(), @@ -381,7 +379,8 @@ metas, dataQualityMap); - CategoryDAO categoryDAO = (CategoryDAO) getDAO(Category.class); + CategoryDAO categoryDAO = getEchoBasePersistenceContext().getCategoryDAO(); + ResultDAO dao = getEchoBasePersistenceContext().getResultDAO(); String resultLabel = configuration.getResultLabel(); @@ -406,8 +405,7 @@ if (sizeCategory == null) { // create a new sizeCategory - sizeCategory = create( - sizeCategoryDAO, + sizeCategory = sizeCategoryDAO.create( SizeCategory.PROPERTY_NAME, sizeCategoryName, SizeCategory.PROPERTY_MEANING, row.getSizeCategoryMeaning() ); @@ -468,13 +466,12 @@ header); SpeciesCategoryDAO speciesCategoryDAO = - getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + getEchoBasePersistenceContext().getSpeciesCategoryDAO(); AgeCategoryDAO ageCategoryDAO = - getDAO(AgeCategory.class, AgeCategoryDAO.class); - CategoryDAO categoryDAO = (CategoryDAO) getDAO(Category.class); + getEchoBasePersistenceContext().getAgeCategoryDAO(); + CategoryDAO categoryDAO = getEchoBasePersistenceContext().getCategoryDAO(); + ResultDAO dao = getEchoBasePersistenceContext().getResultDAO(); - ResultDAO dao = getDAO(Result.class, ResultDAO.class); - EsduResultBySpeciesAndAgeCategoryImportModel csvModel = new EsduResultBySpeciesAndAgeCategoryImportModel( getCsvSeparator(), voyageMap, @@ -507,8 +504,7 @@ if (ageCategory == null) { // create a new sizeCategory - ageCategory = create( - ageCategoryDAO, + ageCategory = ageCategoryDAO.create( AgeCategory.PROPERTY_NAME, ageCategoryName, AgeCategory.PROPERTY_MEANING, row.getAgeCategoryMeaning() ); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsImportConfiguration.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import fr.ifremer.echobase.io.InputFile; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseTechnicalException; @@ -32,7 +32,7 @@ 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.services.DecoratorService; +import fr.ifremer.echobase.services.service.DecoratorService; import org.nuiton.decorator.Decorator; import java.util.Map; @@ -56,27 +56,27 @@ switch (importMode) { case RESULT_VOYAGE: - service = getService(ResultsVoyageImportService.class); + service = newService(ResultsVoyageImportService.class); break; case RESULT_ESDU: - service = getService(ResultsEsduCellImportService.class); + service = newService(ResultsEsduCellImportService.class); break; case RESULT_REGION: - service = getService(ResultsRegionCellImportService.class); + service = newService(ResultsRegionCellImportService.class); break; case RESULT_MAP_FISH: - service = getService(ResultsMapFishCellImportService.class); + service = newService(ResultsMapFishCellImportService.class); break; case RESULT_MAP_OTHER: - service = getService(ResultsMapOtherCellImportService.class); + service = newService(ResultsMapOtherCellImportService.class); break; default: throw new EchoBaseTechnicalException( @@ -89,7 +89,7 @@ Map<String, String> result = Maps.newLinkedHashMap(); - DecoratorService service = getService(DecoratorService.class); + DecoratorService service = getDecoratorService(); Decorator<Transit> transitDecorator = service.getDecorator(getLocale(), Transit.class, null); Decorator<Transect> transectDecorator = service.getDecorator(getLocale(), Transect.class, null); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsMapFishCellImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsMapFishCellImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsMapFishCellImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; @@ -32,22 +32,21 @@ import fr.ifremer.echobase.entities.data.CategoryDAO; 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.DataDAO; -import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.entities.data.ResultDAO; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AgeCategory; import fr.ifremer.echobase.entities.references.CellType; +import fr.ifremer.echobase.entities.references.CellTypeDAO; import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.entities.references.DataMetadataDAO; import fr.ifremer.echobase.entities.references.DataQuality; import fr.ifremer.echobase.entities.references.SizeCategory; import fr.ifremer.echobase.entities.references.Species; -import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.entities.references.SpeciesCategoryDAO; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.MapCellImportModel; -import fr.ifremer.echobase.services.importdata.csv.MapCellImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.MapCellImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.MapCellImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -77,8 +76,8 @@ EchoBaseUser user) throws ImportException { // get selected voyage - Voyage voyage = getEntityById(Voyage.class, - configuration.getVoyageId()); + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, + configuration.getVoyageId()); EchoBaseCsvFileImportResult importResult; importResult = importMapFile(configuration, voyage); @@ -98,32 +97,28 @@ String resultLabel = configuration.getResultLabel(); - CellType cellType = getEntityByProperty( - CellType.class, CellType.PROPERTY_ID, "Map"); + CellTypeDAO cellTypeDAO = getEchoBasePersistenceContext().getCellTypeDAO(); + CellType cellType = cellTypeDAO.findById("Map"); Preconditions.checkNotNull(cellType); - DataMetadata dataLongitudeMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridCellLongitude"); + DataMetadataDAO dataMetadataDAO = + getEchoBasePersistenceContext().getDataMetadataDAO(); + DataMetadata dataLongitudeMeta = dataMetadataDAO.findByName("GridCellLongitude"); Preconditions.checkNotNull(dataLongitudeMeta); - DataMetadata dataLatitudeMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridCellLatitude"); + DataMetadata dataLatitudeMeta = dataMetadataDAO.findByName("GridCellLatitude"); Preconditions.checkNotNull(dataLatitudeMeta); - DataMetadata dataDepthMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridCellDepth"); + DataMetadata dataDepthMeta = dataMetadataDAO.findByName("GridCellDepth"); Preconditions.checkNotNull(dataDepthMeta); - DataMetadata dataLongitudeLagMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridLongitudeLag"); + DataMetadata dataLongitudeLagMeta = dataMetadataDAO.findByName("GridLongitudeLag"); Preconditions.checkNotNull(dataLongitudeLagMeta); - DataMetadata dataLatitudeLagMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridLatitudeLag"); + DataMetadata dataLatitudeLagMeta = dataMetadataDAO.findByName("GridLatitudeLag"); Preconditions.checkNotNull(dataLatitudeLagMeta); - DataMetadata dataDepthLagMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridDepthLag"); + DataMetadata dataDepthLagMeta = dataMetadataDAO.findByName("GridDepthLag"); Preconditions.checkNotNull(dataDepthLagMeta); // authorize only the selected voyage to be imported @@ -168,13 +163,17 @@ EchoBaseCsvFileImportResult importResult = newImportResult(inputFile); - CellDAO dao = getDAO(Cell.class, CellDAO.class); - DataDAO dataDao = getDAO(Data.class, DataDAO.class); - ResultDAO resultDao = getDAO(Result.class, ResultDAO.class); + CellDAO dao = getEchoBasePersistenceContext().getCellDAO(); SpeciesCategoryDAO speciesCategoryDAO = - getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); - CategoryDAO categoryDAO = getDAO(Category.class, CategoryDAO.class); + getEchoBasePersistenceContext().getSpeciesCategoryDAO(); + CategoryDAO categoryDAO = + getEchoBasePersistenceContext().getCategoryDAO(); + + + DataDAO dataDao = getEchoBasePersistenceContext().getDataDAO(); + ResultDAO resultDao = getEchoBasePersistenceContext().getResultDAO(); + Reader reader = getInputFileReader(inputFile); try { Import<MapCellImportRow> importer = @@ -187,7 +186,7 @@ doFlushTransaction(++rowNumber, inputFile, configuration); - Cell cell = create(dao, row.getCell()); + Cell cell = dao.create(row.getCell()); voyage.addPostCell(cell); // collect ids Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsMapOtherCellImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsMapOtherCellImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsMapOtherCellImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; /* * #%L @@ -30,17 +30,17 @@ 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.DataDAO; -import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.entities.data.ResultDAO; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.CellType; +import fr.ifremer.echobase.entities.references.CellTypeDAO; import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.entities.references.DataMetadataDAO; import fr.ifremer.echobase.entities.references.DataQuality; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.MapCellImportModel; -import fr.ifremer.echobase.services.importdata.csv.MapCellImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.MapCellImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.MapCellImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -70,8 +70,8 @@ EchoBaseUser user) throws ImportException { // get selected voyage - Voyage voyage = getEntityById(Voyage.class, - configuration.getVoyageId()); + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, + configuration.getVoyageId()); EchoBaseCsvFileImportResult importResult; importResult = importMapFile(configuration, voyage); @@ -91,32 +91,29 @@ String resultLabel = configuration.getResultLabel(); - CellType cellType = getEntityByProperty( - CellType.class, CellType.PROPERTY_ID, "Map"); + CellTypeDAO cellTypeDAO = getEchoBasePersistenceContext().getCellTypeDAO(); + CellType cellType = cellTypeDAO.findById("Map"); Preconditions.checkNotNull(cellType); - DataMetadata dataLongitudeMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridCellLongitude"); + DataMetadataDAO dataMetadataDAO = + getEchoBasePersistenceContext().getDataMetadataDAO(); + + DataMetadata dataLongitudeMeta = dataMetadataDAO.findByName("GridCellLongitude"); Preconditions.checkNotNull(dataLongitudeMeta); - DataMetadata dataLatitudeMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridCellLatitude"); + DataMetadata dataLatitudeMeta = dataMetadataDAO.findByName("GridCellLatitude"); Preconditions.checkNotNull(dataLatitudeMeta); - DataMetadata dataDepthMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridCellDepth"); + DataMetadata dataDepthMeta = dataMetadataDAO.findByName("GridCellDepth"); Preconditions.checkNotNull(dataDepthMeta); - DataMetadata dataLongitudeLagMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridLongitudeLag"); + DataMetadata dataLongitudeLagMeta = dataMetadataDAO.findByName("GridLongitudeLag"); Preconditions.checkNotNull(dataLongitudeLagMeta); - DataMetadata dataLatitudeLagMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridLatitudeLag"); + DataMetadata dataLatitudeLagMeta = dataMetadataDAO.findByName("GridLatitudeLag"); Preconditions.checkNotNull(dataLatitudeLagMeta); - DataMetadata dataDepthLagMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "GridDepthLag"); + DataMetadata dataDepthLagMeta = dataMetadataDAO.findByName("GridDepthLag"); Preconditions.checkNotNull(dataDepthLagMeta); // authorize only the selected voyage to be imported @@ -147,9 +144,9 @@ EchoBaseCsvFileImportResult importResult = newImportResult(inputFile); - CellDAO dao = getDAO(Cell.class, CellDAO.class); - DataDAO dataDao = getDAO(Data.class, DataDAO.class); - ResultDAO resultDao = getDAO(Result.class, ResultDAO.class); + CellDAO dao = getEchoBasePersistenceContext().getCellDAO(); + DataDAO dataDao = getEchoBasePersistenceContext().getDataDAO(); + ResultDAO resultDao = getEchoBasePersistenceContext().getResultDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -163,7 +160,7 @@ doFlushTransaction(++rowNumber, inputFile, configuration); - Cell cell = create(dao, row.getCell()); + Cell cell = dao.create(row.getCell()); voyage.addPostCell(cell); // collect ids Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsRegionCellImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsRegionCellImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsRegionCellImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; @@ -32,26 +32,25 @@ import fr.ifremer.echobase.entities.data.CategoryDAO; 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.DataDAO; import fr.ifremer.echobase.entities.data.Echotype; -import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.entities.data.ResultDAO; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.CellType; +import fr.ifremer.echobase.entities.references.CellTypeDAO; import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.entities.references.DataMetadataDAO; import fr.ifremer.echobase.entities.references.DataQuality; import fr.ifremer.echobase.entities.references.SizeCategory; import fr.ifremer.echobase.entities.references.Species; -import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.entities.references.SpeciesCategoryDAO; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.RegionCellAssociationImportModel; -import fr.ifremer.echobase.services.importdata.csv.RegionCellAssociationImportRow; -import fr.ifremer.echobase.services.importdata.csv.RegionCellImportModel; -import fr.ifremer.echobase.services.importdata.csv.RegionCellImportRow; -import fr.ifremer.echobase.services.importdata.csv.RegionCellResultImportModel; -import fr.ifremer.echobase.services.importdata.csv.RegionCellResultImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.RegionCellAssociationImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.RegionCellAssociationImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.RegionCellImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.RegionCellImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.RegionCellResultImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.RegionCellResultImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; @@ -81,8 +80,8 @@ EchoBaseUser user) throws ImportException { // get selected voyage - Voyage voyage = getEntityById(Voyage.class, - configuration.getVoyageId()); + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, + configuration.getVoyageId()); Map<String, DataQuality> dataQualityMap = getEntitiesMap( DataQuality.class, EchoBaseFunctions.DATA_QUALITY_NAME); @@ -106,21 +105,21 @@ InputFile inputFile = configuration.getRegionsFile(); - CellType cellSurfaceType = getEntityByProperty( - CellType.class, CellType.PROPERTY_ID, "RegionSURF"); + CellTypeDAO cellTypeDAO = getEchoBasePersistenceContext().getCellTypeDAO(); + + CellType cellSurfaceType = cellTypeDAO.findById("RegionSURF"); Preconditions.checkNotNull(cellSurfaceType); - CellType cellBottomType = getEntityByProperty( - CellType.class, CellType.PROPERTY_ID, "RegionCLAS"); + CellType cellBottomType = cellTypeDAO.findById("RegionCLAS"); Preconditions.checkNotNull(cellBottomType); - DataMetadata dataCoordinateMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, - "RegionEnvCoordinates"); + DataMetadataDAO dataMetadataDAO = + getEchoBasePersistenceContext().getDataMetadataDAO(); + + DataMetadata dataCoordinateMeta = dataMetadataDAO.findByName("RegionEnvCoordinates"); Preconditions.checkNotNull(dataCoordinateMeta); - DataMetadata dataSurfaceMeta = getEntityByProperty( - DataMetadata.class, DataMetadata.PROPERTY_NAME, "Surface"); + DataMetadata dataSurfaceMeta = dataMetadataDAO.findByName("Surface"); Preconditions.checkNotNull(dataSurfaceMeta); // authorize only the selected voyage to be imported @@ -146,8 +145,8 @@ EchoBaseCsvFileImportResult importResult = newImportResult(inputFile); - CellDAO dao = getDAO(Cell.class, CellDAO.class); - DataDAO dataDao = getDAO(Data.class, DataDAO.class); + CellDAO dao = getEchoBasePersistenceContext().getCellDAO(); + DataDAO dataDao = getEchoBasePersistenceContext().getDataDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -163,9 +162,9 @@ doFlushTransaction(++rowNumber, inputFile, configuration); if (cell == null || !row.getName().equals(cell.getName())) { - cell = create(dao, - Cell.PROPERTY_CELL_TYPE, row.getCellType(), - Cell.PROPERTY_NAME, row.getName() + cell = dao.create( + Cell.PROPERTY_CELL_TYPE, row.getCellType(), + Cell.PROPERTY_NAME, row.getName() ); voyage.addPostCell(cell); @@ -218,12 +217,14 @@ Map<String, Cell> regionsMap = Maps.uniqueIndex( voyage.getRegionCells(), EchoBaseFunctions.CELL_BY_NAME); + CellDAO dao = getEchoBasePersistenceContext().getCellDAO(); + RegionCellAssociationImportModel csvModel = new RegionCellAssociationImportModel( getCsvSeparator(), voyage, voyageMap, regionsMap, - getDAO(Cell.class, CellDAO.class)); + dao); EchoBaseCsvFileImportResult importResult = newImportResult(inputFile); @@ -310,9 +311,9 @@ EchoBaseCsvFileImportResult importResult = newImportResult(inputFile); SpeciesCategoryDAO speciesCategoryDAO = - getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); - CategoryDAO categoryDAO = getDAO(Category.class, CategoryDAO.class); - ResultDAO dao = getDAO(Result.class, ResultDAO.class); + getEchoBasePersistenceContext().getSpeciesCategoryDAO(); + CategoryDAO categoryDAO = getEchoBasePersistenceContext().getCategoryDAO(); + ResultDAO dao = getEchoBasePersistenceContext().getResultDAO(); Reader reader = getInputFileReader(inputFile); try { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsVoyageImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata; +package fr.ifremer.echobase.services.service.importdata; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; @@ -42,17 +42,17 @@ import fr.ifremer.echobase.entities.references.SpeciesCategoryDAO; import fr.ifremer.echobase.entities.references.Strata; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.csv.EchotypeImportModel; -import fr.ifremer.echobase.services.importdata.csv.EchotypeImportRow; -import fr.ifremer.echobase.services.importdata.csv.LengthAgeKeyImportModel; -import fr.ifremer.echobase.services.importdata.csv.LengthAgeKeyImportRow; -import fr.ifremer.echobase.services.importdata.csv.LengthWeightKeyImportModel; -import fr.ifremer.echobase.services.importdata.csv.LengthWeightKeyImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.EchotypeImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.EchotypeImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.LengthAgeKeyImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.LengthAgeKeyImportRow; +import fr.ifremer.echobase.services.service.importdata.csv.LengthWeightKeyImportModel; +import fr.ifremer.echobase.services.service.importdata.csv.LengthWeightKeyImportRow; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.csv.Import; import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.topia.persistence.TopiaDAO; import java.io.Reader; import java.util.Arrays; @@ -83,7 +83,7 @@ Strata.class, EchoBaseFunctions.STRATA_BY_NAME); // get selected voyage - Voyage voyage = getEntityById(Voyage.class, + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, configuration.getVoyageId()); // authorize only the selected voyage to be imported @@ -159,11 +159,10 @@ sizeCategoryMap, speciesMap); - LengthWeightKeyDAO dao = getDAO(LengthWeightKey.class, - LengthWeightKeyDAO.class); + LengthWeightKeyDAO dao = getEchoBasePersistenceContext().getLengthWeightKeyDAO(); SpeciesCategoryDAO speciesCategoryDAO = - getDAO(SpeciesCategory.class, SpeciesCategoryDAO.class); + getEchoBasePersistenceContext().getSpeciesCategoryDAO(); Reader reader = getInputFileReader(inputFile); @@ -191,7 +190,7 @@ LengthWeightKey toCreate = row.getLengthWeightKey(); toCreate.setSpeciesCategory(speciesCategory); - LengthWeightKey lengthWeightKey = create(dao, toCreate); + LengthWeightKey lengthWeightKey = dao.create(toCreate); //TODO should we import it ? //lengthWeightKey.setMetadata(row.getMetadata()); @@ -232,7 +231,7 @@ strataMap, speciesMap); - TopiaDAO<LengthAgeKey> dao = getDAO(LengthAgeKey.class); + TopiaDAO<LengthAgeKey> dao = getEchoBasePersistenceContext().getLengthAgeKeyDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -249,7 +248,7 @@ Voyage voyage = row.getVoyage(); LengthAgeKey lengthAgeKeyToCreate = row.getLengthAgeKey(); - LengthAgeKey lengthAgeKey = create(dao, lengthAgeKeyToCreate); + LengthAgeKey lengthAgeKey = dao.create(lengthAgeKeyToCreate); // attach it to voyage voyage.addLengthAgeKey(lengthAgeKey); @@ -289,7 +288,7 @@ depthStratumMap, speciesMap); - TopiaDAO<Echotype> dao = getDAO(Echotype.class); + TopiaDAO<Echotype> dao = getEchoBasePersistenceContext().getEchotypeDAO(); Reader reader = getInputFileReader(inputFile); try { @@ -325,7 +324,7 @@ if (echotype == null) { // creates it - echotype = create(dao, rowEchotype); + echotype = dao.create(rowEchotype); // attach it to voyage voyage.addEchotype(echotype); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/AcousticImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Cell; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/AcousticImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.references.AcousticInstrument; import fr.ifremer.echobase.entities.references.DataQuality; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/BiometrySampleImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/BiometrySampleImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/BiometrySampleImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Operation; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/BiometrySampleImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/BiometrySampleImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/BiometrySampleImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.SampleData; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EchotypeImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EchotypeImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EchotypeImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Echotype; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EchotypeImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EchotypeImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EchotypeImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Echotype; import fr.ifremer.echobase.entities.data.EchotypeImpl; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeAndSpeciesCategoryImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EsduResultByEchotypeAndSpeciesCategoryImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeAndSpeciesCategoryImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Cell; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeAndSpeciesCategoryImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EsduResultByEchotypeAndSpeciesCategoryImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeAndSpeciesCategoryImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import com.google.common.collect.Lists; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EsduResultByEchotypeImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Cell; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EsduResultByEchotypeImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultByEchotypeImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import com.google.common.collect.Lists; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndAgeCategoryImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EsduResultBySpeciesAndAgeCategoryImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndAgeCategoryImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Cell; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndAgeCategoryImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EsduResultBySpeciesAndAgeCategoryImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndAgeCategoryImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import com.google.common.collect.Lists; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndSizeCategoryImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EsduResultBySpeciesAndSizeCategoryImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndSizeCategoryImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Cell; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndSizeCategoryImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/EsduResultBySpeciesAndSizeCategoryImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/EsduResultBySpeciesAndSizeCategoryImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import com.google.common.collect.Lists; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/GearMetadataValueImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/GearMetadataValueImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/GearMetadataValueImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.GearMetadataValue; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/GearMetadataValueImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/GearMetadataValueImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/GearMetadataValueImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.GearMetadataValue; import fr.ifremer.echobase.entities.data.GearMetadataValueImpl; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthAgeKeyImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/LengthAgeKeyImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthAgeKeyImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.LengthAgeKey; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthAgeKeyImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/LengthAgeKeyImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthAgeKeyImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.LengthAgeKey; import fr.ifremer.echobase.entities.data.LengthAgeKeyImpl; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthWeightKeyImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/LengthWeightKeyImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthWeightKeyImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.LengthWeightKey; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthWeightKeyImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/LengthWeightKeyImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/LengthWeightKeyImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.LengthWeightKey; import fr.ifremer.echobase.entities.data.LengthWeightKeyImpl; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MapCellImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/MapCellImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MapCellImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Voyage; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MapCellImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/MapCellImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MapCellImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import com.google.common.collect.Lists; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/OperationImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Operation; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/OperationImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.OperationImpl; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationMetadataValueImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/OperationMetadataValueImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationMetadataValueImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Operation; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationMetadataValueImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/OperationMetadataValueImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/OperationMetadataValueImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.OperationMetadataValue; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellAssociationImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/RegionCellAssociationImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellAssociationImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Cell; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellAssociationImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/RegionCellAssociationImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellAssociationImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Voyage; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/RegionCellImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Voyage; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/RegionCellImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.CellType; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellResultImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/RegionCellResultImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellResultImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Cell; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellResultImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/RegionCellResultImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/RegionCellResultImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import com.google.common.collect.Lists; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/SubSampleImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/SubSampleImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/SubSampleImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Operation; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/SubSampleImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/SubSampleImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/SubSampleImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.Sample; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/TotalSampleImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Operation; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/TotalSampleImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TotalSampleImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.Sample; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransectImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/TransectImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransectImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Transect; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransectImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/TransectImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransectImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.TransectImpl; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransitImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/TransitImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransitImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Transit; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransitImportRow.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/TransitImportRow.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/TransitImportRow.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Transit; import fr.ifremer.echobase.entities.data.TransitImpl; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/csv/VoyageImportModel.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageImportModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdata.csv; +package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.data.Voyage; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/EchoBaseImportModelFactory.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/EchoBaseImportModelFactory.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/EchoBaseImportModelFactory.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdb; +package fr.ifremer.echobase.services.service.importdb; /* * #%L @@ -24,7 +24,7 @@ */ import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.csv.EntityCsvModel; @@ -48,7 +48,7 @@ public static ImportModelFactory<EchoBaseEntityEnum> newFactory(EchoBaseServiceSupport service) { return new EchoBaseImportModelFactory( - service.getService(DbEditorService.class), + service.getDbEditorService(), service.getConfiguration().getCsvSeparator() ); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbConfiguration.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdb; +package fr.ifremer.echobase.services.service.importdb; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbMode.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbMode.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbMode.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdb; +package fr.ifremer.echobase.services.service.importdb; /* * #%L Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportDbService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,15 +21,15 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdb; +package fr.ifremer.echobase.services.service.importdb; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.importdata.ImportException; -import fr.ifremer.echobase.services.importdb.strategy.AbstractImportDbStrategy; -import fr.ifremer.echobase.services.importdb.strategy.FreeImportDbStrategy; -import fr.ifremer.echobase.services.importdb.strategy.ReferentialImportDbStrategy; +import fr.ifremer.echobase.services.service.importdata.ImportException; +import fr.ifremer.echobase.services.service.importdb.strategy.AbstractImportDbStrategy; +import fr.ifremer.echobase.services.service.importdb.strategy.FreeImportDbStrategy; +import fr.ifremer.echobase.services.service.importdb.strategy.ReferentialImportDbStrategy; import org.nuiton.topia.TopiaException; import java.io.IOException; @@ -51,10 +51,10 @@ switch (importDbMode) { case REFERENTIAL: - strategy = getService(ReferentialImportDbStrategy.class); + strategy = newService(ReferentialImportDbStrategy.class); break; case FREE: - strategy = getService(FreeImportDbStrategy.class); + strategy = newService(FreeImportDbStrategy.class); break; default: throw new EchoBaseTechnicalException( @@ -71,8 +71,12 @@ if (ImportDbMode.REFERENTIAL != importDbMode) { + // revoke all spatial data cache for all this db + getSpatialDataCache().onDbChanged( + serviceContext.getWorkgingDbUrl()); + // let's update postgis table - updatePostgisTable(); + getSpatialService().updatePostgisTable(); } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -21,14 +21,14 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package fr.ifremer.echobase.services.importdb; +package fr.ifremer.echobase.services.service.importdb; import com.google.common.base.Charsets; import com.google.common.io.Files; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; @@ -64,7 +64,7 @@ ImportModelFactory<EchoBaseEntityEnum> importModelFactory = EchoBaseImportModelFactory.newFactory(this); - DbEditorService service = getService(DbEditorService.class); + DbEditorService service = getDbEditorService(); TableMeta<EchoBaseEntityEnum> meta = service.getTableMeta(entityType); ImportModel<TopiaEntity> csvModel = importModelFactory.buildForImport(meta); @@ -104,7 +104,7 @@ bf.close(); - commitTransaction("Could not commit transaction"); + getEchoBasePersistenceContext().commitTransaction(); } catch (EchoBaseTechnicalException eee) { throw eee; } catch (Exception eee) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/AbstractImportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/AbstractImportDbStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/AbstractImportDbStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdb.strategy; +package fr.ifremer.echobase.services.service.importdb.strategy; /* * #%L @@ -33,9 +33,9 @@ import fr.ifremer.echobase.io.EchoBaseIOUtil; import fr.ifremer.echobase.persistence.EchoBaseDbMeta; import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.importdata.ImportException; -import fr.ifremer.echobase.services.importdb.EchoBaseImportModelFactory; -import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; +import fr.ifremer.echobase.services.service.importdata.ImportException; +import fr.ifremer.echobase.services.service.importdb.EchoBaseImportModelFactory; +import fr.ifremer.echobase.services.service.importdb.ImportDbConfiguration; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -118,8 +118,7 @@ ImportStrategy<EchoBaseEntityEnum> strategy = new EchoBaseImportStrategy( EchoBaseImportModelFactory.newFactory(this), - getTransaction(), - dbMeta.getPersistenceHelper(), + getEchoBasePersistenceContext(), 1000 ); @@ -139,19 +138,19 @@ if (importedVoyages != null && !Iterables.isEmpty(importedVoyages)) { - createImportLogEntry(getDAO(ImportLog.class), + createImportLogEntry(getEchoBasePersistenceContext().getImportLogDAO(), user, file, importedVoyages); } - createLogBookEntry(getDAO(EntityModificationLog.class), + createLogBookEntry(getEchoBasePersistenceContext().getEntityModificationLogDAO(), user, file); zipFile.close(); - commitTransaction("Could not commit db import from file " + file); + getEchoBasePersistenceContext().commitTransaction(); } finally { @@ -223,19 +222,17 @@ s0 = TIME_LOG.log(s0, "importFile::done"); - flushTransaction("Could not flush " + entryDef + " to db."); + getEchoBasePersistenceContext().flush(); TIME_LOG.log(s0, "importFile::flushTransaction"); reader.close(); } finally { IOUtils.closeQuietly(reader); if (commitAfterEachFile) { - commitTransaction( - "Could not commit db import from file " + - zipFile.getName() + "#" + entryDef.getFilename()); + getEchoBasePersistenceContext().commitTransaction(); } - clearCache(); + getEchoBasePersistenceContext().clear(); } } @@ -277,7 +274,7 @@ s0 = TIME_LOG.log(s0, "importFile::done"); - flushTransaction("Could not flush associations to db."); + getEchoBasePersistenceContext().flush(); TIME_LOG.log(s0, "importFile::flushTransaction"); } finally { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/EchoBaseImportStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/EchoBaseImportStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/EchoBaseImportStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdb.strategy; +package fr.ifremer.echobase.services.service.importdb.strategy; /* * #%L @@ -24,10 +24,9 @@ */ import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.persistence.EchoBasePersistenceHelper; +import fr.ifremer.echobase.entities.EchoBasePersistenceContext; import org.nuiton.csv.Import; import org.nuiton.csv.ImportToMap; -import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; @@ -50,20 +49,24 @@ */ public class EchoBaseImportStrategy implements ImportStrategy<EchoBaseEntityEnum> { - private final TopiaContext tx; + private final EchoBasePersistenceContext persistenceContext; - private final EchoBasePersistenceHelper persistenceHelper; +// private final TopiaContext tx; +// private final EchoBasePersistenceHelper persistenceHelper; + private final int nbRowBuffer; private final ImportModelFactory<EchoBaseEntityEnum> modelFactory; public EchoBaseImportStrategy(ImportModelFactory<EchoBaseEntityEnum> modelFactory, - TopiaContext tx, - EchoBasePersistenceHelper persistenceHelper, + EchoBasePersistenceContext persistenceContext, +// TopiaContext tx, +// EchoBasePersistenceHelper persistenceHelper, int nbRowBuffer) { - this.tx = tx; - this.persistenceHelper = persistenceHelper; + this.persistenceContext = persistenceContext; +// this.tx = tx; +// this.persistenceHelper = persistenceHelper; this.nbRowBuffer = nbRowBuffer; this.modelFactory = modelFactory; } @@ -76,7 +79,7 @@ public <E extends TopiaEntity> void importTable(TableMeta<EchoBaseEntityEnum> meta, Import<E> importer, CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { - TopiaDAO<E> dao = persistenceHelper.getDAO(tx, meta.getSource()); + TopiaDAO<E> dao = (TopiaDAO<E>) persistenceContext.getDAO(meta.getSource().getContract()); if (meta.getSource() == EchoBaseEntityEnum.Category) { @@ -92,7 +95,7 @@ public <E extends TopiaEntity> Iterable<E> importTableAndReturnThem(TableMeta<EchoBaseEntityEnum> meta, Import<E> importer, CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { - TopiaDAO<E> dao = persistenceHelper.getDAO(tx, meta.getSource()); + TopiaDAO<E> dao = (TopiaDAO<E>) persistenceContext.getDAO(meta.getSource().getContract()); Iterable<E> result = TopiaCsvImports.importAllEntitiesAndReturnThem( dao, meta, importer, csvResult); @@ -106,13 +109,13 @@ CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { if (getModelFactory().isNMAssociationMeta(meta)) { - TopiaCsvImports.importNMAssociation(tx, + TopiaCsvImports.importNMAssociation(persistenceContext.getContext(), meta, importer, csvResult, nbRowBuffer); } else { - TopiaCsvImports.importAssociation(tx, + TopiaCsvImports.importAssociation(persistenceContext.getContext(), meta, importer, csvResult, @@ -126,7 +129,7 @@ CsvImportResult<T> csvResult, int nbRowBuffer) throws TopiaException { - TopiaContext context = dao.getTopiaContext(); +// TopiaContext context = dao.getTopiaContext(); CsvProgressModel progressModel = csvResult == null ? null : csvResult.getProgressModel(); @@ -144,8 +147,7 @@ compt++; if (compt % nbRowBuffer == 0) { // flush it - persistenceHelper.flushTransaction( - context, "could not flush transaction"); + persistenceContext.getContext().getHibernateSession().flush(); } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/FreeImportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/FreeImportDbStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/FreeImportDbStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdb.strategy; +package fr.ifremer.echobase.services.service.importdb.strategy; /* * #%L @@ -30,13 +30,12 @@ import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.persistence.EchoBaseDbMeta; -import fr.ifremer.echobase.services.DecoratorService; -import fr.ifremer.echobase.services.importdata.ImportException; +import fr.ifremer.echobase.services.service.importdata.ImportException; +import org.nuiton.decorator.Decorator; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.metadata.AssociationMeta; import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.decorator.Decorator; import java.io.File; import java.util.Date; @@ -70,7 +69,8 @@ Iterable<Voyage> importedVoyages) throws TopiaException { Date date = newDate(); - Decorator<Voyage> decorator = getService(DecoratorService.class).getDecorator(getLocale(), Voyage.class, null); + Decorator<Voyage> decorator = getDecoratorService().getDecorator( + getLocale(), Voyage.class, null); for (Voyage importedVoyage : importedVoyages) { // create a importLog entry Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/ReferentialImportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/ReferentialImportDbStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/strategy/ReferentialImportDbStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.importdb.strategy; +package fr.ifremer.echobase.services.service.importdb.strategy; /* * #%L @@ -30,7 +30,7 @@ import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.persistence.EchoBaseDbMeta; -import fr.ifremer.echobase.services.importdata.ImportException; +import fr.ifremer.echobase.services.service.importdata.ImportException; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.metadata.AssociationMeta; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataConfiguration.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataConfiguration.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata; +package fr.ifremer.echobase.services.service.removedata; /* * #%L Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata; +package fr.ifremer.echobase.services.service.removedata; /* * #%L @@ -32,22 +32,21 @@ import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.DecoratorService; import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.removedata.strategy.AbstractRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.AcousticRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.CatchesRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.CommonAllRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.CommonTransectRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.CommonTransitRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.CommonVoyageRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.LegacyVoyageRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.OperationRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.ResultEsduRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.ResultMapFishRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.ResultMapOtherRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.ResultRegionRemoveDataStrategy; -import fr.ifremer.echobase.services.removedata.strategy.ResultVoyageRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.AbstractRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.AcousticRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.CatchesRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.CommonAllRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.CommonTransectRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.CommonTransitRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.CommonVoyageRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.LegacyVoyageRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.OperationRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultEsduRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultMapFishRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultMapOtherRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultRegionRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultVoyageRemoveDataStrategy; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; @@ -121,13 +120,13 @@ Maps.newTreeMap(IMPORT_LOG_COMPARATOR); for (String id : model.getImportLogIds()) { - ImportLog importLog = getEntityById(ImportLog.class, id); + ImportLog importLog = getEchoBasePersistenceContext().getEntityById(ImportLog.class, id); Class<? extends AbstractRemoveDataStrategy> strategyType = getStrategy(importLog); - AbstractRemoveDataStrategy strategy = getService(strategyType); + AbstractRemoveDataStrategy strategy = newService(strategyType); strategy.setProgressModel(model); - Voyage voyage = getEntityById(Voyage.class, importLog.getVoyageId()); + Voyage voyage = getWorkingDbPersistenceService().getVoyageDAO().findByTopiaId(importLog.getVoyageId()); long l = strategy.computeNbSteps(voyage, importLog); ImportContext importContext = new ImportContext(id, l + 3, strategy, voyage); toTreat.put(importLog, importContext); @@ -151,8 +150,7 @@ EchoBaseUser user) { // check that importLog still exists - ImportLog importLog = getEntityById(ImportLog.class, - importContext.importLogId); + ImportLog importLog = getWorkingDbPersistenceService().getImportLogDAO().findByTopiaId(importContext.importLogId); AbstractRemoveDataStrategy strategy = importContext.strategy; @@ -185,7 +183,7 @@ strategy.incrementOp("Log book entry for " + importLog.getTopiaId()); // do commit - commitTransaction("Could not remove import " + strategy.getImportLabel()); + getEchoBasePersistenceContext().commitTransaction(); strategy.incrementOp("Commit importLog " + importLog.getTopiaId()); TIME_LOG.log(s0, "Commit importLog " + importLog.getTopiaId()); return result; @@ -199,7 +197,7 @@ Set<ImportType> possibleSubImportType = strategy.getPossibleSubImportType(); - TopiaDAO<ImportLog> dao = getDAO(ImportLog.class); + TopiaDAO<ImportLog> dao = getEchoBasePersistenceContext().getImportLogDAO(); for (ImportLog logEntry : dao) { @@ -207,7 +205,7 @@ // for sure remove me // but do not add to result - delete(dao, logEntry); + dao.delete(logEntry); continue; } @@ -232,7 +230,7 @@ logEntry.getImportType() + ": " + logEntry.getTopiaId()); } - delete(dao, logEntry); + dao.delete(logEntry); // add it in result result.add(logEntry); @@ -270,7 +268,7 @@ List<ImportLog> obsoleteImportLogs, EchoBaseUser user) { - Decorator<ImportLog> decorator = getService(DecoratorService.class). + Decorator<ImportLog> decorator = getDecoratorService(). getDecorator(getLocale(), ImportLog.class, null); StringBuilder buffer = new StringBuilder(); @@ -287,12 +285,12 @@ if (log.isDebugEnabled()) { log.debug("Log text: " + result); } - create(getDAO(EntityModificationLog.class), - EntityModificationLog.PROPERTY_ENTITY_TYPE, "Removed Import", - EntityModificationLog.PROPERTY_ENTITY_ID, importLog.getTopiaId(), - EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), - EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), - EntityModificationLog.PROPERTY_MODIFICATION_TEXT, result + getEchoBasePersistenceContext().getEntityModificationLogDAO().create( + EntityModificationLog.PROPERTY_ENTITY_TYPE, "Removed Import", + EntityModificationLog.PROPERTY_ENTITY_ID, importLog.getTopiaId(), + EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), + EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, result ); return result; } @@ -309,9 +307,9 @@ protected <E extends TopiaEntity> TopiaDAO<E> getDAOFromId(String id) { try { - TopiaIdFactory topiaIdFactory = getTransaction().getTopiaIdFactory(); + TopiaIdFactory topiaIdFactory = getEchoBasePersistenceContext().getTopiaIdFactory(); Class<E> className = topiaIdFactory.getClassName(id); - return getDAO(className); + return getEchoBasePersistenceContext().getDAO(className); } catch (TopiaNotFoundException e) { throw new EchoBaseTechnicalException( Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AbstractRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AbstractRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -31,13 +31,9 @@ import fr.ifremer.echobase.entities.data.CategoryDAO; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.CellDAO; -import fr.ifremer.echobase.entities.data.DataProcessing; import fr.ifremer.echobase.entities.data.DataProcessingDAO; -import fr.ifremer.echobase.entities.data.Echotype; import fr.ifremer.echobase.entities.data.EchotypeDAO; -import fr.ifremer.echobase.entities.data.LengthAgeKey; import fr.ifremer.echobase.entities.data.LengthAgeKeyDAO; -import fr.ifremer.echobase.entities.data.LengthWeightKey; import fr.ifremer.echobase.entities.data.LengthWeightKeyDAO; import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.entities.data.ResultDAO; @@ -98,14 +94,14 @@ @Override public void setServiceContext(EchoBaseServiceContext serviceContext) { super.setServiceContext(serviceContext); - dataProcessingDAO = getDAO(DataProcessing.class, DataProcessingDAO.class); - cellDAO = getDAO(Cell.class, CellDAO.class); - echotypeDAO = getDAO(Echotype.class, EchotypeDAO.class); - voyageDao = getDAO(Voyage.class, VoyageDAO.class); - lengthAgeKeyDAO = getDAO(LengthAgeKey.class, LengthAgeKeyDAO.class); - lengthWeightKeyDAO = getDAO(LengthWeightKey.class, LengthWeightKeyDAO.class); - categoryDAO = getDAO(Category.class, CategoryDAO.class); - resultDAO = getDAO(Result.class, ResultDAO.class); + dataProcessingDAO = getEchoBasePersistenceContext().getDataProcessingDAO(); + cellDAO = getEchoBasePersistenceContext().getCellDAO(); + echotypeDAO = getEchoBasePersistenceContext().getEchotypeDAO(); + voyageDao = getEchoBasePersistenceContext().getVoyageDAO(); + lengthAgeKeyDAO = getEchoBasePersistenceContext().getLengthAgeKeyDAO(); + lengthWeightKeyDAO = getEchoBasePersistenceContext().getLengthWeightKeyDAO(); + categoryDAO = getEchoBasePersistenceContext().getCategoryDAO(); + resultDAO = getEchoBasePersistenceContext().getResultDAO(); } public void setProgressModel(ProgressModel progressModel) { @@ -123,7 +119,7 @@ removePreDataInVoyage(voyage); - flushTransaction("Could not flush transaction"); + getEchoBasePersistenceContext().flush(); for (String importId : importLog.getImportId()) { @@ -136,11 +132,11 @@ incrementOp("ImportLog " + importId + "Removed"); } - flushTransaction("Could not flush transaction"); + getEchoBasePersistenceContext().flush(); removePostDataInVoyage(voyage); - flushTransaction("Could not flush transaction"); + getEchoBasePersistenceContext().flush(); } long opIndex; @@ -170,7 +166,7 @@ } // delete it - delete(voyageDao, entity); + voyageDao.delete(entity); // remove obsolete categories for (Category category : categories) { @@ -227,7 +223,7 @@ } }; - List<String> cellIds = query.findMultipleResult(getTransaction()); + List<String> cellIds = getEchoBasePersistenceContext().findMultipleResult(query); // remove all result of cells @@ -271,7 +267,7 @@ } }; try { - Long result = query.findSingleResult(getTransaction()); + Long result = getEchoBasePersistenceContext().findSingleResult(query); return result; } catch (TopiaException e) { throw new EchoBaseTechnicalException(e); @@ -295,7 +291,7 @@ } }; - List<String> cellIds = query.findMultipleResult(getTransaction()); + List<String> cellIds = getEchoBasePersistenceContext().findMultipleResult(query); for (String cellId : cellIds) { Cell cell = cellDAO.findByTopiaId(cellId); @@ -330,7 +326,7 @@ } }; try { - Long result = query.findSingleResult(getTransaction()); + Long result = getEchoBasePersistenceContext().findSingleResult(query); return result; } catch (TopiaException e) { throw new EchoBaseTechnicalException(e); @@ -359,7 +355,7 @@ public void incrementOp(String message) { opIndex++; if (opIndex % 1000 == 0) { - flushTransaction("Could not flush transaction"); + getEchoBasePersistenceContext().flush(); } progressModel.incrementsProgress(); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AcousticRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AcousticRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AcousticRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -62,8 +62,8 @@ public void setServiceContext(EchoBaseServiceContext serviceContext) { super.setServiceContext(serviceContext); - dataAcquisitionDAO = getDAO(DataAcquisition.class, DataAcquisitionDAO.class); - transectDAO = getDAO(Transect.class, TransectDAO.class); + dataAcquisitionDAO = getEchoBasePersistenceContext().getDataAcquisitionDAO(); + transectDAO = getEchoBasePersistenceContext().getTransectDAO(); } @Override @@ -112,7 +112,7 @@ transect.removeDataAcquisition(dataAcquisition); // remove dataAcquisition - delete(dataAcquisitionDAO, dataAcquisition); + dataAcquisitionDAO.delete(dataAcquisition); if (log.isDebugEnabled()) { log.debug(dataAcquisition.getTopiaId() + " was removed"); } @@ -129,7 +129,7 @@ dataProcessing.removeCell(cell); // remove cell - delete(cellDAO, cell); + cellDAO.delete(cell); if (log.isDebugEnabled()) { log.debug(cell.getTopiaId() + " was removed"); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CatchesRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CatchesRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -59,8 +59,8 @@ @Override public void setServiceContext(EchoBaseServiceContext serviceContext) { super.setServiceContext(serviceContext); - sampleDAO = getDAO(Sample.class, SampleDAO.class); - operationDAO = getDAO(Operation.class, OperationDAO.class); + sampleDAO = getEchoBasePersistenceContext().getSampleDAO(); + operationDAO = getEchoBasePersistenceContext().getOperationDAO(); } @Override @@ -82,7 +82,7 @@ operation.removeSample(sample); // remove sample - delete(sampleDAO, sample); + sampleDAO.delete( sample); if (log.isDebugEnabled()) { log.debug(sample.getTopiaId() + " was removed"); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonAllRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonAllRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonTransectRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransectRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonTransectRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -60,8 +60,8 @@ public void setServiceContext(EchoBaseServiceContext serviceContext) { super.setServiceContext(serviceContext); - transectDAO = getDAO(Transect.class, TransectDAO.class); - transitDAO = getDAO(Transit.class, TransitDAO.class); + transectDAO = getEchoBasePersistenceContext().getTransectDAO(); + transitDAO = getEchoBasePersistenceContext().getTransitDAO(); } @Override @@ -110,7 +110,7 @@ transit.removeTransect(transect); // delete it - delete(transectDAO, transect); + transectDAO.delete( transect); if (log.isDebugEnabled()) { log.debug(transect.getTopiaId() + " was removed"); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonTransitRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransitRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonTransitRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -26,7 +26,6 @@ import com.google.common.collect.Sets; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; -import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.TransectDAO; import fr.ifremer.echobase.entities.data.Transit; import fr.ifremer.echobase.entities.data.TransitDAO; @@ -60,8 +59,8 @@ public void setServiceContext(EchoBaseServiceContext serviceContext) { super.setServiceContext(serviceContext); - transectDAO = getDAO(Transect.class, TransectDAO.class); - transitDAO = getDAO(Transit.class, TransitDAO.class); + transectDAO = getEchoBasePersistenceContext().getTransectDAO(); + transitDAO = getEchoBasePersistenceContext().getTransitDAO(); } @Override @@ -111,7 +110,7 @@ entity.removeTransit(transit); // delete it - delete(transitDAO, transit); + transitDAO.delete( transit); if (log.isDebugEnabled()) { log.debug(transit.getTopiaId() + " was removed"); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonVoyageRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonVoyageRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/CommonVoyageRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/LegacyVoyageRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/LegacyVoyageRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/OperationRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/OperationRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/OperationRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -60,8 +60,8 @@ public void setServiceContext(EchoBaseServiceContext serviceContext) { super.setServiceContext(serviceContext); - operationDAO = getDAO(Operation.class, OperationDAO.class); - transectDAO = getDAO(Transect.class, TransectDAO.class); + operationDAO = getEchoBasePersistenceContext().getOperationDAO(); + transectDAO = getEchoBasePersistenceContext().getTransectDAO(); } @Override @@ -84,7 +84,7 @@ transect.removeOperation(operation); // remove it - delete(operationDAO, operation); + operationDAO.delete( operation); if (log.isDebugEnabled()) { log.debug(operation.getTopiaId() + " was removed"); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultEsduRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultEsduRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -69,7 +69,7 @@ cell.removeResult(result); // remove result - delete(resultDAO, result); + resultDAO.delete( result); if (log.isDebugEnabled()) { log.debug(result.getTopiaId() + " was removed"); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultMapFishRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapFishRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultMapFishRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -70,7 +70,7 @@ voyage.removePostCell(cell); // remove cell - delete(cellDAO, cell); + cellDAO.delete( cell); if (log.isDebugEnabled()) { log.debug(cell.getTopiaId() + " was removed"); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultMapOtherRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapOtherRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultMapOtherRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -70,7 +70,7 @@ voyage.removePostCell(cell); // remove cell - delete(cellDAO, cell); + cellDAO.delete(cell); if (log.isDebugEnabled()) { log.debug(cell.getTopiaId() + " was removed"); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultRegionRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultRegionRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L @@ -70,7 +70,7 @@ voyage.removePostCell(cell); // remove cell - delete(cellDAO, cell); + cellDAO.delete(cell); if (log.isDebugEnabled()) { log.debug(cell.getTopiaId() + " was removed"); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultVoyageRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/ResultVoyageRemoveDataStrategy.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.removedata.strategy; +package fr.ifremer.echobase.services.service.removedata.strategy; /* * #%L Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,311 @@ +package fr.ifremer.echobase.services.service.spatial; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import fr.ifremer.echobase.EchoBaseFunctions; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.CellDAO; +import fr.ifremer.echobase.entities.data.DataAcquisition; +import fr.ifremer.echobase.entities.data.DataProcessing; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.ResultDAO; +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.DataMetadata; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.entities.spatial.CellPoint; +import fr.ifremer.echobase.entities.spatial.SpatialConfiguration; +import fr.ifremer.echobase.entities.spatial.SpatialData; +import fr.ifremer.echobase.entities.spatial.SpatialDataCache; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import fr.ifremer.echobase.services.service.DecoratorService; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; +import org.nuiton.topia.persistence.TopiaEntities; +import org.nuiton.util.TimeLog; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class SpatialService extends EchoBaseServiceSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(SpatialService.class); + + public static final TimeLog TILE_LOG = new TimeLog(SpatialService.class); + + public Map<String, String> getDataMetadatas(Voyage voyage) { + + Map<String, String> result = Maps.newLinkedHashMap(); + + DecoratorService service = getDecoratorService(); + + Decorator<DataMetadata> decorator = service.getDecorator(getLocale(), DataMetadata.class, null); + + addResult(voyage.getPostCell(), result, decorator); + + if (!voyage.isTransitEmpty()) { + + for (Transit transit : voyage.getTransit()) { + + if (!transit.isTransectEmpty()) { + for (Transect transect : transit.getTransect()) { + + + if (!transect.isDataAcquisitionEmpty()) { + + for (DataAcquisition dataAcquisition : transect.getDataAcquisition()) { + + + if (!dataAcquisition.isDataProcessingEmpty()) { + for (DataProcessing dataProcessing : dataAcquisition.getDataProcessing()) { + + addResult(dataProcessing.getCell(), result, decorator); + + } + } + } + } + } + } + } + } + return result; + } + + public Set<SpatialData> getSpatialData(SpatialConfiguration model) { + + SpatialDataCache cache = getSpatialDataCache(); + + Set<SpatialData> result = cache.get(model); + + if (result == null) { + + String voyageId = model.getVoyageId(); + + String dataMetadataId = model.getDataMetadataId(); + + String speciesId = model.getSpeciesId(); + String echotypeId = model.getEchotypeId(); + + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, voyageId); + + Preconditions.checkNotNull( + voyage, + "Could not find voyage with id " + voyageId); + + DataMetadata dataMetadata = + getEchoBasePersistenceContext().getEntityById(DataMetadata.class, dataMetadataId); + + Preconditions.checkNotNull( + dataMetadata, + "Could not find dataMetadata with id " + dataMetadataId); + + Species species = + getEchoBasePersistenceContext().getEntityOrNullById(Species.class, speciesId); + + Echotype echotype = + getEchoBasePersistenceContext().getEntityOrNullById(Echotype.class, echotypeId); + + List<Predicate<Category>> predicates = Lists.newArrayList(); + if (species != null) { + predicates.add(newSpeciesCategoryPredicate(species)); + } + if (echotype != null) { + predicates.add(newEchotypeCategoryPredicate(echotype)); + } + + Predicate<Category> acceptPredicate = Predicates.or(predicates); + + result = getSpatialData(voyage, dataMetadata, acceptPredicate); + + cache.put(model, result); + } + + return result; + } + + protected Set<SpatialData> getSpatialData(Voyage voyage, + DataMetadata requiredDataMetadata, + Predicate<Category> acceptPredicate) { + + long s0 = TimeLog.getTime(); + + // get possible category + List<String> categoryIds = Lists.newArrayList( + Iterables.transform( + Iterables.filter( + getEchoBasePersistenceContext().getCategoryDAO(), + acceptPredicate), + TopiaEntities.GET_TOPIA_ID)); + + CellDAO dao = getEchoBasePersistenceContext().getCellDAO(); + ResultDAO resultDao = getEchoBasePersistenceContext().getResultDAO(); + + boolean filterByCategory = CollectionUtils.isNotEmpty(categoryIds); + + // get all cell with spatial points + List<CellPoint> voyageCellPoints = dao.getVoyageCellPoints(voyage); + + int nbCells = voyageCellPoints.size(); + s0 = TILE_LOG.log(s0, String.format("Get cell points (%s)", nbCells)); + + final Map<String, CellPoint> cellPointById = Maps.uniqueIndex(voyageCellPoints, EchoBaseFunctions.CELL_POINT_CELL_ID_FUNCTION); + + Set<String> cellIds = Sets.newHashSet(cellPointById.keySet()); + + s0 = TILE_LOG.log(s0, String.format("Get cell points list and map (%s)", nbCells)); + + String query = resultDao.createSimpleQuery(null) + " WHERE cell.id IN :cell AND dataMetadata = :dataMetadata"; + + List<Result> results; + + if (filterByCategory) { + results = resultDao.findAllByQuery( + query + " AND category.id IN :category", + Result.PROPERTY_CELL, cellIds, + Result.PROPERTY_DATA_METADATA, requiredDataMetadata, + Result.PROPERTY_CATEGORY, categoryIds); + } else { + results = resultDao.findAllByQuery( + query + " AND category IS NULL", + Result.PROPERTY_CELL, cellIds, + Result.PROPERTY_DATA_METADATA, requiredDataMetadata); + } + + + s0 = TILE_LOG.log(s0, String.format("Get all matching results (%s)", results.size())); + + Set<SpatialData> result = Sets.newHashSet( + Iterables.transform( + results, new Function<Result, SpatialData>() { + @Override + public SpatialData apply(Result input) { + SpatialData data = new SpatialData(); + data.setResult(input); + CellPoint cellPoint = cellPointById.get(input.getCell().getTopiaId()); + data.setPoint(cellPoint); + return data; + } + })); + + s0 = TILE_LOG.log(s0, String.format("Loaded %s result of cell points (%s)", result.size(), nbCells)); + + return result; + } + + + protected Predicate<Category> newSpeciesCategoryPredicate(final Species species) { + Predicate<Category> speciesPredicate = new Predicate<Category>() { + @Override + public boolean apply(Category input) { + return input.getSpeciesCategory() != null && species.equals(input.getSpeciesCategory().getSpecies()); + } + }; + return speciesPredicate; + } + + protected Predicate<Category> newEchotypeCategoryPredicate(final Echotype echotype) { + Predicate<Category> speciesPredicate = new Predicate<Category>() { + @Override + public boolean apply(Category input) { + return echotype.equals(input.getEchotype()); + } + }; + return speciesPredicate; + } + + protected void addResult(Collection<Cell> cells, + Map<String, String> result, + Decorator<DataMetadata> decorator) { + + if (CollectionUtils.isNotEmpty(cells)) { + for (Cell cell : cells) { + if (!cell.isResultEmpty()) { + + for (Result result1 : cell.getResult()) { + + DataMetadata dataMetadata = result1.getDataMetadata(); + String key = dataMetadata.getTopiaId(); + if (!result.containsKey(key)) { + String value = decorator.toString(dataMetadata); + result.put(key, value); + } + } + } + } + } + } + + public boolean isSpatialAware() { + boolean result = getEchoBasePersistenceContext().isSpatialAware(); + return result; + } + + /** + * To update the {@code echobase_cell_spatial} table from the filled + * table {@code echobase_cell_sptaial_temp}. + * + * @since 2.2 + */ + public void updatePostgisTable() { + + if (isSpatialAware()) { + + // try the update only for postgresql + try { + if (log.isInfoEnabled()) { + log.info("Will try to compute spatial data from temp table..."); + } + getEchoBasePersistenceContext().executeSQL("SELECT echobase_fill_cell_spatial_table();"); + getEchoBasePersistenceContext().commitTransaction(); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Could not compute spatial data", e); + } + } + } + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.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/service/workingDb/WorkingDbConfigurationAlreadyExistException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/workingDb/WorkingDbConfigurationAlreadyExistException.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationAlreadyExistException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.workingDb; +package fr.ifremer.echobase.services.service.workingDb; /* * #%L Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationNotFoundException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/workingDb/WorkingDbConfigurationNotFoundException.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationNotFoundException.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.workingDb; +package fr.ifremer.echobase.services.service.workingDb; /* * #%L Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/workingDb/WorkingDbConfigurationService.java 2013-08-07 17:23:35 UTC (rev 839) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationService.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,4 +1,4 @@ -package fr.ifremer.echobase.services.workingDb; +package fr.ifremer.echobase.services.service.workingDb; /* * #%L @@ -78,7 +78,7 @@ WorkingDbConfiguration result = getDAO().create(conf); - commitInternalTransaction("Could not create working db configuration"); + getEchoBaseInternalPersistenceContext().commitTransaction(); return result; } catch (TopiaException eee) { throw new EchoBaseTechnicalException(eee); @@ -89,7 +89,7 @@ try { WorkingDbConfiguration entity = getExistingConf(id); getDAO().delete(entity); - commitInternalTransaction("Could not delete working db configuration"); + getEchoBaseInternalPersistenceContext().commitTransaction(); } catch (TopiaException eee) { throw new EchoBaseTechnicalException(eee); } @@ -129,8 +129,7 @@ } protected WorkingDbConfiguration getExistingConf(String id) throws WorkingDbConfigurationNotFoundException { - WorkingDbConfiguration entity = - getEntityById(WorkingDbConfiguration.class, id); + WorkingDbConfiguration entity = getDAO().findByTopiaId(id); if (entity == null) { throw new WorkingDbConfigurationNotFoundException(); } @@ -138,7 +137,6 @@ } protected WorkingDbConfigurationDAO getDAO() { - return getDAO(WorkingDbConfiguration.class, - WorkingDbConfigurationDAO.class); + return getEchoBaseInternalPersistenceContext().getWorkingDbConfigurationDAO(); } } \ No newline at end of file Deleted: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/DecoratorServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/DecoratorServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/DecoratorServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,74 +0,0 @@ -/* - * #%L - * EchoBase :: Entities - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services; - -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import org.junit.Assert; -import org.junit.Test; -import org.nuiton.decorator.Decorator; - -import java.util.List; -import java.util.Locale; - -/** - * To test the {@link DecoratorService}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public class DecoratorServiceTest extends EchoBaseTestServiceSupport { - - @Override - protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext(null); - } - - @Test - public void getDecoratorForReferences() throws Exception { - Locale locale = serviceContext.getLocale(); - DecoratorService service = getService(DecoratorService.class); - List<EchoBaseEntityEnum> expectedTypes = serviceContext.getDbMeta().getReferenceTypes(); - - for (EchoBaseEntityEnum type : expectedTypes) { - Decorator<?> decorator = - service.getDecorator(locale, type.getContract(), null); - Assert.assertNotNull("Missing decorator for type : " + type, decorator); - } - } - - @Test - public void getDecoratorForData() throws Exception { - Locale locale = serviceContext.getLocale(); - DecoratorService service = getService(DecoratorService.class); - List<EchoBaseEntityEnum> expectedTypes = - serviceContext.getDbMeta().getDataTypes(); - - for (EchoBaseEntityEnum type : expectedTypes) { - Decorator<?> decorator = - service.getDecorator(locale, type.getContract(), null); - Assert.assertNotNull("Missing decorator for type : " + type, decorator); - } - } - -} Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseTestServiceSupport.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseTestServiceSupport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseTestServiceSupport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -31,14 +31,14 @@ import fr.ifremer.echobase.entities.data.Transit; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; -import fr.ifremer.echobase.services.exportdb.ExportDbMode; -import fr.ifremer.echobase.services.exportdb.ExportDbService; -import fr.ifremer.echobase.services.importdata.EchoBaseCsvFileImportResult; -import fr.ifremer.echobase.services.importdata.ImportException; -import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; -import fr.ifremer.echobase.services.importdb.ImportDbMode; -import fr.ifremer.echobase.services.importdb.ImportDbService; +import fr.ifremer.echobase.services.service.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.service.exportdb.ExportDbMode; +import fr.ifremer.echobase.services.service.exportdb.ExportDbService; +import fr.ifremer.echobase.services.service.importdata.EchoBaseCsvFileImportResult; +import fr.ifremer.echobase.services.service.importdata.ImportException; +import fr.ifremer.echobase.services.service.importdb.ImportDbConfiguration; +import fr.ifremer.echobase.services.service.importdb.ImportDbMode; +import fr.ifremer.echobase.services.service.importdb.ImportDbService; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; @@ -213,7 +213,7 @@ protected <E extends TopiaEntity> void assertNbEntities(Class<E> entityType, int expectedNumber) throws TopiaException { - long count = getDAO(entityType).count(); + long count = getEchoBasePersistenceContext().getDAO(entityType).count(); Assert.assertEquals(count, expectedNumber); } @@ -224,14 +224,14 @@ } protected String getVoyageId() { - Voyage voyage = getEntities(Voyage.class).get(0); + Voyage voyage = getEchoBasePersistenceContext().getVoyageDAO().findAll().get(0); Preconditions.checkNotNull(voyage); return voyage.getTopiaId(); } protected String getTransitId(String voyageId) { Preconditions.checkNotNull(voyageId); - Voyage voyage = getEntityById(Voyage.class, voyageId); + Voyage voyage = getEchoBasePersistenceContext().getVoyageDAO().findByTopiaId(voyageId); Preconditions.checkArgument(!voyage.isTransitEmpty()); List<Transit> transits = voyage.getTransit(); Transit transit = transits.get(0); @@ -239,14 +239,14 @@ } protected String getDataProcessingId() { - DataProcessing dataProcessing = getEntities(DataProcessing.class).get(0); + DataProcessing dataProcessing = getEchoBasePersistenceContext().getDataProcessingDAO().findAll().get(0); Preconditions.checkNotNull(dataProcessing); return dataProcessing.getTopiaId(); } protected void importdb(ImportDbMode mode, String path) throws IOException, ImportException { - ImportDbService service = getService(ImportDbService.class); + ImportDbService service = getImportDbService(); ImportDbConfiguration conf = new ImportDbConfiguration(getLocale()); @@ -266,7 +266,7 @@ protected void exportDb(Voyage voyage, String exportFilename) throws IOException { - ExportDbService service = getService(ExportDbService.class); + ExportDbService service = getExportDbService(); ExportDbConfiguration conf = new ExportDbConfiguration(); conf.setVoyageIds(new String[]{voyage.getTopiaId()}); Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/FakeEchoBaseServiceContext.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/FakeEchoBaseServiceContext.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/FakeEchoBaseServiceContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,9 +24,12 @@ package fr.ifremer.echobase.services; import com.google.common.base.Preconditions; -import fr.ifremer.echobase.EchoBaseConfiguration; -import fr.ifremer.echobase.EchoBaseConfigurationOption; import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.config.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfigurationOption; +import fr.ifremer.echobase.entities.TopiaEchoBaseInternalPersistenceContext; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; +import fr.ifremer.echobase.entities.spatial.SpatialDataCache; import fr.ifremer.echobase.persistence.EchoBaseDbMeta; import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; import fr.ifremer.echobase.persistence.JdbcConfiguration; @@ -37,13 +40,14 @@ import org.junit.rules.TestWatcher; import org.junit.runner.Description; import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; +import org.nuiton.topia.TopiaContextFactory; import org.nuiton.util.FileUtil; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.util.Date; import java.util.Locale; import java.util.Properties; @@ -66,24 +70,20 @@ protected final String initDb; - protected final DefaultEchoBaseServiceContext.ServiceFactory serviceFactory; - protected TopiaContext rootContext; - protected TopiaContext internalTransaction; - - protected TopiaContext transaction; - protected Date fakeCurrentTime; protected File testDir; + protected TopiaEchoBasePersistenceContext echoBasePersistenceContext; + + protected TopiaEchoBaseInternalPersistenceContext echoBaseInternalPersistenceContext; + protected EchoBaseConfiguration configuration; public FakeEchoBaseServiceContext(String initDb) { this.initDb = initDb; - this.serviceFactory = - new DefaultEchoBaseServiceContext.ServiceFactory(); } protected File getTestSpecificDirectory(Description description) { @@ -143,12 +143,15 @@ } } + // init configuration + Properties defaultProps = new Properties(); defaultProps.put(EchoBaseConfigurationOption.DATA_DIRECTORY.getKey(), testDir); configuration = new EchoBaseConfiguration(defaultProps); JdbcConfiguration dbConf = JdbcConfiguration.newEmbeddedConfig(testDir); rootContext = EchobaseTopiaContexts.newWorkingDb(dbConf); + } @Override @@ -159,32 +162,42 @@ } } - /** May be used in test to get a fresh transaction. */ @Override - public TopiaContext getTransaction() { - if (transaction == null) { - transaction = rootContext.beginTransaction(); + public TopiaEchoBasePersistenceContext getEchoBasePersistenceContext() { + if (echoBasePersistenceContext == null) { + echoBasePersistenceContext = + new TopiaEchoBasePersistenceContext(rootContext.beginTransaction()); } - return transaction; + return echoBasePersistenceContext; } - public TopiaContext getInternalTransaction() { - return internalTransaction; + @Override + public void setEchoBasePersistenceContext(TopiaEchoBasePersistenceContext echoBasePersistenceContext) { + this.echoBasePersistenceContext = echoBasePersistenceContext; } - public void setInternalTransaction(TopiaContext internalTransaction) { - this.internalTransaction = internalTransaction; + @Override + public TopiaEchoBaseInternalPersistenceContext getEchoBaseInternalPersistenceContext() { + return echoBaseInternalPersistenceContext; } - public TopiaContext newTransaction() throws TopiaException { - return rootContext.beginTransaction(); + @Override + public void setEchoBaseInternalPersistenceContext(TopiaEchoBaseInternalPersistenceContext echoBaseInternalPersistenceContext) { + this.echoBaseInternalPersistenceContext = echoBaseInternalPersistenceContext; } @Override - public void setTransaction(TopiaContext transaction) { + public String getWorkgingDbUrl() { + String result = rootContext.getConfig().getProperty(TopiaContextFactory.CONFIG_URL); + return result; } @Override + public SpatialDataCache getSpatialDataCache() { + return null; + } + + @Override public Locale getLocale() { return Locale.FRANCE; } @@ -200,8 +213,24 @@ } @Override - public final <E extends EchoBaseService> E getService(Class<E> serviceClass) { - return serviceFactory.getService(serviceClass, this); + public <S extends EchoBaseService> S newService(Class<S> serviceClass) { + // instantiate service using empty constructor + S service; + try { + service = serviceClass.getConstructor().newInstance(); + } catch (InstantiationException e) { + throw new EchoBaseTechnicalException(e); + } catch (IllegalAccessException e) { + throw new EchoBaseTechnicalException(e); + } catch (InvocationTargetException e) { + throw new EchoBaseTechnicalException(e); + } catch (NoSuchMethodException e) { + throw new EchoBaseTechnicalException(e); + } + + service.setServiceContext(this); + + return service; } @Override Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/FixCellsIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/FixCellsIT.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/FixCellsIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -28,11 +28,10 @@ import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Data; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.entities.references.Mission; -import fr.ifremer.echobase.services.importdata.AcousticImportConfiguration; -import fr.ifremer.echobase.services.importdata.AcousticImportService; -import fr.ifremer.echobase.services.importdata.CellPositionReference; -import fr.ifremer.echobase.services.importdata.ImportException; +import fr.ifremer.echobase.services.service.importdata.AcousticImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.AcousticImportService; +import fr.ifremer.echobase.services.service.importdata.CellPositionReference; +import fr.ifremer.echobase.services.service.importdata.ImportException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; @@ -164,7 +163,7 @@ System.gc(); - AcousticImportService service = getService(AcousticImportService.class); + AcousticImportService service = newService(AcousticImportService.class); // AcousticImportService.POSSIBLE_YEARS.clear(); // @@ -181,7 +180,7 @@ protected void fixCellDatas() throws TopiaException, ParseException { int nb = 0; - TopiaDAO<Cell> cellDAO = getDAO(Cell.class); + TopiaDAO<Cell> cellDAO = getEchoBasePersistenceContext().getCellDAO(); long nbCells = cellDAO.count(); for (Cell cell : cellDAO) { @@ -206,23 +205,24 @@ if (log.isInfoEnabled()) { log.info("Flush at " + nb + "/" + nbCells); } - flushTransaction("Do flush"); + getEchoBasePersistenceContext().flush(); } } - commitTransaction("Do commit!"); + getEchoBasePersistenceContext().commitTransaction(); } private void exportDatabase() throws TopiaException, IOException { - TopiaDAO<Voyage> voyageDAO = getDAO(Voyage.class); + TopiaDAO<Voyage> voyageDAO = getEchoBasePersistenceContext().getVoyageDAO(); Voyage voyage; if (voyageDAO.count() == 0) { // crate voyage - voyage = voyageDAO.create(Voyage.PROPERTY_MISSION, getEntities(Mission.class).get(0), + + voyage = voyageDAO.create(Voyage.PROPERTY_MISSION, getEchoBasePersistenceContext().getMissionDAO().findAll().get(0), Voyage.PROPERTY_NAME, "name", Voyage.PROPERTY_START_DATE, newDate(), Voyage.PROPERTY_END_DATE, newDate(), @@ -232,12 +232,12 @@ Voyage.PROPERTY_DATUM, "datum" ); - commitTransaction("Do commit!"); + getEchoBasePersistenceContext().commitTransaction(); } else { voyage = voyageDAO.findAll().get(0); } - commitTransaction("Do commit!"); + getEchoBasePersistenceContext().commitTransaction(); exportDb(voyage, "fixCells"); Deleted: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationServiceIT.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,72 +0,0 @@ -/* - * #%L - * EchoBase :: Services - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase.services.embeddedapplication; - -import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; -import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; -import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationConfiguration; -import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationService; -import org.apache.commons.io.FileUtils; -import org.junit.Assert; -import org.junit.Test; -import org.nuiton.util.FileUtil; - -import java.io.File; - -/** - * Test {@link EmbeddedApplicationService}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public class EmbeddedApplicationServiceIT extends EchoBaseTestServiceSupport { - - protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext( - fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); - } - - @Test - public void testCreateEmbeddedApplication() throws Exception { - EmbeddedApplicationConfiguration conf = new EmbeddedApplicationConfiguration(); - conf.setVoyageIds(new String[]{getVoyageId()}); - - File workingDirectory = new File(getTestDir(), "work-dir"); - FileUtil.createDirectoryIfNecessary(workingDirectory); - conf.setWorkingDirectory(workingDirectory); - File warLocation = new File(workingDirectory, "echobase.war"); - FileUtils.write(warLocation, "dummy!"); - conf.setWarLocation(warLocation); - conf.setFileName("echobase"); - EmbeddedApplicationService service = - getService(EmbeddedApplicationService.class); - - File zipFile = service.createEmbeddedApplication(conf); - - Assert.assertTrue(zipFile.exists()); - Assert.assertEquals(100f, conf.getProgress(), 1); - - // TODO Test that embedded db has exactly same number of data than in incoming db - } -} Deleted: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportdb/ExportDbServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportdb/ExportDbServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportdb/ExportDbServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,304 +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.exportdb; - -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.entities.data.Category; -import fr.ifremer.echobase.entities.data.Cell; -import fr.ifremer.echobase.entities.data.Data; -import fr.ifremer.echobase.entities.data.DataAcquisition; -import fr.ifremer.echobase.entities.data.DataProcessing; -import fr.ifremer.echobase.entities.data.Result; -import fr.ifremer.echobase.entities.data.Transect; -import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.entities.references.AcousticInstrument; -import fr.ifremer.echobase.entities.references.CellType; -import fr.ifremer.echobase.entities.references.DataMetadata; -import fr.ifremer.echobase.entities.references.Species; -import fr.ifremer.echobase.entities.references.SpeciesCategory; -import fr.ifremer.echobase.io.EchoBaseIOUtil; -import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; -import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.Assert; -import org.junit.Test; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.csv.in.TopiaCsvImports; -import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.util.FileUtil; - -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -/** - * Test {@link ExportDbService}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class ExportDbServiceTest extends EchoBaseTestServiceSupport { - - protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext( - fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); - } - - /** Logger. */ - private static final Log log = LogFactory.getLog(ExportDbServiceTest.class); - - @Override - public void setUp() throws Exception { - super.setUp(); - - TopiaDAO<DataProcessing> dataProcessingDAO = getDAO(DataProcessing.class); - TopiaDAO<DataAcquisition> dataAcquisitionDAO = getDAO(DataAcquisition.class); - TopiaDAO<Cell> cellDAO = getDAO(Cell.class); - TopiaDAO<Category> categoryDAO = getDAO(Category.class); - TopiaDAO<Result> resultDAO = getDAO(Result.class); - TopiaDAO<SpeciesCategory> speciesCategoryDAO = getDAO(SpeciesCategory.class); - TopiaDAO<Data> dataDAO = getDAO(Data.class); - - - Voyage voyage = getEntityById(Voyage.class, getVoyageId()); - Assert.assertNotNull(voyage); - - Transect transect = voyage.getTransit().get(0).getTransect().get(0); - Assert.assertNotNull(transect); - - List<AcousticInstrument> acousticInstruments = getEntities(AcousticInstrument.class); - Assert.assertTrue(CollectionUtils.isNotEmpty(acousticInstruments)); - AcousticInstrument acousticInstrument = acousticInstruments.get(0); - DataAcquisition dataAcquisition = dataAcquisitionDAO.create( - DataAcquisition.PROPERTY_ACOUSTIC_INSTRUMENT, acousticInstrument - ); - transect.addDataAcquisition(dataAcquisition); - DataProcessing dataProcessing = dataProcessingDAO.create( - DataProcessing.PROPERTY_ID, "id", - DataProcessing.PROPERTY_PROCESSING_TEMPLATE, "processingtemplate" - ); - dataAcquisition.addDataProcessing(dataProcessing); - - List<Species> speciesList = getEntities(Species.class); - Assert.assertTrue(CollectionUtils.isNotEmpty(speciesList)); - Species species = speciesList.get(0); - - List<DataMetadata> dataMetadatas = getEntities(DataMetadata.class); - Assert.assertTrue(CollectionUtils.isNotEmpty(dataMetadatas)); - DataMetadata dataMetadata = dataMetadatas.get(0); - - SpeciesCategory speciesCategory = speciesCategoryDAO.create( - SpeciesCategory.PROPERTY_SPECIES, species - ); - - Category category = categoryDAO.create( - Category.PROPERTY_SPECIES_CATEGORY, speciesCategory - ); - - List<CellType> cellTypes = getEntities(CellType.class); - Assert.assertTrue(CollectionUtils.isNotEmpty(cellTypes)); - CellType cellType = cellTypes.get(0); - - Cell cell = cellDAO.create( - Cell.PROPERTY_NAME, "cellName", - Cell.PROPERTY_CELL_TYPE, cellType - ); - if (log.isInfoEnabled()) { - log.info("cell:" + cell.getTopiaId()); - } - dataProcessing.addCell(cell); - - Data cellData = dataDAO.create( - Data.PROPERTY_DATA_METADATA, dataMetadata, - Data.PROPERTY_DATA_VALUE, "cellDataValue" - ); - cell.addData(cellData); - Result cellResult = resultDAO.create( - Result.PROPERTY_CATEGORY, category, - Result.PROPERTY_DATA_METADATA, dataMetadata, - Result.PROPERTY_RESULT_LABEL, "cellResultLabel", - Result.PROPERTY_RESULT_VALUE, "cellResultValue" - ); - cell.addResult(cellResult); - - Cell childCell = cellDAO.create( - Cell.PROPERTY_NAME, "childCell", - Cell.PROPERTY_CELL_TYPE, cellType - ); - cell.addChilds(childCell); - - Data childCellData = dataDAO.create( - Data.PROPERTY_DATA_METADATA, dataMetadata, - Data.PROPERTY_DATA_VALUE, "childCellDataValue" - ); - childCell.addData(childCellData); - - Result childCellResult = resultDAO.create( - Result.PROPERTY_CATEGORY, category, - Result.PROPERTY_DATA_METADATA, dataMetadata, - Result.PROPERTY_RESULT_LABEL, "childCellResultLabel", - Result.PROPERTY_RESULT_VALUE, "childCellResultValue" - ); - childCell.addResult(childCellResult); - - Cell postCell = cellDAO.create( - Cell.PROPERTY_NAME, "postCellcellName", - Cell.PROPERTY_CELL_TYPE, cellType - ); - - postCell.addChilds(cell); - voyage.addPostCell(postCell); - - - Data postCellData = dataDAO.create( - Data.PROPERTY_DATA_METADATA, dataMetadata, - Data.PROPERTY_DATA_VALUE, "postCellDataValue" - ); - postCell.addData(postCellData); - - Result postCellResult = resultDAO.create( - Result.PROPERTY_CATEGORY, category, - Result.PROPERTY_DATA_METADATA, dataMetadata, - Result.PROPERTY_RESULT_LABEL, "postCellResultLabel", - Result.PROPERTY_RESULT_VALUE, "postCellResultValue" - ); - postCell.addResult(postCellResult); - - commitTransaction("Create cells"); - } - - @Test - public void exportReferential() throws IOException { - - ExportDbService service = getService(ExportDbService.class); - - ExportDbConfiguration conf = new ExportDbConfiguration(); - - File workingDirectory = new File(getTestDir(), "work-dir"); - FileUtil.createDirectoryIfNecessary(workingDirectory); - conf.setWorkingDirectory(workingDirectory); - conf.setFileName("echobase-referential"); - conf.setComputeSteps(true); - conf.setExportDbMode(ExportDbMode.REFERENTIAL); - service.doExport(conf); - File exportFile = conf.getExportFile(); - Assert.assertNotNull(exportFile); - Assert.assertTrue(exportFile.exists()); - - // check all tables (referential) where exported - ZipFile zipFile = new ZipFile(exportFile); - - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = - TopiaCsvImports.discoverEntries( - "echobase/", getDbMeta().getReferenceTables(), - zipFile, Lists.<String>newArrayList()); - - checkAllTablesExported(zipFile, tables); - } - - @Test - public void exportReferentialAndData() throws IOException { - - ExportDbService service = getService(ExportDbService.class); - - ExportDbConfiguration conf = new ExportDbConfiguration(); - - conf.setVoyageIds(new String[]{getVoyageId()}); - - File workingDirectory = new File(getTestDir(), "work-dir"); - FileUtil.createDirectoryIfNecessary(workingDirectory); - conf.setWorkingDirectory(workingDirectory); - conf.setFileName("echobase-referentialAndData"); - conf.setComputeSteps(true); - conf.setExportDbMode(ExportDbMode.REFERENTIAL_AND_DATA); - service.doExport(conf); - File exportFile = conf.getExportFile(); - Assert.assertNotNull(exportFile); - Assert.assertTrue(exportFile.exists()); - - - // check all tables (referential + data) where exported - ZipFile zipFile = new ZipFile(exportFile); - - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = - TopiaCsvImports.discoverEntries( - "echobase/", getDbMeta().getAllTables(), - zipFile, Lists.<String>newArrayList()); - - checkAllTablesExported(zipFile, tables); - } - - @Test - public void exportAll() throws IOException { - - ExportDbService service = getService(ExportDbService.class); - - ExportDbConfiguration conf = new ExportDbConfiguration(); - conf.setVoyageIds(new String[]{getVoyageId()}); - - File workingDirectory = new File(getTestDir(), "work-dir"); - FileUtil.createDirectoryIfNecessary(workingDirectory); - conf.setWorkingDirectory(workingDirectory); - conf.setFileName("echobase-all"); - conf.setComputeSteps(true); - conf.setExportDbMode(ExportDbMode.ALL); - service.doExport(conf); - File exportFile = conf.getExportFile(); - Assert.assertNotNull(exportFile); - Assert.assertTrue(exportFile.exists()); - - - // check all tables (referential + data) where exported - ZipFile zipFile = new ZipFile(exportFile); - - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = - TopiaCsvImports.discoverEntries( - "echobase/", getDbMeta().getAllTables(), - zipFile, Lists.<String>newArrayList()); - - checkAllTablesExported(zipFile, tables); - } - - private void checkAllTablesExported(ZipFile zipFile, Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables) throws IOException { - for (Map.Entry<TableMeta<EchoBaseEntityEnum>, ZipEntry> entry : tables.entrySet()) { - TableMeta<EchoBaseEntityEnum> type = entry.getKey(); - if (type.getSource() == EchoBaseEntityEnum.Gear) { - // there is some extra lines so can not count from here... - //FIXME should use a csv import to read entries nstead - continue; - } - ZipEntry zipEntry = entry.getValue(); - long nbCells = EchoBaseIOUtil.countLines(zipFile, Sets.newHashSet(zipEntry)); - Assert.assertEquals(1 + getEntities(type.getEntityType()).size(), nbCells); - } - } - -} Deleted: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportquery/ExportQueryServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportquery/ExportQueryServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportquery/ExportQueryServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -1,73 +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.exportquery; - -import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; -import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; -import fr.ifremer.echobase.services.exportquery.ExportQueryService; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; - -/** - * To test {@link ExportQueryService}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class ExportQueryServiceTest extends EchoBaseTestServiceSupport { - @Override - protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext(null); - } - - ExportQueryService service; - - @Before - public void setup() { - service = getService(ExportQueryService.class); - } - - @Ignore - @Test - public void processLibreOfficeSqlQuery() throws Exception { - - processLibreOfficeSqlQuery("select \"t\".name FROM \"t\" WHERE rien;", - "select t.name FROM t WHERE rien;"); - - processLibreOfficeSqlQuery("select \"t\".name, \"s\".name FROM \"t\", \"s\" WHERE rien;", - "select t.name, s.name FROM t, s WHERE rien;"); - - processLibreOfficeSqlQuery("select \"t\".name FROM \"t\" WHERE (select \"s\".name FROM \"s\" WHERE rien2);", - "select t.name FROM t WHERE (select s.name FROM s WHERE rien2);"); - } - - protected void processLibreOfficeSqlQuery(String libreOfficeQuery, - String expected) { - - String actual = service.processLibreOfficeSqlQuery(libreOfficeQuery); - Assert.assertEquals(expected, actual); - } -} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/DecoratorServiceTest.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/DecoratorServiceTest.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/DecoratorServiceTest.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/DecoratorServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,76 @@ +/* + * #%L + * EchoBase :: Entities + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service; + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.decorator.Decorator; + +import java.util.List; +import java.util.Locale; + +/** + * To test the {@link DecoratorService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public class DecoratorServiceTest extends EchoBaseTestServiceSupport { + + @Override + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext(null); + } + + @Test + public void getDecoratorForReferences() throws Exception { + Locale locale = serviceContext.getLocale(); + DecoratorService service = getDecoratorService(); + List<EchoBaseEntityEnum> expectedTypes = serviceContext.getDbMeta().getReferenceTypes(); + + for (EchoBaseEntityEnum type : expectedTypes) { + Decorator<?> decorator = + service.getDecorator(locale, type.getContract(), null); + Assert.assertNotNull("Missing decorator for type : " + type, decorator); + } + } + + @Test + public void getDecoratorForData() throws Exception { + Locale locale = serviceContext.getLocale(); + DecoratorService service = getDecoratorService(); + List<EchoBaseEntityEnum> expectedTypes = + serviceContext.getDbMeta().getDataTypes(); + + for (EchoBaseEntityEnum type : expectedTypes) { + Decorator<?> decorator = + service.getDecorator(locale, type.getContract(), null); + Assert.assertNotNull("Missing decorator for type : " + type, decorator); + } + } + +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/embeddedapplication/EmbeddedApplicationServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,70 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.embeddedapplication; + +import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.apache.commons.io.FileUtils; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.util.FileUtil; + +import java.io.File; + +/** + * Test {@link EmbeddedApplicationService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public class EmbeddedApplicationServiceIT extends EchoBaseTestServiceSupport { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); + } + + @Test + public void testCreateEmbeddedApplication() throws Exception { + EmbeddedApplicationConfiguration conf = new EmbeddedApplicationConfiguration(); + conf.setVoyageIds(new String[]{getVoyageId()}); + + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + File warLocation = new File(workingDirectory, "echobase.war"); + FileUtils.write(warLocation, "dummy!"); + conf.setWarLocation(warLocation); + conf.setFileName("echobase"); + EmbeddedApplicationService service = + newService(EmbeddedApplicationService.class); + + File zipFile = service.createEmbeddedApplication(conf); + + Assert.assertTrue(zipFile.exists()); + Assert.assertEquals(100f, conf.getProgress(), 1); + + // TODO Test that embedded db has exactly same number of data than in incoming db + } +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportdb/ExportDbServiceTest.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportdb/ExportDbServiceTest.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportdb/ExportDbServiceTest.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportdb/ExportDbServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,304 @@ +/* + * #%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.service.exportdb; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.DataAcquisition; +import fr.ifremer.echobase.entities.data.DataProcessing; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Transect; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.AcousticInstrument; +import fr.ifremer.echobase.entities.references.CellType; +import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.entities.references.SpeciesCategory; +import fr.ifremer.echobase.io.EchoBaseIOUtil; +import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.csv.in.TopiaCsvImports; +import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.util.FileUtil; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +/** + * Test {@link ExportDbService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ExportDbServiceTest extends EchoBaseTestServiceSupport { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); + } + + /** Logger. */ + private static final Log log = LogFactory.getLog(ExportDbServiceTest.class); + + @Override + public void setUp() throws Exception { + super.setUp(); + + TopiaDAO<DataProcessing> dataProcessingDAO = getEchoBasePersistenceContext().getDataProcessingDAO(); + TopiaDAO<DataAcquisition> dataAcquisitionDAO = getEchoBasePersistenceContext().getDataAcquisitionDAO(); + TopiaDAO<Cell> cellDAO = getEchoBasePersistenceContext().getCellDAO(); + TopiaDAO<Category> categoryDAO = getEchoBasePersistenceContext().getCategoryDAO(); + TopiaDAO<Result> resultDAO = getEchoBasePersistenceContext().getResultDAO(); + TopiaDAO<SpeciesCategory> speciesCategoryDAO = getEchoBasePersistenceContext().getSpeciesCategoryDAO(); + TopiaDAO<Data> dataDAO = getEchoBasePersistenceContext().getDataDAO(); + + + Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, getVoyageId()); + Assert.assertNotNull(voyage); + + Transect transect = voyage.getTransit().get(0).getTransect().get(0); + Assert.assertNotNull(transect); + + List<AcousticInstrument> acousticInstruments = getEchoBasePersistenceContext().getAcousticInstrumentDAO().findAll(); + Assert.assertTrue(CollectionUtils.isNotEmpty(acousticInstruments)); + AcousticInstrument acousticInstrument = acousticInstruments.get(0); + DataAcquisition dataAcquisition = dataAcquisitionDAO.create( + DataAcquisition.PROPERTY_ACOUSTIC_INSTRUMENT, acousticInstrument + ); + transect.addDataAcquisition(dataAcquisition); + DataProcessing dataProcessing = dataProcessingDAO.create( + DataProcessing.PROPERTY_ID, "id", + DataProcessing.PROPERTY_PROCESSING_TEMPLATE, "processingtemplate" + ); + dataAcquisition.addDataProcessing(dataProcessing); + + List<Species> speciesList = getEchoBasePersistenceContext().getSpeciesDAO().findAll(); + Assert.assertTrue(CollectionUtils.isNotEmpty(speciesList)); + Species species = speciesList.get(0); + + List<DataMetadata> dataMetadatas = getEchoBasePersistenceContext().getDataMetadataDAO().findAll(); + Assert.assertTrue(CollectionUtils.isNotEmpty(dataMetadatas)); + DataMetadata dataMetadata = dataMetadatas.get(0); + + SpeciesCategory speciesCategory = speciesCategoryDAO.create( + SpeciesCategory.PROPERTY_SPECIES, species + ); + + Category category = categoryDAO.create( + Category.PROPERTY_SPECIES_CATEGORY, speciesCategory + ); + + List<CellType> cellTypes = getEchoBasePersistenceContext().getCellTypeDAO().findAll(); + Assert.assertTrue(CollectionUtils.isNotEmpty(cellTypes)); + CellType cellType = cellTypes.get(0); + + Cell cell = cellDAO.create( + Cell.PROPERTY_NAME, "cellName", + Cell.PROPERTY_CELL_TYPE, cellType + ); + if (log.isInfoEnabled()) { + log.info("cell:" + cell.getTopiaId()); + } + dataProcessing.addCell(cell); + + Data cellData = dataDAO.create( + Data.PROPERTY_DATA_METADATA, dataMetadata, + Data.PROPERTY_DATA_VALUE, "cellDataValue" + ); + cell.addData(cellData); + Result cellResult = resultDAO.create( + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, dataMetadata, + Result.PROPERTY_RESULT_LABEL, "cellResultLabel", + Result.PROPERTY_RESULT_VALUE, "cellResultValue" + ); + cell.addResult(cellResult); + + Cell childCell = cellDAO.create( + Cell.PROPERTY_NAME, "childCell", + Cell.PROPERTY_CELL_TYPE, cellType + ); + cell.addChilds(childCell); + + Data childCellData = dataDAO.create( + Data.PROPERTY_DATA_METADATA, dataMetadata, + Data.PROPERTY_DATA_VALUE, "childCellDataValue" + ); + childCell.addData(childCellData); + + Result childCellResult = resultDAO.create( + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, dataMetadata, + Result.PROPERTY_RESULT_LABEL, "childCellResultLabel", + Result.PROPERTY_RESULT_VALUE, "childCellResultValue" + ); + childCell.addResult(childCellResult); + + Cell postCell = cellDAO.create( + Cell.PROPERTY_NAME, "postCellcellName", + Cell.PROPERTY_CELL_TYPE, cellType + ); + + postCell.addChilds(cell); + voyage.addPostCell(postCell); + + + Data postCellData = dataDAO.create( + Data.PROPERTY_DATA_METADATA, dataMetadata, + Data.PROPERTY_DATA_VALUE, "postCellDataValue" + ); + postCell.addData(postCellData); + + Result postCellResult = resultDAO.create( + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, dataMetadata, + Result.PROPERTY_RESULT_LABEL, "postCellResultLabel", + Result.PROPERTY_RESULT_VALUE, "postCellResultValue" + ); + postCell.addResult(postCellResult); + + getEchoBasePersistenceContext().commitTransaction(); + } + + @Test + public void exportReferential() throws IOException { + + ExportDbService service = getExportDbService(); + + ExportDbConfiguration conf = new ExportDbConfiguration(); + + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + conf.setFileName("echobase-referential"); + conf.setComputeSteps(true); + conf.setExportDbMode(ExportDbMode.REFERENTIAL); + service.doExport(conf); + File exportFile = conf.getExportFile(); + Assert.assertNotNull(exportFile); + Assert.assertTrue(exportFile.exists()); + + // check all tables (referential) where exported + ZipFile zipFile = new ZipFile(exportFile); + + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = + TopiaCsvImports.discoverEntries( + "echobase/", getDbMeta().getReferenceTables(), + zipFile, Lists.<String>newArrayList()); + + checkAllTablesExported(zipFile, tables); + } + + @Test + public void exportReferentialAndData() throws IOException { + + ExportDbService service = getExportDbService(); + + ExportDbConfiguration conf = new ExportDbConfiguration(); + + conf.setVoyageIds(new String[]{getVoyageId()}); + + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + conf.setFileName("echobase-referentialAndData"); + conf.setComputeSteps(true); + conf.setExportDbMode(ExportDbMode.REFERENTIAL_AND_DATA); + service.doExport(conf); + File exportFile = conf.getExportFile(); + Assert.assertNotNull(exportFile); + Assert.assertTrue(exportFile.exists()); + + + // check all tables (referential + data) where exported + ZipFile zipFile = new ZipFile(exportFile); + + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = + TopiaCsvImports.discoverEntries( + "echobase/", getDbMeta().getAllTables(), + zipFile, Lists.<String>newArrayList()); + + checkAllTablesExported(zipFile, tables); + } + + @Test + public void exportAll() throws IOException { + + ExportDbService service = getExportDbService(); + + ExportDbConfiguration conf = new ExportDbConfiguration(); + conf.setVoyageIds(new String[]{getVoyageId()}); + + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + conf.setFileName("echobase-all"); + conf.setComputeSteps(true); + conf.setExportDbMode(ExportDbMode.ALL); + service.doExport(conf); + File exportFile = conf.getExportFile(); + Assert.assertNotNull(exportFile); + Assert.assertTrue(exportFile.exists()); + + + // check all tables (referential + data) where exported + ZipFile zipFile = new ZipFile(exportFile); + + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = + TopiaCsvImports.discoverEntries( + "echobase/", getDbMeta().getAllTables(), + zipFile, Lists.<String>newArrayList()); + + checkAllTablesExported(zipFile, tables); + } + + private void checkAllTablesExported(ZipFile zipFile, Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables) throws IOException { + for (Map.Entry<TableMeta<EchoBaseEntityEnum>, ZipEntry> entry : tables.entrySet()) { + TableMeta<EchoBaseEntityEnum> type = entry.getKey(); + if (type.getSource() == EchoBaseEntityEnum.Gear) { + // there is some extra lines so can not count from here... + //FIXME should use a csv import to read entries nstead + continue; + } + ZipEntry zipEntry = entry.getValue(); + long nbCells = EchoBaseIOUtil.countLines(zipFile, Sets.newHashSet(zipEntry)); + Assert.assertEquals(1 + getEchoBasePersistenceContext().getDAO(type.getEntityType()).count(), nbCells); + } + } + +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryServiceTest.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportquery/ExportQueryServiceTest.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryServiceTest.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,72 @@ +/* + * #%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.service.exportquery; + +import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +/** + * To test {@link ExportQueryService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ExportQueryServiceTest extends EchoBaseTestServiceSupport { + @Override + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext(null); + } + + ExportQueryService service; + + @Before + public void setup() { + service = getExportQueryService(); + } + + @Ignore + @Test + public void processLibreOfficeSqlQuery() throws Exception { + + processLibreOfficeSqlQuery("select \"t\".name FROM \"t\" WHERE rien;", + "select t.name FROM t WHERE rien;"); + + processLibreOfficeSqlQuery("select \"t\".name, \"s\".name FROM \"t\", \"s\" WHERE rien;", + "select t.name, s.name FROM t, s WHERE rien;"); + + processLibreOfficeSqlQuery("select \"t\".name FROM \"t\" WHERE (select \"s\".name FROM \"s\" WHERE rien2);", + "select t.name FROM t WHERE (select s.name FROM s WHERE rien2);"); + } + + protected void processLibreOfficeSqlQuery(String libreOfficeQuery, + String expected) { + + String actual = service.processLibreOfficeSqlQuery(libreOfficeQuery); + Assert.assertEquals(expected, actual); + } +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AbstractImportDataServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,298 @@ +/* + * #%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.service.importdata; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Collections2; +import com.google.common.collect.Sets; +import fr.ifremer.echobase.EchoBaseFunctions; +import fr.ifremer.echobase.csv.EchoBaseCsvUtil; +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.DataProcessing; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.GearMetadataValue; +import fr.ifremer.echobase.entities.data.LengthAgeKey; +import fr.ifremer.echobase.entities.data.LengthWeightKey; +import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.OperationMetadataValue; +import fr.ifremer.echobase.entities.data.Sample; +import fr.ifremer.echobase.entities.data.SampleData; +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.CellType; +import fr.ifremer.echobase.entities.references.CellTypeDAO; +import fr.ifremer.echobase.io.InputFile; +import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.nuiton.csv.Import; +import org.nuiton.csv.ext.CsvReaders; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.csv.in.AbstractImportModel; +import org.nuiton.util.TimeLog; + +import java.io.File; +import java.io.Reader; +import java.util.List; +import java.util.Set; +import java.util.regex.Matcher; + +/** + * Abstrac import data test. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public abstract class AbstractImportDataServiceIT extends EchoBaseTestServiceSupport { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(AbstractImportDataServiceIT.class); + + public static final TimeLog TIME_LOG = new TimeLog(AbstractImportDataServiceIT.class); + + public void assertImportCommonData() throws TopiaException { + assertNbEntities(Voyage.class, fixtures.NB_VOYAGE()); + assertNbEntities(Transit.class, fixtures.NB_TRANSIT()); + assertNbEntities(Transect.class, fixtures.NB_TRANSECT()); + } + + public void assertImportOperations() throws TopiaException { + assertNbEntities(Operation.class, fixtures.NB_OPERATION()); + assertNbEntities(OperationMetadataValue.class, fixtures.NB_OPERATION_METADATAVALUE()); + assertNbEntities(GearMetadataValue.class, fixtures.NB_GEAR_METADATAVALUE()); + } + + public void assertImportSampleDatas() throws TopiaException { + assertNbEntities(Sample.class, fixtures.NB_SAMPLE()); + assertNbEntities(SampleData.class, fixtures.NB_SAMPLE_DATA()); + } + + public void assertImportAcousticDatas() throws TopiaException { + assertNbEntities(DataAcquisition.class, fixtures.NB_DATA_ACQUISITION()); + assertNbEntities(DataProcessing.class, fixtures.NB_DATA_PROCESSING()); + assertNbEntities(Cell.class, fixtures.NB_CELL()); + assertNbEntities(Data.class, fixtures.NB_DATA()); + } + + public void assertImportVoyageResult() throws TopiaException { + assertNbEntities(LengthAgeKey.class, fixtures.NB_LENGTH_AGE_KEY()); + assertNbEntities(LengthWeightKey.class, fixtures.NB_LENGTH_WEIGHT_KEY()); + assertNbEntities(Echotype.class, fixtures.NB_ECHOTYPE()); + } + + protected <M extends AbstractImportConfiguration, S extends AbstractImportDataService<M>> + List<EchoBaseCsvFileImportResult> doImport(M conf, + Class<S> serviceType, + int nbResults) throws ImportException { + + S service = newService(serviceType); + + EchoBaseUser fakeUser = createFakeUser(); + + long s0 = TimeLog.getTime(); + + String resume = service.doImport(conf, fakeUser); + + TIME_LOG.log(s0, "doImport"); + + List<EchoBaseCsvFileImportResult> result = conf.getImportResults(); + + Assert.assertNotNull(result); + Assert.assertEquals(nbResults, result.size()); + assertConfProgressionToEnd(conf); + + if (log.isInfoEnabled()) { + if (log.isInfoEnabled()) { + log.info('\n' + resume); + } + } + + return result; + } + +// protected <E extends TopiaEntity> E create(TopiaDAO<E> dao, +// Object... properties) { +// try { +// E result = dao.create(properties); +// return result; +// } catch (TopiaException e) { +// throw new EchoBaseTechnicalException("Could not create entity", e); +// } +// } + + protected void addMissingEsduCells(String esduColumnName, + String voyageId, + InputFile inputFile) throws TopiaException { + + ResultsImportService service = newService(ResultsImportService.class); + Voyage voyage = getWorkingDbPersistenceService().getVoyageDAO().findByTopiaId(voyageId); + Transit transit; + Transect transect; + DataAcquisition dataAcquisition; + DataProcessing dataProcessing; + + if (voyage.isTransitEmpty()) { + + // create a fake transit + transit = getEchoBasePersistenceContext().getTransitDAO().create(); + voyage.addTransit(transit); + } else { + transit = voyage.getTransit().get(0); + } + + if (transit.isTransectEmpty()) { + + // create a fake transect + transect = getEchoBasePersistenceContext().getTransectDAO().create(); + transit.addTransect(transect); + } else { + transect = transit.getTransect().get(0); + } + + if (transect.isDataAcquisitionEmpty()) { + + // create a fake dataAcquisition + dataAcquisition = getEchoBasePersistenceContext().getDataAcquisitionDAO().create( + DataAcquisition.PROPERTY_ACOUSTIC_INSTRUMENT, + getEchoBasePersistenceContext().getAcousticInstrumentDAO().findAll().get(0)); + transect.addDataAcquisition(dataAcquisition); + } else { + dataAcquisition = transect.getDataAcquisition().iterator().next(); + } + + if (dataAcquisition.isDataProcessingEmpty()) { + + // creates a fake dataProcessing + dataProcessing = getEchoBasePersistenceContext().getDataProcessingDAO().create( + DataProcessing.PROPERTY_ID, "id", + DataProcessing.PROPERTY_PROCESSING_TEMPLATE, "pt" + ); + dataAcquisition.addDataProcessing(dataProcessing); + } else { + dataProcessing = dataAcquisition.getDataProcessing().iterator().next(); + } + + CellDAO dao = getEchoBasePersistenceContext().getCellDAO(); + + Set<String> cellsNames; + + if (dataProcessing.isCellEmpty()) { + cellsNames = Sets.newHashSet(); + } else { + cellsNames = Sets.newHashSet(Collections2.transform( + dataProcessing.getCell(), EchoBaseFunctions.CELL_BY_NAME)); + } + + ResultEdsuImportMockImportModel csvModel = new ResultEdsuImportMockImportModel( + getCsvSeparator(), + esduColumnName, + inputFile.getFile()); + + CellTypeDAO cellTypeDAO = getEchoBasePersistenceContext().getCellTypeDAO(); + + CellType esduCellType = cellTypeDAO.findById("Esdu"); + Preconditions.checkNotNull(esduCellType); + + Reader reader = service.getInputFileReader(inputFile); + try { + Import<ResultEdsuImportMockImportModelRow> importer = + Import.newImport(csvModel, reader); + + for (ResultEdsuImportMockImportModelRow row : importer) { + + String esduCellId = row.getName(); + + if (!cellsNames.contains(esduCellId)) { + + if (log.isDebugEnabled()) { + log.debug("Adding missing esdu cell with name " + + esduCellId); + } + + Cell cell = dao.create(Cell.PROPERTY_NAME, esduCellId, + Cell.PROPERTY_CELL_TYPE, esduCellType); + dataProcessing.addCell(cell); + cellsNames.add(esduCellId); + } + } + + getEchoBasePersistenceContext().flush(); + } finally { + + + service.closeReader(reader, inputFile); + } + } + + public static class ResultEdsuImportMockImportModel extends AbstractImportModel<ResultEdsuImportMockImportModelRow> { + + public ResultEdsuImportMockImportModel(char separator, + String esduColumnName, + File file) { + super(separator); + + newMandatoryColumn(esduColumnName, EchoBaseCsvUtil.CELL_NAME); + + String[] header = CsvReaders.getHeader(file, separator); + + for (String columnHeader : header) { + + if (!esduColumnName.equals(columnHeader) && + !("\"" + esduColumnName + "\"").equals(columnHeader)) { + Matcher matcher = AbstractImportDataService.REMOVE_DOUBLE_QUOTES_PATTERN.matcher(columnHeader); + if (matcher.matches()) { + newIgnoredColumn(matcher.group(1)); + } else { + newIgnoredColumn(columnHeader); + } + } + } + } + + @Override + public ResultEdsuImportMockImportModelRow newEmptyInstance() { + return new ResultEdsuImportMockImportModelRow(); + } + } + + public static class ResultEdsuImportMockImportModelRow { + + protected String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AcousticImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AcousticImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AcousticImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AcousticImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,99 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.DataAcquisition; +import fr.ifremer.echobase.entities.data.DataProcessing; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * Tests {@link AcousticImportService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class AcousticImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext(fixtures.IMPORT_DATA_ECHOBASE_CATCHES()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "acoustic", filename}; + } + + @Test + public void doImport() throws Exception { + + assertImportCommonData(); + + assertNoEntities(DataAcquisition.class, + DataProcessing.class, + Cell.class, + Data.class); + + AcousticImportConfiguration conf = + new AcousticImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + conf.setVesselId(fixtures.VESSEL_ID()); + conf.setAcousticDensityUnit("acousticDensityUnit"); + conf.setAcquisitionSoftwareVersionER60("acquisitionSoftwareVersionER60"); + conf.setAcquisitionSoftwareVersionME70("acquisitionSoftwareVersionME70"); + conf.setAddDataAcquisition(false); + conf.setTransceiverAcquisitionAbsorptionDescription("transceiverAcquisitionAbsorptionDescription"); + conf.setCellPositionReference(CellPositionReference.START); + conf.setDigitThreshold(1.5f); + conf.setLoggedDataDatatype("loggedDataDatatype"); + conf.setLoggedDataFormat("loggedDataFormat"); + conf.setNotes("notes"); + conf.setPingDutyCycle("pingDutyCycle"); + conf.setProcessingDescription("processingDescription"); + conf.setProcessingTemplate("processingTemplate"); + conf.setSoundSpeedCalculationsER60("soundSpeedCalculationsER60"); + conf.setSoundSpeedCalculationsME70("soundSpeedCalculationsME70"); + conf.setTransceiverAcquisitionAbsorptionDescription("transceiverAcquisitionAbsorptionDescription"); + + prepareInputFile(conf.getMoviesFile(), getImportPath("movies.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, AcousticImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_CELL()); + + assertCsvImportResult(result, 0, DataAcquisition.class, fixtures.NB_DATA_ACQUISITION()); + assertCsvImportResult(result, 0, DataProcessing.class, fixtures.NB_DATA_PROCESSING()); + assertCsvImportResult(result, 0, Cell.class, fixtures.NB_CELL()); + assertCsvImportResult(result, 0, Data.class, fixtures.NB_DATA()); + + assertImportAcousticDatas(); + } + + +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CatchesImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CatchesImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CatchesImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CatchesImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,163 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.entities.data.Sample; +import fr.ifremer.echobase.entities.data.SampleData; +import fr.ifremer.echobase.entities.references.SpeciesCategory; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Ignore; +import org.junit.Test; + +import java.util.List; + +/** + * Tests {@link CatchesImportService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class CatchesImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext(fixtures.IMPORT_DATA_ECHOBASE_OPERATION()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "catches", filename}; + } + + @Test + public void doImportAllSamples() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertNoEntities(Sample.class, SampleData.class); + + CatchesImportConfiguration conf = + new CatchesImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + + prepareInputFile(conf.getTotalSampleFile(), + getImportPath("totalsample.csv.gz")); + prepareInputFile(conf.getSubSampleFile(), + getImportPath("subsample.csv.gz")); + prepareInputFile(conf.getBiometrySampleFile(), + getImportPath("biometrysample.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, CatchesImportService.class, 3); + + assertNbIDs(result, 0, fixtures.NB_SAMPLE_TOTAL()); + + assertCsvImportResult(result, 0, Sample.class, fixtures.NB_SAMPLE_TOTAL(), 0, fixtures.NB_SAMPLE()); + assertCsvImportResult(result, 0, SampleData.class, fixtures.NB_SAMPLE_DATA_TOTAL(), 0, fixtures.NB_SAMPLE_DATA()); + assertCsvImportResult(result, 0, SpeciesCategory.class, 4, 0, 456); + + assertNbIDs(result, 1, fixtures.NB_SAMPLE_UNSORTED()); + assertCsvImportResult(result, 1, Sample.class, fixtures.NB_SAMPLE_UNSORTED(), 0, fixtures.NB_SAMPLE()); + assertCsvImportResult(result, 1, SampleData.class, fixtures.NB_SAMPLE_DATA_UNSORTED(), 0, fixtures.NB_SAMPLE_DATA()); + assertCsvImportResult(result, 1, SpeciesCategory.class, 9, 0, 456); + + assertNbIDs(result, 2, fixtures.NB_SAMPLE_BIOMETRY()); + assertCsvImportResult(result, 2, Sample.class, fixtures.NB_SAMPLE_BIOMETRY(), 0, fixtures.NB_SAMPLE()); + assertCsvImportResult(result, 2, SampleData.class, fixtures.NB_SAMPLE_DATA_BIOMETRY(), 0, fixtures.NB_SAMPLE_DATA()); + + assertImportSampleDatas(); + } + + @Ignore + @Test + public void doImportTotalSample() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertNoEntities(Sample.class, SampleData.class); + + CatchesImportConfiguration conf = + new CatchesImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + + prepareInputFile(conf.getTotalSampleFile(), + getImportPath("totalsample.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, CatchesImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_SAMPLE_TOTAL()); + assertCsvImportResult(result, 0, Sample.class, fixtures.NB_SAMPLE_TOTAL()); + assertCsvImportResult(result, 0, SampleData.class, fixtures.NB_SAMPLE_DATA_TOTAL()); + } + + @Ignore + @Test + public void doImportSubSample() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertNoEntities(Sample.class, SampleData.class); + + CatchesImportConfiguration conf = + new CatchesImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + + prepareInputFile(conf.getSubSampleFile(), + getImportPath("subsample.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, CatchesImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_SAMPLE_UNSORTED()); + assertCsvImportResult(result, 0, Sample.class, fixtures.NB_SAMPLE_UNSORTED()); + assertCsvImportResult(result, 0, SampleData.class, fixtures.NB_SAMPLE_DATA_UNSORTED()); + } + + @Ignore + @Test + public void doImportBiometrySample() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertNoEntities(Sample.class, SampleData.class); + + CatchesImportConfiguration conf = + new CatchesImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + + prepareInputFile(conf.getBiometrySampleFile(), + getImportPath("biometrysample.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, CatchesImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_SAMPLE_BIOMETRY()); + assertCsvImportResult(result, 0, Sample.class, fixtures.NB_SAMPLE_BIOMETRY()); + assertCsvImportResult(result, 0, SampleData.class, fixtures.NB_SAMPLE_DATA_BIOMETRY()); + } + +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonAllImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonAllImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonAllImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonAllImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,95 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.entities.ImportType; +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.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * Tests {@link CommonImportService} with {@link ImportType#COMMON_ALL} mode. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class CommonAllImportServiceIT extends AbstractImportDataServiceIT { + + @Override + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_NO_DATA()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "common", filename}; + } + + @Test + public void doImport() throws Exception { + + // no data in db + + assertNoEntities(Voyage.class, Transit.class, Transect.class); + + // import with mode all (voyage / transit / transect) + + CommonImportConfiguration conf = + new CommonImportConfiguration(getLocale()); + + conf.setAreaOfOperationId(fixtures.AREA_OF_OPERATION_ID()); + conf.setDatum(fixtures.DATUM()); + conf.setMissionId(fixtures.MISSION_ID()); + conf.setTransectBinUnitsPingAxis(fixtures.TRANSECT_BIN_UNITS_PING_AXIS()); + conf.setTransectGeospatialVerticalPositive(fixtures.TRANSECT_GEOSPATIAL_VERTICLA_POSITIVE()); + conf.setTransectLicence(fixtures.TRANSECT_LICENSE()); + conf.setTransitRelatedActivity(fixtures.TRANSIT_RELATED_ACTIVITY()); + conf.setVoyageDescription(fixtures.VOYAGE_DESCRIPTION()); + + prepareInputFile(conf.getVoyageFile(), getImportPath("voyage.csv.gz")); + prepareInputFile(conf.getTransitFile(), getImportPath("transit.csv.gz")); + prepareInputFile(conf.getTransectFile(), getImportPath("transect.csv.gz")); + + conf.setImportType(ImportType.COMMON_ALL); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, CommonAllImportService.class, 3); + + assertNbIDs(result, 0, fixtures.NB_VOYAGE()); + assertCsvImportResult(result, 0, Voyage.class, fixtures.NB_VOYAGE()); + + assertNbIDs(result, 1, 0); + assertCsvImportResult(result, 1, Transit.class, fixtures.NB_TRANSIT()); + + assertNbIDs(result, 2, 0); + assertCsvImportResult(result, 2, Transect.class, fixtures.NB_TRANSECT()); + + assertImportCommonData(); + } + +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonTransectImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonTransectImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonTransectImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonTransectImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,85 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Transect; +import fr.ifremer.echobase.entities.data.Transit; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * Tests {@link CommonImportService} with {@link ImportType#COMMON_TRANSECT} mode. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class CommonTransectImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "common", filename}; + } + + @Test + public void doImport() throws Exception { + + // import common data with mode transect + + assertImportCommonData(); + + CommonImportConfiguration conf = + new CommonImportConfiguration(getLocale()); + + conf.setDatum(fixtures.DATUM()); + conf.setVoyageId(getVoyageId()); + conf.setTransectBinUnitsPingAxis(fixtures.TRANSECT_BIN_UNITS_PING_AXIS()); + conf.setTransectGeospatialVerticalPositive(fixtures.TRANSECT_GEOSPATIAL_VERTICLA_POSITIVE()); + conf.setTransectLicence(fixtures.TRANSECT_LICENSE()); + + prepareInputFile(conf.getTransectFile(), getImportPath("transect.csv.gz")); + + conf.setImportType(ImportType.COMMON_TRANSECT); + + // let's delete every transects + for (Transit transit : getEchoBasePersistenceContext().getTransitDAO()) { + transit.clearTransect(); + } + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, CommonTransectImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_TRANSECT()); + assertCsvImportResult(result, 0, Transect.class, fixtures.NB_TRANSECT()); + + assertImportCommonData(); + } + +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonTransitImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonTransitImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonTransitImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonTransitImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,89 @@ +package fr.ifremer.echobase.services.service.importdata; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import fr.ifremer.echobase.entities.ImportType; +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.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * Tests {@link CommonImportService} with {@link ImportType#COMMON_TRANSIT} mode. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class CommonTransitImportServiceIT extends AbstractImportDataServiceIT { + + @Override + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "common", filename}; + } + + @Test + public void doImport() throws Exception { + + // import common data with mode transit + + assertImportCommonData(); + + // let's delete every transits + for (Voyage voyage : getEchoBasePersistenceContext().getVoyageDAO()) { + voyage.clearTransit(); + } + + // import common data with mode transit + + CommonImportConfiguration conf = + new CommonImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + conf.setTransitRelatedActivity(fixtures.TRANSIT_RELATED_ACTIVITY()); + + prepareInputFile(conf.getTransitFile(), getImportPath("transit.csv.gz")); + + conf.setImportType(ImportType.COMMON_TRANSIT); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, CommonTransitImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_TRANSIT()); + assertCsvImportResult(result, 0, Transit.class, fixtures.NB_TRANSIT()); + + + assertNbEntities(Voyage.class, fixtures.NB_VOYAGE()); + assertNbEntities(Transit.class, fixtures.NB_TRANSIT()); + assertNbEntities(Transect.class, 0); + } + +} \ No newline at end of file Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonVoyageImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonVoyageImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonVoyageImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/CommonVoyageImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,85 @@ +package fr.ifremer.echobase.services.service.importdata; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import fr.ifremer.echobase.entities.ImportType; +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.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * Tests {@link CommonImportService} with {@link ImportType#COMMON_VOYAGE} mode. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class CommonVoyageImportServiceIT extends AbstractImportDataServiceIT { + + @Override + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_NO_DATA()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "common", filename}; + } + + @Test + public void doImport() throws Exception { + + // no data in db + + assertNoEntities(Voyage.class, Transit.class, Transect.class); + + // import with mode voyage + + CommonImportConfiguration conf = + new CommonImportConfiguration(getLocale()); + + conf.setAreaOfOperationId(fixtures.AREA_OF_OPERATION_ID()); + conf.setDatum(fixtures.DATUM()); + conf.setMissionId(fixtures.MISSION_ID()); + conf.setVoyageDescription(fixtures.VOYAGE_DESCRIPTION()); + + prepareInputFile(conf.getVoyageFile(), getImportPath("voyage.csv.gz")); + + conf.setImportType(ImportType.COMMON_VOYAGE); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, CommonVoyageImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_VOYAGE()); + assertCsvImportResult(result, 0, Voyage.class, fixtures.NB_VOYAGE()); + + assertNbEntities(Voyage.class, fixtures.NB_VOYAGE()); + assertNbEntities(Transit.class, 0); + assertNbEntities(Transect.class, 0); + } + +} \ No newline at end of file Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/OperationImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/OperationImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/OperationImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/OperationImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,86 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.entities.data.GearMetadataValue; +import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.OperationMetadataValue; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * Tests {@link OperationImportService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class OperationImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "operation", filename}; + } + + @Test + public void doImport() throws Exception { + + assertImportCommonData(); + + assertNoEntities(Operation.class, + OperationMetadataValue.class, + GearMetadataValue.class); + + OperationImportConfiguration conf = + new OperationImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + + prepareInputFile(conf.getOperationFile(), + getImportPath("operation.csv.gz")); + prepareInputFile(conf.getOperationMetadataFile(), + getImportPath("operationmetadatavalue.csv.gz")); + prepareInputFile(conf.getGearMetadataFile(), + getImportPath("gearmetadatavalue.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, OperationImportService.class, 3); + + assertNbIDs(result, 0, fixtures.NB_OPERATION()); + assertCsvImportResult(result, 0, Operation.class, fixtures.NB_OPERATION()); + + assertNbIDs(result, 1, 0); + assertCsvImportResult(result, 1, OperationMetadataValue.class, fixtures.NB_OPERATION_METADATAVALUE()); + + assertNbIDs(result, 2, 0); + assertCsvImportResult(result, 2, GearMetadataValue.class, fixtures.NB_GEAR_METADATAVALUE()); + + assertImportOperations(); + } +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsEsduCellImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsEsduCellImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsEsduCellImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,194 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.csv.EchoBaseCsvUtil; +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.references.AgeCategory; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.SpeciesCategory; +import fr.ifremer.echobase.io.InputFile; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * Test import of esdu results. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ResultsEsduCellImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "result", "esdu", filename}; + } + + @Test + public void doImportByEchotype() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + assertImportVoyageResult(); + + assertNoEntities(Result.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setResultLabel("resultLabel"); + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_ESDU); + + InputFile inputFile = conf.getEsduByEchotypeFile(); + prepareInputFile(inputFile, getImportPath("byEchotype.csv.gz")); + + addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, conf.getVoyageId(), inputFile); + + conf.setDataProcessingId(getDataProcessingId()); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsEsduCellImportService.class, 1); + + assertNbIDs(result, 0, 43533); + + assertCsvImportResult(result, 0, Result.class, 43533); + assertCsvImportResult(result, 0, Category.class, 7); + } + + @Test + public void doImportByEchotypeAndSpecies() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + assertImportVoyageResult(); + + assertNoEntities(Result.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setResultLabel("resultLabel"); + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_ESDU); + + InputFile inputFile = conf.getEsduByEchotypeAndSpeciesCategoryFile(); + prepareInputFile(inputFile, + getImportPath("byEchotypeAndSpeciesCategory.csv.gz")); + + addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, conf.getVoyageId(), inputFile); + + conf.setDataProcessingId(getDataProcessingId()); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsEsduCellImportService.class, 1); + + assertNbIDs(result, 0, 357291); + + assertCsvImportResult(result, 0, Result.class, 357291); + assertCsvImportResult(result, 0, Category.class, 27); + assertCsvImportResult(result, 0, SpeciesCategory.class, 1, 0, 457); + } + + @Test + public void doImportBySpeciesAndSizeCategory() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + assertImportVoyageResult(); + + assertNoEntities(Result.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setResultLabel("resultLabel"); + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_ESDU); + + InputFile intputFile = conf.getEsduBySpeciesAndSizeCategoryFile(); + prepareInputFile(intputFile, + getImportPath("bySpeciesAndSizeCategory.csv.gz")); + + addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, conf.getVoyageId(), intputFile); + + conf.setDataProcessingId(getDataProcessingId()); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsEsduCellImportService.class, 1); + + assertNbIDs(result, 0, 68108); + assertCsvImportResult(result, 0, Result.class, 68108); + assertCsvImportResult(result, 0, Category.class, 129); + assertCsvImportResult(result, 0, SpeciesCategory.class, 129, 0, 585); + assertCsvImportResult(result, 0, SizeCategory.class, 62, 0, 69); + } + + @Test + public void doImportBySpeciesAndAgeCategory() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + assertImportVoyageResult(); + + assertNoEntities(Result.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setResultLabel("resultLabel"); + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_ESDU); + + InputFile inputFile = conf.getEsduBySpeciesAndAgeCategoryFile(); + prepareInputFile(inputFile, + getImportPath("bySpeciesAndAgeCategory.csv.gz")); + + addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, conf.getVoyageId(), inputFile); + + conf.setDataProcessingId(getDataProcessingId()); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsEsduCellImportService.class, 1); + + assertNbIDs(result, 0, 10021); + assertCsvImportResult(result, 0, Category.class, 14); + assertCsvImportResult(result, 0, Result.class, 10021); + assertCsvImportResult(result, 0, AgeCategory.class, 6, 0, 10); + assertCsvImportResult(result, 0, SpeciesCategory.class, 14, 0, 470); + } + +} \ No newline at end of file Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsMapFishCellImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsMapFishCellImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsMapFishCellImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsMapFishCellImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,83 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * To test the {@link ResultsMapFishCellImportService} service. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ResultsMapFishCellImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "result", "map", filename}; + } + + @Test + public void doImportMap() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + assertImportVoyageResult(); + + assertNoEntities(Result.class, Data.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setResultLabel("resultLabel"); + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_MAP_FISH); + + prepareInputFile(conf.getMapsFile(), getImportPath("mapsFish.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsMapFishCellImportService.class, 1); + + assertNbIDs(result, 0, 380); + + assertCsvImportResult(result, 0, Cell.class, 380); + assertCsvImportResult(result, 0, Data.class, 2280); + assertCsvImportResult(result, 0, Result.class, 380); + assertCsvImportResult(result, 0, Category.class, 1); + } + +} \ No newline at end of file Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsMapOtherCellImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsMapOtherCellImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsMapOtherCellImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsMapOtherCellImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,81 @@ +package fr.ifremer.echobase.services.service.importdata; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * To test the {@link ResultsMapOtherCellImportService} service. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class ResultsMapOtherCellImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "result", "map", filename}; + } + + @Test + public void doImportMap() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + assertImportVoyageResult(); + + assertNoEntities(Result.class, Data.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setResultLabel("resultLabel"); + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_MAP_OTHER); + + prepareInputFile(conf.getMapsFile(), getImportPath("mapsOther.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsMapOtherCellImportService.class, 1); + + assertNbIDs(result, 0, 380); + + assertCsvImportResult(result, 0, Cell.class, 380); + assertCsvImportResult(result, 0, Data.class, 2280); + assertCsvImportResult(result, 0, Result.class, 380); + } + +} Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsRegionCellImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsRegionCellImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsRegionCellImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsRegionCellImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,95 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.references.SpeciesCategory; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Test; + +import java.util.List; + +/** + * To test the {@link ResultsRegionCellImportService} service. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ResultsRegionCellImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "result", "region", filename}; + } + + @Test + public void doImportRegion() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + assertImportVoyageResult(); + + assertNoEntities(Result.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setResultLabel("resultLabel"); + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_REGION); + + prepareInputFile(conf.getRegionsFile(), + getImportPath("regions.csv.gz")); + prepareInputFile(conf.getRegionAssociationFile(), + getImportPath("regionAssociations.csv.gz")); + prepareInputFile(conf.getRegionResultFile(), + getImportPath("regionResults.csv.gz")); + + addMissingEsduCells("esduName", + conf.getVoyageId(), + conf.getRegionAssociationFile()); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsRegionCellImportService.class, 3); + + assertNbIDs(result, 0, 10); + + assertCsvImportResult(result, 0, Cell.class, 10, 0, 2083); + assertCsvImportResult(result, 0, Data.class, 238); + assertCsvImportResult(result, 1, Cell.class, 0, 4146, 2083); + assertCsvImportResult(result, 2, Result.class, 2128); + assertCsvImportResult(result, 2, Category.class, 27); + assertCsvImportResult(result, 2, SpeciesCategory.class, 1, 0, 457); + } + +} \ No newline at end of file Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportServiceIT.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsVoyageImportServiceIT.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportServiceIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,165 @@ +/* + * #%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.service.importdata; + +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.LengthAgeKey; +import fr.ifremer.echobase.entities.data.LengthWeightKey; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import org.junit.Ignore; +import org.junit.Test; + +import java.util.List; + +/** + * To test the {@link ResultsVoyageImportService} service. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ResultsVoyageImportServiceIT extends AbstractImportDataServiceIT { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext(fixtures.IMPORT_DATA_ECHOBASE_CATCHES()); + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "result", "voyage", filename}; + } + + @Test + public void doImportResultByVoyage() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + + assertNoEntities(LengthAgeKey.class); + assertNoEntities(LengthWeightKey.class); + assertNoEntities(Echotype.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_VOYAGE); + + prepareInputFile(conf.getLengthAgeKeyFile(), + getImportPath("lengthAgeKey.csv.gz")); + prepareInputFile(conf.getLengthWeightKeyFile(), + getImportPath("lengthWeightKey.csv.gz")); + prepareInputFile(conf.getEchotypeFile(), getImportPath("echotype.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsVoyageImportService.class, 3); + + assertNbIDs(result, 0, fixtures.NB_LENGTH_AGE_KEY()); + assertCsvImportResult(result, 0, LengthAgeKey.class, fixtures.NB_LENGTH_AGE_KEY()); + + assertNbIDs(result, 1, fixtures.NB_LENGTH_WEIGHT_KEY()); + assertCsvImportResult(result, 1, LengthWeightKey.class, fixtures.NB_LENGTH_WEIGHT_KEY()); + + assertNbIDs(result, 2, fixtures.NB_ECHOTYPE()); + assertCsvImportResult(result, 2, Echotype.class, fixtures.NB_ECHOTYPE()); + } + + @Ignore + @Test + public void doImportLengthAgeKey() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + + assertNoEntities(LengthAgeKey.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_VOYAGE); + + prepareInputFile(conf.getLengthAgeKeyFile(), + getImportPath("lengthAgeKey.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsVoyageImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_LENGTH_AGE_KEY()); + assertCsvImportResult(result, 0, LengthAgeKey.class, fixtures.NB_LENGTH_AGE_KEY()); + } + + @Ignore + @Test + public void doImportLengthWeightKey() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + + assertNoEntities(LengthWeightKey.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_VOYAGE); + + prepareInputFile(conf.getLengthWeightKeyFile(), + getImportPath("lengthWeightKey.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsVoyageImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_LENGTH_WEIGHT_KEY()); + assertCsvImportResult(result, 0, LengthWeightKey.class, fixtures.NB_LENGTH_WEIGHT_KEY()); + } + + @Ignore + @Test + public void doImportEchotype() throws Exception { + + assertImportCommonData(); + assertImportOperations(); + assertImportSampleDatas(); + + assertNoEntities(Echotype.class); + + ResultsImportConfiguration conf = + new ResultsImportConfiguration(getLocale()); + + conf.setVoyageId(getVoyageId()); + conf.setImportType(ImportType.RESULT_VOYAGE); + + prepareInputFile(conf.getEchotypeFile(), getImportPath("echotype.csv.gz")); + + List<EchoBaseCsvFileImportResult> result; + result = doImport(conf, ResultsVoyageImportService.class, 1); + + assertNbIDs(result, 0, fixtures.NB_ECHOTYPE()); + assertCsvImportResult(result, 0, Echotype.class, fixtures.NB_ECHOTYPE()); + } + +} \ No newline at end of file Copied: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdb/ImportDbServiceTest.java (from rev 839, trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdb/ImportDbServiceTest.java) =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdb/ImportDbServiceTest.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdb/ImportDbServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,76 @@ +/* + * #%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.service.importdb; + +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EchoBaseUserImpl; +import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import fr.ifremer.echobase.services.service.importdata.ImportException; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.util.FileUtil; + +import java.io.File; +import java.io.IOException; + +/** + * Tests the {@link ImportDbService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ImportDbServiceTest extends EchoBaseTestServiceSupport { + + public static final String DB_VERSION = "1.2"; + + @Override + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext(null); + } + + @Test + public void importDb() throws IOException, ImportException { + + ImportDbService service = getImportDbService(); + + ImportDbConfiguration conf = new ImportDbConfiguration(getLocale()); + + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + conf.setComputeSteps(true); + conf.setCommitAfterEachFile(false); + conf.setImportDbMode(ImportDbMode.REFERENTIAL); + prepareInputFile(conf.getInput(), fixtures.importDbReferentialPath()); + + EchoBaseUser user = new EchoBaseUserImpl(); + user.setEmail("testUser@fake.fr"); + + service.doImport(conf, user); + + Assert.assertTrue(conf.getProgress() > 94); + } + +} Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -76,31 +76,30 @@ import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; -import fr.ifremer.echobase.services.importdata.AbstractImportConfiguration; -import fr.ifremer.echobase.services.importdata.AbstractImportDataService; -import fr.ifremer.echobase.services.importdata.AcousticImportConfiguration; -import fr.ifremer.echobase.services.importdata.AcousticImportService; -import fr.ifremer.echobase.services.importdata.CatchesImportConfiguration; -import fr.ifremer.echobase.services.importdata.CatchesImportService; -import fr.ifremer.echobase.services.importdata.CommonAllImportService; -import fr.ifremer.echobase.services.importdata.CommonImportConfiguration; -import fr.ifremer.echobase.services.importdata.OperationImportConfiguration; -import fr.ifremer.echobase.services.importdata.OperationImportService; -import fr.ifremer.echobase.services.importdata.ResultsEsduCellImportService; -import fr.ifremer.echobase.services.importdata.ResultsImportConfiguration; -import fr.ifremer.echobase.services.importdata.ResultsMapFishCellImportService; -import fr.ifremer.echobase.services.importdata.ResultsMapOtherCellImportService; -import fr.ifremer.echobase.services.importdata.ResultsRegionCellImportService; -import fr.ifremer.echobase.services.importdata.ResultsVoyageImportService; -import fr.ifremer.echobase.services.removedata.RemoveDataConfiguration; -import fr.ifremer.echobase.services.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.importdata.AbstractImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.AbstractImportDataService; +import fr.ifremer.echobase.services.service.importdata.AcousticImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.AcousticImportService; +import fr.ifremer.echobase.services.service.importdata.CatchesImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.CatchesImportService; +import fr.ifremer.echobase.services.service.importdata.CommonAllImportService; +import fr.ifremer.echobase.services.service.importdata.CommonImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.OperationImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.OperationImportService; +import fr.ifremer.echobase.services.service.importdata.ResultsEsduCellImportService; +import fr.ifremer.echobase.services.service.importdata.ResultsImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.ResultsMapFishCellImportService; +import fr.ifremer.echobase.services.service.importdata.ResultsMapOtherCellImportService; +import fr.ifremer.echobase.services.service.importdata.ResultsRegionCellImportService; +import fr.ifremer.echobase.services.service.importdata.ResultsVoyageImportService; +import fr.ifremer.echobase.services.service.removedata.RemoveDataConfiguration; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.Before; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaIdFactory; @@ -247,25 +246,25 @@ public void setUp() throws Exception { super.setUp(); - voyageDao = getDAO(Voyage.class, VoyageDAO.class); - transectDAO = getDAO(Transect.class, TransectDAO.class); - transitDAO = getDAO(Transit.class, TransitDAO.class); - dataAcquisitionDAO = getDAO(DataAcquisition.class, DataAcquisitionDAO.class); - dataProcessingDAO = getDAO(DataProcessing.class, DataProcessingDAO.class); + voyageDao = getEchoBasePersistenceContext().getVoyageDAO(); + transectDAO = getEchoBasePersistenceContext().getTransectDAO(); + transitDAO = getEchoBasePersistenceContext().getTransitDAO(); + dataAcquisitionDAO = getEchoBasePersistenceContext().getDataAcquisitionDAO(); + dataProcessingDAO = getEchoBasePersistenceContext().getDataProcessingDAO(); - cellDAO = getDAO(Cell.class, CellDAO.class); - dataDAO = getDAO(Data.class, DataDAO.class); - operationDAO = getDAO(Operation.class, OperationDAO.class); - operationMetadataValueDAO = getDAO(OperationMetadataValue.class, OperationMetadataValueDAO.class); - gearMetadataValueDAO = getDAO(GearMetadataValue.class, GearMetadataValueDAO.class); - sampleDAO = getDAO(Sample.class, SampleDAO.class); - sampleDataDAO = getDAO(SampleData.class, SampleDataDAO.class); + cellDAO = getEchoBasePersistenceContext().getCellDAO(); + dataDAO = getEchoBasePersistenceContext().getDataDAO(); + operationDAO = getEchoBasePersistenceContext().getOperationDAO(); + operationMetadataValueDAO = getEchoBasePersistenceContext().getOperationMetadataValueDAO(); + gearMetadataValueDAO = getEchoBasePersistenceContext().getGearMetadataValueDAO(); + sampleDAO = getEchoBasePersistenceContext().getSampleDAO(); + sampleDataDAO = getEchoBasePersistenceContext().getSampleDataDAO(); - echotypeDAO = getDAO(Echotype.class, EchotypeDAO.class); - lengthAgeKeyDAO = getDAO(LengthAgeKey.class, LengthAgeKeyDAO.class); - lengthWeightKeyDAO = getDAO(LengthWeightKey.class, LengthWeightKeyDAO.class); - categoryDAO = getDAO(Category.class, CategoryDAO.class); - resultDAO = getDAO(Result.class, ResultDAO.class); + echotypeDAO = getEchoBasePersistenceContext().getEchotypeDAO(); + lengthAgeKeyDAO = getEchoBasePersistenceContext().getLengthAgeKeyDAO(); + lengthWeightKeyDAO = getEchoBasePersistenceContext().getLengthWeightKeyDAO(); + categoryDAO = getEchoBasePersistenceContext().getCategoryDAO(); + resultDAO = getEchoBasePersistenceContext().getResultDAO(); //create imports for voyage 1 createCommonVoyageImportV1(); @@ -325,7 +324,7 @@ RemoveDataConfiguration conf = new RemoveDataConfiguration(); conf.setImportLogIds(new String[]{importId}); - RemoveDataService service = getService(RemoveDataService.class); + RemoveDataService service = getRemoveDataService(); EchoBaseUser fakeUser = createFakeUser(); @@ -356,16 +355,16 @@ } private <E extends TopiaEntity> E getFirstEntity(Class<E> entityType) { - List<E> entities = getEntities(entityType); + List<E> entities = getEchoBasePersistenceContext().getDAO(entityType).findAll(); Assert.assertTrue(CollectionUtils.isNotEmpty(entities)); return entities.get(0); } private <E extends TopiaEntity> E getEntity(String id) throws TopiaException { - TopiaIdFactory topiaIdFactory = ((TopiaContextImplementor) getTransaction()).getTopiaIdFactory(); + TopiaIdFactory topiaIdFactory = getEchoBasePersistenceContext().getTopiaIdFactory(); Class entityType = topiaIdFactory.getClassName(id); - TopiaDAO<E> dao = getDAO(entityType); + TopiaDAO<E> dao = getEchoBasePersistenceContext().getDAO(entityType); E entity = dao.findByTopiaId(id); return entity; } @@ -373,19 +372,19 @@ private void createCommonVoyageImportV1() { // create voyage - Voyage voyage = create(voyageDao, - TopiaEntity.PROPERTY_TOPIA_ID, voyage1Id, - Voyage.PROPERTY_MISSION, getFirstEntity(Mission.class), - Voyage.PROPERTY_NAME, "voyage1", - Voyage.PROPERTY_START_DATE, newDate(), - Voyage.PROPERTY_END_DATE, newDate(), - Voyage.PROPERTY_START_PORT, "voyage1StartPort", - Voyage.PROPERTY_END_PORT, "voyage1EndPort", - Voyage.PROPERTY_DESCRIPTION, "voyage1Description", - Voyage.PROPERTY_DATUM, "voyage1Datum" + Voyage voyage = voyageDao.create( + TopiaEntity.PROPERTY_TOPIA_ID, voyage1Id, + Voyage.PROPERTY_MISSION, getFirstEntity(Mission.class), + Voyage.PROPERTY_NAME, "voyage1", + Voyage.PROPERTY_START_DATE, newDate(), + Voyage.PROPERTY_END_DATE, newDate(), + Voyage.PROPERTY_START_PORT, "voyage1StartPort", + Voyage.PROPERTY_END_PORT, "voyage1EndPort", + Voyage.PROPERTY_DESCRIPTION, "voyage1Description", + Voyage.PROPERTY_DATUM, "voyage1Datum" ); - commitTransaction("ImportError!"); + getEchoBasePersistenceContext().commitTransaction(); importCommonVoyage1Id = createImport( CommonAllImportService.class, @@ -399,19 +398,19 @@ private void createCommonVoyageImportV2() { // create voyage - Voyage voyage = create(voyageDao, - TopiaEntity.PROPERTY_TOPIA_ID, voyage2Id, - Voyage.PROPERTY_MISSION, getFirstEntity(Mission.class), - Voyage.PROPERTY_NAME, "voyage2", - Voyage.PROPERTY_START_DATE, newDate(), - Voyage.PROPERTY_END_DATE, newDate(), - Voyage.PROPERTY_START_PORT, "voyage2StartPort", - Voyage.PROPERTY_END_PORT, "voyage2EndPort", - Voyage.PROPERTY_DESCRIPTION, "voyage2Description", - Voyage.PROPERTY_DATUM, "voyage2Datum" + Voyage voyage = voyageDao.create( + TopiaEntity.PROPERTY_TOPIA_ID, voyage2Id, + Voyage.PROPERTY_MISSION, getFirstEntity(Mission.class), + Voyage.PROPERTY_NAME, "voyage2", + Voyage.PROPERTY_START_DATE, newDate(), + Voyage.PROPERTY_END_DATE, newDate(), + Voyage.PROPERTY_START_PORT, "voyage2StartPort", + Voyage.PROPERTY_END_PORT, "voyage2EndPort", + Voyage.PROPERTY_DESCRIPTION, "voyage2Description", + Voyage.PROPERTY_DATUM, "voyage2Datum" ); - commitTransaction("ImportError!"); + getEchoBasePersistenceContext().commitTransaction(); importCommonVoyage2Id = createImport( CommonAllImportService.class, @@ -428,18 +427,18 @@ Voyage voyage = getEntity(voyage1Id); // create transit - Transit transit = create(transitDAO, - TopiaEntity.PROPERTY_TOPIA_ID, transit1Id, - Transit.PROPERTY_START_TIME, newDate(), - Transit.PROPERTY_END_TIME, newDate(), - Transit.PROPERTY_START_LOCALITY, "transit1tartLocality", - Transit.PROPERTY_END_LOCALITY, "transit1EndLocality", - Transit.PROPERTY_DESCRIPTION, "transit1Description", - Transit.PROPERTY_RELATED_ACTIVITY, "transit1RelatedActivity" + Transit transit = transitDAO.create( + TopiaEntity.PROPERTY_TOPIA_ID, transit1Id, + Transit.PROPERTY_START_TIME, newDate(), + Transit.PROPERTY_END_TIME, newDate(), + Transit.PROPERTY_START_LOCALITY, "transit1tartLocality", + Transit.PROPERTY_END_LOCALITY, "transit1EndLocality", + Transit.PROPERTY_DESCRIPTION, "transit1Description", + Transit.PROPERTY_RELATED_ACTIVITY, "transit1RelatedActivity" ); voyage.addTransit(transit); - commitTransaction("ImportError!"); + getEchoBasePersistenceContext().commitTransaction(); importCommonTransit1Id = createImport( CommonAllImportService.class, @@ -456,18 +455,18 @@ Voyage voyage = getEntity(voyage2Id); // create transit - Transit transit = create(transitDAO, - TopiaEntity.PROPERTY_TOPIA_ID, transit2Id, - Transit.PROPERTY_START_TIME, newDate(), - Transit.PROPERTY_END_TIME, newDate(), - Transit.PROPERTY_START_LOCALITY, "transit2StartLocality", - Transit.PROPERTY_END_LOCALITY, "transit2EndLocality", - Transit.PROPERTY_DESCRIPTION, "transit2Description", - Transit.PROPERTY_RELATED_ACTIVITY, "transit2RelatedActivity" + Transit transit = transitDAO.create( + TopiaEntity.PROPERTY_TOPIA_ID, transit2Id, + Transit.PROPERTY_START_TIME, newDate(), + Transit.PROPERTY_END_TIME, newDate(), + Transit.PROPERTY_START_LOCALITY, "transit2StartLocality", + Transit.PROPERTY_END_LOCALITY, "transit2EndLocality", + Transit.PROPERTY_DESCRIPTION, "transit2Description", + Transit.PROPERTY_RELATED_ACTIVITY, "transit2RelatedActivity" ); voyage.addTransit(transit); - commitTransaction("ImportError!"); + getEchoBasePersistenceContext().commitTransaction(); importCommonTransit2Id = createImport( CommonAllImportService.class, @@ -486,24 +485,24 @@ Transit transit = voyage.getTransitByTopiaId(transit1Id); // create transect - Transect transect = create(transectDAO, - TopiaEntity.PROPERTY_TOPIA_ID, transect1Id, - Transect.PROPERTY_TITLE, "transect1Title", - Transect.PROPERTY_VESSEL, getFirstEntity(Vessel.class), - Transect.PROPERTY_STRATUM, "transect1Stratum" + Transect transect = transectDAO.create( + TopiaEntity.PROPERTY_TOPIA_ID, transect1Id, + Transect.PROPERTY_TITLE, "transect1Title", + Transect.PROPERTY_VESSEL, getFirstEntity(Vessel.class), + Transect.PROPERTY_STRATUM, "transect1Stratum" ); transit.addTransect(transect); // create transect2 - Transect transect2 = create(transectDAO, - TopiaEntity.PROPERTY_TOPIA_ID, transect1_2Id, - Transect.PROPERTY_TITLE, "transect12Title", - Transect.PROPERTY_VESSEL, getFirstEntity(Vessel.class), - Transect.PROPERTY_STRATUM, "transect12Stratum" + Transect transect2 = transectDAO.create( + TopiaEntity.PROPERTY_TOPIA_ID, transect1_2Id, + Transect.PROPERTY_TITLE, "transect12Title", + Transect.PROPERTY_VESSEL, getFirstEntity(Vessel.class), + Transect.PROPERTY_STRATUM, "transect12Stratum" ); transit.addTransect(transect2); - commitTransaction("ImportError!"); + getEchoBasePersistenceContext().commitTransaction(); importCommonTransect1Id = createImport( CommonAllImportService.class, @@ -521,24 +520,24 @@ Transit transit = voyage.getTransitByTopiaId(transit2Id); // create transect - Transect transect = create(transectDAO, - TopiaEntity.PROPERTY_TOPIA_ID, transect2Id, - Transect.PROPERTY_TITLE, "transect2Title", - Transect.PROPERTY_VESSEL, getFirstEntity(Vessel.class), - Transect.PROPERTY_STRATUM, "transect22tratum" + Transect transect = transectDAO.create( + TopiaEntity.PROPERTY_TOPIA_ID, transect2Id, + Transect.PROPERTY_TITLE, "transect2Title", + Transect.PROPERTY_VESSEL, getFirstEntity(Vessel.class), + Transect.PROPERTY_STRATUM, "transect22tratum" ); transit.addTransect(transect); // create transect2 - Transect transect2 = create(transectDAO, - TopiaEntity.PROPERTY_TOPIA_ID, transect2_2Id, - Transect.PROPERTY_TITLE, "transect22Title", - Transect.PROPERTY_VESSEL, getFirstEntity(Vessel.class), - Transect.PROPERTY_STRATUM, "transect22Stratum" + Transect transect2 = transectDAO.create( + TopiaEntity.PROPERTY_TOPIA_ID, transect2_2Id, + Transect.PROPERTY_TITLE, "transect22Title", + Transect.PROPERTY_VESSEL, getFirstEntity(Vessel.class), + Transect.PROPERTY_STRATUM, "transect22Stratum" ); transit.addTransect(transect2); - commitTransaction("ImportError!"); + getEchoBasePersistenceContext().commitTransaction(); importCommonTransect2Id = createImport( CommonAllImportService.class, @@ -554,17 +553,16 @@ Transect transect = getEntity(transect1Id); // create operation - Operation operation = create(operationDAO, - TopiaEntity.PROPERTY_TOPIA_ID, operation1Id, - Operation.PROPERTY_ID, "operationId", - Operation.PROPERTY_GEAR, getFirstEntity(Gear.class) + Operation operation = operationDAO.create( + TopiaEntity.PROPERTY_TOPIA_ID, operation1Id, + Operation.PROPERTY_ID, "operationId", + Operation.PROPERTY_GEAR, getFirstEntity(Gear.class) ); transect.addOperation(operation); // create operationMetadata - OperationMetadataValue operationMetadataValue = create( - operationMetadataValueDAO, + OperationMetadataValue operationMetadataValue = operationMetadataValueDAO.create( OperationMetadataValue.PROPERTY_OPERATION_METADATA, getFirstEntity(OperationMetadata.class), OperationMetadataValue.PROPERTY_DATA_VALUE, "dataValue" ); @@ -572,8 +570,7 @@ operation.addOperationMetadataValue(operationMetadataValue); // create geartMetadata - GearMetadataValue gearMetadataValue = create( - gearMetadataValueDAO, + GearMetadataValue gearMetadataValue = gearMetadataValueDAO.create( GearMetadataValue.PROPERTY_GEAR, operation.getGear(), GearMetadataValue.PROPERTY_GEAR_METADATA, getFirstEntity(GearMetadata.class), GearMetadataValue.PROPERTY_DATA_VALUE, "gearDataValue" @@ -596,52 +593,49 @@ Operation operation = getEntity(operation1Id); // create totalSample - Sample totalSample = create(sampleDAO, - TopiaEntity.PROPERTY_TOPIA_ID, totalSample1Id, - Sample.PROPERTY_SAMPLE_TYPE, getFirstEntity(SampleType.class), - Sample.PROPERTY_SPECIES_CATEGORY, getFirstEntity(SpeciesCategory.class), - Sample.PROPERTY_NUMBER_SAMPLED, 10, - Sample.PROPERTY_SAMPLE_WEIGHT, 2.4f + Sample totalSample = sampleDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, totalSample1Id, + Sample.PROPERTY_SAMPLE_TYPE, getFirstEntity(SampleType.class), + Sample.PROPERTY_SPECIES_CATEGORY, getFirstEntity(SpeciesCategory.class), + Sample.PROPERTY_NUMBER_SAMPLED, 10, + Sample.PROPERTY_SAMPLE_WEIGHT, 2.4f ); operation.addSample(totalSample); // add a data - SampleData totalSampleData = create(sampleDataDAO, - SampleData.PROPERTY_DATA_VALUE, 24.5f, - SampleData.PROPERTY_SAMPLE_DATA_TYPE, getFirstEntity(SampleDataType.class) + SampleData totalSampleData = sampleDataDAO.create(SampleData.PROPERTY_DATA_VALUE, 24.5f, + SampleData.PROPERTY_SAMPLE_DATA_TYPE, getFirstEntity(SampleDataType.class) ); totalSample.addSampleData(totalSampleData); // create subSample - Sample subSample = create(sampleDAO, - TopiaEntity.PROPERTY_TOPIA_ID, subSample1Id, - Sample.PROPERTY_SAMPLE_TYPE, getFirstEntity(SampleType.class), - Sample.PROPERTY_SPECIES_CATEGORY, getFirstEntity(SpeciesCategory.class), - Sample.PROPERTY_NUMBER_SAMPLED, 10, - Sample.PROPERTY_SAMPLE_WEIGHT, 2.5f + Sample subSample = sampleDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, subSample1Id, + Sample.PROPERTY_SAMPLE_TYPE, getFirstEntity(SampleType.class), + Sample.PROPERTY_SPECIES_CATEGORY, getFirstEntity(SpeciesCategory.class), + Sample.PROPERTY_NUMBER_SAMPLED, 10, + Sample.PROPERTY_SAMPLE_WEIGHT, 2.5f ); operation.addSample(subSample); // add a data - SampleData subSampleData = create(sampleDataDAO, - SampleData.PROPERTY_DATA_VALUE, 25.4f, - SampleData.PROPERTY_SAMPLE_DATA_TYPE, getFirstEntity(SampleDataType.class) + SampleData subSampleData = sampleDataDAO.create( + SampleData.PROPERTY_DATA_VALUE, 25.4f, + SampleData.PROPERTY_SAMPLE_DATA_TYPE, getFirstEntity(SampleDataType.class) ); subSample.addSampleData(subSampleData); // create biometrySample - Sample biometrySample = create(sampleDAO, - TopiaEntity.PROPERTY_TOPIA_ID, biometrySample1Id, - Sample.PROPERTY_SAMPLE_TYPE, getFirstEntity(SampleType.class), - Sample.PROPERTY_SPECIES_CATEGORY, getFirstEntity(SpeciesCategory.class), - Sample.PROPERTY_NUMBER_SAMPLED, 10, - Sample.PROPERTY_SAMPLE_WEIGHT, 2.6f + Sample biometrySample = sampleDAO.create( + TopiaEntity.PROPERTY_TOPIA_ID, biometrySample1Id, + Sample.PROPERTY_SAMPLE_TYPE, getFirstEntity(SampleType.class), + Sample.PROPERTY_SPECIES_CATEGORY, getFirstEntity(SpeciesCategory.class), + Sample.PROPERTY_NUMBER_SAMPLED, 10, + Sample.PROPERTY_SAMPLE_WEIGHT, 2.6f ); operation.addSample(biometrySample); // add a data - SampleData biometrySampleData = create(sampleDataDAO, - SampleData.PROPERTY_DATA_VALUE, 26.4f, - SampleData.PROPERTY_SAMPLE_DATA_TYPE, getFirstEntity(SampleDataType.class) + SampleData biometrySampleData = sampleDataDAO.create( + SampleData.PROPERTY_DATA_VALUE, 26.4f, + SampleData.PROPERTY_SAMPLE_DATA_TYPE, getFirstEntity(SampleDataType.class) ); biometrySample.addSampleData(biometrySampleData); @@ -659,41 +653,35 @@ Transect transect = getEntity(transect1Id); // create data acquisition - DataAcquisition dataAcquisition = create(dataAcquisitionDAO, - TopiaEntity.PROPERTY_TOPIA_ID, dataAcquisition1Id, - DataAcquisition.PROPERTY_ACOUSTIC_INSTRUMENT, getFirstEntity(AcousticInstrument.class)); + DataAcquisition dataAcquisition = dataAcquisitionDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, dataAcquisition1Id, + DataAcquisition.PROPERTY_ACOUSTIC_INSTRUMENT, getFirstEntity(AcousticInstrument.class)); transect.addDataAcquisition(dataAcquisition); // create dataProcessing - DataProcessing dataProcessing = create(dataProcessingDAO, - DataProcessing.PROPERTY_ID, "id1", - DataProcessing.PROPERTY_PROCESSING_TEMPLATE, "processingTemplate"); + DataProcessing dataProcessing = dataProcessingDAO.create(DataProcessing.PROPERTY_ID, "id1", + DataProcessing.PROPERTY_PROCESSING_TEMPLATE, "processingTemplate"); dataAcquisition.addDataProcessing(dataProcessing); // create esdu cell - Cell esduCell = create(cellDAO, - TopiaEntity.PROPERTY_TOPIA_ID, cellEsdu1Id, - Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), - Cell.PROPERTY_NAME, "cellEsdu1"); + Cell esduCell = cellDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, cellEsdu1Id, + Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), + Cell.PROPERTY_NAME, "cellEsdu1"); dataProcessing.addCell(esduCell); // create cell data - Data esduData = create(dataDAO, - Data.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), - Data.PROPERTY_DATA_VALUE, "esdu1Data"); + Data esduData = dataDAO.create(Data.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), + Data.PROPERTY_DATA_VALUE, "esdu1Data"); esduCell.addData(esduData); // create elementary cell - Cell elementaryCell = create(cellDAO, - TopiaEntity.PROPERTY_TOPIA_ID, cellElementary1Id, - Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), - Cell.PROPERTY_NAME, "cellElementary1"); + Cell elementaryCell = cellDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, cellElementary1Id, + Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), + Cell.PROPERTY_NAME, "cellElementary1"); esduCell.addChilds(elementaryCell); // create cell data - Data elementaryData = create(dataDAO, - Data.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), - Data.PROPERTY_DATA_VALUE, "elementary1Data"); + Data elementaryData = dataDAO.create(Data.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), + Data.PROPERTY_DATA_VALUE, "elementary1Data"); elementaryCell.addData(elementaryData); importAcoustic1Id = createImport( @@ -710,31 +698,28 @@ Voyage voyage = getEntity(voyage1Id); // create echotype - Echotype echotype = create(echotypeDAO, - TopiaEntity.PROPERTY_TOPIA_ID, echotype1Id, - Echotype.PROPERTY_NAME, "echotype1Name"); + Echotype echotype = echotypeDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, echotype1Id, + Echotype.PROPERTY_NAME, "echotype1Name"); voyage.addEchotype(echotype); // create lengthAgeKey - LengthAgeKey lengthAgeKey = create(lengthAgeKeyDAO, - TopiaEntity.PROPERTY_TOPIA_ID, lengthAgeKey1Id, - LengthAgeKey.PROPERTY_AGE, 12, - LengthAgeKey.PROPERTY_LENGTH, 12.5f, - LengthAgeKey.PROPERTY_METADATA, "lengthAgeKeyMetadata1", - LengthAgeKey.PROPERTY_SPECIES, getFirstEntity(Species.class), - LengthAgeKey.PROPERTY_STRATA, getFirstEntity(Strata.class) + LengthAgeKey lengthAgeKey = lengthAgeKeyDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, lengthAgeKey1Id, + LengthAgeKey.PROPERTY_AGE, 12, + LengthAgeKey.PROPERTY_LENGTH, 12.5f, + LengthAgeKey.PROPERTY_METADATA, "lengthAgeKeyMetadata1", + LengthAgeKey.PROPERTY_SPECIES, getFirstEntity(Species.class), + LengthAgeKey.PROPERTY_STRATA, getFirstEntity(Strata.class) ); voyage.addLengthAgeKey(lengthAgeKey); // create lengthWeightKey - LengthWeightKey lengthWeightKey = create(lengthWeightKeyDAO, - TopiaEntity.PROPERTY_TOPIA_ID, lengthWeightKey1Id, - LengthWeightKey.PROPERTY_APARAMETER, 12.5f, - LengthWeightKey.PROPERTY_BPARAMETER, 0.2f, - LengthWeightKey.PROPERTY_METADATA, "lengthWeightMetadata1", - LengthWeightKey.PROPERTY_SPECIES_CATEGORY, getFirstEntity(SpeciesCategory.class), - LengthWeightKey.PROPERTY_STRATA, getFirstEntity(Strata.class) + LengthWeightKey lengthWeightKey = lengthWeightKeyDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, lengthWeightKey1Id, + LengthWeightKey.PROPERTY_APARAMETER, 12.5f, + LengthWeightKey.PROPERTY_BPARAMETER, 0.2f, + LengthWeightKey.PROPERTY_METADATA, "lengthWeightMetadata1", + LengthWeightKey.PROPERTY_SPECIES_CATEGORY, getFirstEntity(SpeciesCategory.class), + LengthWeightKey.PROPERTY_STRATA, getFirstEntity(Strata.class) ); voyage.addLengthWeightKey(lengthWeightKey); @@ -751,14 +736,13 @@ // create result (on ESDU) - Category category = create(categoryDAO); + Category category = categoryDAO.create(); - Result result = create(resultDAO, - TopiaEntity.PROPERTY_TOPIA_ID, resultEsdu1Id, - Result.PROPERTY_CATEGORY, category, - Result.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), - Result.PROPERTY_RESULT_VALUE, "resultValueEdsu1", - Result.PROPERTY_RESULT_LABEL, "resultLabelEdsu1" + Result result = resultDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, resultEsdu1Id, + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), + Result.PROPERTY_RESULT_VALUE, "resultValueEdsu1", + Result.PROPERTY_RESULT_LABEL, "resultLabelEdsu1" ); Cell cell = getEntity(cellEsdu1Id); @@ -776,10 +760,9 @@ private void createResultRegionImportV1() throws TopiaException { // create region - Cell region = create(cellDAO, - TopiaEntity.PROPERTY_TOPIA_ID, cellRegion1Id, - Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), - Cell.PROPERTY_NAME, "cellRegion1"); + Cell region = cellDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, cellRegion1Id, + Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), + Cell.PROPERTY_NAME, "cellRegion1"); Voyage voyage = getEntity(voyage1Id); voyage.addPostCell(region); @@ -789,13 +772,12 @@ region.addChilds(esduCell); // create result (on region) - Category category = create(categoryDAO); - Result result = create(resultDAO, - TopiaEntity.PROPERTY_TOPIA_ID, resultRegion1Id, - Result.PROPERTY_CATEGORY, category, - Result.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), - Result.PROPERTY_RESULT_VALUE, "resultValueRegion1", - Result.PROPERTY_RESULT_LABEL, "resultLabelRegion1" + Category category = categoryDAO.create(); + Result result = resultDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, resultRegion1Id, + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), + Result.PROPERTY_RESULT_VALUE, "resultValueRegion1", + Result.PROPERTY_RESULT_LABEL, "resultLabelRegion1" ); region.addResult(result); @@ -811,22 +793,20 @@ private void createResultMapFishImportV1() throws TopiaException { // create map - Cell map = create(cellDAO, - TopiaEntity.PROPERTY_TOPIA_ID, cellMapFish1Id, - Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), - Cell.PROPERTY_NAME, "cellMap1"); + Cell map = cellDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, cellMapFish1Id, + Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), + Cell.PROPERTY_NAME, "cellMap1"); Voyage voyage = getEntity(voyage1Id); voyage.addPostCell(map); // create result (on map) - Category category = create(categoryDAO); - Result result = create(resultDAO, - TopiaEntity.PROPERTY_TOPIA_ID, resultMapFish1Id, - Result.PROPERTY_CATEGORY, category, - Result.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), - Result.PROPERTY_RESULT_VALUE, "resultValueMapFish1", - Result.PROPERTY_RESULT_LABEL, "resultLabelMapFish1" + Category category = categoryDAO.create(); + Result result = resultDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, resultMapFish1Id, + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), + Result.PROPERTY_RESULT_VALUE, "resultValueMapFish1", + Result.PROPERTY_RESULT_LABEL, "resultLabelMapFish1" ); map.addResult(result); @@ -842,21 +822,19 @@ private void createResultMapOtherImportV1() throws TopiaException { // create map - Cell map = create(cellDAO, - TopiaEntity.PROPERTY_TOPIA_ID, cellMapOther1Id, - Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), - Cell.PROPERTY_NAME, "cellMapOther1"); + Cell map = cellDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, cellMapOther1Id, + Cell.PROPERTY_CELL_TYPE, getFirstEntity(CellType.class), + Cell.PROPERTY_NAME, "cellMapOther1"); Voyage voyage = getEntity(voyage1Id); voyage.addPostCell(map); // create result (on map) - Result result = create(resultDAO, - TopiaEntity.PROPERTY_TOPIA_ID, resultMapOther1Id, - Result.PROPERTY_CATEGORY, null, - Result.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), - Result.PROPERTY_RESULT_VALUE, "resultValueMapOther1", - Result.PROPERTY_RESULT_LABEL, "resultLabelMapOther1" + Result result = resultDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, resultMapOther1Id, + Result.PROPERTY_CATEGORY, null, + Result.PROPERTY_DATA_METADATA, getFirstEntity(DataMetadata.class), + Result.PROPERTY_RESULT_VALUE, "resultValueMapOther1", + Result.PROPERTY_RESULT_LABEL, "resultLabelMapOther1" ); map.addResult(result); @@ -880,7 +858,7 @@ importConf.setImportNotes(importNote); importConf.setVoyageId(voyageId); - S importService = getService(serviceType); + S importService = newService(serviceType); ImportLog importLog = importService.computeImportLogEntry( importConf, createFakeUser()); @@ -889,7 +867,7 @@ importLog.addImportId(importId.getTopiaId()); } - commitTransaction("ImportLogError!"); + getEchoBasePersistenceContext().commitTransaction(); String importId = importLog.getTopiaId(); Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AcousticRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AcousticRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AcousticRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.AcousticRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.AcousticRemoveDataStrategy; import org.junit.Test; /** Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CatchesRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CatchesRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CatchesRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.CatchesRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.CatchesRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonAllRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonAllRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonAllRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.CommonAllRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.CommonAllRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransectRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransectRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransectRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.CommonTransectRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.CommonTransectRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransitRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransitRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransitRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.CommonTransitRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.CommonTransitRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonVoyageRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonVoyageRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonVoyageRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.CommonVoyageRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.CommonVoyageRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/OperationRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/OperationRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/OperationRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.OperationRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.OperationRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultEsduRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultEsduRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultEsduRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.ResultEsduRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultEsduRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveFishDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveFishDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveFishDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.ResultMapFishRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultMapFishRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveOtherDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveOtherDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveOtherDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.ResultMapOtherRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultMapOtherRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultRegionRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultRegionRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultRegionRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.ResultRegionRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultRegionRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultVoyageRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultVoyageRemoveDataServiceTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultVoyageRemoveDataServiceTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataService; -import fr.ifremer.echobase.services.removedata.strategy.ResultVoyageRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.strategy.ResultVoyageRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.TopiaException; Modified: trunk/echobase-services/update-import-data-db.sh =================================================================== --- trunk/echobase-services/update-import-data-db.sh 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-services/update-import-data-db.sh 2013-08-15 10:53:16 UTC (rev 842) @@ -36,20 +36,20 @@ cp -v "$1" "src/test/resources/$dbnameprefix-importDb-referentiel.zip" -executeMaven fr.ifremer.echobase.services.importdb.ImportDbServiceTest nodata +executeMaven fr.ifremer.echobase.services.service.importdb.ImportDbServiceTest nodata -executeMaven fr.ifremer.echobase.services.importdata.CommonAllImportServiceIT commonData +executeMaven fr.ifremer.echobase.services.service.importdata.CommonAllImportServiceIT commonData -executeMaven fr.ifremer.echobase.services.importdata.OperationImportServiceIT operation +executeMaven fr.ifremer.echobase.services.service.importdata.OperationImportServiceIT operation -executeMaven fr.ifremer.echobase.services.importdata.CatchesImportServiceIT catches +executeMaven fr.ifremer.echobase.services.service.importdata.CatchesImportServiceIT catches -executeMaven fr.ifremer.echobase.services.importdata.ResultsVoyageImportServiceIT catches-and-voyage-result +executeMaven fr.ifremer.echobase.services.service.importdata.ResultsVoyageImportServiceIT catches-and-voyage-result -#executeMaven fr.ifremer.echobase.services.importdata.AcousticImportServiceIT catches-and-acoustic-and-voyage-result +#executeMaven fr.ifremer.echobase.services.service.importdata.AcousticImportServiceIT catches-and-acoustic-and-voyage-result -#executeMaven fr.ifremer.echobase.services.importdata.ResultsEsduCellImportServiceIT +#executeMaven fr.ifremer.echobase.services.service.importdata.ResultsEsduCellImportServiceIT -#executeMaven fr.ifremer.echobase.services.importdata.ResultsRegionCellImportServiceIT +#executeMaven fr.ifremer.echobase.services.service.importdata.ResultsRegionCellImportServiceIT -#executeMaven fr.ifremer.echobase.services.importdata.ResultsMapFishCellImportServiceIT +#executeMaven fr.ifremer.echobase.services.service.importdata.ResultsMapFishCellImportServiceIT Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/CellLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/CellLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/CellLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -31,7 +31,6 @@ import com.google.common.collect.Sets; import com.healthmarketscience.jackcess.Database; import fr.ifremer.echobase.EchoBaseFunctions; -import fr.ifremer.echobase.entities.EchoBaseDAOHelper; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Data; @@ -228,10 +227,10 @@ EchoBaseFunctions.DATA_PROCESSING_ID); DataMetadataDAO dataMetadataDAO = - EchoBaseDAOHelper.getDataMetadataDAO(getTransaction()); + getEchoBasePersistenceContext().getDataMetadataDAO(); CellMethod cellMethodstart = - EchoBaseDAOHelper.getCellMethodDAO(getTransaction()).findByName("CellStart"); + getEchoBasePersistenceContext().getCellMethodDAO().findByName("CellStart"); surfaceMetadata = dataMetadataDAO.findByName("Surface"); esduLatitudeMetadata = dataMetadataDAO.findByProperties(DataMetadata.PROPERTY_NAME, "LatitudeStart", @@ -256,8 +255,8 @@ nullDataQuality = dataQualitiesById.get(0); - CellTypeDAO cellTypeDAO = EchoBaseDAOHelper.getCellTypeDAO( - getTransaction()); + CellTypeDAO cellTypeDAO = + getEchoBasePersistenceContext().getCellTypeDAO(); esduCellType = cellTypeDAO.findById("Esdu"); elementaryCellType = cellTypeDAO.findById("Elementary"); @@ -301,7 +300,7 @@ // obtain acoustic dataMetadata for this data processing DataMetadataDAO dataMetadataDAO = - EchoBaseDAOHelper.getDataMetadataDAO(getTransaction()); + getEchoBasePersistenceContext().getDataMetadataDAO(); Map<String, Object> eiconfigurationRow = eiConfigurationByProcessingId.get(dataProcessingId); @@ -319,8 +318,8 @@ Preconditions.checkNotNull(acousticMetadata, "Could not find acoustic Metadata with name " + longName); dao = getDAO(); - dataDao = getDAO(Data.class); - VoyageDAO voyageDao = (VoyageDAO) getDAO(Voyage.class); + dataDao = getEchoBasePersistenceContext().getDataDAO(); + VoyageDAO voyageDao = getEchoBasePersistenceContext().getVoyageDAO(); Voyage voyage = voyageDao.findByName(campagne); Preconditions.checkNotNull(voyage); Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/DataMetadataLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/DataMetadataLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/DataMetadataLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -27,8 +27,6 @@ import com.healthmarketscience.jackcess.Database; import com.healthmarketscience.jackcess.Table; import fr.ifremer.echobase.EchoBaseFunctions; -import org.nuiton.topia.persistence.csv.EntityCsvModel; -import fr.ifremer.echobase.entities.EchoBaseDAOHelper; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.references.CellMethod; import fr.ifremer.echobase.entities.references.DataMetadata; @@ -37,9 +35,9 @@ import fr.ifremer.echobase.tools.FileType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.csv.EntityCsvModel; import org.nuiton.topia.persistence.metadata.TableMeta; import java.io.IOException; @@ -67,12 +65,10 @@ // require referenceDatum, dataType and cellMethod - TopiaContext tx = serviceContext.getTransaction(); - CellMethod cellMethod = - EchoBaseDAOHelper.getCellMethodDAO(tx).findByName("Mean"); + getEchoBasePersistenceContext().getCellMethodDAO().findByName("Mean"); DataType dataType = - EchoBaseDAOHelper.getDataTypeDAO(tx).findByName("Acoustic density"); + getEchoBasePersistenceContext().getDataTypeDAO().findByName("Acoustic density"); TopiaDAO<DataMetadata> dao = getDAO(); @@ -104,14 +100,14 @@ @Override protected EntityCsvModel<EchoBaseEntityEnum, DataMetadata> createCsvImportModel(TableMeta<EchoBaseEntityEnum> meta) { - EntityCsvModel<EchoBaseEntityEnum,DataMetadata> model = EntityCsvModel.newModel( + EntityCsvModel<EchoBaseEntityEnum, DataMetadata> model = EntityCsvModel.newModel( getCsvSeparator(), meta ); - List<DataType> dataTypes = getEntities(DataType.class); - List<ReferenceDatum> referenceDatums = getEntities(ReferenceDatum.class); - List<CellMethod> cellMethods = getEntities(CellMethod.class); + List<DataType> dataTypes = getEchoBasePersistenceContext().getDataTypeDAO().findAll(); + List<ReferenceDatum> referenceDatums = getEchoBasePersistenceContext().getReferenceDatumDAO().findAll(); + List<CellMethod> cellMethods = getEchoBasePersistenceContext().getCellMethodDAO().findAll(); model.addForeignKeyForImport("DataTypeID", DataMetadata.PROPERTY_DATA_TYPE, DataType.class, dataTypes, EchoBaseFunctions.DATA_TYPE_NAME); Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -33,15 +33,18 @@ import com.healthmarketscience.jackcess.Database; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; import fr.ifremer.echobase.services.EchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.exportdb.ExportService; -import fr.ifremer.echobase.services.importdb.EchoBaseImportModelFactory; +import fr.ifremer.echobase.services.service.importdb.EchoBaseImportModelFactory; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.tools.FileType; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Import; +import org.nuiton.csv.ImportModel; +import org.nuiton.csv.ImportToMap; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntities; @@ -53,9 +56,6 @@ import org.nuiton.topia.persistence.metadata.MetaFilenameAware; import org.nuiton.topia.persistence.metadata.TableMeta; import org.nuiton.util.FileUtil; -import org.nuiton.csv.Import; -import org.nuiton.csv.ImportModel; -import org.nuiton.csv.ImportToMap; import java.io.BufferedReader; import java.io.File; @@ -143,11 +143,13 @@ // init internal states - meta = getDbMeta().getTable(entityType); + EchoBaseDbMeta dbMeta = getDbMeta(); + meta = dbMeta.getTable(entityType); + if (parent != null) { - TableMeta<EchoBaseEntityEnum> parentMeta = getDbMeta().getTable(parent); + TableMeta<EchoBaseEntityEnum> parentMeta = dbMeta.getTable(parent); // find the associationMeta parentAssociationMeta = @@ -222,8 +224,7 @@ Import<E> importer = Import.newImport(csvModel, bf); try { - DbEditorService dbEditorService = - getService(DbEditorService.class); + DbEditorService dbEditorService = getDbEditorService(); importNewEntities(dbEditorService, tableMeta, importer); } finally { @@ -244,7 +245,7 @@ exportAssociations(outputDir, FileType.ASSOCIATION); } finally { if (cleanTransaction) { - serviceContext.getTransaction().rollbackTransaction(); + getEchoBasePersistenceContext().rollbackTransaction(); } } } @@ -278,7 +279,7 @@ exportAssociations(outputDir, FileType.ASSOCIATION); } finally { if (cleanTransaction) { - serviceContext.getTransaction().rollbackTransaction(); + getEchoBasePersistenceContext().rollbackTransaction(); } } } @@ -377,22 +378,14 @@ } } if (commit) { - commitTransaction("Could not copyAndLoadEntities"); + getEchoBasePersistenceContext().commitTransaction(); } } protected TopiaDAO<E> getDAO() throws TopiaException { - return getDAO(entityClass); + return getEchoBasePersistenceContext().getDAO(entityClass); } - protected final ExportService getExportService() { - return getService(ExportService.class); - } - - protected final char getCsvSeparator() { - return serviceContext.getConfiguration().getCsvSeparator(); - } - protected final Class<E> getEntityClass() { return entityClass; } @@ -407,7 +400,7 @@ protected <E extends TopiaEntity, K> Map<K, E> getUniverse(Class<E> entityType, Function<E, K> function) { - List<E> entities = getEntities(entityType); + List<E> entities = getEchoBasePersistenceContext().getDAO(entityType).findAll(); Map<K, E> universe = Maps.uniqueIndex(entities, function); return universe; } @@ -435,7 +428,7 @@ } EchoBaseEntityEnum target = associationMeta.getTarget(); - List<TopiaEntity> targetEntities = (List<TopiaEntity>) getEntities(target.getContract()); + List<TopiaEntity> targetEntities = (List<TopiaEntity>) getEchoBasePersistenceContext().getDAO(target.getContract()).findAll(); Map<String, TopiaEntity> targetsById = Maps.uniqueIndex(targetEntities, TopiaEntities.getTopiaIdFunction()); @@ -445,7 +438,7 @@ ImportToMap importer = ImportToMap.newImportToMap(model, reader); - List<E> sourceEntities = (List<E>) getEntities(sourceType.getContract()); + List<E> sourceEntities = (List<E>) getEchoBasePersistenceContext().getDAO(sourceType.getContract()).findAll(); Map<String, E> sourcesById = Maps.uniqueIndex(sourceEntities, TopiaEntities.getTopiaIdFunction()); try { @@ -483,7 +476,7 @@ Import<TopiaEntity> importer = Import.newImport(model, reader); try { - TopiaDAO<?> dao = getDAO(tableMeta.getSource().getContract()); + TopiaDAO<?> dao = getEchoBasePersistenceContext().getDAO(tableMeta.getSource().getContract()); for (TopiaEntity entity : importer) { Map<String, Object> properties = meta.prepareCreate( Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearMetadataLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearMetadataLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/GearMetadataLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -48,7 +48,8 @@ @Override protected EntityCsvModel<EchoBaseEntityEnum, GearMetadata> createCsvImportModel(TableMeta<EchoBaseEntityEnum> meta) { - List<OperationEvent> events = getEntities(OperationEvent.class); + List<OperationEvent> events = + getEchoBasePersistenceContext().getOperationEventDAO().findAll(); EntityCsvModel<EchoBaseEntityEnum,GearMetadata> model = EntityCsvModel.newModel( getCsvSeparator(), Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -165,7 +165,7 @@ Gear.class, EchoBaseFunctions.GEAR_CASINO_GEAR_NAME); OperationMetadataDAO operationMetadataDAO = - (OperationMetadataDAO) getDAO(OperationMetadata.class); + getEchoBasePersistenceContext().getOperationMetadataDAO(); //SONDE meanWaterDepthOperationMeta = @@ -183,7 +183,7 @@ Preconditions.checkNotNull(endWaterDepthOperationMeta); GearMetadataDAO gearMetadataDAO = - (GearMetadataDAO) getDAO(GearMetadata.class); + getEchoBasePersistenceContext().getGearMetadataDAO(); //LFUNES cableLengthGearMeta = gearMetadataDAO.findByName("CableLength"); @@ -196,8 +196,8 @@ Preconditions.checkNotNull(maxSpeedGearMeta); dao = getDAO(); - operationMetadataValueDAO = getDAO(OperationMetadataValue.class); - gearMetadataValueDAO = getDAO(GearMetadataValue.class); + operationMetadataValueDAO = getEchoBasePersistenceContext().getOperationMetadataValueDAO(); + gearMetadataValueDAO = getEchoBasePersistenceContext().getGearMetadataValueDAO(); Multimap<String, Map<String, Object>> stationByCampagneName = Multimaps.index( db.getTable("STATIONS"), EchoBaseFunctions.newRowFunction("CAMPAGNE")); Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationMetadataLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationMetadataLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/OperationMetadataLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -49,7 +49,8 @@ @Override protected EntityCsvModel<EchoBaseEntityEnum, OperationMetadata> createCsvImportModel(TableMeta<EchoBaseEntityEnum> meta) { - List<OperationEvent> events = getEntities(OperationEvent.class); + List<OperationEvent> events = + getEchoBasePersistenceContext().getOperationEventDAO().findAll(); EntityCsvModel<EchoBaseEntityEnum, OperationMetadata> model = EntityCsvModel.newModel( getCsvSeparator(), Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/ReferenceDatumLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/ReferenceDatumLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/ReferenceDatumLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,11 +24,11 @@ package fr.ifremer.echobase.tools.loaders; import fr.ifremer.echobase.EchoBaseFunctions; -import org.nuiton.topia.persistence.csv.EntityCsvModel; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.references.ReferenceDatum; import fr.ifremer.echobase.entities.references.ReferenceDatumType; import fr.ifremer.echobase.tools.FileType; +import org.nuiton.topia.persistence.csv.EntityCsvModel; import org.nuiton.topia.persistence.metadata.TableMeta; import java.util.List; @@ -47,13 +47,13 @@ @Override protected EntityCsvModel<EchoBaseEntityEnum, ReferenceDatum> createCsvImportModel(TableMeta<EchoBaseEntityEnum> meta) { - EntityCsvModel<EchoBaseEntityEnum,ReferenceDatum> model = EntityCsvModel.newModel( + EntityCsvModel<EchoBaseEntityEnum, ReferenceDatum> model = EntityCsvModel.newModel( getCsvSeparator(), meta ); List<ReferenceDatumType> referenceDatumTypes = - getEntities(ReferenceDatumType.class); + getEchoBasePersistenceContext().getReferenceDatumTypeDAO().findAll(); model.newMandatoryColumn(ReferenceDatum.PROPERTY_ID); model.newMandatoryColumn(ReferenceDatum.PROPERTY_MEANING); Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/SampleLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/SampleLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/SampleLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -164,7 +164,7 @@ EchoBaseFunctions.newRowFunction("NOSTA_VALEUR_BIOMETRIE") ); SampleTypeDAO sampleTypeDAO = - (SampleTypeDAO) getDAO(SampleType.class); + getEchoBasePersistenceContext().getSampleTypeDAO(); SampleType sampleTypeTotal = sampleTypeDAO.findByName("Total"); Preconditions.checkNotNull(sampleTypeTotal); @@ -175,7 +175,7 @@ SampleType sampleTypeIndividual = sampleTypeDAO.findByName("Individual"); Preconditions.checkNotNull(sampleTypeIndividual); - sampleDataDAO = (SampleDataDAO) getDAO(SampleData.class); + sampleDataDAO = getEchoBasePersistenceContext().getSampleDataDAO(); //MeanLengthcm SampleDataType sampleDataTypeMeanLength = getFK(sampleDataTypeByRaptriCode, "114"); @@ -189,7 +189,7 @@ SampleDataType sampleDataTypeWeightAtLength = getFK(sampleDataTypeByRaptriCode, "113"); dao = getDAO(); - speciesCategoryDAO = (SpeciesCategoryDAO) getDAO(SpeciesCategory.class); + speciesCategoryDAO = getEchoBasePersistenceContext().getSpeciesCategoryDAO(); int nbSampleUnsorted = 0; int nbSampleTotal = 0; int nbSubSample = 0; Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/SpeciesCategoryLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/SpeciesCategoryLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/SpeciesCategoryLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -70,7 +70,7 @@ SexCategory.class, EchoBaseFunctions.SEX_CATEGORY_NAME); SpeciesCategoryDAO speciesCategoryDAO = - (SpeciesCategoryDAO) getDAO(SpeciesCategory.class); + getEchoBasePersistenceContext().getSpeciesCategoryDAO(); List<LengthWeightKey> lengthWeightKeys = Lists.newArrayList(); Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/StrataLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/StrataLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/StrataLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -49,7 +49,8 @@ @Override protected EntityCsvModel<EchoBaseEntityEnum, Strata> createCsvImportModel(TableMeta<EchoBaseEntityEnum> meta) { - List<DepthStratum> depthStratums = getEntities(DepthStratum.class); + List<DepthStratum> depthStratums = + getEchoBasePersistenceContext().getDepthStratumDAO().findAll(); EntityCsvModel<EchoBaseEntityEnum,Strata> model = EntityCsvModel.newModel( getCsvSeparator(), Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VesselLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VesselLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VesselLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -49,8 +49,8 @@ @Override protected EntityCsvModel<EchoBaseEntityEnum, Vessel> createCsvImportModel(TableMeta<EchoBaseEntityEnum> meta) { - List<VesselType> vesselTypesByName = getEntities( - VesselType.class); + List<VesselType> vesselTypesByName = + getEchoBasePersistenceContext().getVesselTypeDAO().findAll(); EntityCsvModel<EchoBaseEntityEnum,Vessel> model = EntityCsvModel.newModel( getCsvSeparator(), Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VoyageLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VoyageLoader.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VoyageLoader.java 2013-08-15 10:53:16 UTC (rev 842) @@ -29,7 +29,6 @@ import com.healthmarketscience.jackcess.Table; import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBaseTechnicalException; -import org.nuiton.topia.persistence.csv.in.AbstractImportModel; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.data.Echotype; @@ -40,16 +39,17 @@ import fr.ifremer.echobase.entities.references.EchotypeCategory; import fr.ifremer.echobase.entities.references.Mission; import fr.ifremer.echobase.entities.references.Species; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.tools.FileType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Import; +import org.nuiton.csv.ImportModel; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.csv.in.AbstractImportModel; import org.nuiton.topia.persistence.metadata.AssociationMeta; import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.csv.Import; -import org.nuiton.csv.ImportModel; import java.io.BufferedReader; import java.io.File; @@ -158,8 +158,7 @@ AssociationMeta<EchoBaseEntityEnum> echotypeSpeciesAssociationMeta = echotypeMeta.getAssociations(Echotype.PROPERTY_SPECIES); - DbEditorService dbEditorService = - getService(DbEditorService.class); + DbEditorService dbEditorService = getDbEditorService(); try { BufferedReader bf = new BufferedReader(new FileReader(csvfile)); @@ -193,7 +192,7 @@ keystoTopiaId.put(key, topiaId); Echotype echotypeSaved = - dbEditorService.getEntityById(Echotype.class, topiaId); + getEchoBasePersistenceContext().getEntityById(Echotype.class, topiaId); echotypeSaved.addSpecies(row.getSpecies()); row.getVoyage().addEchotype(echotypeSaved); } @@ -229,7 +228,7 @@ } finally { if (cleanTransaction) { - serviceContext.getTransaction().rollbackTransaction(); + getEchoBasePersistenceContext().rollbackTransaction(); } } } Modified: trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/AbstractToolTest.java =================================================================== --- trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/AbstractToolTest.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/AbstractToolTest.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,25 +23,21 @@ */ package fr.ifremer.echobase.tools; -import fr.ifremer.echobase.EchoBaseConfiguration; -import fr.ifremer.echobase.EchoBaseConfigurationOption; +import fr.ifremer.echobase.config.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfigurationOption; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; import fr.ifremer.echobase.persistence.JdbcConfiguration; -import fr.ifremer.echobase.persistence.EchoBaseDbMeta; import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; -import fr.ifremer.echobase.services.EchoBaseService; import fr.ifremer.echobase.services.EchoBaseServiceContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.After; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Rule; import org.junit.rules.TestName; import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.TopiaEntity; import java.io.File; import java.util.Locale; @@ -79,42 +75,35 @@ log.debug("Test directory = " + testdir); } + JdbcConfiguration dbConf = JdbcConfiguration.newEmbeddedConfig(testdir); + + topiaContext = EchobaseTopiaContexts.newWorkingDb(dbConf); + + // init configuration + Properties defaultProps = new Properties(); defaultProps.put(EchoBaseConfigurationOption.DATA_DIRECTORY.getKey(), testdir); - configuration = new EchoBaseConfiguration(defaultProps); - JdbcConfiguration dbConf = JdbcConfiguration.newEmbeddedConfig(testdir); - - topiaContext = EchobaseTopiaContexts.newWorkingDb( - dbConf); - serviceContext = DefaultEchoBaseServiceContext.newContext( Locale.getDefault(), - null, - topiaContext.beginTransaction(), configuration, - EchoBaseDbMeta.newDbMeta() + EchoBaseDbMeta.newDbMeta(), + null + ); + serviceContext.setEchoBasePersistenceContext(new TopiaEchoBasePersistenceContext(topiaContext.beginTransaction())); } @After public void tearDown() throws Exception { try { - serviceContext.getTransaction().closeContext(); + serviceContext.getEchoBasePersistenceContext().closeContext(); } finally { + topiaContext.closeContext(); } } - public <E extends EchoBaseService> E getService(Class<E> clazz) { - return serviceContext.getService(clazz); - } - - protected <E extends TopiaEntity> TopiaDAO<E> getDao(Class<E> entityClass) throws TopiaException { - TopiaDAO<E> dao = serviceContext.getDbMeta().getPersistenceHelper().getDAO(serviceContext.getTransaction(), entityClass); - return dao; - } - } Modified: trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/loaders/AbstractLoaderIT.java =================================================================== --- trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/loaders/AbstractLoaderIT.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/loaders/AbstractLoaderIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -28,7 +28,7 @@ import com.google.common.collect.Sets; import com.healthmarketscience.jackcess.Database; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.importdb.ImportService; +import fr.ifremer.echobase.services.service.importdb.ImportService; import fr.ifremer.echobase.tools.AbstractToolTest; import fr.ifremer.echobase.tools.FileType; import fr.ifremer.echobase.tools.TestHelper; @@ -115,7 +115,7 @@ FileUtil.createDirectoryIfNecessary(exportdir); // get loader - loader = getService(loaderType); + loader = serviceContext.newService(loaderType); if (loadDependencies) { loadDependencies(); @@ -264,7 +264,7 @@ } private TopiaDAO<E> getDAO() throws TopiaException { - return getDao(loader.getEntityClass()); + return serviceContext.getEchoBasePersistenceContext().getDAO(loader.getEntityClass()); } private File getTableFile(FileType fileType) throws IOException { @@ -289,7 +289,7 @@ if (log.isInfoEnabled()) { log.info("Import " + inFile); } - CsvImportResult<EchoBaseEntityEnum> csvImportResult = getService(ImportService.class).importDatas( + CsvImportResult<EchoBaseEntityEnum> csvImportResult = serviceContext.newService(ImportService.class).importDatas( loader.getEntityType(), inFile.getAbsolutePath(), inFile, @@ -333,43 +333,43 @@ public List<EntityLoader<?>> getEntityLoaders() { if (entityLoaders == null) { entityLoaders = Lists.newArrayList(); - entityLoaders.add(getService(SpeciesLoader.class)); - entityLoaders.add(getService(MissionLoader.class)); - entityLoaders.add(getService(AreaOfOperationLoader.class)); - entityLoaders.add(getService(AcousticInstrumentLoader.class)); - entityLoaders.add(getService(DepthStratumLoader.class)); - entityLoaders.add(getService(DataQualityLoader.class)); - entityLoaders.add(getService(ReferenceDatumTypeLoader.class)); - entityLoaders.add(getService(ReferenceDatumLoader.class)); - entityLoaders.add(getService(DataTypeLoader.class)); - entityLoaders.add(getService(CellTypeLoader.class)); - entityLoaders.add(getService(CellMethodLoader.class)); - entityLoaders.add(getService(DataMetadataLoader.class)); - entityLoaders.add(getService(TSParametersLoader.class)); - entityLoaders.add(getService(StrataLoader.class)); - entityLoaders.add(getService(EchotypeCategoryLoader.class)); - entityLoaders.add(getService(VesselTypeLoader.class)); - entityLoaders.add(getService(VesselLoader.class)); - entityLoaders.add(getService(OperationEventLoader.class)); - entityLoaders.add(getService(SampleDataTypeLoader.class)); - entityLoaders.add(getService(SampleTypeLoader.class)); - entityLoaders.add(getService(LengthAgeKeyLoader.class)); - entityLoaders.add(getService(LengthWeightKeyLoader.class)); - entityLoaders.add(getService(SexCategoryLoader.class)); - entityLoaders.add(getService(SizeCategoryLoader.class)); - entityLoaders.add(getService(OperationMetadataLoader.class)); - entityLoaders.add(getService(GearMetadataLoader.class)); - entityLoaders.add(getService(GearLoader.class)); - entityLoaders.add(getService(AgeCategoryLoader.class)); - entityLoaders.add(getService(SpeciesCategoryLoader.class)); + entityLoaders.add(serviceContext.newService(SpeciesLoader.class)); + entityLoaders.add(serviceContext.newService(MissionLoader.class)); + entityLoaders.add(serviceContext.newService(AreaOfOperationLoader.class)); + entityLoaders.add(serviceContext.newService(AcousticInstrumentLoader.class)); + entityLoaders.add(serviceContext.newService(DepthStratumLoader.class)); + entityLoaders.add(serviceContext.newService(DataQualityLoader.class)); + entityLoaders.add(serviceContext.newService(ReferenceDatumTypeLoader.class)); + entityLoaders.add(serviceContext.newService(ReferenceDatumLoader.class)); + entityLoaders.add(serviceContext.newService(DataTypeLoader.class)); + entityLoaders.add(serviceContext.newService(CellTypeLoader.class)); + entityLoaders.add(serviceContext.newService(CellMethodLoader.class)); + entityLoaders.add(serviceContext.newService(DataMetadataLoader.class)); + entityLoaders.add(serviceContext.newService(TSParametersLoader.class)); + entityLoaders.add(serviceContext.newService(StrataLoader.class)); + entityLoaders.add(serviceContext.newService(EchotypeCategoryLoader.class)); + entityLoaders.add(serviceContext.newService(VesselTypeLoader.class)); + entityLoaders.add(serviceContext.newService(VesselLoader.class)); + entityLoaders.add(serviceContext.newService(OperationEventLoader.class)); + entityLoaders.add(serviceContext.newService(SampleDataTypeLoader.class)); + entityLoaders.add(serviceContext.newService(SampleTypeLoader.class)); + entityLoaders.add(serviceContext.newService(LengthAgeKeyLoader.class)); + entityLoaders.add(serviceContext.newService(LengthWeightKeyLoader.class)); + entityLoaders.add(serviceContext.newService(SexCategoryLoader.class)); + entityLoaders.add(serviceContext.newService(SizeCategoryLoader.class)); + entityLoaders.add(serviceContext.newService(OperationMetadataLoader.class)); + entityLoaders.add(serviceContext.newService(GearMetadataLoader.class)); + entityLoaders.add(serviceContext.newService(GearLoader.class)); + entityLoaders.add(serviceContext.newService(AgeCategoryLoader.class)); + entityLoaders.add(serviceContext.newService(SpeciesCategoryLoader.class)); - entityLoaders.add(getService(VoyageLoader.class)); - entityLoaders.add(getService(TransitLoader.class)); - entityLoaders.add(getService(TransectLoader.class)); - entityLoaders.add(getService(DataAcquisitionLoader.class)); - entityLoaders.add(getService(DataProcessingLoader.class)); - entityLoaders.add(getService(CellLoader.class)); - entityLoaders.add(getService(OperationLoader.class)); + entityLoaders.add(serviceContext.newService(VoyageLoader.class)); + entityLoaders.add(serviceContext.newService(TransitLoader.class)); + entityLoaders.add(serviceContext.newService(TransectLoader.class)); + entityLoaders.add(serviceContext.newService(DataAcquisitionLoader.class)); + entityLoaders.add(serviceContext.newService(DataProcessingLoader.class)); + entityLoaders.add(serviceContext.newService(CellLoader.class)); + entityLoaders.add(serviceContext.newService(OperationLoader.class)); } return entityLoaders; } Modified: trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/loaders/CellLoaderIT.java =================================================================== --- trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/loaders/CellLoaderIT.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-tools/src/test/java/fr/ifremer/echobase/tools/loaders/CellLoaderIT.java 2013-08-15 10:53:16 UTC (rev 842) @@ -32,7 +32,7 @@ import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.DataProcessing; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.tools.FileType; import fr.ifremer.echobase.tools.TestHelper; import org.apache.commons.collections.CollectionUtils; Modified: trunk/echobase-ui/pom.xml =================================================================== --- trunk/echobase-ui/pom.xml 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/pom.xml 2013-08-15 10:53:16 UTC (rev 842) @@ -138,10 +138,12 @@ <configuration> <path>/echobase</path> <uriEncoding>UTF-8</uriEncoding> + <!--<fork>true</fork>--> <systemProperties> <echobase.log.dir> ${project.build.directory}/echobase.log </echobase.log.dir> + <JAVA_OPTS>-Xms512m -Xmx2048m -XX:MaxPermSize=256m</JAVA_OPTS> </systemProperties> </configuration> </plugin> @@ -156,6 +158,7 @@ <echobase.log.dir> ${project.build.directory}/echobase.log </echobase.log.dir> + <JAVA_OPTS>-Xms512m -Xmx2048m -XX:MaxPermSize=256m</JAVA_OPTS> </systemProperties> </configuration> </plugin> Modified: trunk/echobase-ui/src/main/assembly/dist/help.sql =================================================================== --- trunk/echobase-ui/src/main/assembly/dist/help.sql 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/assembly/dist/help.sql 2013-08-15 10:53:16 UTC (rev 842) @@ -1,8 +1,8 @@ --- -- #%L -- EchoBase :: UI --- $Id:$ --- $HeadURL:$ +-- $Id$ +-- $HeadURL$ -- %% -- Copyright (C) 2011 - 2013 Ifremer, Codelutin -- %% @@ -64,6 +64,8 @@ -- esdu fr.ifremer.echobase.entities.data.Cell#1334269715614#0.1761358511840082 +-- esdu fr.ifremer.echobase.entities.data.Cell#1348330016210#0.934653007293087 + -- get all elementary SELECT * Property changes on: trunk/echobase-ui/src/main/assembly/dist/help.sql ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/assembly/dist/postgis-structure.sql =================================================================== --- trunk/echobase-ui/src/main/assembly/dist/postgis-structure.sql 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/assembly/dist/postgis-structure.sql 2013-08-15 10:53:16 UTC (rev 842) @@ -234,7 +234,7 @@ RETURNS VOID AS $$ BEGIN - RAISE NOTICE 'Treat spatial cell % [type %] ...', cell_id, cell_type; + RAISE LOG 'Treat spatial cell % [type %] ...', cell_id, cell_type; CASE cell_type WHEN 'ESDU' THEN @@ -330,11 +330,22 @@ SELECT echobase_latitudetext_to_dd(latitude) INTO latitudeNumber; + + IF latitude IS NOT NULL AND latitudeNumber IS NULL + THEN + latitudeNumber := latitude :: REAL; + END IF; + -- convert dms longitude to dd longitude SELECT echobase_longitudetext_to_dd(longitude) INTO longitudeNumber; + IF longitude IS NOT NULL AND longitudeNumber IS NULL + THEN + longitudeNumber := longitude :: REAL; + END IF; + SELECT 'SRID=4326;POINT(' || longitudeNumber || ' ' || latitudeNumber || ')' INTO spatialText; @@ -474,11 +485,22 @@ SELECT echobase_latitudetext_to_dd(latitude) INTO latitudeNumber; + + IF latitude IS NOT NULL AND latitudeNumber IS NULL + THEN + latitudeNumber := latitude :: REAL; + END IF; + -- convert dms longitude to dd longitude SELECT echobase_longitudetext_to_dd(longitude) INTO longitudeNumber; + IF longitude IS NOT NULL AND longitudeNumber IS NULL + THEN + longitudeNumber := longitude :: REAL; + END IF; + SELECT 'SRID=4326;POINTZ(' || longitudeNumber || ' ' || latitudeNumber || ' ' || depth || ')' Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationContext.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationContext.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationContext.java 2013-08-15 10:53:16 UTC (rev 842) @@ -26,13 +26,29 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Sets; import com.opensymphony.xwork2.ActionContext; -import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfiguration; +import fr.ifremer.echobase.entities.TopiaEchoBaseInternalPersistenceContext; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; +import fr.ifremer.echobase.entities.spatial.SpatialDataCache; import fr.ifremer.echobase.persistence.EchoBaseDbMeta; +import fr.ifremer.echobase.persistence.EchoBaseEntityHelper; +import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; +import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; +import fr.ifremer.echobase.services.EchoBaseServiceContext; +import fr.ird.converter.FloatConverter; +import org.apache.commons.beanutils.ConvertUtils; +import org.apache.commons.beanutils.Converter; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.i18n.I18n; +import org.nuiton.i18n.init.DefaultI18nInitializer; import org.nuiton.topia.TopiaContext; +import org.nuiton.util.converter.ConverterUtil; import javax.servlet.ServletContext; +import java.beans.Introspector; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -50,24 +66,9 @@ private static final String APPLICATION_CONTEXT_PARAMETER = "echobaseApplicationContext"; - protected EchoBaseConfiguration configuration; - - protected EchoBaseDbMeta dbMeta; - - /** Root context for the internal database. */ - protected TopiaContext internalRootContext; - /** Set of all loggued user sessions to be close at shutdown time. */ protected Set<EchoBaseSession> sessions; - /** - * Flag setted to true when internal db was just created (should then - * display in ui created user password). - * - * @since 1.1 - */ - protected boolean defaultUsersCreated; - public static EchoBaseApplicationContext getApplicationContext(ActionContext actionContext) { Map<String, Object> application = actionContext.getApplication(); EchoBaseApplicationContext result = @@ -93,6 +94,33 @@ servletContext.removeAttribute(APPLICATION_CONTEXT_PARAMETER); } + protected EchoBaseConfiguration configuration; + + protected EchoBaseDbMeta dbMeta; + + /** Root context for the internal database. */ + protected TopiaContext internalRootContext; + + /** + * Flag setted to true when internal db was just created (should then + * display in ui created user password). + * + * @since 1.1 + */ + protected boolean defaultUsersCreated; + + /** + * A simple cache of spatial data. + * + * @since 2.2 + */ + protected final SpatialDataCache spatialDataCache; + + public EchoBaseApplicationContext() { + + spatialDataCache = new SpatialDataCache(); + } + public Set<EchoBaseSession> getEchoBaseSessions() { return sessions; } @@ -124,35 +152,144 @@ session.close(); } + public void init() { + + // init I18n + DefaultI18nInitializer i18nInitializer = + new DefaultI18nInitializer("echobase-i18n"); + i18nInitializer.setMissingKeyReturnNull(true); + I18n.init(i18nInitializer, Locale.getDefault()); + + // init converters + Converter converter = ConverterUtil.getConverter(Float.class); + if (converter != null) { + ConvertUtils.deregister(Float.class); + } + ConvertUtils.register(new FloatConverter(), Float.class); + + // initialize configuration + EchoBaseConfiguration configuration = new EchoBaseConfiguration(); + + // initialize internal root context + TopiaContext internalRootContext = + EchobaseTopiaContexts.newInternalDb( + configuration.getInternalDbDirectory()); + + setConfiguration(configuration); + setDbMeta(EchoBaseDbMeta.newDbMeta()); + setInternalRootContext(internalRootContext); + } + public EchoBaseConfiguration getConfiguration() { return configuration; } - public void setConfiguration(EchoBaseConfiguration configuration) { - this.configuration = configuration; + public EchoBaseDbMeta getDbMeta() { + return dbMeta; } public TopiaContext getInternalRootContext() { return internalRootContext; } - public void setInternalRootContext(TopiaContext internalRootContext) { - this.internalRootContext = internalRootContext; + public boolean isDefaultUsersCreated() { + return defaultUsersCreated; } - public EchoBaseDbMeta getDbMeta() { - return dbMeta; + public SpatialDataCache getSpatialDataCache() { + return spatialDataCache; } + public EchoBaseServiceContext newServiceContext(Locale locale, + TopiaContext topiaInternalContext, + TopiaContext topiaContext) { + + EchoBaseServiceContext newServiceContext = + DefaultEchoBaseServiceContext.newContext( + locale, + configuration, + dbMeta, + spatialDataCache); + + TopiaEchoBaseInternalPersistenceContext internalPersistenceContext = + new TopiaEchoBaseInternalPersistenceContext(topiaInternalContext); + + newServiceContext.setEchoBaseInternalPersistenceContext( + internalPersistenceContext); + + TopiaEchoBasePersistenceContext persistenceContext = + new TopiaEchoBasePersistenceContext(topiaContext); + + newServiceContext.setEchoBasePersistenceContext(persistenceContext); + + return newServiceContext; + } + + public void close() { + + try { + spatialDataCache.clear(); + + if (internalRootContext != null) { + // release internal db + EchoBaseEntityHelper.releaseRootContext(internalRootContext); + } + } finally { + + try { + // release all user sessions + if (CollectionUtils.isNotEmpty(sessions)) { + for (EchoBaseSession session : sessions) { + destroyEchoBaseSession(session); + } + } + } finally { + // see http://wiki.apache.org/commons/Logging/FrequentlyAskedQuestions#A_memory_lea... + ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); + LogFactory.release(contextClassLoader); + + Introspector.flushCaches(); + } + } + } + public void setDbMeta(EchoBaseDbMeta dbMeta) { this.dbMeta = dbMeta; } - public boolean isDefaultUsersCreated() { - return defaultUsersCreated; + public void setInternalRootContext(TopiaContext internalRootContext) { + this.internalRootContext = internalRootContext; } public void setDefaultUsersCreated(boolean defaultUsersCreated) { this.defaultUsersCreated = defaultUsersCreated; } + + public void setConfiguration(EchoBaseConfiguration configuration) { + this.configuration = configuration; + } + +// protected final EventListenerList listenerList = new EventListenerList(); +// +// public void addWorkingDbChangeListener(WorkingDbChangeListener listener) { +// listenerList.add(WorkingDbChangeListener.class, listener); +// } +// +// public void removeWorkingDbChangeListener(WorkingDbChangeListener listener) { +// listenerList.remove(WorkingDbChangeListener.class, listener); +// } +// +// public void fireVoyageChangeEvent(String jdbcUrl, String voyageId) { +// VoyageChangedEvent event = new VoyageChangedEvent(jdbcUrl, voyageId); +// for (WorkingDbChangeListener listener : listenerList.getListeners(WorkingDbChangeListener.class)) { +// listener.onVoyageChanged(event); +// } +// } +// +// public void fireDbChangeEvent(String jdbcUrl) { +// DbChangedEvent event = new DbChangedEvent(jdbcUrl); +// for (WorkingDbChangeListener listener : listenerList.getListeners(WorkingDbChangeListener.class)) { +// listener.onDbChanged(event); +// } +// } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,39 +24,31 @@ package fr.ifremer.echobase.ui; import com.google.common.base.Preconditions; -import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfiguration; import fr.ifremer.echobase.entities.DriverType; import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.TopiaEchoBaseInternalPersistenceContext; import fr.ifremer.echobase.persistence.EchoBaseDbMeta; import fr.ifremer.echobase.persistence.EchoBaseEntityHelper; -import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseServiceContext; -import fr.ifremer.echobase.services.UserService; -import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationService; -import fr.ifremer.echobase.services.workingDb.WorkingDbConfigurationService; -import fr.ird.converter.FloatConverter; -import org.apache.commons.beanutils.ConvertUtils; -import org.apache.commons.beanutils.Converter; +import fr.ifremer.echobase.services.service.embeddedapplication.EmbeddedApplicationService; +import fr.ifremer.echobase.services.service.UserService; +import fr.ifremer.echobase.services.service.workingDb.WorkingDbConfigurationService; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.i18n.I18n; -import org.nuiton.i18n.init.DefaultI18nInitializer; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.util.converter.ConverterUtil; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; -import java.beans.Introspector; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Locale; -import java.util.Set; /** * To listen start or end of the application. @@ -99,51 +91,27 @@ log.info("Application starting at " + new Date() + "..."); } - // init I18n - DefaultI18nInitializer i18nInitializer = - new DefaultI18nInitializer("echobase-i18n"); - i18nInitializer.setMissingKeyReturnNull(true); - I18n.init(i18nInitializer, Locale.getDefault()); - - // init converters - Converter converter = ConverterUtil.getConverter(Float.class); - if (converter != null) { - ConvertUtils.deregister(Float.class); - } - ConvertUtils.register(new FloatConverter(), Float.class); - - // initialize configuration - EchoBaseConfiguration configuration = new EchoBaseConfiguration(); - - // initialize internal root context - TopiaContext internalRootContext = - EchobaseTopiaContexts.newInternalDb( - configuration.getInternalDbDirectory()); - // initialize application context EchoBaseApplicationContext applicationContext = new EchoBaseApplicationContext(); + EchoBaseApplicationContext.setApplicationContext( sce.getServletContext(), applicationContext); - applicationContext.setConfiguration(configuration); - applicationContext.setDbMeta(EchoBaseDbMeta.newDbMeta()); - applicationContext.setInternalRootContext(internalRootContext); + applicationContext.init(); + // create a service context EchoBaseServiceContext serviceContext = DefaultEchoBaseServiceContext.newContext( Locale.getDefault(), - null, - null, - configuration, - applicationContext.getDbMeta() - ); + applicationContext.getConfiguration(), + applicationContext.getDbMeta(), + applicationContext.getSpatialDataCache()); // init database (and create minimal admin user if required) initInternalDatabase(applicationContext, serviceContext); - // copy drivers if required try { copyDriverFiles(serviceContext); @@ -167,27 +135,28 @@ // remove application context from container EchoBaseApplicationContext.removeApplicationContext(servletContext); - try { - // release internal db - TopiaContext rootContext = - applicationContext.getInternalRootContext(); - EchoBaseEntityHelper.releaseRootContext(rootContext); - } finally { + applicationContext.close(); - // release all user sessions - Set<EchoBaseSession> sessions = applicationContext.getEchoBaseSessions(); - if (CollectionUtils.isNotEmpty(sessions)) { - for (EchoBaseSession session : sessions) { - applicationContext.destroyEchoBaseSession(session); - } - } +// // release internal db +// TopiaContext rootContext = +// applicationContext.getInternalRootContext(); +// EchoBaseEntityHelper.releaseRootContext(rootContext); +// finally { - // see http://wiki.apache.org/commons/Logging/FrequentlyAskedQuestions#A_memory_lea... - ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); - LogFactory.release(contextClassLoader); +// // release all user sessions +// Set<EchoBaseSession> sessions = applicationContext.getEchoBaseSessions(); +// if (CollectionUtils.isNotEmpty(sessions)) { +// for (EchoBaseSession session : sessions) { +// applicationContext.destroyEchoBaseSession(session); +// } +// } - Introspector.flushCaches(); - } +// // see http://wiki.apache.org/commons/Logging/FrequentlyAskedQuestions#A_memory_lea... +// ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); +// LogFactory.release(contextClassLoader); +// +// Introspector.flushCaches(); +// } } /** @@ -224,9 +193,9 @@ TopiaContext tx = rootContext.beginTransaction(); try { - serviceContext.setInternalTransaction(tx); + serviceContext.setEchoBaseInternalPersistenceContext(new TopiaEchoBaseInternalPersistenceContext(tx)); - UserService service = serviceContext.getService(UserService.class); + UserService service = serviceContext.newService(UserService.class); List<EchoBaseUser> users = service.getUsers(); @@ -248,18 +217,18 @@ "configuration for embedded db."); } // try to create a default embedded working db configuration - serviceContext.getService(WorkingDbConfigurationService.class). + serviceContext.newService(WorkingDbConfigurationService.class). createEmbeddedWorkingDbConfiguration(); } } finally { - serviceContext.setInternalTransaction(null); + serviceContext.setEchoBaseInternalPersistenceContext(null); EchoBaseEntityHelper.closeConnection(tx); } } protected void copyDriverFiles(EchoBaseServiceContext serviceContext) throws IOException { EmbeddedApplicationService service = - serviceContext.getService(EmbeddedApplicationService.class); + serviceContext.newService(EmbeddedApplicationService.class); EchoBaseConfiguration configuration = serviceContext.getConfiguration(); File libDirectory = configuration.getLibDirectory(); for (DriverType driverType : DriverType.values()) { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseInternalDbTransactionFilter.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseInternalDbTransactionFilter.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseInternalDbTransactionFilter.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,6 @@ package fr.ifremer.echobase.ui; import com.opensymphony.xwork2.ActionContext; -import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.StrutsStatics; @@ -55,7 +54,7 @@ @Override protected /*synchronized*/ TopiaContext beginTransaction(ServletRequest request) { EchoBaseApplicationContext applicationContext = - EchoBaseActionSupport.getEchoBaseApplicationContext(); + EchoBaseApplicationContext.getApplicationContext(request.getServletContext()); TopiaContext rootContext = applicationContext.getInternalRootContext(); TopiaContext transaction = rootContext.beginTransaction(); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseSession.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseSession.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseSession.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,6 +23,7 @@ */ package fr.ifremer.echobase.ui; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.opensymphony.xwork2.ActionContext; @@ -31,6 +32,9 @@ import fr.ifremer.echobase.persistence.EchobaseTopiaContexts; import fr.ifremer.echobase.persistence.JdbcConfiguration; import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; +import fr.ifremer.echobase.entities.spatial.SpatialData; +import fr.ifremer.echobase.ui.actions.spatial.ShowSpatialModel; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; @@ -39,6 +43,8 @@ import javax.servlet.http.HttpSession; import java.io.Closeable; import java.io.Serializable; +import java.util.Collection; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -66,6 +72,9 @@ /** Key to set root context of working db selected by user (if any). */ private static final String PROPERTY_WORKING_DB_ROOT_CONTEXT = "workingDbRootContext"; + /** Key to set spatial data list. */ + private static final String PROPERTY_SPATIAL_DATA = "spatialData"; + public static final String SESSION_TOKEN_MESSAGES = "messages"; public static final String SESSION_TOKEN_ERRORS = "errors"; @@ -263,13 +272,6 @@ } } - protected Map<String, Object> getDynamicData() { - if (store == null) { - store = Maps.newHashMap(); - } - return store; - } - public void addMessage(String messageScope, String message) { Set<String> messages = getDynamicSetData(messageScope); if (messages == null) { @@ -280,6 +282,36 @@ } } + public Set<SpatialData> getSpatialData(ShowSpatialModel model) { + List<ShowSpatialModel> list = get(PROPERTY_SPATIAL_DATA, List.class); + Set<SpatialData> result = null; + if (list != null) { + int i = list.indexOf(model); + if (i != -1) { + ShowSpatialModel showSpatialModel = list.get(i); + result = showSpatialModel.getSpatialData(); + } + } + + return result; + } + + public void setSpatialData(ShowSpatialModel model) { + List<ShowSpatialModel> list = get(PROPERTY_SPATIAL_DATA, List.class); + if (list == null) { + list = Lists.newArrayList(); + set(PROPERTY_SPATIAL_DATA, list); + } + list.add(model); + } + + protected Map<String, Object> getDynamicData() { + if (store == null) { + store = Maps.newHashMap(); + } + return store; + } + /** Protect session constructor. */ protected EchoBaseSession() { store = new TreeMap<String, Object>(); @@ -304,7 +336,7 @@ * * @param key the key to test in this session * @return {@code true} if an object was found in this session, - * {@code false} otherwise + * {@code false} otherwise */ protected boolean contains(String key) { boolean result = store.containsKey(key); @@ -370,4 +402,34 @@ } } } + + public boolean isWithFlashMessages() { + Collection<String> result = getDynamicSetData(EchoBaseSession.SESSION_TOKEN_MESSAGES); + return CollectionUtils.isNotEmpty(result); + } + + public boolean isWithFlashErrors() { + Collection<String> result = getDynamicSetData(EchoBaseSession.SESSION_TOKEN_ERRORS); + return CollectionUtils.isNotEmpty(result); + } + + public boolean isWithFlashWarnings() { + Collection<String> result = getDynamicSetData(EchoBaseSession.SESSION_TOKEN_WARNINGS); + return CollectionUtils.isNotEmpty(result); + } + + public Collection<String> getFlashMessages() { + Collection<String> result = consumeDynamicSetData(EchoBaseSession.SESSION_TOKEN_MESSAGES); + return result; + } + + public Collection<String> getFlashErrors() { + Collection<String> result = consumeDynamicSetData(EchoBaseSession.SESSION_TOKEN_ERRORS); + return result; + } + + public Collection<String> getFlashWarnings() { + Collection<String> result = consumeDynamicSetData(EchoBaseSession.SESSION_TOKEN_WARNINGS); + return result; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractConfigureAction.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractConfigureAction.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractConfigureAction.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,6 +25,8 @@ import com.opensymphony.xwork2.interceptor.annotations.InputConfig; import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; +import fr.ifremer.echobase.services.service.DecoratorService; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -99,4 +101,19 @@ return getEchoBaseSession().getActionConfiguration(modelType); } + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } + + protected transient DecoratorService decoratorService; + + public void setDecoratorService(DecoratorService decoratorService) { + this.decoratorService = decoratorService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractWaitAndExecAction.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractWaitAndExecAction.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractWaitAndExecAction.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,6 +25,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.Preparable; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; import fr.ifremer.echobase.persistence.EchoBaseEntityHelper; import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; import fr.ifremer.echobase.services.EchoBaseService; @@ -151,16 +152,15 @@ // in more than one request TopiaContext tx = EchoBaseEntityHelper.newTransactionFromRootContext( - getServiceContext().getTransaction()); + getServiceContext().getEchoBasePersistenceContext().getContext()); try { - getServiceContext().setTransaction(tx); + getServiceContext().setEchoBasePersistenceContext(new TopiaEchoBasePersistenceContext(tx)); - S service = getService(serviceType); + S service = getServiceContext().newService(serviceType); startAction(service, model); - } catch (Exception e) { model.setError(e); } finally { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,33 +24,16 @@ package fr.ifremer.echobase.ui.actions; import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; -import com.opensymphony.xwork2.ActionContext; -import fr.ifremer.echobase.EchoBaseConfiguration; -import fr.ifremer.echobase.I18nAble; -import fr.ifremer.echobase.services.DecoratorService; -import fr.ifremer.echobase.services.DefaultEchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseService; import fr.ifremer.echobase.services.EchoBaseServiceContext; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.ServiceFactoryAware; import fr.ifremer.echobase.ui.EchoBaseApplicationContext; -import fr.ifremer.echobase.ui.EchoBaseInternalDbTransactionFilter; import fr.ifremer.echobase.ui.EchoBaseSession; -import fr.ifremer.echobase.ui.EchoBaseWorkingDbTransactionFilter; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.struts2.interceptor.ParameterAware; -import org.apache.struts2.interceptor.SessionAware; -import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.web.struts2.BaseAction; import java.text.SimpleDateFormat; -import java.util.Collection; import java.util.Date; -import java.util.List; import java.util.Locale; -import java.util.Map; /** * EchoBase action support. @@ -58,7 +41,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class EchoBaseActionSupport extends BaseAction implements ServiceFactoryAware { +public class EchoBaseActionSupport extends BaseAction { private static final long serialVersionUID = 1L; @@ -68,95 +51,12 @@ private static final SimpleDateFormat monthFormat = new SimpleDateFormat("mm-yyyy"); - private static EchoBaseApplicationContext applicationContext; - - public static EchoBaseApplicationContext getEchoBaseApplicationContext() { - if (applicationContext == null) { - applicationContext = EchoBaseApplicationContext.getApplicationContext( - getActionContext()); - } - return applicationContext; - } - - public static String getApplicationVersion() { - return getEchoBaseApplicationContext().getConfiguration().getApplicationVersion().toString(); - } - - protected EchoBaseConfiguration getConfiguration() { - return getEchoBaseApplicationContext().getConfiguration(); - } - - /** EchoBase User session. */ - private transient EchoBaseSession echoBaseSession; - - /** - * Service context used to access and create services. - * - * @since 1.0 - */ - private transient EchoBaseServiceContext serviceContext; - - /** - * Parameters injected if you put {@link ParameterAware} contract on your - * action. - * - * @see ParameterAware - * @since 1.1 - */ - private transient Map<String, String[]> parameters; - - /** - * Session injected if you put {@link SessionAware} contract on your action. - * - * @see SessionAware - * @since 1.1 - */ - private transient Map<String, Object> session; - - public EchoBaseSession getEchoBaseSession() { - if (echoBaseSession == null) { - - // load it from session - echoBaseSession = EchoBaseSession.getEchoBaseSession(getActionContext()); - } - return echoBaseSession; - } - - public EchoBaseServiceContext getServiceContext() { - if (serviceContext == null) { - serviceContext = DefaultEchoBaseServiceContext.newContext( - getLocale(), - EchoBaseInternalDbTransactionFilter.getTransaction(getActionContext()), - EchoBaseWorkingDbTransactionFilter.getTransaction(getActionContext()), - getConfiguration(), - getEchoBaseApplicationContext().getDbMeta() - ); - } - return serviceContext; - } - - /** - * Sub-classes should use this method to easily get a service instance. - * - * @param serviceClass The type of service to instantiate - * @return A newly created service of the expected type with necessary data set - */ - @Override - public <E extends EchoBaseService> E getService(Class<E> serviceClass) { - E service = getServiceContext().getService(serviceClass); + protected <E extends EchoBaseService> E newService(Class<E> serviceClass) { + E service = getServiceContext().newService(serviceClass); return service; } - public boolean isAdmin() { - boolean result = getEchoBaseSession().isAdmin(); - return result; - } - public boolean isWorkingDbSelected() { - boolean result = getEchoBaseSession().isWorkingDbSelected(); - return result; - } - public String formatDate(Date date) { String result = dateFormat.format(date); return result; @@ -167,14 +67,6 @@ return result; } - public void setParameters(Map<String, String[]> parameters) { - this.parameters = parameters; - } - - public void setSession(Map<String, Object> session) { - this.session = session; - } - public void addFlashMessage(String message) { getEchoBaseSession().addMessage(EchoBaseSession.SESSION_TOKEN_MESSAGES, message); } @@ -187,57 +79,13 @@ getEchoBaseSession().addMessage(EchoBaseSession.SESSION_TOKEN_WARNINGS, message); } - public Collection<String> getFlashMessages() { - Collection<String> result = getEchoBaseSession().consumeDynamicSetData(EchoBaseSession.SESSION_TOKEN_MESSAGES); - return result; - } - - public Collection<String> getFlashErrors() { - Collection<String> result = getEchoBaseSession().consumeDynamicSetData(EchoBaseSession.SESSION_TOKEN_ERRORS); - return result; - } - - public Collection<String> getFlashWarnings() { - Collection<String> result = getEchoBaseSession().consumeDynamicSetData(EchoBaseSession.SESSION_TOKEN_WARNINGS); - return result; - } - - public boolean hasFlashMessages() { - Collection<String> result = getEchoBaseSession().getDynamicSetData(EchoBaseSession.SESSION_TOKEN_MESSAGES); - return CollectionUtils.isNotEmpty(result); - } - - public boolean hasFlashErrors() { - Collection<String> result = getEchoBaseSession().getDynamicSetData(EchoBaseSession.SESSION_TOKEN_ERRORS); - return CollectionUtils.isNotEmpty(result); - } - - public boolean hasFlashWarnings() { - Collection<String> result = getEchoBaseSession().getDynamicSetData(EchoBaseSession.SESSION_TOKEN_WARNINGS); - return CollectionUtils.isNotEmpty(result); - } - - public void clearFlashMessages() { - Collection<String> result = getEchoBaseSession().getDynamicSetData(EchoBaseSession.SESSION_TOKEN_MESSAGES); - if (result != null) { - result.clear(); - } - } - - public void clearFlashErrors() { - Collection<String> result = getEchoBaseSession().getDynamicSetData(EchoBaseSession.SESSION_TOKEN_ERRORS); - if (result != null) { - result.clear(); - } - } - public String getDocumentation(String page) { return getDocumentation(page, null); } public String getDocumentation(String page, String anchor) { Locale locale = getLocale(); - String result = getConfiguration().getDocumentationUrl().toString(); + String result = getEchoBaseApplicationContext().getConfiguration().getDocumentationUrl().toString(); if (!result.endsWith("/")) { result += "/"; } @@ -251,46 +99,48 @@ return result; } - public boolean hasAnyErrors() { - boolean result = super.hasErrors(); - return result || hasFlashErrors(); - } + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// - protected static ActionContext getActionContext() { - return ActionContext.getContext(); - } + /** EchoBase Application context. */ + private transient EchoBaseApplicationContext applicationContext; - protected final <E extends Enum<E> & I18nAble> Map<String, String> decorateEnums(E... enumValues) { - Map<String, String> result = Maps.newLinkedHashMap(); - for (E enumValue : enumValues) { - result.put(enumValue.name(), _(enumValue.getI18nKey())); - } - return result; - } + /** EchoBase User session. */ + private transient EchoBaseSession echoBaseSession; - protected final <E extends TopiaEntity> Map<String, String> loadSortAndDecorate(Class<E> beanType) { + /** + * Service context used to access and create services. + * + * @since 1.0 + */ + private transient EchoBaseServiceContext serviceContext; - EchoBaseServiceSupport service = getService(EchoBaseServiceSupport.class); - List<E> beans = service.getEntities(beanType); + public void setApplicationContext(EchoBaseApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } - DecoratorService decoratorService = getService(DecoratorService.class); - return decoratorService.sortAndDecorate(getLocale(), beans, null); + public void setEchoBaseSession(EchoBaseSession echoBaseSession) { + this.echoBaseSession = echoBaseSession; } + public void setServiceContext(EchoBaseServiceContext serviceContext) { + this.serviceContext = serviceContext; + } - protected Map<String, String[]> getParameters() { - Preconditions.checkNotNull( - parameters, - "You must put ParameterAware contract on your action " + - getClass().getName()); - return parameters; + public EchoBaseApplicationContext getEchoBaseApplicationContext() { + Preconditions.checkNotNull("No applicationContext is your action " + this); + return applicationContext; } - protected Map<String, Object> getSession() { - Preconditions.checkNotNull( - session, - "You must put SessionAware contract on your action " + - getClass().getName()); - return session; + public EchoBaseSession getEchoBaseSession() { + Preconditions.checkNotNull("No echoBaseSession is your action " + this); + return echoBaseSession; } + + public EchoBaseServiceContext getServiceContext() { + Preconditions.checkNotNull("No serviceContext is your action " + this); + return serviceContext; + } + } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/Home.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/Home.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/Home.java 2013-08-15 10:53:16 UTC (rev 842) @@ -36,7 +36,7 @@ @Override public String execute() throws Exception { - if (!isWorkingDbSelected()) { + if (!getEchoBaseSession().isWorkingDbSelected()) { addFlashMessage(_("echobase.info.no.workingDb.selected")); } return SUCCESS; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/AbstractLoadPage.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/AbstractLoadPage.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/AbstractLoadPage.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,7 +25,7 @@ import com.google.common.collect.Maps; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.nuiton.topia.persistence.metadata.ColumnMeta; import org.nuiton.topia.persistence.metadata.DbMeta; @@ -48,28 +48,28 @@ /** Type of entity to load. */ protected EchoBaseEntityEnum entityType; + public void setEntityType(EchoBaseEntityEnum entityType) { + this.entityType = entityType; + } + + public EchoBaseEntityEnum getEntityType() { + return entityType; + } + /** All entities availables. */ protected Map<String, String> entityTypes; - /** Metas of the table. */ - protected TableMeta<EchoBaseEntityEnum> tableMeta; - public Map<String, String> getEntityTypes() { return entityTypes; } + /** Metas of the table. */ + protected TableMeta<EchoBaseEntityEnum> tableMeta; + public List<ColumnMeta> getColumnMetas() { return tableMeta.getColumns(); } - public void setEntityType(EchoBaseEntityEnum entityType) { - this.entityType = entityType; - } - - public EchoBaseEntityEnum getEntityType() { - return entityType; - } - public void load() throws Exception { entityTypes = Maps.newTreeMap(); DbMeta<EchoBaseEntityEnum> dbMeta = getEchoBaseApplicationContext().getDbMeta(); @@ -88,9 +88,18 @@ } else { // load table metas - DbEditorService dbEditorService = getService(DbEditorService.class); tableMeta = dbEditorService.getTableMeta(entityType); } } + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient DbEditorService dbEditorService; + + public void setDbEditorService(DbEditorService dbEditorService) { + this.dbEditorService = dbEditorService; + } + } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ExportTable.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ExportTable.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ExportTable.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,8 @@ package fr.ifremer.echobase.ui.actions.dbeditor; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.exportdb.ExportService; +import fr.ifremer.echobase.services.service.DbEditorService; +import fr.ifremer.echobase.services.service.exportdb.ExportService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -49,55 +50,54 @@ /** Type of entity to export. */ protected EchoBaseEntityEnum entityType; + public void setEntityType(EchoBaseEntityEnum entityType) { + this.entityType = entityType; + } + /** Default file name to create. */ protected String exportFileName; - /** Stream of the file to export. */ - protected transient InputStream inputStream; - - /** Length of the file to export. */ - protected long contentLength; - - /** Type of the file to export. */ - protected String contentType; - - /** Export datas as seen on screen (no topiaId). */ - protected boolean exportAsSeen; - - public void setEntityType(EchoBaseEntityEnum entityType) { - this.entityType = entityType; + public String getExportFileName() { + return exportFileName; } public void setExportFileName(String exportFileName) { this.exportFileName = exportFileName; } + /** Export datas as seen on screen (no topiaId). */ + protected boolean exportAsSeen; + public void setExportAsSeen(boolean exportAsSeen) { this.exportAsSeen = exportAsSeen; } + /** Stream of the file to export. */ + protected transient InputStream inputStream; + public InputStream getInputStream() { return inputStream; } + /** Length of the file to export. */ + protected long contentLength; + public long getContentLength() { return contentLength; } + /** Type of the file to export. */ + protected String contentType; + public String getContentType() { return contentType; } - public String getExportFileName() { - return exportFileName; - } - @Override public String execute() throws Exception { - TableMeta<EchoBaseEntityEnum> table = getServiceContext().getDbMeta().getTable(entityType); - String content = getService(ExportService.class).exportData(table, - exportAsSeen); + TableMeta<EchoBaseEntityEnum> table = dbEditorService.getTableMeta(entityType); + String content = exportService.exportData(table, exportAsSeen); if (log.isDebugEnabled()) { log.debug("file to export " + content); @@ -108,4 +108,20 @@ inputStream = new ByteArrayInputStream(content.getBytes()); return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient DbEditorService dbEditorService; + + public void setDbEditorService(DbEditorService dbEditorService) { + this.dbEditorService = dbEditorService; + } + + protected transient ExportService exportService; + + public void setExportService(ExportService exportService) { + this.exportService = exportService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java 2013-08-15 10:53:16 UTC (rev 842) @@ -32,16 +32,17 @@ import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.DbEditorService; -import fr.ifremer.echobase.services.DecoratorService; +import fr.ifremer.echobase.services.service.DbEditorService; +import fr.ifremer.echobase.services.service.DecoratorService; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; import fr.ifremer.echobase.ui.actions.AbstractJSONPaginedAction; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import org.nuiton.topia.persistence.pager.FilterRule; import org.nuiton.topia.persistence.pager.FilterRuleGroupOperator; import org.nuiton.topia.persistence.pager.FilterRuleOperator; -import org.nuiton.decorator.Decorator; import java.util.Arrays; import java.util.Collection; @@ -60,22 +61,22 @@ /** Logger. */ private static final Log log = LogFactory.getLog(GetEntities.class); - /** Type of entity to load. */ - protected EchoBaseEntityEnum entityType; - - /** Datas of the given table. */ - protected Map<?, ?>[] datas; - protected String voyageId; public void setVoyageId(String voyageId) { this.voyageId = voyageId; } + /** Type of entity to load. */ + protected EchoBaseEntityEnum entityType; + public void setEntityType(EchoBaseEntityEnum entityType) { this.entityType = entityType; } + /** Datas of the given table. */ + protected Map<?, ?>[] datas; + public Map<?, ?>[] getDatas() { return datas; } @@ -94,7 +95,7 @@ log.debug("sord = " + ascendantOrder); } - datas = getService(DbEditorService.class).getData(entityType, pager); + datas = dbEditorService.getData(entityType, pager); if (log.isDebugEnabled()) { log.debug("Total page = " + getTotal()); @@ -122,16 +123,16 @@ pager.setGroupOp(FilterRuleGroupOperator.AND); } execute(); - Map<String, String> importTypes = decorateEnums(ImportType.values()); + Map<String, String> importTypes = + decoratorService.decorateEnums(ImportType.values()); - DbEditorService service = getService(DbEditorService.class); for (Map row : datas) { String importType = (String) row.get(ImportLog.PROPERTY_IMPORT_TYPE); String importTypeToString = importTypes.get(importType); row.put(ImportLog.PROPERTY_IMPORT_TYPE, importTypeToString); - service.decorateForeignKey(row, Voyage.class, ImportLog.PROPERTY_VOYAGE_ID, null); + dbEditorService.decorateForeignKey(row, Voyage.class, ImportLog.PROPERTY_VOYAGE_ID, null); } return SUCCESS; } @@ -140,14 +141,12 @@ entityType = EchoBaseEntityEnum.Voyage; execute(); - DbEditorService service = getService(DbEditorService.class); - DecoratorService decoratorService = getService(DecoratorService.class); Decorator<ImportLog> importLogDecorator = decoratorService.getDecorator( getLocale(), ImportLog.class, DecoratorService.DATE_ONLY); Multimap<String, ImportLog> importLogsByVoyage = Multimaps.index( - service.getEntities(ImportLog.class), + workingDbPersistenceService.getImportLogDAO().findAll(), EchoBaseFunctions.IMPORT_LOG_VOYAGE_ID); for (Map row : datas) { @@ -156,7 +155,7 @@ Collection<ImportLog> importLogs = importLogsByVoyage.get(id); - service.decorateForeignKey(row, Voyage.class, "id", null); + dbEditorService.decorateForeignKey(row, Voyage.class, "id", null); // to keep importLogs decorated, indexed by their topiaId Map<String, String> imports = Maps.newHashMap(); @@ -181,4 +180,26 @@ } return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } + + protected transient DbEditorService dbEditorService; + + public void setDbEditorService(DbEditorService dbEditorService) { + this.dbEditorService = dbEditorService; + } + + protected transient DecoratorService decoratorService; + + public void setDecoratorService(DecoratorService decoratorService) { + this.decoratorService = decoratorService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntity.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntity.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntity.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,7 +25,7 @@ import com.google.common.collect.Maps; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.nuiton.topia.persistence.metadata.ColumnMeta; import org.nuiton.topia.persistence.metadata.TableMeta; @@ -46,23 +46,23 @@ /** Type of entity to load. */ protected EchoBaseEntityEnum entityType; + public void setEntityType(EchoBaseEntityEnum entityType) { + this.entityType = entityType; + } + /** Id of entity to load. */ protected String id; + public void setId(String id) { + this.id = id; + } + /** Datas of the given table. */ protected Map<?, ?> datas; /** Universe of columns metat datas of the selected entity type. */ protected Map<String, ColumnMeta> metas; - public void setEntityType(EchoBaseEntityEnum entityType) { - this.entityType = entityType; - } - - public void setId(String id) { - this.id = id; - } - public Map<?, ?> getDatas() { return datas; } @@ -75,9 +75,9 @@ public String execute() throws Exception { TableMeta<EchoBaseEntityEnum> table = - getServiceContext().getDbMeta().getTable(entityType); + dbEditorService.getTableMeta(entityType); - datas = getService(DbEditorService.class).getData(table, id); + datas = dbEditorService.getData(table, id); Object length = datas.remove("length"); if (length != null) { @@ -92,4 +92,14 @@ } return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient DbEditorService dbEditorService; + + public void setDbEditorService(DbEditorService dbEditorService) { + this.dbEditorService = dbEditorService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetForeignEntities.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetForeignEntities.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetForeignEntities.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,6 +24,7 @@ package fr.ifremer.echobase.ui.actions.dbeditor; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import java.util.Map; @@ -41,13 +42,13 @@ /** Type of entity to load. */ protected EchoBaseEntityEnum entityType; - /** Entities loaded (key are id, values are decoration of entity). */ - protected Map<String, String> entities; - public void setEntityType(EchoBaseEntityEnum entityType) { this.entityType = entityType; } + /** Entities loaded (key are id, values are decoration of entity). */ + protected Map<String, String> entities; + public Map<String, String> getEntities() { return entities; } @@ -55,8 +56,18 @@ @Override public String execute() throws Exception { - entities = loadSortAndDecorate(entityType.getContract()); + entities = workingDbPersistenceService.loadSortAndDecorate(entityType.getContract()); return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportTable.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,7 +25,7 @@ import com.opensymphony.xwork2.interceptor.annotations.InputConfig; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.importdb.ImportService; +import fr.ifremer.echobase.services.service.importdb.ImportService; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -128,7 +128,7 @@ public String execute() throws Exception { try { - result = getService(ImportService.class).importDatas( + result = importService.importDatas( getEntityType(), importFileFileName, importFile, @@ -151,4 +151,15 @@ return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ImportService importService; + + public void setImportService(ImportService importService) { + this.importService = importService; + } + } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/SaveEntity.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/SaveEntity.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/SaveEntity.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,7 +25,7 @@ import com.google.common.collect.Maps; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.struts2.interceptor.ParameterAware; import org.nuiton.topia.persistence.TopiaEntity; @@ -47,16 +47,16 @@ /** Type of entity to save. */ protected EchoBaseEntityEnum entityType; - /** id of entity to save. */ - protected String topiaId; + public void setEntityType(EchoBaseEntityEnum entityType) { + this.entityType = entityType; + } public EchoBaseEntityEnum getEntityType() { return entityType; } - public void setEntityType(EchoBaseEntityEnum entityType) { - this.entityType = entityType; - } + /** id of entity to save. */ + protected String topiaId; public void setTopiaId(String topiaId) { this.topiaId = topiaId; @@ -65,12 +65,10 @@ @Override public String execute() throws Exception { - DbEditorService service = getService(DbEditorService.class); - - TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(entityType); + TableMeta<EchoBaseEntityEnum> tableMeta = + dbEditorService.getTableMeta(entityType); Map<String, String> properties = Maps.newHashMap(); List<String> columnNames = tableMeta.getColumnNames(); - Map<String, String[]> parameters = getParameters(); for (String columnName : columnNames) { if (parameters.containsKey(columnName)) { @@ -89,11 +87,28 @@ } properties.put(TopiaEntity.PROPERTY_TOPIA_ID, topiaId); - service.saveEntity(tableMeta, - properties, - getEchoBaseSession().getUser()); + dbEditorService.saveEntity(tableMeta, + properties, + getEchoBaseSession().getUser()); return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + private transient Map<String, String[]> parameters; + + @Override + public void setParameters(Map<String, String[]> parameters) { + this.parameters = parameters; + } + + protected transient DbEditorService dbEditorService; + + public void setDbEditorService(DbEditorService dbEditorService) { + this.dbEditorService = dbEditorService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Build.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Build.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Build.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.embeddedApplication; -import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationConfiguration; -import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationService; +import fr.ifremer.echobase.services.service.embeddedapplication.EmbeddedApplicationConfiguration; +import fr.ifremer.echobase.services.service.embeddedapplication.EmbeddedApplicationService; import fr.ifremer.echobase.ui.actions.AbstractWaitAndExecAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Configure.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Configure.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Configure.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,9 +23,9 @@ */ package fr.ifremer.echobase.ui.actions.embeddedApplication; -import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfiguration; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationConfiguration; +import fr.ifremer.echobase.services.service.embeddedapplication.EmbeddedApplicationConfiguration; import fr.ifremer.echobase.ui.actions.AbstractConfigureAction; import org.apache.commons.collections.MapUtils; import org.apache.commons.io.FileUtils; @@ -54,14 +54,14 @@ /** Universe of voyages to export in db. */ protected Map<String, String> voyages; + public Map<String, String> getVoyages() { + return voyages; + } + public Configure() { super(EmbeddedApplicationConfiguration.class); } - public Map<String, String> getVoyages() { - return voyages; - } - @Override protected EmbeddedApplicationConfiguration createModel() { return new EmbeddedApplicationConfiguration(); @@ -71,7 +71,8 @@ protected void prepareInputAction(EmbeddedApplicationConfiguration model) { // give default embedded application archive file name - EchoBaseConfiguration configuration = getConfiguration(); + EchoBaseConfiguration configuration = + getEchoBaseApplicationContext().getConfiguration(); Version version = configuration.getApplicationVersion(); String fileName = "echobase-embedded-" + version.toString(); model.setFileName(fileName); @@ -84,7 +85,7 @@ } model.setWarLocation(warLocation); - voyages = loadSortAndDecorate(Voyage.class); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); if (MapUtils.isEmpty(voyages)) { addFlashMessage(_("echobase.info.no.voyagee.found")); @@ -105,7 +106,7 @@ log.info("Temporary directory to use : " + dataDirectory); } - File warLocation = getConfiguration().getWarLocation(); + File warLocation = getEchoBaseApplicationContext().getConfiguration().getWarLocation(); model.setWarLocation(warLocation); } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Download.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Download.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/embeddedApplication/Download.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,7 +23,7 @@ */ package fr.ifremer.echobase.ui.actions.embeddedApplication; -import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationConfiguration; +import fr.ifremer.echobase.services.service.embeddedapplication.EmbeddedApplicationConfiguration; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import java.io.BufferedInputStream; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,8 +24,8 @@ package fr.ifremer.echobase.ui.actions.exportDb; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; -import fr.ifremer.echobase.services.exportdb.ExportDbMode; +import fr.ifremer.echobase.services.service.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.service.exportdb.ExportDbMode; import fr.ifremer.echobase.ui.actions.AbstractConfigureAction; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; @@ -85,14 +85,14 @@ @Override protected void prepareInputAction(ExportDbConfiguration model) { - modes = decorateEnums(ExportDbMode.values()); + modes = decoratorService.decorateEnums(ExportDbMode.values()); if (model.getExportDbMode() == null) { model.setExportDbMode(ExportDbMode.ALL); } - voyages = loadSortAndDecorate(Voyage.class); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); } @Override @@ -109,7 +109,7 @@ } if (model.getExportDbMode() == ExportDbMode.ALL) { - voyages = loadSortAndDecorate(Voyage.class); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); Set<String> ids = voyages.keySet(); model.setVoyageIds(ids.toArray(new String[ids.size()])); } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Download.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Download.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Download.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,7 +23,7 @@ */ package fr.ifremer.echobase.ui.actions.exportDb; -import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.service.exportdb.ExportDbConfiguration; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import java.io.BufferedInputStream; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Export.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Export.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Export.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.exportDb; -import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; -import fr.ifremer.echobase.services.exportdb.ExportDbService; +import fr.ifremer.echobase.services.service.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.service.exportdb.ExportDbService; import fr.ifremer.echobase.ui.actions.AbstractWaitAndExecAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DownloadExportQueryResult.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DownloadExportQueryResult.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DownloadExportQueryResult.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,7 @@ package fr.ifremer.echobase.ui.actions.exportQuery; import fr.ifremer.echobase.entities.ExportQuery; -import fr.ifremer.echobase.services.exportquery.ExportQueryService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import java.io.ByteArrayInputStream; @@ -48,38 +48,38 @@ */ protected String queryId; + public void setQueryId(String queryId) { + this.queryId = queryId; + } + /** Input stream of the file to download. */ protected transient InputStream inputStream; + public InputStream getInputStream() { + return inputStream; + } + /** File name of the download. */ protected String fileName; - /** Length of the file to download. */ - protected int contentLength; - - /** Content type of the file to download. */ - protected String contentType; - - public void setQueryId(String queryId) { - this.queryId = queryId; - } - public void setFileName(String fileName) { this.fileName = fileName; } - public InputStream getInputStream() { - return inputStream; - } - public String getFileName() { return fileName; } + /** Length of the file to download. */ + protected int contentLength; + public int getContentLength() { return contentLength; } + /** Content type of the file to download. */ + protected String contentType; + public String getContentType() { return contentType; } @@ -87,13 +87,21 @@ @Override public String execute() throws Exception { - ExportQueryService service = getService(ExportQueryService.class); - contentType = "text/csv"; - String content = service.createCsvFileContent(queryId); + String content = exportQueryService.createCsvFileContent(queryId); contentLength = content.length(); inputStream = new ByteArrayInputStream(content.getBytes()); return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ExportQueryResult.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ExportQueryResult.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ExportQueryResult.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,7 +25,7 @@ import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.ExportQuery; -import fr.ifremer.echobase.services.exportquery.ExportQueryService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,9 +51,21 @@ */ protected String queryId; + public void setQueryId(String queryId) { + this.queryId = queryId; + } + + public String getQueryId() { + return queryId; + } + /** Default file name for export. */ protected String fileName; + public String getFileName() { + return fileName; + } + /** names of columns from the executed sql request. */ protected String[] columnNames; @@ -61,28 +73,15 @@ return columnNames; } - public String getFileName() { - return fileName; - } - - public String getQueryId() { - return queryId; - } - - public void setQueryId(String queryId) { - this.queryId = queryId; - } - @Override public String execute() throws Exception { // obtain columNames from the request - ExportQueryService service = getService(ExportQueryService.class); - String sql = service.getSqlQuery(queryId); + String sql = exportQueryService.getSqlQuery(queryId); try { - columnNames = service.getColumnNames(sql); + columnNames = exportQueryService.getColumnNames(sql); } catch (EchoBaseTechnicalException e) { //TODO add a real nice message addFlashError(e.getMessage()); @@ -96,4 +95,14 @@ fileName = "export.csv"; return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/GetExportQueryResult.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/GetExportQueryResult.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/GetExportQueryResult.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,7 @@ package fr.ifremer.echobase.ui.actions.exportQuery; import fr.ifremer.echobase.entities.ExportQuery; -import fr.ifremer.echobase.services.exportquery.ExportQueryService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; import fr.ifremer.echobase.ui.actions.AbstractJSONPaginedAction; import java.util.Map; @@ -47,22 +47,31 @@ */ protected String queryId; - /** Datas of the given table. */ - protected Map<?, ?>[] datas; - public void setQueryId(String queryId) { this.queryId = queryId; } + /** Datas of the given table. */ + protected Map<?, ?>[] datas; + public Map<?, ?>[] getDatas() { return datas; } @Override public String execute() throws Exception { - ExportQueryService service = getService(ExportQueryService.class); - datas = service.executeExportquery(queryId, pager); + datas = exportQueryService.executeExportquery(queryId, pager); return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java 2013-08-15 10:53:16 UTC (rev 842) @@ -26,9 +26,10 @@ import com.opensymphony.xwork2.Preparable; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.ExportQuery; -import fr.ifremer.echobase.services.exportquery.ExportQueryInvalidNameException; -import fr.ifremer.echobase.services.exportquery.ExportQueryNameAlreadyExistException; -import fr.ifremer.echobase.services.exportquery.ExportQueryService; +import fr.ifremer.echobase.services.service.InternalDbPersistenceService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryInvalidNameException; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryNameAlreadyExistException; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -49,68 +50,59 @@ /** Logger. */ private static final Log log = LogFactory.getLog(ManageExportQuery.class); - /** All available queries from database. */ - protected Map<String, String> queries; - /** Selected query loaded from database if his id is not empty. */ protected ExportQuery query; - protected boolean newQuery; - - protected boolean newLibreOfficeQuery; - - protected boolean queryExists; - - protected boolean canUpdateQuery; - - protected transient ExportQueryService service; - - public ExportQueryService getService() { - if (service == null) { - service = getService(ExportQueryService.class); - } - return service; - } - public ExportQuery getQuery() { if (query == null) { - query = getService().newExportQuery(); + query = exportQueryService.newExportQuery(); } return query; } - public Map<String, String> getQueries() { - return queries; - } + protected boolean newQuery; - public Map<String, String> getTableNames() { - return queries; + public void setNewQuery(boolean newQuery) { + this.newQuery = newQuery; } public boolean isNewQuery() { return newQuery; } - public void setNewQuery(boolean newQuery) { - this.newQuery = newQuery; + protected boolean newLibreOfficeQuery; + + public void setNewLibreOfficeQuery(boolean newLibreOfficeQuery) { + this.newLibreOfficeQuery = newLibreOfficeQuery; } public boolean isNewLibreOfficeQuery() { return newLibreOfficeQuery; } - public void setNewLibreOfficeQuery(boolean newLibreOfficeQuery) { - this.newLibreOfficeQuery = newLibreOfficeQuery; + protected boolean queryExists; + + public boolean isQueryExists() { + return StringUtils.isNotEmpty(getQuery().getTopiaId()); } + protected boolean canUpdateQuery; + public boolean isCanUpdateQuery() { return canUpdateQuery; } - public boolean isQueryExists() { - return StringUtils.isNotEmpty(getQuery().getTopiaId()); + /** All available queries from database. */ + protected Map<String, String> queries; + + public Map<String, String> getQueries() { + return queries; } + public Map<String, String> getTableNames() { + return queries; + } + public String saveQuery() throws Exception { String result = INPUT; @@ -119,14 +111,14 @@ if (safeSql) { try { - query = getService().createOrUpdate( + query = exportQueryService.createOrUpdate( getQuery(), getEchoBaseSession().getUser()); result = SUCCESS; } catch (ExportQueryInvalidNameException e) { addFieldError("query.name", _("echobase.error.query.invalid.name")); - }catch (ExportQueryNameAlreadyExistException e) { + } catch (ExportQueryNameAlreadyExistException e) { addFieldError("query.name", _("echobase.error.query.name.already.exists")); } @@ -138,8 +130,8 @@ getQuery().setTopiaId(null); getQuery().setName(getQuery().getName() + "-clone"); - query = getService().createOrUpdate(getQuery(), - getEchoBaseSession().getUser() + query = exportQueryService.createOrUpdate(getQuery(), + getEchoBaseSession().getUser() ); return SUCCESS; } @@ -152,7 +144,7 @@ public String deleteQuery() throws Exception { //TODO : do validation - service.delete(getQuery().getTopiaId()); + exportQueryService.delete(getQuery().getTopiaId()); query = null; return SUCCESS; } @@ -171,7 +163,7 @@ @Override public void prepare() throws Exception { - queries = loadSortAndDecorate(ExportQuery.class); + queries = internalDbPersistenceService.loadSortAndDecorate(ExportQuery.class); if (queries.isEmpty()) { @@ -195,7 +187,7 @@ } else { // load query from database - query = getService().getExportQuery(selectedQueryId); + query = exportQueryService.getExportQuery(selectedQueryId); EchoBaseUser echoBaseUser = getEchoBaseSession().getUser(); @@ -217,7 +209,7 @@ boolean result; try { - getService().testSql(getQuery().getSqlQuery()); + exportQueryService.testSql(getQuery().getSqlQuery()); result = true; } catch (Exception e) { Throwable cause = e.getCause(); @@ -230,4 +222,20 @@ } return result; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } + + protected transient InternalDbPersistenceService internalDbPersistenceService; + + public void setInternalDbPersistenceService(InternalDbPersistenceService internalDbPersistenceService) { + this.internalDbPersistenceService = internalDbPersistenceService; + } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,7 +23,7 @@ */ package fr.ifremer.echobase.ui.actions.exportQuery; -import fr.ifremer.echobase.services.exportquery.ExportQueryService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,24 +43,24 @@ protected String libreOfficeQuery; - protected String resultQuery; + public void setLibreOfficeQuery(String libreOfficeQuery) { + this.libreOfficeQuery = libreOfficeQuery; + } public String getLibreOfficeQuery() { return libreOfficeQuery; } - public void setLibreOfficeQuery(String libreOfficeQuery) { - this.libreOfficeQuery = libreOfficeQuery; + protected String resultQuery; + + public void setResultQuery(String resultQuery) { + this.resultQuery = resultQuery; } public String getResultQuery() { return resultQuery; } - public void setResultQuery(String resultQuery) { - this.resultQuery = resultQuery; - } - @Override public String execute() { @@ -68,13 +68,22 @@ log.info("Incoming query = " + libreOfficeQuery); } - ExportQueryService service = getService(ExportQueryService.class); + resultQuery = exportQueryService.processLibreOfficeSqlQuery(libreOfficeQuery); - resultQuery = service.processLibreOfficeSqlQuery(libreOfficeQuery); - if (log.isInfoEnabled()) { log.info("Processed query " + resultQuery); } return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } + } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractConfigureImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractConfigureImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractConfigureImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,7 +25,7 @@ import fr.ifremer.echobase.io.EchoBaseIOUtil; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdata.AbstractImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.AbstractImportConfiguration; import fr.ifremer.echobase.ui.actions.AbstractConfigureAction; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractLaunchImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractLaunchImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/AbstractLaunchImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.importData; -import fr.ifremer.echobase.services.importdata.AbstractImportConfiguration; -import fr.ifremer.echobase.services.importdata.AbstractImportDataService; +import fr.ifremer.echobase.services.service.importdata.AbstractImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.AbstractImportDataService; import fr.ifremer.echobase.ui.actions.AbstractWaitAndExecAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAcousticImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAcousticImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAcousticImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,8 +24,8 @@ package fr.ifremer.echobase.ui.actions.importData; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.importdata.AcousticImportConfiguration; -import fr.ifremer.echobase.services.importdata.CellPositionReference; +import fr.ifremer.echobase.services.service.importdata.AcousticImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.CellPositionReference; import java.io.File; import java.util.Map; @@ -56,8 +56,8 @@ @Override protected void prepareInputAction(AcousticImportConfiguration model) { - voyages = loadSortAndDecorate(Voyage.class); - cellPositionReferences = decorateEnums(CellPositionReference.values()); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); + cellPositionReferences = decoratorService.decorateEnums(CellPositionReference.values()); if (model.getCellPositionReference() == null) { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCatchesImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,7 @@ package fr.ifremer.echobase.ui.actions.importData; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.importdata.CatchesImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.CatchesImportConfiguration; import java.io.File; import java.util.Map; @@ -53,7 +53,7 @@ @Override protected void prepareInputAction(CatchesImportConfiguration model) { - voyages = loadSortAndDecorate(Voyage.class); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); } public Map<String, String> getVoyages() { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCommonImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCommonImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureCommonImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -28,7 +28,7 @@ import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AreaOfOperation; import fr.ifremer.echobase.entities.references.Mission; -import fr.ifremer.echobase.services.importdata.CommonImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.CommonImportConfiguration; import java.io.File; import java.util.Map; @@ -66,10 +66,10 @@ @Override protected void prepareInputAction(CommonImportConfiguration model) { - missions = loadSortAndDecorate(Mission.class); - voyages = loadSortAndDecorate(Voyage.class); - areaOfOperations = loadSortAndDecorate(AreaOfOperation.class); - importTypes = decorateEnums(ImportType.getCommonImportType()); + missions = workingDbPersistenceService.loadSortAndDecorate(Mission.class); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); + areaOfOperations = workingDbPersistenceService.loadSortAndDecorate(AreaOfOperation.class); + importTypes = decoratorService.decorateEnums(ImportType.getCommonImportType()); if (model.getImportType() == null) { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureOperationImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureOperationImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureOperationImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,7 @@ package fr.ifremer.echobase.ui.actions.importData; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.importdata.OperationImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.OperationImportConfiguration; import java.io.File; import java.util.Map; @@ -53,7 +53,7 @@ @Override protected void prepareInputAction(OperationImportConfiguration model) { - voyages = loadSortAndDecorate(Voyage.class); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); } public Map<String, String> getVoyages() { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureResultsImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureResultsImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureResultsImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -27,7 +27,7 @@ import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.Vessel; -import fr.ifremer.echobase.services.importdata.ResultsImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.ResultsImportConfiguration; import java.io.File; import java.util.Map; @@ -64,9 +64,9 @@ @Override protected void prepareInputAction(ResultsImportConfiguration model) { - voyages = loadSortAndDecorate(Voyage.class); - vessels = loadSortAndDecorate(Vessel.class); - importTypes = decorateEnums(ImportType.getResultImportType()); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); + vessels = workingDbPersistenceService.loadSortAndDecorate(Vessel.class); + importTypes = decoratorService.decorateEnums(ImportType.getResultImportType()); if (model.getImportType() == null) { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/CreateMission.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/CreateMission.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/CreateMission.java 2013-08-15 10:53:16 UTC (rev 842) @@ -26,8 +26,8 @@ import com.google.common.base.Preconditions; import fr.ifremer.echobase.entities.references.Mission; import fr.ifremer.echobase.entities.references.MissionImpl; -import fr.ifremer.echobase.services.importdata.CommonImportService; -import fr.ifremer.echobase.services.importdata.MissionNameAlreadyExistException; +import fr.ifremer.echobase.services.service.importdata.CommonImportService; +import fr.ifremer.echobase.services.service.importdata.MissionNameAlreadyExistException; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,9 +63,7 @@ String result = INPUT; try { - CommonImportService service = - getService(CommonImportService.class); - Mission missionSaved = service.createMission(mission); + Mission missionSaved = commonImportService.createMission(mission); if (log.isInfoEnabled()) { log.info("Created mission : " + missionSaved.getTopiaId()); @@ -79,4 +77,14 @@ } return result; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient CommonImportService commonImportService; + + public void setCommonImportService(CommonImportService commonImportService) { + this.commonImportService = commonImportService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetDataProcessingsForVoyage.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetDataProcessingsForVoyage.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetDataProcessingsForVoyage.java 2013-08-15 10:53:16 UTC (rev 842) @@ -26,7 +26,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.importdata.ResultsImportService; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; +import fr.ifremer.echobase.services.service.importdata.ResultsImportService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.lang3.StringUtils; @@ -63,18 +64,31 @@ } else { - ResultsImportService service = - getService(ResultsImportService.class); + Voyage voyage = workingDbPersistenceService.getVoyageDAO().findByTopiaId(voyageId); - Voyage voyage = service.getEntityById(Voyage.class, voyageId); - Preconditions.checkNotNull( voyage, "Could not find voyage with id " + voyageId); - dataProcessings = service.getDataProcessings(voyage); + dataProcessings = resultsImportService.getDataProcessings(voyage); } return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } + + protected transient ResultsImportService resultsImportService; + + public void setResultsImportService(ResultsImportService resultsImportService) { + this.resultsImportService = resultsImportService; + } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/GetVesselsForVoyage.java 2013-08-15 10:53:16 UTC (rev 842) @@ -27,8 +27,8 @@ import com.google.common.collect.Maps; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.Vessel; -import fr.ifremer.echobase.services.DecoratorService; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import fr.ifremer.echobase.services.service.DecoratorService; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.lang3.StringUtils; import org.nuiton.decorator.Decorator; @@ -49,12 +49,12 @@ /** Selected voyage id. */ protected String voyageId; - protected Map<String, String> vessels; - public void setVoyageId(String voyageId) { this.voyageId = voyageId; } + protected Map<String, String> vessels; + public Map<String, String> getVessels() { return vessels; } @@ -66,17 +66,12 @@ if (StringUtils.isNotEmpty(voyageId)) { - EchoBaseServiceSupport service = - getService(EchoBaseServiceSupport.class); + Voyage voyage = workingDbPersistenceService.getVoyageDAO().findByTopiaId(voyageId); - Voyage voyage = service.getEntityById(Voyage.class, voyageId); - Preconditions.checkNotNull(voyage, "Could not find voyage with id " + voyageId); if (!voyage.isTransitEmpty()) { - DecoratorService decoratorService = - service.getService(DecoratorService.class); Decorator<Vessel> decorator = decoratorService.getDecorator(getLocale(), Vessel.class, @@ -94,4 +89,20 @@ return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } + + protected transient DecoratorService decoratorService; + + public void setDecoratorService(DecoratorService decoratorService) { + this.decoratorService = decoratorService; + } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchAcousticImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchAcousticImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchAcousticImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.importData; -import fr.ifremer.echobase.services.importdata.AcousticImportConfiguration; -import fr.ifremer.echobase.services.importdata.AcousticImportService; +import fr.ifremer.echobase.services.service.importdata.AcousticImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.AcousticImportService; /** * Configure a accoustic data import. Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchCatchesImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchCatchesImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchCatchesImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.importData; -import fr.ifremer.echobase.services.importdata.CatchesImportConfiguration; -import fr.ifremer.echobase.services.importdata.CatchesImportService; +import fr.ifremer.echobase.services.service.importdata.CatchesImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.CatchesImportService; /** * Configure a accoustic data import. Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchCommonImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchCommonImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchCommonImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.importData; -import fr.ifremer.echobase.services.importdata.CommonImportConfiguration; -import fr.ifremer.echobase.services.importdata.CommonImportService; +import fr.ifremer.echobase.services.service.importdata.CommonImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.CommonImportService; /** * Configure a accoustic data import. Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchOperationImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchOperationImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchOperationImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.importData; -import fr.ifremer.echobase.services.importdata.OperationImportConfiguration; -import fr.ifremer.echobase.services.importdata.OperationImportService; +import fr.ifremer.echobase.services.service.importdata.OperationImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.OperationImportService; /** * TODO Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchResultsImport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchResultsImport.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/LaunchResultsImport.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ */ package fr.ifremer.echobase.ui.actions.importData; -import fr.ifremer.echobase.services.importdata.ResultsImportConfiguration; -import fr.ifremer.echobase.services.importdata.ResultsImportService; +import fr.ifremer.echobase.services.service.importdata.ResultsImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.ResultsImportService; /** * Configure a "result" import. Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/SelectImportType.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/SelectImportType.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/SelectImportType.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,6 +23,7 @@ */ package fr.ifremer.echobase.ui.actions.importData; +import fr.ifremer.echobase.services.service.DecoratorService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import java.util.Map; @@ -39,24 +40,24 @@ protected ImportMode mode; - /** Universe of possible import modes. */ - protected Map<String, String> modes; - - public Map<String, String> getModes() { - return modes; + public void setMode(ImportMode mode) { + this.mode = mode; } public ImportMode getMode() { return mode; } - public void setMode(ImportMode mode) { - this.mode = mode; + /** Universe of possible import modes. */ + protected Map<String, String> modes; + + public Map<String, String> getModes() { + return modes; } @Override public String input() throws Exception { - modes = decorateEnums(ImportMode.values()); + modes = decoratorService.decorateEnums(ImportMode.values()); if (mode == null) { mode = ImportMode.Common; @@ -68,4 +69,14 @@ public String execute() throws Exception { return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient DecoratorService decoratorService; + + public void setDecoratorService(DecoratorService decoratorService) { + this.decoratorService = decoratorService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java 2013-08-15 10:53:16 UTC (rev 842) @@ -26,8 +26,8 @@ import com.opensymphony.xwork2.interceptor.annotations.InputConfig; import fr.ifremer.echobase.io.EchoBaseIOUtil; import fr.ifremer.echobase.io.InputFile; -import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; -import fr.ifremer.echobase.services.importdb.ImportDbMode; +import fr.ifremer.echobase.services.service.importdb.ImportDbConfiguration; +import fr.ifremer.echobase.services.service.importdb.ImportDbMode; import fr.ifremer.echobase.ui.actions.AbstractConfigureAction; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; @@ -69,7 +69,7 @@ @Override protected void prepareInputAction(ImportDbConfiguration model) { - modes = decorateEnums(ImportDbMode.values()); + modes = decoratorService.decorateEnums(ImportDbMode.values()); if (model.getImportDbMode() == null) { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,9 +24,8 @@ package fr.ifremer.echobase.ui.actions.importDb; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; -import fr.ifremer.echobase.services.importdb.ImportDbMode; -import fr.ifremer.echobase.services.importdb.ImportDbService; +import fr.ifremer.echobase.services.service.importdb.ImportDbConfiguration; +import fr.ifremer.echobase.services.service.importdb.ImportDbService; import fr.ifremer.echobase.ui.actions.AbstractWaitAndExecAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -60,7 +59,6 @@ @Override protected String getResultMessage(ImportDbConfiguration model) { - ImportDbMode importDbMode = model.getImportDbMode(); String message; switch (model.getImportDbMode()) { case REFERENTIAL: Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ConfirmDelete.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ConfirmDelete.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ConfirmDelete.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,13 +24,10 @@ */ import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.DecoratorService; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.removedata.RemoveDataConfiguration; +import fr.ifremer.echobase.services.service.removedata.RemoveDataConfiguration; import fr.ifremer.echobase.ui.actions.AbstractConfigureAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -79,22 +76,20 @@ @Override protected void prepareInputAction(RemoveDataConfiguration model) { - importTypes = decorateEnums(ImportType.values()); + importTypes = decoratorService.decorateEnums(ImportType.values()); importLogs = Lists.newArrayList(); - EchoBaseServiceSupport service = - getService(EchoBaseServiceSupport.class); + Decorator<Voyage> decorator = decoratorService.getDecorator(getLocale(), Voyage.class, null); - Decorator<Voyage> decorator = getService(DecoratorService.class).getDecorator(getLocale(), Voyage.class, null); - for (String id : model.getImportLogIds()) { if (log.isInfoEnabled()) { log.info("Load import log " + id); } - ImportLog importLog = service.getEntityById(ImportLog.class, id); + ImportLog importLog = workingDbPersistenceService.getImportLogDAO().findByTopiaId(id); - Voyage voyageEntity = service.getEntityById(Voyage.class, importLog.getVoyageId()); + Voyage voyageEntity = workingDbPersistenceService.getVoyageDAO().findByTopiaId(importLog.getVoyageId()); + String voyage = decorator.toString(voyageEntity); String importType = importTypes.get(importLog.getImportType().name()); String result = _("echobase.common.importLogToDelete", @@ -103,6 +98,6 @@ importLog.getImportDate()); importLogs.add(result); } - } + } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/Delete.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/Delete.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/Delete.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,8 +23,8 @@ * #L% */ -import fr.ifremer.echobase.services.removedata.RemoveDataConfiguration; -import fr.ifremer.echobase.services.removedata.RemoveDataService; +import fr.ifremer.echobase.services.service.removedata.RemoveDataConfiguration; +import fr.ifremer.echobase.services.service.removedata.RemoveDataService; import fr.ifremer.echobase.ui.actions.AbstractWaitAndExecAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ImportLogs.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ImportLogs.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ImportLogs.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,6 +24,7 @@ */ import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import java.util.Map; @@ -57,8 +58,18 @@ @Override public String execute() throws Exception { - voyages = loadSortAndDecorate(Voyage.class); + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } } Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,96 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; +import fr.ifremer.echobase.services.service.spatial.SpatialService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.lang3.StringUtils; + +import java.util.Map; + +/** + * Obtain all echotypes used for a given voyage. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public abstract class AbstractGetVoyage extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + /** Selected voyage id. */ + protected String voyageId; + + public void setVoyageId(String voyageId) { + this.voyageId = voyageId; + } + + /** Universe of result. */ + protected Map<String, String> data; + + protected abstract Map<String, String> buildData(SpatialService service, + Voyage voyage); + + public abstract Map<String, String> getData(); + + @Override + public String execute() throws Exception { + + if (StringUtils.isEmpty(voyageId)) { + data = Maps.newLinkedHashMap(); + + } else { + + Voyage voyage = workingDbPersistenceService.getVoyageDAO().findByTopiaId(voyageId); + + Preconditions.checkNotNull( + voyage, + "Could not find voyage with id " + voyageId); + + data = buildData(spatialService, voyage); + } + + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } + + protected transient SpatialService spatialService; + + public void setSpatialService(SpatialService spatialService) { + this.spatialService = spatialService; + } +} \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ConfigureShowSpatialData.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ConfigureShowSpatialData.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ConfigureShowSpatialData.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,83 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL:$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; +import fr.ifremer.echobase.services.service.spatial.SpatialService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; + +import java.util.Map; + +/** + * To configure and show spatial datas. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class ConfigureShowSpatialData extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + protected final ShowSpatialModel model = new ShowSpatialModel(); + + /** Universe of existing voyages. */ + protected Map<String, String> voyages; + + public ShowSpatialModel getModel() { + return model; + } + + public Map<String, String> getVoyages() { + return voyages; + } + + @Override + public String execute() throws Exception { + + model.setJdbcUrl(getServiceContext().getWorkgingDbUrl()); + model.setWithSpatial(spatialService.isSpatialAware()); + + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); + + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } + + protected transient SpatialService spatialService; + + public void setSpatialService(SpatialService spatialService) { + this.spatialService = spatialService; + } + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ConfigureShowSpatialData.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetSpatialData.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetSpatialData.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetSpatialData.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,73 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import com.google.common.base.Preconditions; +import fr.ifremer.echobase.entities.spatial.SpatialData; +import fr.ifremer.echobase.services.service.spatial.SpatialService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; + +import java.util.Set; + +/** + * Otain all dataMetadata used for a given voyage. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class GetSpatialData extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + protected final ShowSpatialModel model = new ShowSpatialModel(); + + public ShowSpatialModel getModel() { + return model; + } + + @Override + public String execute() throws Exception { + + boolean withSpatial = getModel().isWithSpatial(); + Preconditions.checkArgument(withSpatial, "Database is not spatial aware."); + + model.setJdbcUrl(getServiceContext().getWorkgingDbUrl()); + + Set<SpatialData> spatialData = spatialService.getSpatialData(model); + getModel().setSpatialData(spatialData); + getModel().setWithData(true); + + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient SpatialService spatialService; + + public void setSpatialService(SpatialService spatialService) { + this.spatialService = spatialService; + } +} \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetSpatialData.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageDataMetadata.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageDataMetadata.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageDataMetadata.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,53 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.services.service.spatial.SpatialService; + +import java.util.Map; + +/** + * Obtain all dataMetadata used for a given voyage. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class GetVoyageDataMetadata extends AbstractGetVoyage { + + private static final long serialVersionUID = 1L; + + @Override + public Map<String, String> getData() { + return data; + } + + @Override + protected Map<String, String> buildData(SpatialService service, + Voyage voyage) { + Map<String, String> result = workingDbPersistenceService.loadSortAndDecorate(DataMetadata.class); + return result; + } +} \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageDataMetadata.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageEchotype.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageEchotype.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageEchotype.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,54 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.services.service.spatial.SpatialService; + +import java.util.Map; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class GetVoyageEchotype extends AbstractGetVoyage { + + private static final long serialVersionUID = 1L; + + @Override + public Map<String, String> getData() { + return data; + } + + @Override + protected Map<String, String> buildData(SpatialService service, + Voyage voyage) { + + Map<String, String> result = workingDbPersistenceService.loadSortAndDecorate(Echotype.class); + return result; + } +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageEchotype.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageSpecies.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageSpecies.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageSpecies.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,54 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.services.service.spatial.SpatialService; + +import java.util.Map; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class GetVoyageSpecies extends AbstractGetVoyage { + + private static final long serialVersionUID = 1L; + + @Override + public Map<String, String> getData() { + return data; + } + + @Override + protected Map<String, String> buildData(SpatialService service, + Voyage voyage) { + + Map<String, String> result = workingDbPersistenceService.loadSortAndDecorate(Species.class); + return result; + } +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/GetVoyageSpecies.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Save.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Save.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Save.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,36 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL:$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +/** + * To save the selected spatial data. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class Save { + + protected final ShowSpatialModel model = new ShowSpatialModel(); + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Save.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,102 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import com.opensymphony.xwork2.Preparable; +import com.opensymphony.xwork2.interceptor.annotations.InputConfig; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.spatial.SpatialData; +import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; +import fr.ifremer.echobase.services.service.spatial.SpatialService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; + +import java.util.Map; +import java.util.Set; + +/** + * To configure and show spatial datas. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class ShowSpatialData extends EchoBaseActionSupport implements Preparable { + + private static final long serialVersionUID = 1L; + + protected final ShowSpatialModel model = new ShowSpatialModel(); + + public ShowSpatialModel getModel() { + return model; + } + + /** Universe of existing voyages. */ + protected Map<String, String> voyages; + + public Map<String, String> getVoyages() { + return voyages; + } + + @Override + public void prepare() throws Exception { + voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); + + model.setJdbcUrl(getServiceContext().getWorkgingDbUrl()); + } + + @Override + public String input() throws Exception { + + model.setWithSpatial(spatialService.isSpatialAware()); + + return SUCCESS; + } + + @InputConfig(methodName = "input") + @Override + public String execute() throws Exception { + + Set<SpatialData> spatialData = spatialService.getSpatialData(model); + + getModel().setSpatialData(spatialData); + getModel().setWithData(true); + + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient WorkingDbPersistenceService workingDbPersistenceService; + + public void setWorkingDbPersistenceService(WorkingDbPersistenceService workingDbPersistenceService) { + this.workingDbPersistenceService = workingDbPersistenceService; + } + + protected transient SpatialService spatialService; + + public void setSpatialService(SpatialService spatialService) { + this.spatialService = spatialService; + } +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialModel.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialModel.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialModel.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,78 @@ +package fr.ifremer.echobase.ui.actions.spatial; + +/* + * #%L + * EchoBase :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2013 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% + */ + +import fr.ifremer.echobase.entities.spatial.SpatialConfiguration; +import fr.ifremer.echobase.entities.spatial.SpatialData; + +import java.io.Serializable; +import java.util.Set; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.2 + */ +public class ShowSpatialModel extends SpatialConfiguration implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * Loaded spatial data. + */ + protected Set<SpatialData> spatialData; + + /** + * Can we use spatial data ? + */ + protected boolean withSpatial; + + protected boolean withData; + + public boolean isWithSpatial() { + return withSpatial; + } + + public void setWithSpatial(boolean withSpatial) { + this.withSpatial = withSpatial; + } + + public Set<SpatialData> getSpatialData() { + return spatialData; + } + + public void setSpatialData(Set<SpatialData> spatialData) { + this.spatialData = spatialData; + } + + public boolean isWithData() { + return withData; + } + + public void setWithData(boolean withData) { + this.withData = withData; + } + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Create.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Create.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Create.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,7 @@ package fr.ifremer.echobase.ui.actions.user; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.services.UserService; +import fr.ifremer.echobase.services.service.UserService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -46,7 +46,7 @@ public EchoBaseUser getUser() { if (user == null) { - user = getService(UserService.class).newUser(); + user = userService.newUser(); } return user; } @@ -61,7 +61,7 @@ } // create user - getService(UserService.class).createOrUpdate(userToCreate); + userService.createOrUpdate(userToCreate); // add info message addFlashMessage(_("echobase.info.user.create", userEmail)); @@ -85,7 +85,7 @@ // check login not already used EchoBaseUser login; try { - login = getService(UserService.class).getUserByEmail(userEmail); + login = userService.getUserByEmail(userEmail); } catch (Exception e) { // could not get user @@ -107,4 +107,14 @@ } } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient UserService userService; + + public void setUserService(UserService userService) { + this.userService = userService; + } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Delete.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Delete.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Delete.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,13 +25,15 @@ import com.opensymphony.xwork2.Preparable; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.services.UserService; +import fr.ifremer.echobase.services.service.UserService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.interceptor.ParameterAware; +import java.util.Map; + /** * To delete a user. * @@ -48,18 +50,18 @@ public EchoBaseUser getUser() { if (user == null) { - user = getService(UserService.class).newUser(); + user = userService.newUser(); } return user; } @Override public void prepare() throws Exception { - String userId = getParameters().get("user.topiaId")[0]; + String userId = parameters.get("user.topiaId")[0]; if (!StringUtils.isEmpty(userId)) { // load user - user = getService(UserService.class).getUserById(userId); + user = userService.getUserById(userId); // do not want to have the password user.setPassword(""); if (log.isInfoEnabled()) { @@ -79,10 +81,27 @@ } // delete user - getService(UserService.class).delete(userToDelete); + userService.delete(userToDelete); // add info message addFlashMessage(_("echobase.info.user.delete", userEmail)); return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + private transient Map<String, String[]> parameters; + + @Override + public void setParameters(Map<String, String[]> parameters) { + this.parameters = parameters; + } + + protected transient UserService userService; + + public void setUserService(UserService userService) { + this.userService = userService; + } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/GetUsers.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/GetUsers.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/GetUsers.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,7 +24,7 @@ package fr.ifremer.echobase.ui.actions.user; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.services.UserService; +import fr.ifremer.echobase.services.service.UserService; import fr.ifremer.echobase.ui.actions.AbstractJSONPaginedAction; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -51,8 +51,7 @@ @Override public String execute() throws Exception { - List<EchoBaseUser> allUsers = - getService(UserService.class).getUsers(pager); + List<EchoBaseUser> allUsers = userService.getUsers(pager); datas = new Map[allUsers.size()]; Binder<EchoBaseUser, EchoBaseUser> binder = @@ -67,4 +66,14 @@ return SUCCESS; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient UserService userService; + + public void setUserService(UserService userService) { + this.userService = userService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Login.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Login.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Login.java 2013-08-15 10:53:16 UTC (rev 842) @@ -26,7 +26,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.interceptor.I18nInterceptor; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.services.UserService; +import fr.ifremer.echobase.services.service.UserService; import fr.ifremer.echobase.ui.EchoBaseSession; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; @@ -50,10 +50,6 @@ protected String email; - protected String password; - - protected String redirectAction; - public String getEmail() { return email; } @@ -62,6 +58,8 @@ this.email = email; } + protected String password; + public String getPassword() { return password; } @@ -70,6 +68,8 @@ this.password = password; } + protected String redirectAction; + public String getRedirectAction() { return redirectAction; } @@ -81,7 +81,7 @@ @Override public String execute() throws Exception { - EchoBaseUser user = getService(UserService.class).getUserByEmail(email); + EchoBaseUser user = userService.getUserByEmail(email); EchoBaseSession userSession = getEchoBaseSession(); @@ -91,8 +91,6 @@ // let's register getEchoBaseApplicationContext().registerEchoBaseSession(userSession); - Map<String,Object> session = getSession(); - // add locale in echoBaseSession if required Object o = session.get(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE); if (o == null) { @@ -109,4 +107,21 @@ } return "redirect"; } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + private transient Map<String, Object> session; + + @Override + public void setSession(Map<String, Object> session) { + this.session = session; + } + + protected transient UserService userService; + + public void setUserService(UserService userService) { + this.userService = userService; + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Logout.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Logout.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Logout.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,6 +23,7 @@ * #L% */ +import com.opensymphony.xwork2.ActionContext; import fr.ifremer.echobase.ui.EchoBaseSession; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; @@ -45,7 +46,7 @@ getEchoBaseApplicationContext().destroyEchoBaseSession(userSession); // clean it from ActionContext (we never know...) - EchoBaseSession.removeEchoBaseSession(getActionContext()); + EchoBaseSession.removeEchoBaseSession(ActionContext.getContext()); return SUCCESS; } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Update.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Update.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/user/Update.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,13 +25,15 @@ import com.opensymphony.xwork2.Preparable; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.services.UserService; +import fr.ifremer.echobase.services.service.UserService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.interceptor.ParameterAware; +import java.util.Map; + /** * To update a user. * @@ -48,7 +50,7 @@ public EchoBaseUser getUser() { if (user == null) { - user = getService(UserService.class).newUser(); + user = userService.newUser(); } return user; } @@ -63,7 +65,7 @@ } // update user - getService(UserService.class).createOrUpdate(userToUpdate); + userService.createOrUpdate(userToUpdate); // add info message addFlashMessage(_("echobase.info.user.update", userEmail)); @@ -72,11 +74,11 @@ @Override public void prepare() throws Exception { - String userId = getParameters().get("user.topiaId")[0]; + String userId = parameters.get("user.topiaId")[0]; if (!StringUtils.isEmpty(userId)) { // load user - user = getService(UserService.class).getUserById(userId); + user = userService.getUserById(userId); // do not want to update password user.setPassword(""); if (log.isInfoEnabled()) { @@ -85,4 +87,20 @@ } } + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + private transient Map<String, String[]> parameters; + + @Override + public void setParameters(Map<String, String[]> parameters) { + this.parameters = parameters; + } + + protected transient UserService userService; + + public void setUserService(UserService userService) { + this.userService = userService; + } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/AbstractWorkingDbAction.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/AbstractWorkingDbAction.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/AbstractWorkingDbAction.java 2013-08-15 10:53:16 UTC (rev 842) @@ -26,7 +26,9 @@ import com.opensymphony.xwork2.Preparable; import fr.ifremer.echobase.entities.DriverType; import fr.ifremer.echobase.entities.WorkingDbConfiguration; -import fr.ifremer.echobase.services.workingDb.WorkingDbConfigurationService; +import fr.ifremer.echobase.services.service.DecoratorService; +import fr.ifremer.echobase.services.service.InternalDbPersistenceService; +import fr.ifremer.echobase.services.service.workingDb.WorkingDbConfigurationService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -68,7 +70,7 @@ public final WorkingDbConfiguration getConf() { if (conf == null) { - conf = getService().newConfiguration(); + conf = workingDbConfigurationService.newConfiguration(); } return conf; } @@ -84,9 +86,9 @@ @Override public void prepare() throws Exception { - driverTypes = decorateEnums(DriverType.values()); + driverTypes = decoratorService.decorateEnums(DriverType.values()); - confs = loadSortAndDecorate(WorkingDbConfiguration.class); + confs = internalDbPersistenceService.loadSortAndDecorate(WorkingDbConfiguration.class); if (confs.isEmpty()) { @@ -95,20 +97,45 @@ _("echobase.info.no.workingDbConfiguration.saved")); } - String[] ids = getParameters().get("conf.topiaId"); + String[] ids = parameters.get("conf.topiaId"); String id = ids == null || ids.length == 0 ? null : ids[0]; if (!StringUtils.isEmpty(id)) { // load conf - conf = getService().getEditableConf(id); + conf = workingDbConfigurationService.getEditableConf(id); if (log.isInfoEnabled()) { log.info("Selected conf " + conf.getUrl()); } } } - protected final WorkingDbConfigurationService getService() { - return getService(WorkingDbConfigurationService.class); + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + private transient Map<String, String[]> parameters; + + @Override + public void setParameters(Map<String, String[]> parameters) { + this.parameters = parameters; } + protected transient InternalDbPersistenceService internalDbPersistenceService; + + public void setInternalDbPersistenceService(InternalDbPersistenceService internalDbPersistenceService) { + this.internalDbPersistenceService = internalDbPersistenceService; + } + + protected transient WorkingDbConfigurationService workingDbConfigurationService; + + public void setWorkingDbConfigurationService(WorkingDbConfigurationService workingDbConfigurationService) { + this.workingDbConfigurationService = workingDbConfigurationService; + } + + protected transient DecoratorService decoratorService; + + public void setDecoratorService(DecoratorService decoratorService) { + this.decoratorService = decoratorService; + } + } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Create.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Create.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Create.java 2013-08-15 10:53:16 UTC (rev 842) @@ -65,7 +65,7 @@ @Override public String execute() throws Exception { - conf = getService().create(getConf()); + conf = workingDbConfigurationService.create(getConf()); addFlashMessage(_("echobase.info.workingDbconfiguration.created", conf.getUrl())); @@ -87,7 +87,7 @@ // when creating a request // check this url does not exists - boolean urlUsed = getService().isUrlAlreadyUsed(getConf().getUrl()); + boolean urlUsed = workingDbConfigurationService.isUrlAlreadyUsed(getConf().getUrl()); if (urlUsed) { addFieldError("conf.url", _("echobase.error.workingDbConfiguration.url.already.exists")); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Delete.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Delete.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Delete.java 2013-08-15 10:53:16 UTC (rev 842) @@ -50,7 +50,7 @@ String result = INPUT; try { - getService().delete(getConf().getTopiaId()); + workingDbConfigurationService.delete(getConf().getTopiaId()); addFlashMessage(_("echobase.info.workingDbconfiguration.deleted", conf.getUrl())); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DownloadDriver.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DownloadDriver.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DownloadDriver.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,7 +23,7 @@ * #L% */ -import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfiguration; import fr.ifremer.echobase.persistence.JdbcConfiguration; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; @@ -42,45 +42,46 @@ private static final long serialVersionUID = 1L; - /** Input stream of the file to download. */ - protected transient InputStream inputStream; - /** File name of the download. */ protected String fileName; - /** Length of the file to download. */ - protected long contentLength; - - /** Content type of the file to download. */ - protected String contentType; - public void setFileName(String fileName) { this.fileName = fileName; } + public String getFileName() { + return fileName; + } + + /** Input stream of the file to download. */ + protected transient InputStream inputStream; + public InputStream getInputStream() { return inputStream; } + /** Length of the file to download. */ + protected long contentLength; + public long getContentLength() { return contentLength; } + /** Content type of the file to download. */ + protected String contentType; + public String getContentType() { return contentType; } - public String getFileName() { - return fileName; - } - @Override public String execute() throws Exception { EchoBaseConfiguration configuration = getEchoBaseApplicationContext().getConfiguration(); - JdbcConfiguration dbConfiguration = getEchoBaseSession().getWorkingDbConfiguration(); + JdbcConfiguration dbConfiguration = + getEchoBaseSession().getWorkingDbConfiguration(); fileName = dbConfiguration.getDriverType().getPilotFileName(configuration); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java 2013-08-15 10:53:16 UTC (rev 842) @@ -27,7 +27,8 @@ import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; +import fr.ifremer.echobase.services.service.DecoratorService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.nuiton.topia.persistence.metadata.TableMeta; @@ -45,12 +46,12 @@ protected String importLogId; - protected Map data; - public void setImportLogId(String importLogId) { this.importLogId = importLogId; } + protected Map data; + public Map<?, ?> getData() { return data; } @@ -58,20 +59,34 @@ @Override public String execute() throws Exception { - DbEditorService service = getService(DbEditorService.class); - TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(EchoBaseEntityEnum.ImportLog); - data = service.getData(tableMeta, importLogId); + TableMeta<EchoBaseEntityEnum> tableMeta = + dbEditorService.getTableMeta(EchoBaseEntityEnum.ImportLog); + data = dbEditorService.getData(tableMeta, importLogId); - // decorate import type - Map<String, String> importTypes = decorateEnums(ImportType.values()); + Map<String, String> importTypes = decoratorService.decorateEnums(ImportType.values()); String importType = (String) data.get(ImportLog.PROPERTY_IMPORT_TYPE); data.put(ImportLog.PROPERTY_IMPORT_TYPE, importTypes.get(importType)); // decorate foreign keys - service.decorateForeignKey(data, Voyage.class, ImportLog.PROPERTY_VOYAGE_ID, null); + dbEditorService.decorateForeignKey(data, Voyage.class, ImportLog.PROPERTY_VOYAGE_ID, null); return SUCCESS; } + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient DbEditorService dbEditorService; + + public void setDbEditorService(DbEditorService dbEditorService) { + this.dbEditorService = dbEditorService; + } + + protected transient DecoratorService decoratorService; + + public void setDecoratorService(DecoratorService decoratorService) { + this.decoratorService = decoratorService; + } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java 2013-08-15 10:53:16 UTC (rev 842) @@ -28,7 +28,7 @@ import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AreaOfOperation; import fr.ifremer.echobase.entities.references.Mission; -import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.nuiton.topia.persistence.metadata.TableMeta; @@ -46,12 +46,12 @@ protected String voyageId; - protected Map data; - public void setVoyageId(String voyageId) { this.voyageId = voyageId; } + protected Map data; + public Map<?, ?> getData() { return data; } @@ -59,16 +59,25 @@ @Override public String execute() throws Exception { - DbEditorService service = getService(DbEditorService.class); - TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(EchoBaseEntityEnum.Voyage); - data = service.getData(tableMeta, voyageId); + TableMeta<EchoBaseEntityEnum> tableMeta = + dbEditorService.getTableMeta(EchoBaseEntityEnum.Voyage); + data = dbEditorService.getData(tableMeta, voyageId); // decorate foreign keys - service.decorateForeignKey(data, Mission.class, Voyage.PROPERTY_MISSION, null); - service.decorateForeignKey(data, AreaOfOperation.class, Voyage.PROPERTY_AREA_OF_OPERATION, null); + dbEditorService.decorateForeignKey(data, Mission.class, Voyage.PROPERTY_MISSION, null); + dbEditorService.decorateForeignKey(data, AreaOfOperation.class, Voyage.PROPERTY_AREA_OF_OPERATION, null); return SUCCESS; } + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + protected transient DbEditorService dbEditorService; + + public void setDbEditorService(DbEditorService dbEditorService) { + this.dbEditorService = dbEditorService; + } + } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Information.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Information.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/Information.java 2013-08-15 10:53:16 UTC (rev 842) @@ -23,7 +23,7 @@ * #L% */ -import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfiguration; import fr.ifremer.echobase.persistence.JdbcConfiguration; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckLogguedInterceptor.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckLogguedInterceptor.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckLogguedInterceptor.java 2013-08-15 10:53:16 UTC (rev 842) @@ -24,9 +24,9 @@ package fr.ifremer.echobase.ui.interceptors; import com.opensymphony.xwork2.ActionInvocation; -import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.config.EchoBaseConfiguration; +import fr.ifremer.echobase.ui.EchoBaseApplicationContext; import fr.ifremer.echobase.ui.EchoBaseSession; -import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import fr.ifremer.echobase.ui.actions.user.Login; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -56,15 +56,16 @@ @Override protected boolean doCheck(ActionInvocation invocation) { - EchoBaseActionSupport action = (EchoBaseActionSupport) invocation.getAction(); - EchoBaseSession echoBaseSession = action.getEchoBaseSession(); + EchoBaseSession echoBaseSession = EchoBaseSession.getEchoBaseSession( + invocation.getInvocationContext()); + boolean userLoggued = echoBaseSession.getUser() != null; if (!userLoggued) { boolean autoLogin = - EchoBaseActionSupport.getEchoBaseApplicationContext() + EchoBaseApplicationContext.getApplicationContext(invocation.getInvocationContext()) .getConfiguration() .getOptionAsBoolean(EchoBaseConfiguration.OPTION_AUTO_LOGIN); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckUserIsAdmin.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckUserIsAdmin.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckUserIsAdmin.java 2013-08-15 10:53:16 UTC (rev 842) @@ -27,7 +27,6 @@ import com.opensymphony.xwork2.ActionInvocation; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.ui.EchoBaseSession; -import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -46,10 +45,9 @@ @Override protected boolean doCheck(ActionInvocation invocation) { - EchoBaseActionSupport action = (EchoBaseActionSupport) invocation.getAction(); + EchoBaseSession echoBaseSession = EchoBaseSession.getEchoBaseSession( + invocation.getInvocationContext()); - EchoBaseSession echoBaseSession = action.getEchoBaseSession(); - EchoBaseUser user = echoBaseSession.getUser(); Preconditions.checkNotNull(user, "No user found is session"); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckWorkingDbSelected.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckWorkingDbSelected.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/CheckWorkingDbSelected.java 2013-08-15 10:53:16 UTC (rev 842) @@ -50,7 +50,8 @@ EchoBaseActionSupport action = (EchoBaseActionSupport) invocation.getAction(); - EchoBaseSession echoBaseSession = action.getEchoBaseSession(); + EchoBaseSession echoBaseSession = EchoBaseSession.getEchoBaseSession( + invocation.getInvocationContext()); boolean dbSelected = echoBaseSession.isWorkingDbSelected(); if (!dbSelected) { action.addFlashMessage(l_(action.getLocale(), Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,177 @@ +package fr.ifremer.echobase.ui.interceptors; + +import com.google.common.base.Preconditions; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.interceptor.Interceptor; +import fr.ifremer.echobase.services.EchoBaseService; +import fr.ifremer.echobase.services.EchoBaseServiceContext; +import fr.ifremer.echobase.ui.EchoBaseApplicationContext; +import fr.ifremer.echobase.ui.EchoBaseInternalDbTransactionFilter; +import fr.ifremer.echobase.ui.EchoBaseSession; +import fr.ifremer.echobase.ui.EchoBaseWorkingDbTransactionFilter; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaContext; +import org.nuiton.util.beans.BeanUtil; + +import java.beans.PropertyDescriptor; +import java.util.Locale; +import java.util.Set; + +public class EchoBaseInjectInterceptor implements Interceptor { + + private static final Log log = + LogFactory.getLog(EchoBaseInjectInterceptor.class); + + private static final long serialVersionUID = 1L; + + @Override + public void init() { + + if (log.isInfoEnabled()) { + log.info("init " + this); + } + + } + + @Override + public String intercept(ActionInvocation invocation) throws Exception { + + Object action = invocation.getAction(); + + if (action instanceof EchoBaseActionSupport) { + EchoBaseActionSupport echoBaseActionSupport = (EchoBaseActionSupport) action; + + EchoBaseSession userSession = getEchoBaseSession(invocation); + + EchoBaseServiceContext serviceContext = newServiceContext( + invocation, + echoBaseActionSupport.getLocale()); + + Set<PropertyDescriptor> descriptors = + BeanUtil.getDescriptors( + action.getClass(), + BeanUtil.IS_WRITE_DESCRIPTOR); + + for (PropertyDescriptor propertyDescriptor : descriptors) { + + Class<?> propertyType = propertyDescriptor.getPropertyType(); + + Object toInject = null; + + if (EchoBaseServiceContext.class.isAssignableFrom(propertyType)) { + toInject = serviceContext; + } else if (EchoBaseService.class.isAssignableFrom(propertyType)) { + + Class<? extends EchoBaseService> serviceClass = + (Class<? extends EchoBaseService>) propertyType; + + toInject = serviceContext.newService(serviceClass); + + } else if (EchoBaseSession.class.isAssignableFrom(propertyType)) { + + toInject = userSession; + + } else if (EchoBaseApplicationContext.class.isAssignableFrom(propertyType)) { + + toInject = getEchoBaseApplicationContext(invocation); + + } + + if (toInject != null) { + + if (log.isTraceEnabled()) { + log.trace("injecting " + toInject + " in action " + action); + } + + propertyDescriptor.getWriteMethod().invoke(action, toInject); + + } + } + + try { + + return invocation.invoke(); + + } finally { + + // serviceContext.getPersistenceContext().getEntityTransaction().rollback(); + + } + + } else { + + // not an action, just process + + return invocation.invoke(); + + } + + } + + protected EchoBaseSession getEchoBaseSession(ActionInvocation invocation) { + + EchoBaseSession session = EchoBaseSession.getEchoBaseSession( + invocation.getInvocationContext()); + +// if (session == null) { +// +// session = new EchoBaseSession(); +// +// invocation.getInvocationContext().getSession().put(EchoBaseSession.SESSION_PARAMETER, session); +// +// } + + return session; + + } + + protected EchoBaseApplicationContext getEchoBaseApplicationContext(ActionInvocation invocation) { + + EchoBaseApplicationContext applicationContext = + EchoBaseApplicationContext.getApplicationContext( + invocation.getInvocationContext()); + + Preconditions.checkNotNull( + "application context must be initialized before calling an action", + applicationContext); + + return applicationContext; + + } + + protected EchoBaseServiceContext newServiceContext(ActionInvocation invocation, + Locale locale) { + + + TopiaContext topiaInternalContext = + EchoBaseInternalDbTransactionFilter.getTransaction( + invocation.getInvocationContext()); + + TopiaContext topiaContext = + EchoBaseWorkingDbTransactionFilter.getTransaction( + invocation.getInvocationContext()); + + EchoBaseApplicationContext applicationContext = + getEchoBaseApplicationContext(invocation); + + EchoBaseServiceContext serviceContext = + applicationContext.newServiceContext(locale, + topiaInternalContext, + topiaContext); + + return serviceContext; + + } + + @Override + public void destroy() { + + if (log.isInfoEnabled()) { + log.info("destroy " + this); + } + + } + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/validators/LoginValidator.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/validators/LoginValidator.java 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/validators/LoginValidator.java 2013-08-15 10:53:16 UTC (rev 842) @@ -25,8 +25,8 @@ import com.opensymphony.xwork2.validator.ValidationException; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.services.ServiceFactoryAware; -import fr.ifremer.echobase.services.UserService; +import fr.ifremer.echobase.services.service.UserService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; /** * Check user login. @@ -39,10 +39,10 @@ @Override public void validateWhenNotSkip(Object object) throws ValidationException { - ServiceFactoryAware serviceFactoryAware = (ServiceFactoryAware) object; + EchoBaseActionSupport action = (EchoBaseActionSupport) object; UserService userService = - serviceFactoryAware.getService(UserService.class); + action.getServiceContext().newService(UserService.class); String login = (String) getFieldValue("email", object); String password = (String) getFieldValue("password", object); Added: trunk/echobase-ui/src/main/resources/config/struts-spatial.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-spatial.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/config/struts-spatial.xml 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + #%L + EchoBase :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 Ifremer, Codelutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% + --> +<!DOCTYPE struts PUBLIC + "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" + "http://struts.apache.org/dtds/struts-2.3.dtd"> + +<struts> + + <package name="spatial" extends="logguedAndWithDb" namespace="/spatial"> + + <!-- Configure import --> + <action name="configure" + class="fr.ifremer.echobase.ui.actions.spatial.ConfigureShowSpatialData"> + <interceptor-ref name="basicStackLogguedWithdb"/> + <result>/WEB-INF/jsp/spatial/showData.jsp</result> + </action> + + <!-- Reconfigure import --> + <action name="reconfigure" + class="fr.ifremer.echobase.ui.actions.spatial.ConfigureShowSpatialData"> + <interceptor-ref name="basicStackLogguedWithdb"/> + <result type="redirectAction"> + <param name="namespace">/spatial</param> + <param name="actionName">configure</param> + </result> + </action> + + <!-- Show spatial map from the given selected data --> + <action name="showSpatial" + class="fr.ifremer.echobase.ui.actions.spatial.ShowSpatialData"> + <interceptor-ref name="prepareParamsStackLogguedWithDb"/> + <result>/WEB-INF/jsp/spatial/showData.jsp</result> + </action> + + <!-- Get all data of a voyage --> + <action name="getVoyage*" + class="fr.ifremer.echobase.ui.actions.spatial.GetVoyage{1}"> + <interceptor-ref name="basicStackLogguedWithdb"/> + <result type="json"/> + </action> + + </package> + +</struts> + Property changes on: trunk/echobase-ui/src/main/resources/config/struts-spatial.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/resources/config/struts-user.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-user.xml 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/resources/config/struts-user.xml 2013-08-15 10:53:16 UTC (rev 842) @@ -36,29 +36,29 @@ method="execute"> <result name="input">/WEB-INF/jsp/user/login.jsp</result> <result name="redirect" type="redirect">${redirectAction}</result> - <interceptor-ref name="paramsPrepareParamsStack"/> + <interceptor-ref name="echobaseDefaultStack"/> </action> <!-- Logout --> <action name="logout" class="fr.ifremer.echobase.ui.actions.user.Logout"> <result type="redirectToHome"/> <interceptor-ref name="checkUserLoggued"/> - <interceptor-ref name="basicStack"/> + <interceptor-ref name="echobaseBasicStack"/> </action> <!-- Display lists of users --> <action name="userList" class="fr.ifremer.echobase.ui.actions.EchoBaseActionSupport"> + <interceptor-ref name="checkUserIsAdmin"/> <interceptor-ref name="basicStackLoggued"/> - <interceptor-ref name="checkUserIsAdmin"/> <result>/WEB-INF/jsp/user/userList.jsp</result> </action> <!-- CRUD on user --> <action name="user-*" class="fr.ifremer.echobase.ui.actions.user.{1}"> + <interceptor-ref name="checkUserIsAdmin"/> <interceptor-ref name="prepareParamsStackLoggued"/> - <interceptor-ref name="checkUserIsAdmin"/> <result name="input">/WEB-INF/jsp/user/{1}.jsp</result> <result>/WEB-INF/jsp/user/userList.jsp</result> </action> Added: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatial-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatial-validation.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatial-validation.xml 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,40 @@ +<!-- + #%L + EchoBase :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 - 2013 Ifremer, Codelutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% + --> +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="model.voyageId"> + <field-validator type="nrequiredstring"> + <message key="echobase.error.showData.voyage.required"/> + </field-validator> + </field> + + <field name="model.dataMetadataId"> + <field-validator type="nrequiredstring"> + <message key="echobase.error.showData.dataMetadata.required"/> + </field-validator> + </field> + + +</validators> \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatial-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2013-08-15 10:53:16 UTC (rev 842) @@ -12,6 +12,7 @@ echobase.action.createWorkingDbConfiguration=Save echobase.action.delete=Delete echobase.action.delete.selectedImport=Delete selected imports +echobase.action.display=Display spatial data echobase.action.downloadEmbeddedApplicationFile=Download the portable database echobase.action.downloadExportDbFile=Download database export file echobase.action.export=Export @@ -34,6 +35,7 @@ echobase.action.show.exportDb.documentation=How to export a database echobase.action.show.import.documentation=How to import data echobase.action.show.importDb.documentation=How to import a database +echobase.action.show.showData.documentation=How to display spatial data echobase.action.toEnglish=English echobase.action.toFrench=French echobase.action.usingEnglish=English @@ -59,12 +61,14 @@ echobase.common.cellRegionsFile= echobase.common.dataCentre=Data center echobase.common.dataCentreEmail=Data center email +echobase.common.dataMetadata=Data Metadata echobase.common.dataProcessing=DataProcessing echobase.common.dataProcessingNotes=Data processing notes echobase.common.datum=Datum echobase.common.description=Description echobase.common.digitThreshold=Digitization threshold echobase.common.distributionStatement=Distribution statement +echobase.common.echotype=Echotype echobase.common.echotypeFile= echobase.common.email=E-mail echobase.common.entityId=ID @@ -113,6 +117,7 @@ echobase.common.modificationUser=User echobase.common.moviesFile= echobase.common.name=Name +echobase.common.nbSpatialData=Number of result echobase.common.operationFile= echobase.common.operationMetadataFile= echobase.common.organisationLevelAcknowledgements=organisationLevelAcknowledgements @@ -131,6 +136,7 @@ echobase.common.soundSpeedCalculationsME70=Sound speed calculation method (ME70 instrument) echobase.common.sounderConstant=Sounder constant (if relevant) echobase.common.source=Source +echobase.common.species=Species echobase.common.startEndDate=Start - End date echobase.common.startEndPort=Start - End port echobase.common.subSampleFile= @@ -216,6 +222,8 @@ echobase.error.query.name.already.exists=Query name already exists echobase.error.required.email=E-mail address required echobase.error.required.password=Password is required +echobase.error.showData.dataMetadata.required=DataMetadata required +echobase.error.showData.voyage.required=Voyage required echobase.error.warlocation.notFound=Database .war file not found at location %s echobase.error.workingDbConfiguration.couldNotConnect=Could not connect to database (%s) echobase.error.workingDbConfiguration.description.required=Mandatory description @@ -309,6 +317,8 @@ echobase.legend.libreOfficeQuery=Translate a SQL query from Libre Office echobase.legend.removeData.resume=Results of Import removal echobase.legend.select.voyage=Voyage filter +echobase.legend.showData.configure=Configure what to display +echobase.legend.showData.result=Spatial result to display echobase.legend.sqlQuery.configuration=Query definition echobase.legend.sqlQuery.result=Query results echobase.legend.workingDbConfiguration.create=Create a working database configuration @@ -323,6 +333,7 @@ echobase.menu.importDb=Database import echobase.menu.logs=Change log echobase.menu.removeData=Remove data +echobase.menu.showSpatialData=Show spatial data echobase.menu.users=Manage users echobase.menu.viewData=Display data echobase.message.clickToShowImportDefail=Click to show import detail @@ -331,6 +342,7 @@ echobase.message.exportDb.result=Export of database (mode %s) was successful (file %s) in %s. echobase.message.importData.result=Data import successful in %s \:\n%s echobase.message.no.row.selected=No data selected +echobase.message.no.spatial.database.support=The working db you are using is not compatible with postgis 2. echobase.message.noEntrySelection=No field selected echobase.message.noImportLogSelected=No import selected echobase.message.noVoyageSelected=No voyage selected @@ -368,6 +380,7 @@ echobase.title.newLibreOfficeQuery=Translate a SQL query from Libre Office echobase.title.removeDataProgress=Remove import data echobase.title.removeDataResult=Result of remove import data +echobase.title.show.spatial=Show spatial data echobase.title.users=Administrate users echobase.title.voyage.detail=Voyage detail echobase.title.welcome=Welcome to Echobase Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2013-08-15 10:53:16 UTC (rev 842) @@ -12,6 +12,7 @@ echobase.action.createWorkingDbConfiguration=Enregistrer echobase.action.delete=Suppression echobase.action.delete.selectedImport=Supprimer les imports sélectionnés +echobase.action.display=Afficher les données echobase.action.downloadEmbeddedApplicationFile=Télécharger l'application embarquée echobase.action.downloadExportDbFile=Télécharger le fichier d'export de la base complète echobase.action.export=Exporter @@ -34,6 +35,7 @@ echobase.action.show.exportDb.documentation=Comment exporter une base echobase.action.show.import.documentation=Comment importer des données echobase.action.show.importDb.documentation=Comment importer une base +echobase.action.show.showData.documentation=Comment visualiser des données echobase.action.toEnglish=En anglais echobase.action.toFrench=En français echobase.action.usingEnglish=Version anglaise @@ -60,12 +62,14 @@ echobase.common.cellRegionsFile= echobase.common.dataCentre=Centre de données echobase.common.dataCentreEmail=Courriel du centre de données +echobase.common.dataMetadata=Type de donnée echobase.common.dataProcessing=DataProcessing echobase.common.dataProcessingNotes=Notes sur le pré-traitement des données echobase.common.datum=Référenciel echobase.common.description=Description echobase.common.digitThreshold=Seuil de numérisation echobase.common.distributionStatement=Conditions de diffusion des données +echobase.common.echotype=Échotype echobase.common.echotypeFile= echobase.common.email=Courriel echobase.common.entityId=Identifiant de l'entité @@ -114,6 +118,7 @@ echobase.common.modificationUser=Utilisateur echobase.common.moviesFile= echobase.common.name=Nom +echobase.common.nbSpatialData=Nombre de cellules echobase.common.operationFile= echobase.common.operationMetadataFile= echobase.common.organisationLevelAcknowledgements=organisationLevelAcknowledgements @@ -132,6 +137,7 @@ echobase.common.soundSpeedCalculationsME70=Méthode de calcul de la célérité du son (ME70) echobase.common.sounderConstant=Constante sondeur (si besoin) echobase.common.source=Source +echobase.common.species=Espèce echobase.common.startEndDate=Date de début - fin echobase.common.startEndPort=Port de départ - arrivé echobase.common.subSampleFile= @@ -217,6 +223,8 @@ echobase.error.query.name.already.exists=Nom de requête déjà utilisé echobase.error.required.email=Courriel obligatoire echobase.error.required.password=Le mot de passe est obligatoire +echobase.error.showData.dataMetadata.required=La sélection d'un type de donnée est obligatoire +echobase.error.showData.voyage.required=La sélection d'une campagne est obligatoire echobase.error.warlocation.notFound=L'application n'a pas été trouvée à l'emplacement suivant %s echobase.error.workingDbConfiguration.couldNotConnect=Impossible de se connecter (%s) echobase.error.workingDbConfiguration.description.required=Description obligatoire @@ -310,6 +318,8 @@ echobase.legend.libreOfficeQuery=Traduire une requête SQL issue de Libre Office echobase.legend.removeData.resume=Résumé de la suppression d'un import echobase.legend.select.voyage=Filtre Campagne +echobase.legend.showData.configure=Configurer les données à visualiser +echobase.legend.showData.result=Résultats à visualiser echobase.legend.sqlQuery.configuration=Définition de la requête echobase.legend.sqlQuery.result=Résultats de la requête echobase.legend.workingDbConfiguration.create=Création d'une configuration de base de travail @@ -324,6 +334,7 @@ echobase.menu.importDb=Importer une base echobase.menu.logs=Journal des modifications echobase.menu.removeData=Supprimer des données +echobase.menu.showSpatialData=Voir les données spatiales echobase.menu.users=Gérer les utilisateurs echobase.menu.viewData=Visualiser les données echobase.message.clickToShowImportDefail=Cliquer pour obtenir les détails de l'import @@ -332,6 +343,7 @@ echobase.message.exportDb.result=L'export de la base (mode %s) a réussi (fichier %s) en %s echobase.message.importData.result=Import de données réussi en %s \:\n%s echobase.message.no.row.selected=Aucune donnée sélectionnée +echobase.message.no.spatial.database.support=La base de travail que vous utilisez ne possède pas de support spatiale. echobase.message.noEntrySelection=Pas de champ sélectionné echobase.message.noImportLogSelected=Pas d'import sélectionné echobase.message.noVoyageSelected=Pas de campagne sélectionné @@ -369,6 +381,7 @@ echobase.title.newLibreOfficeQuery=Traduire une requête SQL issue de Libre Office echobase.title.removeDataProgress=Suppression d'un import en cours... echobase.title.removeDataResult=Résultat de la suppression d'un import +echobase.title.show.spatial=Visualisation des données echobase.title.users=Administration des utilisateurs echobase.title.voyage.detail=Détail de la campagne echobase.title.welcome=Bienvenue dans EchoBase Modified: trunk/echobase-ui/src/main/resources/struts.xml =================================================================== --- trunk/echobase-ui/src/main/resources/struts.xml 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/resources/struts.xml 2013-08-15 10:53:16 UTC (rev 842) @@ -31,7 +31,8 @@ <struts> <bean type="org.apache.struts2.dispatcher.StaticContentLoader" - class="fr.ifremer.echobase.ui.EchoBaseStaticContentLoader" name="default" /> + class="fr.ifremer.echobase.ui.EchoBaseStaticContentLoader" + name="default" /> <bean class="org.nuiton.web.struts2.I18nTextProvider" name="i18nTextProvider" @@ -94,6 +95,52 @@ <param name="redirectAction">/home</param> </interceptor> + <interceptor name="echobaseInjector" + class="fr.ifremer.echobase.ui.interceptors.EchoBaseInjectInterceptor"/> + + <interceptor-stack name="echobaseBasicStack"> + <interceptor-ref name="exception"/> + <interceptor-ref name="servletConfig"/> + <interceptor-ref name="echobaseInjector"/> + <interceptor-ref name="prepare"/> + <interceptor-ref name="checkbox"/> + <interceptor-ref name="multiselect"/> + <interceptor-ref name="actionMappingParams"/> + <interceptor-ref name="params"> + <param name="excludeParams">^_$,dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param> + </interceptor-ref> + <interceptor-ref name="conversionError"/> + </interceptor-stack> + + <!-- authenticated stack with prepare - params--> + <interceptor-stack name="echobaseDefaultStack"> + <interceptor-ref name="exception"/> + <interceptor-ref name="alias"/> + <interceptor-ref name="servletConfig"/> + <interceptor-ref name="echobaseInjector"/> + <interceptor-ref name="i18n"/> + <interceptor-ref name="prepare"/> + <interceptor-ref name="chain"/> + <interceptor-ref name="scopedModelDriven"/> + <interceptor-ref name="modelDriven"/> + <interceptor-ref name="fileUpload"/> + <interceptor-ref name="checkbox"/> + <interceptor-ref name="multiselect"/> + <interceptor-ref name="staticParams"/> + <interceptor-ref name="actionMappingParams"/> + <interceptor-ref name="params"> + <param name="excludeParams">^_$,dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param> + </interceptor-ref> + <interceptor-ref name="conversionError"/> + <interceptor-ref name="validation"> + <param name="excludeMethods">input,back,cancel,browse</param> + </interceptor-ref> + <interceptor-ref name="workflow"> + <param name="excludeMethods">input,back,cancel,browse</param> + </interceptor-ref> + <interceptor-ref name="debugging"/> + </interceptor-stack> + </interceptors> <!-- default action to use everywhere (fix i18n when not translated) --> @@ -122,14 +169,17 @@ <interceptor-stack name="basicStackLoggued"> <interceptor-ref name="i18n"/> <interceptor-ref name="checkUserLoggued"/> - <interceptor-ref name="basicStack"/> + <!--<interceptor-ref name="basicStack"/>--> + <interceptor-ref name="echobaseBasicStack"/> </interceptor-stack> <!-- authenticated stack with prepare - params--> <interceptor-stack name="prepareParamsStackLoggued"> <interceptor-ref name="i18n"/> <interceptor-ref name="checkUserLoggued"/> - <interceptor-ref name="defaultStack"/> + <!--<interceptor-ref name="defaultStack"/>--> + <interceptor-ref name="echobaseDefaultStack"/> + </interceptor-stack> <!-- basic authenticated stack --> @@ -137,7 +187,8 @@ <interceptor-ref name="i18n"/> <interceptor-ref name="checkUserLoggued"/> <interceptor-ref name="checkWorkingDbSelected"/> - <interceptor-ref name="basicStack"/> + <!--<interceptor-ref name="basicStack"/>--> + <interceptor-ref name="echobaseBasicStack"/> </interceptor-stack> <!-- authenticated stack with prepare - params--> @@ -145,7 +196,8 @@ <interceptor-ref name="i18n"/> <interceptor-ref name="checkUserLoggued"/> <interceptor-ref name="checkWorkingDbSelected"/> - <interceptor-ref name="defaultStack"/> + <!--<interceptor-ref name="defaultStack"/>--> + <interceptor-ref name="echobaseDefaultStack"/> </interceptor-stack> </interceptors> @@ -161,6 +213,7 @@ <default-interceptor-ref name="basicStackLogguedWithdb"/> </package> + <package name="applicationDefault" extends="default" namespace="/"> <default-action-ref name="home"/> @@ -170,7 +223,8 @@ <result>/WEB-INF/jsp/home.jsp</result> - <interceptor-ref name="i18nStack"/> + <interceptor-ref name="echobaseBasicStack"/> + <interceptor-ref name="i18n"/> <interceptor-ref name="checkUserLoggued"/> </action> @@ -179,7 +233,8 @@ <result type="redirectToHome"/> - <interceptor-ref name="i18nStack"/> + <interceptor-ref name="echobaseBasicStack"/> + <interceptor-ref name="i18n"/> <!-- remove the request_locale parameter from request --> <interceptor-ref name="paramRemover"> <param name="paramNames">request_locale</param> @@ -199,6 +254,7 @@ <include file="config/struts-importDb.xml"/> <include file="config/struts-exportDb.xml"/> <include file="config/struts-removeData.xml"/> + <include file="config/struts-spatial.xml"/> </struts> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/decorators/layout-default.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/decorators/layout-default.jsp 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/decorators/layout-default.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -54,10 +54,10 @@ <h2><d:title default="EchoBase"/></h2> - <s:if test="hasFlashMessages()"> + <s:if test="%{#session.echoBaseSession.withFlashMessages}"> <div class="info_success clearfix"> <ul class="actionMessages fleft"> - <s:iterator value="flashMessages" var="message"> + <s:iterator value="%{#session.echoBaseSession.flashMessages}" var="message"> <li><span><s:property value="#message" escapeHtml="false"/></span> </li> </s:iterator> @@ -65,20 +65,20 @@ </div> </s:if> - <s:if test="hasFlashWarnings()"> + <s:if test="#session.echoBaseSession.withFlashWarnings"> <div class="info_warning clearfix"> <ul class="actionWarnings fleft"> - <s:iterator value="flashWarnings" var="message"> + <s:iterator value="%{#session.echoBaseSession.flashWarnings}" var="message"> <li><span><s:property value="#message" escapeHtml="false"/></span> </li> </s:iterator> </ul> </div> </s:if> - <s:if test="hasFlashErrors()"> + <s:if test="#session.echoBaseSession.withFlashErrors"> <div class="info_error clearfix"> <ul class="actionErrors fleft"> - <s:iterator value="flashErrors" var="message"> + <s:iterator value="%{#session.echoBaseSession.flashErrors}" var="message"> <li><span><s:property value="#message" escapeHtml="false"/></span> </li> </s:iterator> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml 2013-08-15 10:53:16 UTC (rev 842) @@ -35,6 +35,7 @@ <pattern>/exportQuery/newLibreOfficeQuery*</pattern> <pattern>/exportQuery/confirmDelete*</pattern> <pattern>/importData/get*</pattern> + <pattern>/spatial/get*</pattern> <pattern>/workingDb/confirmDelete*</pattern> <pattern>/workingDb/get*</pattern> <!--<pattern>/removeData/confirmDelete*</pattern>--> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -31,7 +31,7 @@ <ul class="clearfix"> <li> <span style="font-size: 140%"> - EchoBase <%=EchoBaseActionSupport.getApplicationVersion()%> + EchoBase <s:property value="#application.echobaseApplicationContext.configuration.applicationVersion"/> © 2011-2012 </span> <a href="http://www.ifremer.fr">Ifremer</a> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -50,7 +50,7 @@ </s:text> </li> <li>|</li> - <s:if test="workingDbSelected"> + <s:if test="#session.echoBaseSession.workingDbSelected"> <li> <s:a action="disconnect" namespace="/workingDb" id='disconnect' title='%{getText("echobase.tooltip.disconnectWorkingDb")}' @@ -86,8 +86,8 @@ </div> <div class="cleanBoth menu"> <ul> - <s:if test="%{admin}"> - <s:if test="%{workingDbSelected}"> + <s:if test="#session.echoBaseSession.user.admin"> + <s:if test="#session.echoBaseSession.workingDbSelected"> <li> <s:a action="configureInput" namespace="/importDb" cssClass="impBase"> <span><s:text name="echobase.menu.importDb"/></s:a></span> @@ -118,6 +118,13 @@ </s:a> </li> <li> + <s:a action="configure" namespace="/spatial" cssClass="info"> + <span> + <s:text name="echobase.menu.showSpatialData"/> + </span> + </s:a> + </li> + <li> <s:a action="logs" namespace="/workingDb" cssClass="journal"> <span><s:text name="echobase.menu.logs"/></span> </s:a> @@ -150,7 +157,7 @@ </li> </s:if> <s:else> - <s:if test="%{workingDbSelected}"> + <s:if test="#session.echoBaseSession.workingDbSelected"> <li> <s:a action="manageExportQuery" namespace="/exportQuery" cssClass="expDonnee"> @@ -163,6 +170,13 @@ </s:a> </li> <li> + <s:a action="configure" namespace="/spatial" cssClass="info"> + <span> + <s:text name="echobase.menu.showSpatialData"/> + </span> + </s:a> + </li> + <li> <s:a action="logs" namespace="/workingDb" cssClass="journal"> <span><s:text name="echobase.menu.logs"/></span> </s:a> Added: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showData.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showData.jsp (rev 0) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showData.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,143 @@ +<%-- + #%L + EchoBase :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 - 2013 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% + --%> +<%@page contentType="text/html" pageEncoding="UTF-8" %> +<%@ taglib prefix="s" uri="/struts-tags" %> +<%@ taglib prefix="sj" uri="/struts-jquery-tags" %> +<title> + <s:text name="echobase.title.show.spatial"/> +</title> + +<script type="text/javascript" + src="<s:url value='/js/gridHelper.js' />"></script> + +<s:if test="model.withSpatial"> + + <script type="text/javascript"> + + jQuery(document).ready(function () { + + var getVoyage = $('[name="model.voyageId"]'); + + $.autoSelectVoyageAndDataMetadata( + getVoyage, + $('[name="model.dataMetadataId"]'), + '<s:url action="getVoyageDataMetadata" namespace="/spatial"/>', + '<s:property value="model.voyageId"/>', + '<s:property value="model.dataMetadataId"/>' + ); + + $.autoSelectVoyageAndSpecies( + getVoyage, + $('[name="model.speciesId"]'), + '<s:url action="getVoyageSpecies" namespace="/spatial"/>', + '<s:property value="model.voyageId"/>', + '<s:property value="model.speciesId"/>' + ); + + $.autoSelectVoyageAndEchotype( + getVoyage, + $('[name="model.echotypeId"]'), + '<s:url action="getVoyageEchotype" namespace="/spatial"/>', + '<s:property value="model.voyageId"/>', + '<s:property value="model.echotypeId"/>' + ); + + }); + </script> + + <s:form namespace="/spatial" method="POST" enctype="multipart/form-data"> + + <fieldset> + <legend> + <s:text name="echobase.legend.showData.configure"/> + </legend> + + <div class="cleanBoth help"> + <s:a href="%{getDocumentation('showData.html', null)}" target="doc"> + <s:text name="echobase.action.show.showData.documentation"/> + </s:a> + </div> + <br/> + + <s:select key="model.voyageId" requiredLabel="true" + label='%{getText("echobase.common.voyage")}' + list="voyages" headerKey="" headerValue=""/> + + <sj:select key="model.dataMetadataId" requiredLabel="true" + label='%{getText("echobase.common.dataMetadata")}' + headerKey="" headerValue=""/> + + <sj:select key="model.speciesId" requiredLabel="false" + label='%{getText("echobase.common.species")}' + headerKey="" headerValue=""/> + + <sj:select key="model.echotypeId" requiredLabel="false" + label='%{getText("echobase.common.echotype")}' + headerKey="" headerValue=""/> + + <s:hidden key="model.withData" label=' '/> + <s:hidden key="model.withSpatial" label=' '/> + + </fieldset> + <br/> + + <div class="toolbar"> + <ul class="toolbar floatRight"> + <li> + <s:submit action='reconfigure' key="echobase.action.reset"/> + </li> + <li> + <s:submit action='save' key="echobase.action.save"/> + </li> + <li> + <s:submit action="showSpatial" key='echobase.action.display'/> + </li> + </ul> + </div> + + <s:if test="model.withData"> + + <fieldset> + <legend> + <s:text name="echobase.legend.showData.result"/> + </legend> + <s:textfield label='%{getText("echobase.common.nbSpatialData")}' + readonly="true" + value="%{model.spatialData.size}" requiredLabel="true"/> + </fieldset> + + </s:if> + <div id="dataPanel"> + <center>DOME!</center> + </div> + + </s:form> +</s:if> +<s:else> + + <p> + <s:text name="echobase.message.no.spatial.database.support"/> + </p> +</s:else> + + Property changes on: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showData.jsp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showDataMap.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showDataMap.jsp (rev 0) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showDataMap.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -0,0 +1,43 @@ +<%-- + #%L + EchoBase :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 - 2013 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% + --%> +<%@page contentType="text/html" pageEncoding="UTF-8" %> +<%@ taglib prefix="s" uri="/struts-tags" %> +<%@ taglib prefix="sj" uri="/struts-jquery-tags" %> + +<script type="text/javascript" + src="<s:url value='/js/gridHelper.js' />"></script> + +<s:form namespace="/spatial" method="POST" enctype="multipart/form-data"> + + <s:hidden key="model.withData" label=' '/> + <s:hidden key="model.withSpatial" label=' '/> + <s:hidden key="model.voyageId" label=' '/> + <s:hidden key="model.dataMetadataId" label=' '/> + <s:hidden key="model.categoryId" label=' '/> + +</s:form> + +<div id="dataPanel"> + +</div> + Property changes on: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showDataMap.jsp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Create.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Create.jsp 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Create.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -27,7 +27,7 @@ <title><s:text name="echobase.label.admin.user.create"/></title> -<s:form method="post" validate="true" namespace="/user"> +<s:form method="post" validate="true" namespace="/user" action="user-Create"> <fieldset> <legend> <s:text name="echobase.common.user"/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Delete.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Delete.jsp 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Delete.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -27,7 +27,7 @@ <title><s:text name="echobase.label.admin.user.delete"/></title> -<s:form method="post" validate="true" namespace="/user"> +<s:form method="post" validate="true" namespace="/user" action="user-Delete"> <fieldset> <legend> <s:text name="echobase.common.user"/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Update.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Update.jsp 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/user/Update.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -27,7 +27,7 @@ <title><s:text name="echobase.label.admin.user.edit"/></title> -<s:form method="post" validate="true" namespace="/user"> +<s:form method="post" validate="true" namespace="/user" action="user-Update"> <fieldset> <legend> <s:text name="echobase.common.user"/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/manage.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/manage.jsp 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/manage.jsp 2013-08-15 10:53:16 UTC (rev 842) @@ -47,7 +47,7 @@ <title><s:text name="echobase.title.workingDbConfiguration"/></title> -<s:if test="admin"> +<s:if test="echoBaseSession.user.admin"> <s:form id="createForm" namespace="/workingDb"> <ul class="toolbar floatLeft"> <li> @@ -105,7 +105,7 @@ <s:submit action="connect" theme="simple" key="echobase.action.connectToWorkingDb"/> </li> - <s:if test="admin"> + <s:if test="echoBaseSession.user.admin"> <li> <s:submit action="clone" theme="simple" key="echobase.action.clone"/> Modified: trunk/echobase-ui/src/main/webapp/js/gridHelper.js =================================================================== --- trunk/echobase-ui/src/main/webapp/js/gridHelper.js 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/echobase-ui/src/main/webapp/js/gridHelper.js 2013-08-15 10:53:16 UTC (rev 842) @@ -21,11 +21,11 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -( function ($) { +(function ($) { $.fn.extend( { - addRowSelectTopic:function (gridId, callback) { + addRowSelectTopic: function (gridId, callback) { $.subscribe(gridId + '-rowSelect', function (event) { if (event.originalEvent) { var gridId = event.data.id; @@ -40,10 +40,10 @@ if (callback) { callback(event); } - }, {id:gridId, callback:callback}); + }, {id: gridId, callback: callback}); }, - addClearSelectTopic:function (gridId, callback) { + addClearSelectTopic: function (gridId, callback) { $.subscribe(gridId + '-clearSelect', function (event) { var gridId = event.data.id; jQuery.struts2_jquery[gridId] = {}; @@ -51,16 +51,16 @@ if (callback) { callback(event); } - }, {id:gridId, callback:callback}); + }, {id: gridId, callback: callback}); }, - addAddRowTopic:function (gridId, url) { + addAddRowTopic: function (gridId, url) { $.subscribe(gridId + '-rowAdd', function (event) { window.location = event.data.url; - }, {id:gridId, url:url}); + }, {id: gridId, url: url}); }, - addSingleRowTopic:function (gridId, action, url, parameterName) { + addSingleRowTopic: function (gridId, action, url, parameterName) { $.subscribe(gridId + '-row' + action, function (event) { var gridId = event.data.id; var opts = jQuery.struts2_jquery[gridId]; @@ -71,10 +71,10 @@ params[parameterName] = selectedId; window.location = $.prepareUrl(event.data.url, params); } - }, {id:gridId, url:url, parameterName:parameterName}); + }, {id: gridId, url: url, parameterName: parameterName}); }, - addSingleRowTopic2:function (gridId, action, callback) { + addSingleRowTopic2: function (gridId, action, callback) { $.subscribe(gridId + '-row' + action, function (event) { @@ -84,10 +84,10 @@ if (selectedId) { event.data.callback(event, selectedId); } - }, {id:gridId, callback:callback}); + }, {id: gridId, callback: callback}); }, - addMultiRowTopic:function (gridId, action, target, checkboxName, callback) { + addMultiRowTopic: function (gridId, action, target, checkboxName, callback) { $.subscribe(gridId + '-row' + action, function (event) { var gridId = event.data.id; var prefix = 'jqg_' + gridId + '_'; @@ -111,13 +111,13 @@ } event.data.target.click(); } - }, {id:gridId, - target:target, - checkboxName:checkboxName, - callback:callback}); + }, {id: gridId, + target: target, + checkboxName: checkboxName, + callback: callback}); }, - serializeCheckboxs:function (id, params, newId) { + serializeCheckboxs: function (id, params, newId) { var all = $(':checkbox[name="' + id + '"]'); var selected = $(':checked[name="' + id + '"]'); @@ -135,7 +135,7 @@ } }, - prepareUrl:function (url, params) { + prepareUrl: function (url, params) { var result = url; if (url.indexOf("?") > -1) { result += "&"; @@ -146,7 +146,7 @@ return result; }, - updateSelectBoxContent:function (url, params, jsonTarget, target, callback) { + updateSelectBoxContent: function (url, params, jsonTarget, target, callback) { // call url to obtain datas to injetc in target select box jQuery.getJSON(url, params, function (result) { @@ -170,7 +170,7 @@ }, // Ajoute les classes even et odd à tous les tableaux de la page - addEvenAndOddClasses:function (gridId) { + addEvenAndOddClasses: function (gridId) { // On souscrit au topic qui appelle la fonction addEvenAndOddClasses $.subscribe(gridId + '-CompleteTopics', function () { @@ -181,13 +181,13 @@ }, // auto-selection des voyages - vessel - autoSelectVoyageAndVessel:function (voyageSelectBox, vesselSelectBox, getUrl, voyageId, vesselId) { + autoSelectVoyageAndVessel: function (voyageSelectBox, vesselSelectBox, getUrl, voyageId, vesselId) { - voyageSelectBox.change({vesselSelectBox:vesselSelectBox, - getUrl:getUrl}, function (event) { + voyageSelectBox.change({vesselSelectBox: vesselSelectBox, + getUrl: getUrl}, function (event) { $.updateSelectBoxContent(event.data.getUrl, - {voyageId:this.value}, + {voyageId: this.value}, 'vessels', event.data.vesselSelectBox ); @@ -198,7 +198,7 @@ voyageSelectBox.change(voyageId); $.updateSelectBoxContent(getUrl, - {voyageId:voyageId}, + {voyageId: voyageId}, 'vessels', vesselSelectBox, function () { @@ -212,15 +212,15 @@ }, // auto-selection des voyages - dataProcessing - autoSelectVoyageAndDataProcessing:function (voyageSelectBox, datapPocessingSelectBox, getUrl, voyageId, dataProcessingId) { + autoSelectVoyageAndDataProcessing: function (voyageSelectBox, datapProcessingSelectBox, getUrl, voyageId, dataProcessingId) { - voyageSelectBox.change({datapPocessingSelectBox:datapPocessingSelectBox, - getUrl:getUrl}, function (event) { + voyageSelectBox.change({datapProcessingSelectBox: datapProcessingSelectBox, + getUrl: getUrl}, function (event) { $.updateSelectBoxContent(event.data.getUrl, - {voyageId:this.value}, + {voyageId: this.value}, 'dataProcessings', - event.data.datapPocessingSelectBox + event.data.datapProcessingSelectBox ); }); @@ -229,61 +229,163 @@ voyageSelectBox.change(voyageId); $.updateSelectBoxContent(getUrl, - {voyageId:voyageId}, + {voyageId: voyageId}, 'dataProcessings', - datapPocessingSelectBox, function () { + datapProcessingSelectBox, function () { if (dataProcessingId) { - datapPocessingSelectBox.val(dataProcessingId); + datapProcessingSelectBox.val(dataProcessingId); } } ); } + }, + + // auto-selection des voyages - dataMetadata + autoSelectVoyageAndDataMetadata: function (voyageSelectBox, datapMetadataSelectBox, getUrl, voyageId, dataMetadataId) { + + voyageSelectBox.change({datapMetadataSelectBox: datapMetadataSelectBox, + getUrl: getUrl}, function (event) { + + $.updateSelectBoxContent(event.data.getUrl, + {voyageId: this.value}, + 'data', + event.data.datapMetadataSelectBox + ); + }); + + if (voyageId) { + + voyageSelectBox.change(voyageId); + + $.updateSelectBoxContent(getUrl, + {voyageId: voyageId}, + 'data', + datapMetadataSelectBox, function () { + + if (dataMetadataId) { + + datapMetadataSelectBox.val(dataMetadataId); + } + } + ); + } + }, + + // auto-selection des voyages - species + autoSelectVoyageAndSpecies: function (voyageSelectBox, speciesSelectBox, getUrl, voyageId, speciesId) { + + voyageSelectBox.change({speciesSelectBox: speciesSelectBox, + getUrl: getUrl}, function (event) { + + $.updateSelectBoxContent(event.data.getUrl, + {voyageId: this.value}, + 'data', + event.data.speciesSelectBox + ); + }); + + if (voyageId) { + + voyageSelectBox.change(voyageId); + + $.updateSelectBoxContent(getUrl, + {voyageId: voyageId}, + 'data', + speciesSelectBox, function () { + + if (speciesId) { + + speciesSelectBox.val(speciesId); + } + } + ); + } + }, + + // auto-selection des voyages - species + autoSelectVoyageAndEchotype: function (voyageSelectBox, echotypeSelectBox, getUrl, voyageId, echotypeId) { + + voyageSelectBox.change({echotypeSelectBox: echotypeSelectBox, + getUrl: getUrl}, function (event) { + + $.updateSelectBoxContent(event.data.getUrl, + {voyageId: this.value}, + 'data', + event.data.echotypeSelectBox + ); + }); + + if (voyageId) { + + voyageSelectBox.change(voyageId); + + $.updateSelectBoxContent(getUrl, + {voyageId: voyageId}, + 'data', + echotypeSelectBox, function () { + + if (echotypeId) { + + echotypeSelectBox.val(echotypeId); + } + } + ); + } } }); $.extend({ - addRowSelectTopic:function (gridId, callback) { + addRowSelectTopic: function (gridId, callback) { return $(document).addRowSelectTopic(gridId, callback); }, - addClearSelectTopic:function (gridId, callback) { + addClearSelectTopic: function (gridId, callback) { return $(document).addClearSelectTopic(gridId, callback); }, - addAddRowTopic:function (gridId, url) { + addAddRowTopic: function (gridId, url) { return $(document).addAddRowTopic(gridId, url); }, - addSingleRowTopic:function (gridId, action, url, parameterName) { + addSingleRowTopic: function (gridId, action, url, parameterName) { return $(document).addSingleRowTopic(gridId, action, url, parameterName); }, - addSingleRowTopic2:function (gridId, action, callback) { + addSingleRowTopic2: function (gridId, action, callback) { return $(document).addSingleRowTopic2(gridId, action, callback); }, - addMultiRowTopic:function (gridId, action, target, checkboxName, calbback) { + addMultiRowTopic: function (gridId, action, target, checkboxName, calbback) { return $(document).addMultiRowTopic(gridId, action, target, checkboxName, calbback); }, - serializeCheckboxs:function (id, params, newId) { + serializeCheckboxs: function (id, params, newId) { return $(document).serializeCheckboxs(id, params, newId); }, - prepareUrl:function (url, params) { + prepareUrl: function (url, params) { return $(document).prepareUrl(url, params); }, - updateSelectBoxContent:function (url, params, jsonTarget, target, callback) { + updateSelectBoxContent: function (url, params, jsonTarget, target, callback) { return $(document).updateSelectBoxContent(url, params, jsonTarget, target, callback); }, - addEvenAndOddClasses:function (gridId) { + addEvenAndOddClasses: function (gridId) { return $(document).addEvenAndOddClasses(gridId); }, - autoSelectVoyageAndVessel:function (voyageSelectBox, vesselSelectBox, getUrl, voyageId, vesselId) { + autoSelectVoyageAndVessel: function (voyageSelectBox, vesselSelectBox, getUrl, voyageId, vesselId) { return $(document).autoSelectVoyageAndVessel(voyageSelectBox, vesselSelectBox, getUrl, voyageId, vesselId); }, - autoSelectVoyageAndDataProcessing:function (voyageSelectBox, dataProcessingSelectBox, getUrl, voyageId, dataProcessingId) { + autoSelectVoyageAndDataProcessing: function (voyageSelectBox, dataProcessingSelectBox, getUrl, voyageId, dataProcessingId) { return $(document).autoSelectVoyageAndDataProcessing(voyageSelectBox, dataProcessingSelectBox, getUrl, voyageId, dataProcessingId); + }, + autoSelectVoyageAndDataMetadata: function (voyageSelectBox, dataMetadataSelectBox, getUrl, voyageId, dataMetadataId) { + return $(document).autoSelectVoyageAndDataMetadata(voyageSelectBox, dataMetadataSelectBox, getUrl, voyageId, dataMetadataId); + }, + autoSelectVoyageAndSpecies: function (voyageSelectBox, speciesSelectBox, getUrl, voyageId, speciesId) { + return $(document).autoSelectVoyageAndSpecies(voyageSelectBox, speciesSelectBox, getUrl, voyageId, speciesId); + }, + autoSelectVoyageAndEchotype: function (voyageSelectBox, echotypeSelectBox, getUrl, voyageId, echotypeId) { + return $(document).autoSelectVoyageAndEchotype(voyageSelectBox, echotypeSelectBox, getUrl, voyageId, echotypeId); } }); })(jQuery); Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-08-09 11:14:40 UTC (rev 841) +++ trunk/pom.xml 2013-08-15 10:53:16 UTC (rev 842) @@ -139,8 +139,8 @@ <!-- libraries version --> - <eugenePluginVersion>2.7</eugenePluginVersion> - <topiaVersion>3.0-SNAPSHOT</topiaVersion> + <eugenePluginVersion>2.7.1-SNAPSHOT</eugenePluginVersion> + <topiaVersion>3.0-alpha-3-SNAPSHOT</topiaVersion> <nuitonUtilsVersion>2.7</nuitonUtilsVersion> <nuitonI18nVersion>2.5.1</nuitonI18nVersion> <nuitonWebVersion>1.14</nuitonWebVersion>