branch feature/refactor_reference updated (b0ef319 -> 30aadab)
This is an automated email from the git hooks/post-receive script. New change to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git discards b0ef319 Début d'implantation d'un cache de référentiels (à finir) discards b393c43 Ajout d'un service pour récupérer des referecne set (à finir) discards 17cdae8 Ajout de définition de requètes de données discards 85b03ab Ajout d'une méthode toString pour faire un rendu simple d'un dto discards 1765ec2 Ajout de méthodes pour faire un rendu i18n plus facile adds 51f9e80 fix test sur l'id du noeud de tripseine adds af43768 fix icons dans le menu navigation + typo adds 494870b Certaines Actions sur une base ouverte sont disponibles alors que la base n'est pas ouverte (fixes #7702) adds f0ef937 Cacher la barre d'actions une fois l'action d'ouverture de base lancée (fixes #7703) adds e745b1d réajout des menus de navigation vers les marées, activités et sets adds ab3f0e9 suppression code mort + fixmes adds 21e9d0b Ajout de traductions (refs 7708) adds adcbd54 gestion des erreurs dans l'ecran de test de connexion au serveur distant (refs #7708) adds c518d5a afficher les erreurs de connexion au source de données (refs 7708) adds ae7075f ajouter le sablier pendant le test de la connexion (refs 7708) adds 3aadb10 conflit entre le fitrage des ressources par le pom et les varibles de templates ftl (refs 7708) adds 08b7d39 Merge branch 'feature/7708' into develop adds 91ab4c8 ajouter les template dans les ressources (refs #7715) adds 00828bf revue de l'algo de recherche d'une RTP : on essaye d'abord avec le sex fourni puis ensuite avec le sex indéterminé si pas trouvé cf https://forge.codelutin.com/projects/observe/repository/revisions/9b99607144... fixes #7719 adds 7fb9846 afficher les droits sur les sources de données (refs #7717) adds fd1ca99 Merge branch 'feature/7717' into develop adds 567280d ajout du test pour l'algo de recherche de rtp (refs #7719) adds d568cc8 fix test adds 3a20d4d fixes #7719 ajout du TU adds 40c0036 déplacement des classes encore utilisées hors du package business adds 5cc123b suppression du code mort adds c74fc00 déplacement du package de gps adds 7183b3f fix dependencies adds 93de948 suppression du code mort adds 5100c7a suppression du code mort + refactoring adds 2bbf609 désélectionner les ligne avant l'insertion (refs #7615) adds 3827e37 Merge branch 'feature/7615-2' into develop adds 1857d71 desactiver le menu contextuel 'cloturer' sur une marée quand une route ou une activité sont ouvertes (refs #7621) new 220789a Ajout de méthodes pour faire un rendu i18n plus facile new 2f01ded Ajout d'une méthode toString pour faire un rendu simple d'un dto new ab4af87 Ajout de définition de requètes de données new fd559ab Ajout d'un service pour récupérer des referecne set (à finir) new aee09c8 Début d'implantation d'un cache de référentiels (à finir) new 64ba103 introduction nouvelle api de references plus simple et mise en place new 65fcee2 remove dead code new 30aadab Ajout d'une action pour recharger la configuration du serveur This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (b0ef319) \ N -- N -- N refs/heads/feature/refactor_reference (30aadab) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 8 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 30aadabb42bcdce8b7eea62cafd9acc8ac415779 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Nov 14 02:21:21 2015 +0100 Ajout d'une action pour recharger la configuration du serveur commit 65fcee2f8a94c1981cf00037d41a07a16dbed1ad Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Nov 14 02:12:49 2015 +0100 remove dead code commit 64ba10386d93f9845c93d3d0458b5d4de165c2e2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Nov 14 02:12:31 2015 +0100 introduction nouvelle api de references plus simple et mise en place commit aee09c8fadf10b42869c5974796d46ba7e0d63a4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:45:18 2015 +0100 Début d'implantation d'un cache de référentiels (à finir) commit fd559ab947c47f4db0f468f7bcc7d738b797cce3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:44:07 2015 +0100 Ajout d'un service pour récupérer des referecne set (à finir) commit ab4af876b2e83b7ac6a1e5ffad2b3d0fa97982ed Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:43:36 2015 +0100 Ajout de définition de requètes de données commit 2f01dedd7af13a4bec591baa5d54c642a98e005f Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:42:33 2015 +0100 Ajout d'une méthode toString pour faire un rendu simple d'un dto commit 220789ab5da785b64163cb1a74cc2877e4c502e9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:41:33 2015 +0100 Ajout de méthodes pour faire un rendu i18n plus facile Summary of changes: observe-application-swing/pom.xml | 19 +- .../fr/ird/observe/ObserveOpenDataManager.java | 2 +- .../main/java/fr/ird/observe/ObserveRunner.java | 12 +- .../observe/ObserveSwingApplicationContext.java | 6 +- .../fr/ird/observe/ObserveSwingBinderService.java | 22 - .../java/fr/ird/observe/ObserveTextGenerator.java | 7 + .../observe/business/LonglinePositionAware.java | 56 --- .../fr/ird/observe/business/SendMessageAble.java | 34 -- .../observe/business/db/constants/DataPolicy.java | 72 --- .../business/db/constants/DataSourceState.java | 40 -- .../business/db/model/DataSelectionModel.java | 495 --------------------- .../ObserveSwingApplicationConfig.java | 4 +- .../ObserveSwingApplicationConfigOption.java | 5 +- .../ird/observe/{business => }/db/DataContext.java | 22 +- .../fr/ird/observe/db/ObserveSwingDataSource.java | 14 + .../ird/observe/db/constantes/ConnexionStatus.java | 66 --- .../ird/observe/db/constants/ConnexionStatus.java | 0 .../{constantes => constants}/ConstantsI18n.java | 2 +- .../db/{constantes => constants}/CreationMode.java | 2 +- .../db/constants/DataContextType.java | 4 +- .../db/{constantes => constants}/DbMode.java | 2 +- .../java/fr/ird/observe/ui/DecoratorService.java | 4 +- .../main/java/fr/ird/observe/ui/ObserveMainUI.css | 49 +- .../main/java/fr/ird/observe/ui/ObserveMainUI.jaxx | 31 +- .../fr/ird/observe/ui/ObserveMainUIHandler.java | 2 +- .../observe/ui/actions/AbstractObserveAction.java | 32 ++ .../observe/ui/actions/ChangeStorageAction.java | 2 +- .../ird/observe/ui/actions/CloseStorageAction.java | 3 +- .../ui/actions/ImportStorageFromFileAction.java | 4 +- .../observe/ui/actions/ReloadStorageAction.java | 3 +- .../ui/actions/SaveStorageToFileAction.java | 3 +- .../ui/actions/shared/AbstractUIAction.java | 3 +- .../java/fr/ird/observe/ui/admin/AdminStep.java | 2 +- .../fr/ird/observe/ui/admin/AdminTabUIHandler.java | 3 +- .../java/fr/ird/observe/ui/admin/AdminUIModel.java | 6 +- .../observe/ui/admin/config/ConfigUIHandler.java | 30 +- .../observe/ui/admin/gps/GPSAbleTableModel.java | 2 +- .../ui/admin/gps/GPSActivityTableModel.java | 2 +- .../observe/ui/admin/gps/ImportGPSUIHandler.java | 6 +- .../ui/admin/validate/ValidateUIHandler.java | 11 - .../java/fr/ird/observe/ui/content/ContentUI.jaxx | 2 +- .../ird/observe/ui/content/ContentUIHandler.java | 4 +- .../ird/observe/ui/content/ObserveContentUI.java | 2 +- .../content/impl/longline/BranchlineUIHandler.java | 4 +- .../LonglineDetailCompositionUIHandler.java | 8 +- .../LonglineGlobalCompositionUIHandler.java | 4 +- .../impl/longline/SetLonglineUIHandler.java | 4 +- .../ActivitySeineObservedSystemUIHandler.java | 4 +- ...ngObjectTransmittingBuoyOperationUIHandler.java | 4 +- .../impl/seine/FloatingObjectUIHandler.java | 4 +- .../ui/content/impl/seine/SetSeineUIHandler.java | 6 +- .../ui/content/list/ContentListUIHandler.java | 2 +- .../impl/longline/ActivityLonglinesUIHandler.java | 4 +- .../list/impl/longline/TripLonglinesUIHandler.java | 4 +- .../list/impl/seine/ActivitySeinesUIHandler.java | 4 +- .../content/list/impl/seine/RoutesUIHandler.java | 4 +- .../list/impl/seine/TripSeinesUIHandler.java | 4 +- .../ui/content/open/ContentOpenableUIHandler.java | 2 +- .../impl/longline/ActivityLonglineUIHandler.java | 4 +- .../open/impl/longline/TripLonglineUIHandler.java | 4 +- .../open/impl/seine/ActivitySeineUIHandler.java | 4 +- .../ui/content/open/impl/seine/RouteUIHandler.java | 4 +- .../open/impl/seine/TripSeineUIHandler.java | 4 +- .../ui/content/ref/ContentReferenceUIHandler.java | 2 +- .../ui/content/ref/ReferenceHomeUIHandler.java | 2 +- .../ui/content/table/ContentTableUIHandler.java | 4 +- .../impl/longline/BaitsCompositionUIHandler.java | 2 +- .../longline/BranchlinesCompositionUIHandler.java | 2 +- .../impl/longline/CatchLonglineUIHandler.java | 2 +- .../table/impl/longline/EncounterUIHandler.java | 2 +- .../longline/FloatlinesCompositionUIHandler.java | 2 +- .../longline/GearUseFeaturesLonglineUIHandler.java | 4 +- .../impl/longline/HooksCompositionUIHandler.java | 2 +- .../table/impl/longline/SensorUsedUIHandler.java | 2 +- .../content/table/impl/longline/TdrUIHandler.java | 2 +- .../impl/seine/GearUseFeaturesSeineUIHandler.java | 4 +- .../table/impl/seine/NonTargetCatchUIHandler.java | 2 +- .../table/impl/seine/NonTargetSampleUIHandler.java | 4 +- .../impl/seine/ObjectObservedSpeciesUIHandler.java | 2 +- .../impl/seine/ObjectSchoolEstimateUIHandler.java | 2 +- .../table/impl/seine/SchoolEstimateUIHandler.java | 2 +- .../table/impl/seine/TargetCatchUIHandler.java | 2 +- .../impl/seine/TargetDiscardCatchUIHandler.java | 2 +- .../table/impl/seine/TargetSampleUIHandler.java | 4 +- .../ird/observe/ui/storage/ObstunaAdminAction.java | 2 +- .../ird/observe/ui/storage/RemoteUILauncher.java | 2 +- .../ui/storage/StorageBackupUILauncher.java | 3 +- .../java/fr/ird/observe/ui/storage/StorageUI.css | 4 + .../java/fr/ird/observe/ui/storage/StorageUI.jaxx | 2 +- .../ird/observe/ui/storage/StorageUIHandler.java | 8 +- .../ird/observe/ui/storage/StorageUILauncher.java | 2 +- .../fr/ird/observe/ui/storage/StorageUIModel.java | 191 +++++--- .../observe/ui/storage/tabs/ChooseDbModeUI.jaxx | 4 +- .../ird/observe/ui/storage/tabs/ConfigDataUI.jaxx | 2 +- .../ui/storage/tabs/ConfigReferentielUI.jaxx | 2 +- .../fr/ird/observe/ui/storage/tabs/ConfigUI.jaxx | 4 +- .../ui/storage/tabs/StorageTabUIHandler.java | 34 +- .../ui/tree/AbstractObserveTreeCellRenderer.java | 2 +- .../ird/observe/ui/tree/ActivityLonglineNode.java | 6 - .../fr/ird/observe/ui/tree/DtoNodeSupport.java | 1 - .../fr/ird/observe/ui/tree/ObserveTreeHelper.java | 2 +- .../java/fr/ird/observe/ui/tree/SetSeineNode.java | 6 - .../loadors/ActivityLonglineNodeChildLoador.java | 1 - .../loadors/ProgramLonglineNodeChildLoador.java | 4 +- .../ui/tree/loadors/RoutesNodeChildLoador.java | 6 - .../converter => ui/util}/FloatConverter.java | 2 +- .../ui/util/table/EditableTableModelSupport.java | 5 +- .../ird/observe/validation/ValidationContext.java | 2 +- .../validation/ValidationMessageDetector.java | 2 +- .../dto/ActivitySimpleSpeedDtoValidator.java | 4 +- .../validator/dto/ActivitySpeedDtoValidator.java | 4 +- .../main/resources/ftl/connexionTestResult_fr.ftl | 5 +- .../ftl/dataSourceConnectionReport_fr.ftl | 87 +--- .../src/main/resources/ftl/dataSourcePolicy_fr.ftl | 32 ++ .../ftl/storageModelDataSourceConfiguration_fr.ftl | 71 ++- .../observe-application-swing_en_GB.properties | 5 + .../observe-application-swing_es_ES.properties | 5 + .../observe-application-swing_fr_FR.properties | 13 +- .../web/ObserveWebApplicationContext.java | 16 + .../web/ObserveWebApplicationListener.java | 2 + .../application/web/ObserveWebMotionRender.java | 8 - .../web/controller/v1/ConfigurationController.java | 23 + .../controller/v1/ObserveWebErrorController.java | 31 +- .../v1/ReferenceSetServiceController.java | 10 +- ...ava => ObserveReferenceSetRequestInjector.java} | 37 +- .../web/request/ObserveWebRequestContext.java | 6 +- .../ObserveWebSecurityApplicationContext.java | 6 + .../referentiel/LengthWeightParameters.java | 137 +++--- .../observe/services/http/ObserveHttpError.java | 46 ++ .../security/AdminApiKeyNotFoundException.java | 2 +- .../AuthenticationTokenNotFoundException.java | 2 +- .../BadObserveWebUserPasswordException.java | 2 +- .../security/InvalidAdminKeyApiException.java | 2 +- .../InvalidAuthenticationTokenException.java | 2 +- .../ObserveWebSecurityExceptionSupport.java | 2 +- .../SecurityRequestContextNotFoundException.java | 2 +- .../security/UnknownObserveWebUserException.java | 2 +- .../UnknownObserveWebUserForDatabaseException.java | 2 +- .../security/UserLoginNotFoundException.java | 2 +- .../security/UserPasswordNotFoundException.java | 2 +- .../services/service/ReferenceSetDefinition.java | 70 --- .../service/ReferenceSetPropertyDefinition.java | 67 --- .../service/ReferenceSetRequestDefinition.java | 53 --- .../service/ReferenceSetRequestDefinitions.java | 39 -- .../service/ReferenceSetRequestKeyDefinition.java | 86 ---- .../services/service/ReferenceSetService.java | 8 +- .../service/ReferentialReferenceSetResult.java | 55 --- observe-services-model/pom.xml | 6 + .../java/fr/ird/observe/services/dto/IdDtos.java | 18 + .../observe/services/dto/gson/ClassAdapter.java | 39 +- .../services/dto/gson/ObserveDtoGsonSupplier.java | 2 + .../dto/gson/ObserveReferenceSetAdapter.java | 122 +++++ .../services/dto/reference/ObserveReference.java | 61 +++ .../dto/reference/ObserveReferenceSet.java | 69 +++ .../dto/reference/ObserveReferenceSetRequest.java | 20 +- .../dto/reference/ObserveReferenceSetResult.java | 64 +++ .../dto/reference/ObserveReferentialReference.java | 79 ++++ .../definition/ObserveReferenceSetDefinition.java | 76 ++++ .../definition/ObserveReferenceSetDefinitions.java | 41 +- .../ObserveReferenceSetRequestDefinition.java | 53 +++ .../ObserveReferenceSetRequestDefinitions.java | 50 +++ .../ObserveReferenceSetRequestKeyDefinition.java | 74 +++ .../fr/ird/observe/util}/gps/CoordinateHelper.java | 2 +- .../java/fr/ird/observe/util}/gps/GPSAble.java | 2 +- .../fr/ird/observe/util}/gps/GPSFileReader.java | 2 +- .../java/fr/ird/observe/util}/gps/GPSPoint.java | 2 +- .../fr/ird/observe/util}/gps/GPSPointImpl.java | 2 +- .../fr/ird/observe/util}/gps/GPSPointInterval.java | 2 +- .../observe/util}/gps/GPSPointIntervalImpl.java | 2 +- .../java/fr/ird/observe/util}/gps/GPSRoute.java | 2 +- .../fr/ird/observe/util}/gps/GPSRouteImpl.java | 2 +- .../java/fr/ird/observe/util}/gps/GPSService.java | 2 +- .../java/fr/ird/observe/util}/gps/GpsPoints.java | 2 +- .../observe/services/ObserveHttpErrorAdapter.java | 37 ++ .../services/ObserveServiceFactoryRest.java | 9 +- .../services/ObserveServiceRestErrorException.java | 16 + .../ObserveServiceRestNotAvailableException.java | 1 + .../services/http/ObserveResponseBuilder.java | 35 +- .../service/ReferenceSetServiceRestTest.java | 96 ++++ .../EntityToReferentialReferenceDtoBuilder.java | 109 ----- .../dto/reference/ObserveReferenceSetBuilder.java | 250 +++++++++++ .../services/service/DataSourceServiceTopia.java | 7 +- .../services/service/ReferenceSetServiceTopia.java | 124 +++--- .../referentiel/LengthWeightParemetersTest.java | 244 ++++++++++ .../service/ReferenceSetServiceTopiaTest.java | 54 +++ 185 files changed, 2365 insertions(+), 1886 deletions(-) delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/business/LonglinePositionAware.java delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/business/SendMessageAble.java delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/business/db/constants/DataPolicy.java delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/business/db/constants/DataSourceState.java delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/business/db/model/DataSelectionModel.java rename observe-application-swing/src/main/java/fr/ird/observe/{business => }/db/DataContext.java (97%) delete mode 100644 observe-application-swing/src/main/java/fr/ird/observe/db/constantes/ConnexionStatus.java copy {observe-business => observe-application-swing}/src/main/java/fr/ird/observe/db/constants/ConnexionStatus.java (100%) rename observe-application-swing/src/main/java/fr/ird/observe/db/{constantes => constants}/ConstantsI18n.java (93%) rename observe-application-swing/src/main/java/fr/ird/observe/db/{constantes => constants}/CreationMode.java (98%) rename observe-application-swing/src/main/java/fr/ird/observe/{business => }/db/constants/DataContextType.java (99%) rename observe-application-swing/src/main/java/fr/ird/observe/db/{constantes => constants}/DbMode.java (98%) create mode 100644 observe-application-swing/src/main/java/fr/ird/observe/ui/actions/AbstractObserveAction.java rename observe-application-swing/src/main/java/fr/ird/observe/{business/converter => ui/util}/FloatConverter.java (98%) create mode 100644 observe-application-swing/src/main/resources/ftl/dataSourcePolicy_fr.ftl copy observe-application-web/src/main/java/fr/ird/observe/application/web/injector/{ObserveClassInjector.java => ObserveReferenceSetRequestInjector.java} (51%) create mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/http/ObserveHttpError.java rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/AdminApiKeyNotFoundException.java (95%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/AuthenticationTokenNotFoundException.java (95%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/BadObserveWebUserPasswordException.java (96%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/InvalidAdminKeyApiException.java (96%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/InvalidAuthenticationTokenException.java (96%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/ObserveWebSecurityExceptionSupport.java (96%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/SecurityRequestContextNotFoundException.java (95%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/UnknownObserveWebUserException.java (96%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/UnknownObserveWebUserForDatabaseException.java (96%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/UserLoginNotFoundException.java (95%) rename {observe-application-web/src/main/java/fr/ird/observe/application/web => observe-services-api/src/main/java/fr/ird/observe/services}/security/UserPasswordNotFoundException.java (95%) delete mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java delete mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java delete mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java delete mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java delete mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java delete mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveReferenceSetAdapter.java create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReference.java create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSet.java rename observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java => observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetRequest.java (57%) create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetResult.java create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferentialReference.java create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetDefinition.java rename observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java => observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetDefinitions.java (90%) create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestDefinition.java create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestDefinitions.java create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestKeyDefinition.java rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/CoordinateHelper.java (97%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSAble.java (97%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSFileReader.java (99%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSPoint.java (98%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSPointImpl.java (98%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSPointInterval.java (99%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSPointIntervalImpl.java (98%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSRoute.java (99%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSRouteImpl.java (99%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GPSService.java (98%) rename {observe-application-swing/src/main/java/fr/ird/observe/business => observe-services-model/src/main/java/fr/ird/observe/util}/gps/GpsPoints.java (99%) create mode 100644 observe-services-rest/src/main/java/fr/ird/observe/services/ObserveHttpErrorAdapter.java create mode 100644 observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceRestErrorException.java create mode 100644 observe-services-rest/src/test/java/fr/ird/observe/services/service/ReferenceSetServiceRestTest.java create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetBuilder.java create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/entities/referentiel/LengthWeightParemetersTest.java create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferenceSetServiceTopiaTest.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git commit 220789ab5da785b64163cb1a74cc2877e4c502e9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:41:33 2015 +0100 Ajout de méthodes pour faire un rendu i18n plus facile --- .../entities/constants/ReferenceLocale.java | 31 ++----------------- .../referentiel/I18nReferenceEntities.java | 35 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/constants/ReferenceLocale.java b/observe-entities/src/main/java/fr/ird/observe/entities/constants/ReferenceLocale.java index 227588c..ebb4ebd 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/constants/ReferenceLocale.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/constants/ReferenceLocale.java @@ -21,6 +21,7 @@ */ package fr.ird.observe.entities.constants; +import fr.ird.observe.entities.referentiel.I18nReferenceEntities; import fr.ird.observe.entities.referentiel.I18nReferenceEntity; import java.util.Locale; @@ -126,35 +127,7 @@ public enum ReferenceLocale { public <E extends I18nReferenceEntity> String getLabel(E i18nEntity) { - String result = null; - - switch (ordinal() + 1) { - case 1: - result = i18nEntity.getLabel1(); - break; - case 2: - result = i18nEntity.getLabel2(); - break; - case 3: - result = i18nEntity.getLabel3(); - break; - case 4: - result = i18nEntity.getLabel4(); - break; - case 5: - result = i18nEntity.getLabel5(); - break; - case 6: - result = i18nEntity.getLabel6(); - break; - case 7: - result = i18nEntity.getLabel7(); - break; - case 8: - result = i18nEntity.getLabel8(); - break; - } - + String result = I18nReferenceEntities.decorate(ordinal(), i18nEntity); return result; } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/I18nReferenceEntities.java b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/I18nReferenceEntities.java index e82d81f..8dcd892 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/I18nReferenceEntities.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/I18nReferenceEntities.java @@ -42,4 +42,39 @@ public class I18nReferenceEntities { } + public static <E extends I18nReferenceEntity> String decorate(int referenceLocaleOrdinal, E i18nEntity) { + + String result = null; + + switch (referenceLocaleOrdinal + 1) { + case 1: + result = i18nEntity.getLabel1(); + break; + case 2: + result = i18nEntity.getLabel2(); + break; + case 3: + result = i18nEntity.getLabel3(); + break; + case 4: + result = i18nEntity.getLabel4(); + break; + case 5: + result = i18nEntity.getLabel5(); + break; + case 6: + result = i18nEntity.getLabel6(); + break; + case 7: + result = i18nEntity.getLabel7(); + break; + case 8: + result = i18nEntity.getLabel8(); + break; + } + + return result; + + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git commit 2f01dedd7af13a4bec591baa5d54c642a98e005f Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:42:33 2015 +0100 Ajout d'une méthode toString pour faire un rendu simple d'un dto --- .../entities/referentiel/ReferenceEntities.java | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/ReferenceEntities.java b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/ReferenceEntities.java index 31d51c3..69f84aa 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/ReferenceEntities.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/ReferenceEntities.java @@ -23,6 +23,7 @@ package fr.ird.observe.entities.referentiel; */ import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableMap; import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.constants.ReferenceStatus; @@ -32,6 +33,7 @@ import org.nuiton.topia.persistence.TopiaEntity; import java.util.Iterator; import java.util.List; +import java.util.Map; /** * Helper class around {@link ReferenceEntity}. @@ -89,6 +91,7 @@ public class ReferenceEntities { } public static final Predicate<? extends ReferenceEntity> IS_ACTIF_PREDICATE = new Predicate<ReferenceEntity>() { + @Override public boolean apply(ReferenceEntity input) { return ReferenceStatus.disabled != input.getStatus(); @@ -123,4 +126,45 @@ public class ReferenceEntities { <E extends TopiaEntity> void walk(Class<E> beanClass) throws Exception; } + public static <E extends ReferenceEntity> String toString(int referenceLocaleOrdinal, E entity) { + + String result = null; + if (entity != null) { + for (Map.Entry<Class<?>, ReferenceEntityToString> entry : TO_STRING_CACHE.entrySet()) { + + if (entry.getKey().isAssignableFrom(entity.getClass())) { + + ReferenceEntityToString<E> value = entry.getValue(); + result = value.toString(referenceLocaleOrdinal, entity); + break; + } + } + if (result == null && entity instanceof I18nReferenceEntity) { + + + result = I18nReferenceEntities.decorate(referenceLocaleOrdinal, (I18nReferenceEntity) entity); + } + } + + return result; + + } + + private static final ImmutableMap<Class<?>, ReferenceEntityToString> TO_STRING_CACHE = ImmutableMap + .<Class<?>, ReferenceEntityToString>builder() + .put(Species.class, new ReferenceEntityToString<Species>() { + + @Override + public String toString(int referenceLocaleOrdinal, Species entity) { + return entity.getScientificLabel(); + } + }) + .build(); + + + interface ReferenceEntityToString<E extends ReferenceEntity> { + + String toString(int referenceLocaleOrdinal, E entity); + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git commit ab4af876b2e83b7ac6a1e5ffad2b3d0fa97982ed Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:43:36 2015 +0100 Ajout de définition de requètes de données --- .../services/service/ReferenceSetDefinition.java | 70 ++++++ .../services/service/ReferenceSetDefinitions.java | 253 +++++++++++++++++++++ .../service/ReferenceSetPropertyDefinition.java | 67 ++++++ .../services/service/ReferenceSetRequest.java | 31 +++ .../service/ReferenceSetRequestDefinition.java | 53 +++++ .../service/ReferenceSetRequestDefinitions.java | 39 ++++ .../service/ReferenceSetRequestKeyDefinition.java | 86 +++++++ .../service/ReferentialReferenceSetResult.java | 55 +++++ 8 files changed, 654 insertions(+) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java new file mode 100644 index 0000000..edac622 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java @@ -0,0 +1,70 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ReferenceSetDto; + +import java.io.Serializable; + +/** + * Pour définir ce que l'on doit retrouver dans un ensemble de références d'un même type. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetDefinition<D extends IdDto> implements Serializable{ + + private static final long serialVersionUID = 1L; + + /** + * Le type du dto qui doit être transformé en références. + * {@link ReferenceSetDto#getType()}. + */ + private final Class<D> type; + + private final ImmutableSet<ReferenceSetPropertyDefinition> properties; + + public ReferenceSetDefinition(Class<D> type, ImmutableSet<ReferenceSetPropertyDefinition> properties) { + this.type = type; + this.properties = properties; + } + + public Class<D> getType() { + return type; + } + + public ImmutableSet<ReferenceSetPropertyDefinition> getProperties() { + return properties; + } + + public static <D extends IdDto> Builder<D> builder(Class<D> type) { + return new Builder<>(type); + } + + public static class Builder<D extends IdDto> { + + private final Class<D> type; + + private final ImmutableSet.Builder<ReferenceSetPropertyDefinition> propertiesBuilder; + + public Builder(Class<D> type) { + this.type = type; + this.propertiesBuilder = ImmutableSet.builder(); + } + + public <O> Builder<D> addProperty(Class<O> type, String name) { + return addProperty(ReferenceSetPropertyDefinition.of(type, name)); + } + + public Builder<D> addProperty(ReferenceSetPropertyDefinition propertyDefinition) { + propertiesBuilder.add(propertyDefinition); + return this; + } + + public ReferenceSetDefinition<D> build() { + return new ReferenceSetDefinition<>(type, propertiesBuilder.build()); + } + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java new file mode 100644 index 0000000..be4abc9 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java @@ -0,0 +1,253 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.dto.constants.GearType; +import fr.ird.observe.services.dto.referential.CountryDto; +import fr.ird.observe.services.dto.referential.FpaZoneDto; +import fr.ird.observe.services.dto.referential.GearCaracteristicDto; +import fr.ird.observe.services.dto.referential.GearCaracteristicTypeDto; +import fr.ird.observe.services.dto.referential.GearDto; +import fr.ird.observe.services.dto.referential.HarbourDto; +import fr.ird.observe.services.dto.referential.I18nReferentialDto; +import fr.ird.observe.services.dto.referential.LengthWeightParameterDto; +import fr.ird.observe.services.dto.referential.OceanDto; +import fr.ird.observe.services.dto.referential.OrganismDto; +import fr.ird.observe.services.dto.referential.PersonDto; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.SexDto; +import fr.ird.observe.services.dto.referential.SpeciesDto; +import fr.ird.observe.services.dto.referential.SpeciesGroupDto; +import fr.ird.observe.services.dto.referential.SpeciesListDto; +import fr.ird.observe.services.dto.referential.VesselDto; +import fr.ird.observe.services.dto.referential.VesselSizeCategoryDto; +import fr.ird.observe.services.dto.referential.VesselTypeDto; +import fr.ird.observe.services.dto.referential.longline.BaitHaulingStatusDto; +import fr.ird.observe.services.dto.referential.longline.BaitSettingStatusDto; +import fr.ird.observe.services.dto.referential.longline.BaitTypeDto; +import fr.ird.observe.services.dto.referential.longline.CatchFateLonglineDto; +import fr.ird.observe.services.dto.referential.longline.EncounterTypeDto; +import fr.ird.observe.services.dto.referential.longline.HealthnessDto; +import fr.ird.observe.services.dto.referential.longline.HookPositionDto; +import fr.ird.observe.services.dto.referential.longline.HookSizeDto; +import fr.ird.observe.services.dto.referential.longline.HookTypeDto; +import fr.ird.observe.services.dto.referential.longline.ItemHorizontalPositionDto; +import fr.ird.observe.services.dto.referential.longline.ItemVerticalPositionDto; +import fr.ird.observe.services.dto.referential.longline.LightsticksColorDto; +import fr.ird.observe.services.dto.referential.longline.LightsticksTypeDto; +import fr.ird.observe.services.dto.referential.longline.LineTypeDto; +import fr.ird.observe.services.dto.referential.longline.MaturityStatusDto; +import fr.ird.observe.services.dto.referential.longline.MitigationTypeDto; +import fr.ird.observe.services.dto.referential.longline.SensorBrandDto; +import fr.ird.observe.services.dto.referential.longline.SensorDataFormatDto; +import fr.ird.observe.services.dto.referential.longline.SensorTypeDto; +import fr.ird.observe.services.dto.referential.longline.SettingShapeDto; +import fr.ird.observe.services.dto.referential.longline.SizeMeasureTypeDto; +import fr.ird.observe.services.dto.referential.longline.StomacFullnessDto; +import fr.ird.observe.services.dto.referential.longline.TripTypeDto; +import fr.ird.observe.services.dto.referential.longline.VesselActivityLonglineDto; +import fr.ird.observe.services.dto.referential.longline.WeightMeasureTypeDto; +import fr.ird.observe.services.dto.referential.seine.DetectionModeDto; +import fr.ird.observe.services.dto.referential.seine.ObjectFateDto; +import fr.ird.observe.services.dto.referential.seine.ObjectOperationDto; +import fr.ird.observe.services.dto.referential.seine.ObjectTypeDto; +import fr.ird.observe.services.dto.referential.seine.ObservedSystemDto; +import fr.ird.observe.services.dto.referential.seine.ReasonForDiscardDto; +import fr.ird.observe.services.dto.referential.seine.ReasonForNoFishingDto; +import fr.ird.observe.services.dto.referential.seine.ReasonForNullSetDto; +import fr.ird.observe.services.dto.referential.seine.SpeciesFateDto; +import fr.ird.observe.services.dto.referential.seine.SpeciesStatusDto; +import fr.ird.observe.services.dto.referential.seine.SurroundingActivityDto; +import fr.ird.observe.services.dto.referential.seine.TransmittingBuoyOperationDto; +import fr.ird.observe.services.dto.referential.seine.TransmittingBuoyTypeDto; +import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; +import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.referential.seine.WindDto; + +/** + * Contient les définitions de tous les ensembles de référence utilisables dans les services. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum ReferenceSetDefinitions { + + COUNTRY(newDefaultDefinitionBuilder(CountryDto.class)), + + FPA_ZONE(newDefaultDefinitionBuilder(FpaZoneDto.class)), + + GEAR_CARACTERISTIC(newDefinitionBuilder(GearCaracteristicDto.class) + .addProperty(String.class, GearCaracteristicDto.PROPERTY_GEAR_CARACTERISTIC_TYPE)), + + GEAR_CARACTERISTIC_TYPE(newDefaultDefinitionBuilder(GearCaracteristicTypeDto.class)), + + GEAR(newDefaultDefinitionBuilder(GearDto.class)), + + HARBOUR(newDefinitionBuilder(HarbourDto.class) + .addProperty(String.class, HarbourDto.PROPERTY_CODE) + .addProperty(String.class, HarbourDto.PROPERTY_NAME) + .addProperty(String.class, HarbourDto.PROPERTY_LOCODE)), + + LENGTH_WEIGHT_PARAMETER(newDefinitionBuilder(LengthWeightParameterDto.class) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_CODE) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_OCEAN) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_SPECIES) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_LENGTH_WEIGHT_FORMULA) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_WEIGHT_LENGTH_FORMULA)), + + OCEAN(newDefaultDefinitionBuilder(OceanDto.class)), + + ORGANISM(newDefaultDefinitionBuilder(OrganismDto.class)), + + PERSON(newDefinitionBuilder(PersonDto.class) + .addProperty(String.class, PersonDto.PROPERTY_FIRST_NAME) + .addProperty(String.class, PersonDto.PROPERTY_LAST_NAME) + .addProperty(String.class, PersonDto.PROPERTY_CAPTAIN) + .addProperty(String.class, PersonDto.PROPERTY_DATA_ENTRY_OPERATOR) + .addProperty(String.class, PersonDto.PROPERTY_OBSERVER)), + + PROGRAM(newDefinitionBuilder(ProgramDto.class) + .addProperty(GearType.class, ProgramDto.PROPERTY_GEAR_TYPE) + .addProperty(String.class, ProgramDto.PROPERTY_GEAR_TYPE_PREFIX)), + + SEX(newDefaultDefinitionBuilder(SexDto.class)), + + SPECIES(newDefinitionBuilder(SpeciesDto.class) + .addProperty(String.class, SpeciesDto.PROPERTY_SCIENTIFIC_LABEL) + .addProperty(String.class, SpeciesDto.PROPERTY_HOME_ID) + .addProperty(String.class, SpeciesDto.PROPERTY_LENGTH_MEASURE_TYPE)), + + SPECIES_GROUP(newDefaultDefinitionBuilder(SpeciesGroupDto.class)), + + SPECIES_LIST(newDefaultDefinitionBuilder(SpeciesListDto.class)), + + VESSEL_SIZE_CATEGORY(newDefinitionBuilder(VesselSizeCategoryDto.class) + .addProperty(String.class, VesselSizeCategoryDto.PROPERTY_GAUGE_LABEL) + .addProperty(String.class, VesselSizeCategoryDto.PROPERTY_CAPACITY_LABEL)), + + VESSEL(newDefaultDefinitionBuilder(VesselDto.class)), + + VESSEL_TYPE(newDefaultDefinitionBuilder(VesselTypeDto.class)), + + // -------------------------------------------------------------------------------------------------------------- // + // -- REFERENTIAL LONGLINE -------------------------------------------------------------------------------------- // + // -------------------------------------------------------------------------------------------------------------- // + + BAIT_HAULING_STATUS(newDefaultDefinitionBuilder(BaitHaulingStatusDto.class)), + + BAIT_SETTING_STATUS(newDefaultDefinitionBuilder(BaitSettingStatusDto.class)), + + BAITTYPE(newDefaultDefinitionBuilder(BaitTypeDto.class)), + + CATCH_FATE_LONGLINE(newDefaultDefinitionBuilder(CatchFateLonglineDto.class)), + + ENCOUNTER_TYPE(newDefaultDefinitionBuilder(EncounterTypeDto.class)), + + HEALTHNESS(newDefaultDefinitionBuilder(HealthnessDto.class)), + + HOOK_POSITION(newDefaultDefinitionBuilder(HookPositionDto.class)), + + HOOK_SIZE(newDefaultDefinitionBuilder(HookSizeDto.class)), + + HOOK_TYPE(newDefaultDefinitionBuilder(HookTypeDto.class)), + + ITEM_HORIZONTAL_POSITION(newDefaultDefinitionBuilder(ItemHorizontalPositionDto.class)), + + ITEM_VERTICAL_POSITION(newDefaultDefinitionBuilder(ItemVerticalPositionDto.class)), + + LIGHTSTICKS_COLOR(newDefaultDefinitionBuilder(LightsticksColorDto.class)), + + LIGHTSTICKS_TYPE(newDefaultDefinitionBuilder(LightsticksTypeDto.class)), + + LINE_TYPE(newDefaultDefinitionBuilder(LineTypeDto.class)), + + MATURITY_STATUS(newDefaultDefinitionBuilder(MaturityStatusDto.class)), + + MITIGATION_TYPE(newDefaultDefinitionBuilder(MitigationTypeDto.class)), + + SENSOR_BRAND(newDefinitionBuilder(SensorBrandDto.class) + .addProperty(String.class, SensorBrandDto.PROPERTY_BRAND_NAME)), + + SENSOR_DATA_FORMAT(newDefaultDefinitionBuilder(SensorDataFormatDto.class)), + + SENSOR_TYPE(newDefaultDefinitionBuilder(SensorTypeDto.class)), + + SETTING_SHAPE(newDefaultDefinitionBuilder(SettingShapeDto.class)), + + SIZE_MEASURE_TYPE(newDefaultDefinitionBuilder(SizeMeasureTypeDto.class)), + + STOMAC_FULLNESS(newDefaultDefinitionBuilder(StomacFullnessDto.class)), + + TRIP_TYPE(newDefaultDefinitionBuilder(TripTypeDto.class)), + + VESSEL_ACTIVITY_LONGLINE(newDefaultDefinitionBuilder(VesselActivityLonglineDto.class)), + + WEIGHT_MEASURE_TYPE(newDefaultDefinitionBuilder(WeightMeasureTypeDto.class)), + + // -------------------------------------------------------------------------------------------------------------- // + // -- REFERENTIAL SEINE ----------------------------------------------------------------------------------------- // + // -------------------------------------------------------------------------------------------------------------- // + + DETECTION_MODE(newDefaultDefinitionBuilder(DetectionModeDto.class)), + + OBJECT_FATE(newDefaultDefinitionBuilder(ObjectFateDto.class)), + + OBJECT_OPERATION(newDefaultDefinitionBuilder(ObjectOperationDto.class)), + + OBJECT_TYPE(newDefaultDefinitionBuilder(ObjectTypeDto.class)), + + OBSERVED_SYSTEM(newDefaultDefinitionBuilder(ObservedSystemDto.class)), + + REASON_FOR_DISCARD(newDefaultDefinitionBuilder(ReasonForDiscardDto.class)), + + REASON_FOR_NO_FISHING(newDefaultDefinitionBuilder(ReasonForNoFishingDto.class)), + + REASON_FOR_NULL_SET(newDefaultDefinitionBuilder(ReasonForNullSetDto.class)), + + SPECIES_FATE(newDefaultDefinitionBuilder(SpeciesFateDto.class)), + + SPECIES_STATUS(newDefaultDefinitionBuilder(SpeciesStatusDto.class)), + + SURROUNDING_ACTIVITY(newDefaultDefinitionBuilder(SurroundingActivityDto.class)), + + TRANSMITTING_BUOYO_PERATION(newDefaultDefinitionBuilder(TransmittingBuoyOperationDto.class)), + + TRANSMITTING_BUOY_TYPE(newDefaultDefinitionBuilder(TransmittingBuoyTypeDto.class)), + + VESSEL_ACTIVITY_SEINE(newDefaultDefinitionBuilder(VesselActivitySeineDto.class)), + + WEIGHT_CATEGORY(newDefinitionBuilder(WeightCategoryDto.class) + .addProperty(String.class, WeightCategoryDto.PROPERTY_LABEL) + .addProperty(String.class, WeightCategoryDto.PROPERTY_SPECIES)), + + WIND(newDefinitionBuilder(WindDto.class) + .addProperty(String.class, WindDto.PROPERTY_LABEL) + .addProperty(String.class, WindDto.PROPERTY_SPEED_RANGE) + ); + + private final ReferenceSetDefinition definition; + + ReferenceSetDefinitions(ReferenceSetDefinition.Builder definition) { + this.definition = definition.build(); + } + + public ReferenceSetDefinition<?> getDefinition() { + return definition; + } + + protected static <R extends ReferentialDto> ReferenceSetDefinition.Builder newDefinitionBuilder(Class<R> type) { + ReferenceSetDefinition.Builder<R> builder = ReferenceSetDefinition.builder(type); + return builder; + } + + protected static <R extends ReferentialDto> ReferenceSetDefinition.Builder newDefaultDefinitionBuilder(Class<R> type) { + ReferenceSetDefinition.Builder<R> builder = ReferenceSetDefinition + .builder(type) + .addProperty(String.class, ReferentialDto.PROPERTY_CODE); + if (I18nReferentialDto.class.isAssignableFrom(type)) { + builder.addProperty(String.class, I18nReferentialDto.PROPERTY_LABEL); + } + return builder; + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java new file mode 100644 index 0000000..79035bd --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java @@ -0,0 +1,67 @@ +package fr.ird.observe.services.service; + +import com.google.common.base.MoreObjects; + +import java.io.Serializable; +import java.util.Objects; + +/** + * Pour définir une propriété à remonter dans un ensemble de référence. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetPropertyDefinition<O> implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * Le type de la propriété. + */ + private final Class<O> type; + + /** + * Le nom de la propriété. + */ + private final String name; + + public static <O> ReferenceSetPropertyDefinition<O> of(Class<O> type, String name) { + return new ReferenceSetPropertyDefinition<>(type, name); + } + + public ReferenceSetPropertyDefinition(Class<O> type, String name) { + this.type = type; + this.name = name; + } + + public Class<O> getType() { + return type; + } + + public String getName() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ReferenceSetPropertyDefinition)) return false; + ReferenceSetPropertyDefinition<?> that = (ReferenceSetPropertyDefinition<?>) o; + return Objects.equals(type, that.type) && + Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(type, name); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("type", type) + .add("name", name) + .toString(); + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java new file mode 100644 index 0000000..4801de4 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java @@ -0,0 +1,31 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableMap; + +import java.util.Date; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetRequest { + + private final String requestName; + + private final ImmutableMap<String, Date> lastUpdateDates; + + public ReferenceSetRequest(String requestName, ImmutableMap<String, Date> lastUpdateDates) { + this.requestName = requestName; + this.lastUpdateDates = lastUpdateDates; + } + + public String getRequestName() { + return requestName; + } + + public ImmutableMap<String, Date> getLastUpdateDates() { + return lastUpdateDates; + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java new file mode 100644 index 0000000..2d49605 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java @@ -0,0 +1,53 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.IdDto; + +import java.io.Serializable; + +/** + * Pour définir une demande de récupération d'ensemble de références. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetRequestDefinition implements Serializable { + + private static final long serialVersionUID = 1L; + + private final ImmutableSet<ReferenceSetRequestKeyDefinition> keys; + + public ReferenceSetRequestDefinition(ImmutableSet<ReferenceSetRequestKeyDefinition> keys) { + this.keys = keys; + } + + public ImmutableSet<ReferenceSetRequestKeyDefinition> getKeys() { + return keys; + } + + public static <D extends IdDto> Builder<D> builder(Class<D> type) { + return new Builder<>(type); + } + + public static class Builder<D extends IdDto> { + + private final Class<D> parentType; + + private final ImmutableSet.Builder<ReferenceSetRequestKeyDefinition> keysBuilder; + + public Builder(Class<D> parentType) { + this.parentType = parentType; + this.keysBuilder = ImmutableSet.builder(); + } + + public Builder<D> addKey(String name, ReferenceSetDefinitions propertyDefinition) { + keysBuilder.add(new ReferenceSetRequestKeyDefinition<>(parentType, propertyDefinition.getDefinition(), name)); + return this; + } + + public ReferenceSetRequestDefinition build() { + return new ReferenceSetRequestDefinition(keysBuilder.build()); + } + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java new file mode 100644 index 0000000..eef1c48 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java @@ -0,0 +1,39 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.seine.TripSeineDto; + +/** + * Contient les définitions de tous les requêtes que les services proposent. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum ReferenceSetRequestDefinitions { + + TRIP_SEINE_FORM(newBuilder(TripSeineDto.class) + .addKey(TripSeineDto.PROPERTY_OBSERVER, ReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_CAPTAIN, ReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_DATA_ENTRY_OPERATOR, ReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_VESSEL, ReferenceSetDefinitions.VESSEL) + .addKey(TripSeineDto.PROPERTY_OCEAN, ReferenceSetDefinitions.OCEAN) + .addKey(TripSeineDto.PROPERTY_DEPARTURE_HARBOUR, ReferenceSetDefinitions.HARBOUR) + .addKey(TripSeineDto.PROPERTY_LANDING_HARBOUR, ReferenceSetDefinitions.HARBOUR) + .addKey(TripSeineDto.PROPERTY_PROGRAM, ReferenceSetDefinitions.PROGRAM)),; + + public final ReferenceSetRequestDefinition definition; + + ReferenceSetRequestDefinitions(ReferenceSetRequestDefinition.Builder definitionBuilder) { + this.definition = definitionBuilder.build(); + } + + public ReferenceSetRequestDefinition getDefinition() { + return definition; + } + + public static <D extends IdDto> ReferenceSetRequestDefinition.Builder<D> newBuilder(Class<D> parentType) { + return new ReferenceSetRequestDefinition.Builder<>(parentType); + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java new file mode 100644 index 0000000..8d72a4f --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java @@ -0,0 +1,86 @@ +package fr.ird.observe.services.service; + +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; + +import java.util.Objects; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetRequestKeyDefinition<D extends IdDto> { + + private final Class<? extends IdDto> parentType; + + private final ReferenceSetDefinition<D> referenceSetDefinition; + + private final String name; + + private final String[] propertyNames; + + private final Class<?>[] propertyTypes; + + public ReferenceSetRequestKeyDefinition(Class<? extends IdDto> parentType, ReferenceSetDefinition<D> referenceSetDefinition, String name) { + this.parentType = parentType; + this.referenceSetDefinition = referenceSetDefinition; + this.name = name; + this.propertyNames = Iterables.toArray(Iterables.transform(referenceSetDefinition.getProperties(), new Function<ReferenceSetPropertyDefinition, String>() { + + @Override + public String apply(ReferenceSetPropertyDefinition input) { + return input.getName(); + } + }), String.class); + this.propertyTypes = Iterables.toArray(Iterables.transform(referenceSetDefinition.getProperties(), new Function<ReferenceSetPropertyDefinition, Class<?>>() { + + @Override + public Class<?> apply(ReferenceSetPropertyDefinition input) { + return input.getType(); + } + }), Class.class); + } + + public Class<? extends IdDto> getParentType() { + return parentType; + } + + public Class<D> getType() { + return referenceSetDefinition.getType(); + } + + public String[] getPropertyNames() { + return propertyNames; + } + + public Class<?>[] getPropertyTypes() { + return propertyTypes; + } + + public String getName() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ReferenceSetRequestKeyDefinition)) return false; + ReferenceSetRequestKeyDefinition that = (ReferenceSetRequestKeyDefinition) o; + return Objects.equals(parentType, that.parentType) && + Objects.equals(referenceSetDefinition.getType(), that.referenceSetDefinition.getType()) && + Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(parentType, referenceSetDefinition.getType(), name); + } + + public boolean isReferential() { + Class<?> type = referenceSetDefinition.getType(); + return type.isAssignableFrom(ReferentialDto.class); + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java new file mode 100644 index 0000000..1de8e9e --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java @@ -0,0 +1,55 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableMap; +import fr.ird.observe.services.dto.ReferenceSetDto; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferentialReferenceSetResult { + + private final ReferenceSetRequest request; + + private final ImmutableMap<String, ReferenceSetDto> referenceSetsMap; + + public ReferentialReferenceSetResult(ReferenceSetRequest request, ImmutableMap<String, ReferenceSetDto> referenceSetsMap) { + this.request = request; + this.referenceSetsMap = referenceSetsMap; + } + + public ReferenceSetRequest getRequest() { + return request; + } + + public ImmutableMap<String, ReferenceSetDto> getReferenceSetsMap() { + return referenceSetsMap; + } + + public static Builder builder(final ReferenceSetRequest request) { + return new Builder(request); + } + + public static class Builder { + + private final ReferenceSetRequest request; + + private final ImmutableMap.Builder<String, ReferenceSetDto> referenceSetsMapBuilder; + + public Builder(ReferenceSetRequest request) { + this.request = request; + this.referenceSetsMapBuilder = ImmutableMap.builder(); + } + + public Builder addKey(String name, ReferenceSetDto referenceSet) { + referenceSetsMapBuilder.put(name, referenceSet); + return this; + } + + public ReferentialReferenceSetResult build() { + return new ReferentialReferenceSetResult(request, referenceSetsMapBuilder.build()); + } + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git commit fd559ab947c47f4db0f468f7bcc7d738b797cce3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:44:07 2015 +0100 Ajout d'un service pour récupérer des referecne set (à finir) --- .../v1/ReferenceSetServiceController.java | 28 ++++ .../services/service/ReferenceSetService.java | 24 +++ .../fr/ird/observe/services/dto/ReferenceDto.java | 9 +- .../dto/referential/ReferentialReferenceDto.java | 6 + .../EntityToReferentialReferenceDtoBuilder.java | 113 +++++++++++++- .../services/service/ReferenceSetServiceTopia.java | 162 +++++++++++++++++++++ 6 files changed, 339 insertions(+), 3 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferenceSetServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferenceSetServiceController.java new file mode 100644 index 0000000..7dcc967 --- /dev/null +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferenceSetServiceController.java @@ -0,0 +1,28 @@ +package fr.ird.observe.application.web.controller.v1; + +import fr.ird.observe.services.service.ReferenceSetRequest; +import fr.ird.observe.services.service.ReferenceSetService; +import fr.ird.observe.services.service.ReferentialReferenceSetResult; + +/** + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetServiceController extends ObserveAuthenticatedServiceControllerSupport<ReferenceSetService> implements ReferenceSetService { + + public ReferenceSetServiceController() { + super(ReferenceSetService.class); + } + + @Override + public ReferentialReferenceSetResult loadDataReferenceSets(ReferenceSetRequest request) { + return service.loadDataReferenceSets(request); + } + + @Override + public ReferentialReferenceSetResult loadReferentialReferenceSets(ReferenceSetRequest request) { + return service.loadReferentialReferenceSets(request); + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetService.java new file mode 100644 index 0000000..36f7d0e --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetService.java @@ -0,0 +1,24 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.ObserveService; +import fr.ird.observe.services.dto.ReferenceSetDto; +import fr.ird.observe.services.spi.ReadDataPermission; +import fr.ird.observe.services.spi.ReadReferentialPermission; + +/** + * Pour gérer les {@link ReferenceSetDto}. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public interface ReferenceSetService extends ObserveService { + + @ReadDataPermission + ReferentialReferenceSetResult loadDataReferenceSets(ReferenceSetRequest request); + + @ReadReferentialPermission + ReferentialReferenceSetResult loadReferentialReferenceSets(ReferenceSetRequest request); + + +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java index 607195d..7301ecf 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java @@ -66,7 +66,14 @@ public class ReferenceDto<D extends IdDto> extends AbstractReferenceDto { init(type, false, labelPropertyNames); } - public void init(Class<D> type, boolean convertToReference,Iterable<String> labelPropertyNames) { + public void init(Class<D> type, String[] labelPropertyNames, Class[] labelPropertyTypes, Serializable... labelPropertyValues) { + this.type = type; + this.labelPropertyNames = Arrays.asList(labelPropertyNames); + this.labelPropertyValues = labelPropertyValues; + this.labelPropertyTypes = labelPropertyTypes; + } + + public void init(Class<D> type, boolean convertToReference, Iterable<String> labelPropertyNames) { this.type = type; this.labelPropertyNames = Lists.newArrayList(labelPropertyNames); this.labelPropertyValues = new Serializable[this.labelPropertyNames.size()]; diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java index 982bc41..b594ae4 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java @@ -53,6 +53,12 @@ public class ReferentialReferenceDto<D extends ReferentialDto> extends AbstractR return super.getType(); } + @Override + public void init(Class type, String[] labelPropertyNames, Class[] labelPropertyTypes, Serializable... labelPropertyValues) { + + super.init(type, labelPropertyNames, labelPropertyTypes, labelPropertyValues); + } + public void setPropertyValue(ReferentialLocale referentialLocale, String propertyName, Serializable propertyValue) { Preconditions.checkNotNull(referentialLocale, "referentialLocale parameter can't be null"); Preconditions.checkNotNull(propertyName, "propertyName parameter can't be null"); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java index 2283ad3..25148fe 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java @@ -24,6 +24,7 @@ package fr.ird.observe.services.builder; import com.google.common.base.Function; import com.google.common.base.Preconditions; +import fr.ird.observe.entities.referentiel.ReferenceEntities; import fr.ird.observe.entities.referentiel.ReferenceEntity; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.ObserveDtoBinders; @@ -32,12 +33,16 @@ import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDtos; +import fr.ird.observe.services.service.ReferenceSetRequestKeyDefinition; import org.hibernate.Hibernate; import org.hibernate.proxy.HibernateProxy; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Set; @@ -50,6 +55,110 @@ import java.util.Set; */ public class EntityToReferentialReferenceDtoBuilder<E extends ReferenceEntity, D extends ReferentialDto> { + private Class<D> type; + + private Binder<E, E> binder; + + private String[] propertyNames; + + private String[] entityPropertyNames; + + private Class<?>[] propertyTypes; + + private int referentialLocaleOrdinal; + + public static <E extends ReferenceEntity, D extends ReferentialDto> EntityToReferentialReferenceDtoBuilder<E, D> of(ReferentialLocale referentialLocale, ReferenceSetRequestKeyDefinition<D> requestKeyDefinition, Class<E> entityType) { + + EntityToReferentialReferenceDtoBuilder<E, D> referenceDtoBuilder = new EntityToReferentialReferenceDtoBuilder<>(); + + referenceDtoBuilder.type = requestKeyDefinition.getType(); + referenceDtoBuilder.referentialLocaleOrdinal = referentialLocale.ordinal(); + referenceDtoBuilder.binder = BinderFactory.newBinder(entityType); + referenceDtoBuilder.propertyNames = requestKeyDefinition.getPropertyNames(); + + List<String> entityPropertyNames = new ArrayList<>(); + + for (String propertyName : referenceDtoBuilder.propertyNames) { + + if (ReferentialReferenceDto.PROPERTY_LABEL.contains(propertyName)) { + propertyName = referentialLocale.getLibelle(); + } + entityPropertyNames.add(propertyName); + } + referenceDtoBuilder.entityPropertyNames = entityPropertyNames.toArray(new String[entityPropertyNames.size()]); + referenceDtoBuilder.propertyTypes = requestKeyDefinition.getPropertyTypes(); + + return referenceDtoBuilder; + + } + + public ReferentialReferenceDto<D> build(E entity) { + + Preconditions.checkNotNull(entity, "'entity' can't be null"); + + // on extrait l' entité du proxy hibernate + if (entity instanceof HibernateProxy) { + Hibernate.initialize(entity); + entity = (E) ((HibernateProxy) entity).getHibernateLazyInitializer().getImplementation(); + } + + Map<String, Object> entityProperties = binder.obtainProperties(entity, true, entityPropertyNames); + + Serializable[] propertyValues = new Serializable[propertyTypes.length]; + for (int i = 0; i < propertyTypes.length; i++) { + String propertyName = propertyNames[i]; + + Serializable propertyValue = (Serializable) entityProperties.get(propertyName); + if (propertyValue != null) { + + Class<?> propertyType = propertyTypes[i]; + + if (propertyValue instanceof ReferenceEntity) { + + ReferenceEntity referentialEntity = (ReferenceEntity) propertyValue; + if (String.class.equals(propertyType)) { + + // Conversion + + propertyValue = ReferenceEntities.toString(referentialLocaleOrdinal, referentialEntity); + + } else { + + // on veut récupérer une référence + //TODO + + } + + } else { + + propertyValue = transform(propertyValue); + + } + + Preconditions.checkState(propertyType.isAssignableFrom(propertyValue.getClass()), "Le type de la propriété " + propertyName + " devrait être du type " + propertyType.getName() + " mais vaut: " + propertyValue); + + } + + propertyValues[i] = propertyValue; + + } + + ReferentialReferenceDto<D> result = new ReferentialReferenceDto<>(); + result.init(type, propertyNames, propertyTypes, propertyValues); + + result.setId(entity.getTopiaId()); + result.setEnabled(entity.isEnabled()); + result.setNeedComment(entity.isNeedComment()); + + result.setVersion(entity.getTopiaVersion()); + result.setCreateDate(entity.getTopiaCreateDate()); + result.setLastUpdate(entity.getLastUpdate()); + result.setEnabled(fr.ird.observe.entities.constants.ReferenceStatus.enabled == entity.getStatus()); + + return result; + + } + public static <E extends ReferenceEntity, D extends ReferentialDto> ReferentialReferenceDto<D> build(Class<D> dtoType, ReferentialLocale referentialLocale, E entity) { Preconditions.checkNotNull(dtoType, "'dtoType' can't be null"); @@ -110,12 +219,12 @@ public class EntityToReferentialReferenceDtoBuilder<E extends ReferenceEntity, D } - protected static Object transform(Object propertyValue) { + protected static Serializable transform(Object propertyValue) { Function function = ObserveDtosInitializer.getEntityToDtoFunction(propertyValue); if (function != null) { propertyValue = function.apply(propertyValue); } - return propertyValue; + return (Serializable) propertyValue; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferenceSetServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferenceSetServiceTopia.java new file mode 100644 index 0000000..3178da1 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferenceSetServiceTopia.java @@ -0,0 +1,162 @@ +package fr.ird.observe.services.service; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import fr.ird.observe.entities.referentiel.ReferenceEntity; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.builder.EntityToReferentialReferenceDtoBuilder; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ReferenceSetDto; +import fr.ird.observe.services.dto.ReferenceSetDtos; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; +import fr.ird.observe.services.entity.EntitiesExtractor; +import org.nuiton.topia.persistence.TopiaEntity; + +import java.util.Collections; +import java.util.Date; +import java.util.LinkedHashSet; +import java.util.Map; + +/** + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetServiceTopia extends ObserveServiceTopia implements ReferenceSetService { + + @Override + public ReferentialReferenceSetResult loadDataReferenceSets(ReferenceSetRequest request) { + String requestName = request.getRequestName(); + ReferenceSetRequestDefinitions requestDefinitions = ReferenceSetRequestDefinitions.valueOf(requestName); + if (requestDefinitions == null) { + throw new IllegalArgumentException("No request with name " + requestName + "registred"); + } + + ReferenceSetRequestDefinition requestDefinition = requestDefinitions.getDefinition(); + + ReferentialReferenceSetResult.Builder resultBuilder = new ReferentialReferenceSetResult.Builder(request); + + for (ReferenceSetRequestKeyDefinition requestKeyDefinition : requestDefinition.getKeys()) { + + boolean referential = requestKeyDefinition.isReferential(); + Preconditions.checkArgument(!referential, "Can't obtain referenceSet of referential here, but try with " + requestKeyDefinition); + + String name = requestKeyDefinition.getName(); + + ReferenceSetDto referenceSet = loadDataReferenceSet(requestKeyDefinition); + resultBuilder.addKey(name, referenceSet); + + } + + return resultBuilder.build(); + + } + + @Override + public ReferentialReferenceSetResult loadReferentialReferenceSets(ReferenceSetRequest request) { + + String requestName = request.getRequestName(); + ReferenceSetRequestDefinitions requestDefinitions = ReferenceSetRequestDefinitions.valueOf(requestName); + if (requestDefinitions == null) { + throw new IllegalArgumentException("No request with name " + requestName + "registred"); + } + + ReferenceSetRequestDefinition requestDefinition = requestDefinitions.getDefinition(); + + ReferentialReferenceSetResult.Builder resultBuilder = new ReferentialReferenceSetResult.Builder(request); + ImmutableMap<String, Date> lastUpdateDates = request.getLastUpdateDates(); + + for (ReferenceSetRequestKeyDefinition requestKeyDefinition : requestDefinition.getKeys()) { + + boolean referential = requestKeyDefinition.isReferential(); + Preconditions.checkArgument(referential, "Can't obtain referenceSet of data here, but try with " + requestKeyDefinition); + + String name = requestKeyDefinition.getName(); + Date lastUpdateDate = lastUpdateDates.get(name); + + ReferenceSetDto referenceSet = loadReferentialReferenceSet(requestKeyDefinition, lastUpdateDate); + resultBuilder.addKey(name, referenceSet); + } + + return resultBuilder.build(); + + } + + protected <D extends IdDto> ReferenceSetDto<D> loadDataReferenceSet(ReferenceSetRequestKeyDefinition<D> requestKeyDefinition) { + + Class<D> type = requestKeyDefinition.getType(); + Class<TopiaEntity> entityType = getEntityType(type); + String name = requestKeyDefinition.getName(); + + Iterable<TopiaEntity> entitiesExtractor = getEntities(requestKeyDefinition, Collections.<String, Object>emptyMap()); + + //TODO + ReferenceSetDto<D> referenceSet = null; + + return referenceSet; + } + + protected <D extends ReferentialDto, E extends ReferenceEntity> ReferenceSetDto<D> loadReferentialReferenceSet(ReferenceSetRequestKeyDefinition<D> requestKeyDefinition, Date lastUpdateDate) { + + Class<D> type = requestKeyDefinition.getType(); + Class<E> entityType = getEntityType(type); + String name = requestKeyDefinition.getName(); + + Optional<Date> lastUpdateOptional = getLastUpdate(entityType); + + ReferenceSetDto<D> referenceSet; + if (lastUpdateOptional.isPresent() && lastUpdateOptional.get().after(lastUpdateDate)) { + + EntityToReferentialReferenceDtoBuilder<E, D> referenceBuilder = EntityToReferentialReferenceDtoBuilder.of(serviceContext.getReferentialLocale(), requestKeyDefinition, entityType); + + Iterable<E> entities = getEntities(requestKeyDefinition, Collections.<String, Object>emptyMap()); + + LinkedHashSet<ReferentialReferenceDto<D>> labels = new LinkedHashSet<>(); + for (E entity : entities) { + + ReferentialReferenceDto<D> dto = referenceBuilder.build(entity); + labels.add(dto); + + } + referenceSet = ReferenceSetDtos.newReferenceSetDto(type, name, labels, lastUpdateOptional.get()); + + + } else { + + referenceSet = null; + + } + + return referenceSet; + } + + + protected <E extends TopiaEntity, D extends IdDto> Iterable<E> getEntities(ReferenceSetRequestKeyDefinition<D> requestKeyDefinition, + Map<String, Object> dataContext) { + + + Class<D> type = requestKeyDefinition.getType(); + Class<E> entityType = getEntityType(type); + Class<TopiaEntity> entityParentType = getEntityType(requestKeyDefinition.getParentType()); + String name = requestKeyDefinition.getName(); + + Iterable<E> entities; + + EntitiesExtractor<E> entitiesExtractor = serviceContext.getEntitiesSetFactory().newEntitiesSet(entityParentType, + entityType, + name); + + if (entitiesExtractor == null) { + + entities = loadEntities(entityType); + + } else { + entities = entitiesExtractor.getEntities(serviceContext.getTopiaPersistenceContext(), dataContext); + } + + return entities; + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git commit aee09c8fadf10b42869c5974796d46ba7e0d63a4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:45:18 2015 +0100 Début d'implantation d'un cache de référentiels (à finir) --- .../fr/ird/observe/db/ObserveReferentialCache.java | 61 ++++++++++++++++++++++ .../ird/observe/db/ObserveReferentialCacheKey.java | 33 ++++++++++++ 2 files changed, 94 insertions(+) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveReferentialCache.java b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveReferentialCache.java new file mode 100644 index 0000000..0a7c8b3 --- /dev/null +++ b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveReferentialCache.java @@ -0,0 +1,61 @@ +package fr.ird.observe.db; + +import fr.ird.observe.services.dto.ReferenceSetDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; + +import java.io.Closeable; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferentialCache implements Closeable { + + private final Map<ObserveReferentialCacheKey<?>, ReferenceSetDto> cache; + + public ObserveReferentialCache() { + this.cache = new LinkedHashMap<>(); + } + + public <D extends ReferentialDto> ReferenceSetDto<D> getReferenceSet(ObserveSwingDataSource dataSource, Class<D> type, String optionalContext) { + + ObserveReferentialCacheKey<D> referentialCacheKey = ObserveReferentialCacheKey.of(type, optionalContext); + ReferenceSetDto<D> result = getReferenceSet0(dataSource, referentialCacheKey); + return result; + } + + protected <D extends ReferentialDto> ReferenceSetDto<D> getReferenceSet0(ObserveSwingDataSource dataSource, ObserveReferentialCacheKey<D> key) { + + ReferenceSetDto<D> result=null; +// if (cache.containsKey(key)) { +// result = cache.get(key); +// +// Date lastUpdate = result.getLastUpdate(); +// +// ReferenceSetService referentialService = dataSource.newService(ReferenceSetService.class); +// ReferenceSetDto<D> update = referentialService.getReferentialReferenceSetIfModify(key.getType(), key.getContext().orNull(), lastUpdate); +// if (update != null) { +// result = update; +// cache.remove(key); +// cache.put(key, update); +// } +// +// } else { +// +// ReferentialService referentialService = dataSource.newService(ReferenceSetService.class); +// result = referentialService.getReferentialReferenceSet(key.getType(), key.getContext().orNull()); +// cache.put(key, result); +// +// } + return result; + + } + + @Override + public void close() { + cache.clear(); + } +} diff --git a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveReferentialCacheKey.java b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveReferentialCacheKey.java new file mode 100644 index 0000000..3eda009 --- /dev/null +++ b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveReferentialCacheKey.java @@ -0,0 +1,33 @@ +package fr.ird.observe.db; + +import com.google.common.base.Optional; +import fr.ird.observe.services.dto.referential.ReferentialDto; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferentialCacheKey<D extends ReferentialDto> { + + private final Class<D> type; + + private final Optional<String> context; + + public ObserveReferentialCacheKey(Class<D> type, Optional<String> context) { + this.type = type; + this.context = context; + } + + public Class<D> getType() { + return type; + } + + public Optional<String> getContext() { + return context; + } + + public static <D extends ReferentialDto> ObserveReferentialCacheKey<D> of(Class<D> type, String optionalContext) { + return new ObserveReferentialCacheKey<>(type, Optional.fromNullable(optionalContext)); + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git commit 64ba10386d93f9845c93d3d0458b5d4de165c2e2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Nov 14 02:12:31 2015 +0100 introduction nouvelle api de references plus simple et mise en place --- .../web/ObserveWebApplicationListener.java | 2 + .../v1/ReferenceSetServiceController.java | 10 +- .../ObserveReferenceSetRequestInjector.java | 51 +++++ .../services/service/ReferenceSetDefinition.java | 70 ------ .../service/ReferenceSetPropertyDefinition.java | 67 ------ .../service/ReferenceSetRequestDefinition.java | 53 ----- .../service/ReferenceSetRequestDefinitions.java | 39 ---- .../service/ReferenceSetRequestKeyDefinition.java | 86 ------- .../services/service/ReferenceSetService.java | 8 +- .../service/ReferentialReferenceSetResult.java | 55 ----- .../observe/services/dto/gson/ClassAdapter.java | 39 +++- .../services/dto/gson/ObserveDtoGsonSupplier.java | 2 + .../dto/gson/ObserveReferenceSetAdapter.java | 122 ++++++++++ .../services/dto/reference/ObserveReference.java | 61 +++++ .../dto/reference/ObserveReferenceSet.java | 69 ++++++ .../dto/reference/ObserveReferenceSetRequest.java | 20 +- .../dto/reference/ObserveReferenceSetResult.java | 64 ++++++ .../dto/reference/ObserveReferentialReference.java | 79 +++++++ .../definition/ObserveReferenceSetDefinition.java | 76 +++++++ .../definition/ObserveReferenceSetDefinitions.java | 41 ++-- .../ObserveReferenceSetRequestDefinition.java | 53 +++++ .../ObserveReferenceSetRequestDefinitions.java | 50 +++++ .../ObserveReferenceSetRequestKeyDefinition.java | 74 ++++++ .../service/ReferenceSetServiceRestTest.java | 96 ++++++++ .../EntityToReferentialReferenceDtoBuilder.java | 109 --------- .../dto/reference/ObserveReferenceSetBuilder.java | 250 +++++++++++++++++++++ .../services/service/ReferenceSetServiceTopia.java | 124 +++++----- .../service/ReferenceSetServiceTopiaTest.java | 54 +++++ 28 files changed, 1246 insertions(+), 578 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java index 764a415..a5816f6 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java @@ -27,6 +27,7 @@ import fr.ird.observe.application.web.converter.ObserveDtoConverter; import fr.ird.observe.application.web.injector.ObserveClassInjector; import fr.ird.observe.application.web.injector.ObserveDataSourceConfigurationInjector; import fr.ird.observe.application.web.injector.ObserveDtoInjector; +import fr.ird.observe.application.web.injector.ObserveReferenceSetRequestInjector; import fr.ird.observe.services.dto.ObserveDbUserDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -62,6 +63,7 @@ public class ObserveWebApplicationListener implements WebMotionServerListener { context.addInjector(new ObserveDataSourceConfigurationInjector(gson)); context.addInjector(new ObserveClassInjector()); context.addInjector(new ObserveDtoInjector(gson)); + context.addInjector(new ObserveReferenceSetRequestInjector(gson)); context.addConverter(new ObserveDtoConverter(gson), ObserveDbUserDto.class); context.getServletContext().setAttribute( diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferenceSetServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferenceSetServiceController.java index 7dcc967..ee5c30c 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferenceSetServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ReferenceSetServiceController.java @@ -1,8 +1,10 @@ package fr.ird.observe.application.web.controller.v1; -import fr.ird.observe.services.service.ReferenceSetRequest; +import fr.ird.observe.services.dto.reference.ObserveReference; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetRequest; +import fr.ird.observe.services.dto.reference.ObserveReferentialReference; import fr.ird.observe.services.service.ReferenceSetService; -import fr.ird.observe.services.service.ReferentialReferenceSetResult; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetResult; /** * Created on 11/11/15. @@ -16,12 +18,12 @@ public class ReferenceSetServiceController extends ObserveAuthenticatedServiceCo } @Override - public ReferentialReferenceSetResult loadDataReferenceSets(ReferenceSetRequest request) { + public ObserveReferenceSetResult<ObserveReference> loadDataReferenceSets(ObserveReferenceSetRequest request) { return service.loadDataReferenceSets(request); } @Override - public ReferentialReferenceSetResult loadReferentialReferenceSets(ReferenceSetRequest request) { + public ObserveReferenceSetResult<ObserveReferentialReference> loadReferentialReferenceSets(ObserveReferenceSetRequest request) { return service.loadReferentialReferenceSets(request); } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/ObserveReferenceSetRequestInjector.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/ObserveReferenceSetRequestInjector.java new file mode 100644 index 0000000..61edb8e --- /dev/null +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/ObserveReferenceSetRequestInjector.java @@ -0,0 +1,51 @@ +package fr.ird.observe.application.web.injector; + +import com.google.common.base.Preconditions; +import com.google.gson.Gson; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetRequest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.debux.webmotion.server.call.Call; +import org.debux.webmotion.server.handler.ExecutorParametersInjectorHandler; +import org.debux.webmotion.server.mapping.Mapping; + +import java.lang.reflect.Type; + +/** + * Created on 13/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferenceSetRequestInjector implements ExecutorParametersInjectorHandler.Injector { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ObserveDataSourceConfigurationInjector.class); + + protected final Gson gson; + + public ObserveReferenceSetRequestInjector(Gson gson) { + this.gson = gson; + } + + @Override + public Object getValue(Mapping mapping, Call call, String name, Class<?> type, Type generic) { + + ObserveReferenceSetRequest referenceSetRequest = null; + if (type.equals(ObserveReferenceSetRequest.class)) { + + Call.ParameterTree parameterTree = call.getParameterTree().getObject().get(name); + Preconditions.checkNotNull(parameterTree, "Le paramètre " + name + " n'as pas été trouvé, recompiler (parameter)!"); + String gsonContent = ((String[]) parameterTree.getValue())[0]; + + referenceSetRequest = gson.fromJson(gsonContent, ObserveReferenceSetRequest.class); + + if (log.isInfoEnabled()) { + log.info("Inject referenceSetRequest: " + referenceSetRequest); + } + + } + + return referenceSetRequest; + + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java deleted file mode 100644 index edac622..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java +++ /dev/null @@ -1,70 +0,0 @@ -package fr.ird.observe.services.service; - -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.services.dto.IdDto; -import fr.ird.observe.services.dto.ReferenceSetDto; - -import java.io.Serializable; - -/** - * Pour définir ce que l'on doit retrouver dans un ensemble de références d'un même type. - * - * Created on 11/11/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ReferenceSetDefinition<D extends IdDto> implements Serializable{ - - private static final long serialVersionUID = 1L; - - /** - * Le type du dto qui doit être transformé en références. - * {@link ReferenceSetDto#getType()}. - */ - private final Class<D> type; - - private final ImmutableSet<ReferenceSetPropertyDefinition> properties; - - public ReferenceSetDefinition(Class<D> type, ImmutableSet<ReferenceSetPropertyDefinition> properties) { - this.type = type; - this.properties = properties; - } - - public Class<D> getType() { - return type; - } - - public ImmutableSet<ReferenceSetPropertyDefinition> getProperties() { - return properties; - } - - public static <D extends IdDto> Builder<D> builder(Class<D> type) { - return new Builder<>(type); - } - - public static class Builder<D extends IdDto> { - - private final Class<D> type; - - private final ImmutableSet.Builder<ReferenceSetPropertyDefinition> propertiesBuilder; - - public Builder(Class<D> type) { - this.type = type; - this.propertiesBuilder = ImmutableSet.builder(); - } - - public <O> Builder<D> addProperty(Class<O> type, String name) { - return addProperty(ReferenceSetPropertyDefinition.of(type, name)); - } - - public Builder<D> addProperty(ReferenceSetPropertyDefinition propertyDefinition) { - propertiesBuilder.add(propertyDefinition); - return this; - } - - public ReferenceSetDefinition<D> build() { - return new ReferenceSetDefinition<>(type, propertiesBuilder.build()); - } - } - -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java deleted file mode 100644 index 79035bd..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java +++ /dev/null @@ -1,67 +0,0 @@ -package fr.ird.observe.services.service; - -import com.google.common.base.MoreObjects; - -import java.io.Serializable; -import java.util.Objects; - -/** - * Pour définir une propriété à remonter dans un ensemble de référence. - * - * Created on 11/11/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ReferenceSetPropertyDefinition<O> implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * Le type de la propriété. - */ - private final Class<O> type; - - /** - * Le nom de la propriété. - */ - private final String name; - - public static <O> ReferenceSetPropertyDefinition<O> of(Class<O> type, String name) { - return new ReferenceSetPropertyDefinition<>(type, name); - } - - public ReferenceSetPropertyDefinition(Class<O> type, String name) { - this.type = type; - this.name = name; - } - - public Class<O> getType() { - return type; - } - - public String getName() { - return name; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ReferenceSetPropertyDefinition)) return false; - ReferenceSetPropertyDefinition<?> that = (ReferenceSetPropertyDefinition<?>) o; - return Objects.equals(type, that.type) && - Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - return Objects.hash(type, name); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("type", type) - .add("name", name) - .toString(); - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java deleted file mode 100644 index 2d49605..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java +++ /dev/null @@ -1,53 +0,0 @@ -package fr.ird.observe.services.service; - -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.services.dto.IdDto; - -import java.io.Serializable; - -/** - * Pour définir une demande de récupération d'ensemble de références. - * - * Created on 11/11/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ReferenceSetRequestDefinition implements Serializable { - - private static final long serialVersionUID = 1L; - - private final ImmutableSet<ReferenceSetRequestKeyDefinition> keys; - - public ReferenceSetRequestDefinition(ImmutableSet<ReferenceSetRequestKeyDefinition> keys) { - this.keys = keys; - } - - public ImmutableSet<ReferenceSetRequestKeyDefinition> getKeys() { - return keys; - } - - public static <D extends IdDto> Builder<D> builder(Class<D> type) { - return new Builder<>(type); - } - - public static class Builder<D extends IdDto> { - - private final Class<D> parentType; - - private final ImmutableSet.Builder<ReferenceSetRequestKeyDefinition> keysBuilder; - - public Builder(Class<D> parentType) { - this.parentType = parentType; - this.keysBuilder = ImmutableSet.builder(); - } - - public Builder<D> addKey(String name, ReferenceSetDefinitions propertyDefinition) { - keysBuilder.add(new ReferenceSetRequestKeyDefinition<>(parentType, propertyDefinition.getDefinition(), name)); - return this; - } - - public ReferenceSetRequestDefinition build() { - return new ReferenceSetRequestDefinition(keysBuilder.build()); - } - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java deleted file mode 100644 index eef1c48..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java +++ /dev/null @@ -1,39 +0,0 @@ -package fr.ird.observe.services.service; - -import fr.ird.observe.services.dto.IdDto; -import fr.ird.observe.services.dto.seine.TripSeineDto; - -/** - * Contient les définitions de tous les requêtes que les services proposent. - * - * Created on 11/11/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public enum ReferenceSetRequestDefinitions { - - TRIP_SEINE_FORM(newBuilder(TripSeineDto.class) - .addKey(TripSeineDto.PROPERTY_OBSERVER, ReferenceSetDefinitions.PERSON) - .addKey(TripSeineDto.PROPERTY_CAPTAIN, ReferenceSetDefinitions.PERSON) - .addKey(TripSeineDto.PROPERTY_DATA_ENTRY_OPERATOR, ReferenceSetDefinitions.PERSON) - .addKey(TripSeineDto.PROPERTY_VESSEL, ReferenceSetDefinitions.VESSEL) - .addKey(TripSeineDto.PROPERTY_OCEAN, ReferenceSetDefinitions.OCEAN) - .addKey(TripSeineDto.PROPERTY_DEPARTURE_HARBOUR, ReferenceSetDefinitions.HARBOUR) - .addKey(TripSeineDto.PROPERTY_LANDING_HARBOUR, ReferenceSetDefinitions.HARBOUR) - .addKey(TripSeineDto.PROPERTY_PROGRAM, ReferenceSetDefinitions.PROGRAM)),; - - public final ReferenceSetRequestDefinition definition; - - ReferenceSetRequestDefinitions(ReferenceSetRequestDefinition.Builder definitionBuilder) { - this.definition = definitionBuilder.build(); - } - - public ReferenceSetRequestDefinition getDefinition() { - return definition; - } - - public static <D extends IdDto> ReferenceSetRequestDefinition.Builder<D> newBuilder(Class<D> parentType) { - return new ReferenceSetRequestDefinition.Builder<>(parentType); - } - -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java deleted file mode 100644 index 8d72a4f..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java +++ /dev/null @@ -1,86 +0,0 @@ -package fr.ird.observe.services.service; - -import com.google.common.base.Function; -import com.google.common.collect.Iterables; -import fr.ird.observe.services.dto.IdDto; -import fr.ird.observe.services.dto.referential.ReferentialDto; - -import java.util.Objects; - -/** - * Created on 10/11/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ReferenceSetRequestKeyDefinition<D extends IdDto> { - - private final Class<? extends IdDto> parentType; - - private final ReferenceSetDefinition<D> referenceSetDefinition; - - private final String name; - - private final String[] propertyNames; - - private final Class<?>[] propertyTypes; - - public ReferenceSetRequestKeyDefinition(Class<? extends IdDto> parentType, ReferenceSetDefinition<D> referenceSetDefinition, String name) { - this.parentType = parentType; - this.referenceSetDefinition = referenceSetDefinition; - this.name = name; - this.propertyNames = Iterables.toArray(Iterables.transform(referenceSetDefinition.getProperties(), new Function<ReferenceSetPropertyDefinition, String>() { - - @Override - public String apply(ReferenceSetPropertyDefinition input) { - return input.getName(); - } - }), String.class); - this.propertyTypes = Iterables.toArray(Iterables.transform(referenceSetDefinition.getProperties(), new Function<ReferenceSetPropertyDefinition, Class<?>>() { - - @Override - public Class<?> apply(ReferenceSetPropertyDefinition input) { - return input.getType(); - } - }), Class.class); - } - - public Class<? extends IdDto> getParentType() { - return parentType; - } - - public Class<D> getType() { - return referenceSetDefinition.getType(); - } - - public String[] getPropertyNames() { - return propertyNames; - } - - public Class<?>[] getPropertyTypes() { - return propertyTypes; - } - - public String getName() { - return name; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ReferenceSetRequestKeyDefinition)) return false; - ReferenceSetRequestKeyDefinition that = (ReferenceSetRequestKeyDefinition) o; - return Objects.equals(parentType, that.parentType) && - Objects.equals(referenceSetDefinition.getType(), that.referenceSetDefinition.getType()) && - Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - return Objects.hash(parentType, referenceSetDefinition.getType(), name); - } - - public boolean isReferential() { - Class<?> type = referenceSetDefinition.getType(); - return type.isAssignableFrom(ReferentialDto.class); - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetService.java index 36f7d0e..2ce25b3 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetService.java @@ -2,6 +2,10 @@ package fr.ird.observe.services.service; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.dto.ReferenceSetDto; +import fr.ird.observe.services.dto.reference.ObserveReference; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetRequest; +import fr.ird.observe.services.dto.reference.ObserveReferentialReference; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetResult; import fr.ird.observe.services.spi.ReadDataPermission; import fr.ird.observe.services.spi.ReadReferentialPermission; @@ -15,10 +19,10 @@ import fr.ird.observe.services.spi.ReadReferentialPermission; public interface ReferenceSetService extends ObserveService { @ReadDataPermission - ReferentialReferenceSetResult loadDataReferenceSets(ReferenceSetRequest request); + ObserveReferenceSetResult<ObserveReference> loadDataReferenceSets(ObserveReferenceSetRequest request); @ReadReferentialPermission - ReferentialReferenceSetResult loadReferentialReferenceSets(ReferenceSetRequest request); + ObserveReferenceSetResult<ObserveReferentialReference> loadReferentialReferenceSets(ObserveReferenceSetRequest request); } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java deleted file mode 100644 index 1de8e9e..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java +++ /dev/null @@ -1,55 +0,0 @@ -package fr.ird.observe.services.service; - -import com.google.common.collect.ImmutableMap; -import fr.ird.observe.services.dto.ReferenceSetDto; - -/** - * Created on 10/11/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ReferentialReferenceSetResult { - - private final ReferenceSetRequest request; - - private final ImmutableMap<String, ReferenceSetDto> referenceSetsMap; - - public ReferentialReferenceSetResult(ReferenceSetRequest request, ImmutableMap<String, ReferenceSetDto> referenceSetsMap) { - this.request = request; - this.referenceSetsMap = referenceSetsMap; - } - - public ReferenceSetRequest getRequest() { - return request; - } - - public ImmutableMap<String, ReferenceSetDto> getReferenceSetsMap() { - return referenceSetsMap; - } - - public static Builder builder(final ReferenceSetRequest request) { - return new Builder(request); - } - - public static class Builder { - - private final ReferenceSetRequest request; - - private final ImmutableMap.Builder<String, ReferenceSetDto> referenceSetsMapBuilder; - - public Builder(ReferenceSetRequest request) { - this.request = request; - this.referenceSetsMapBuilder = ImmutableMap.builder(); - } - - public Builder addKey(String name, ReferenceSetDto referenceSet) { - referenceSetsMapBuilder.put(name, referenceSet); - return this; - } - - public ReferentialReferenceSetResult build() { - return new ReferentialReferenceSetResult(request, referenceSetsMapBuilder.build()); - } - } - -} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ClassAdapter.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ClassAdapter.java index bb235b9..22f2874 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ClassAdapter.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ClassAdapter.java @@ -28,18 +28,29 @@ import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import java.lang.reflect.Type; +import java.util.Map; +import java.util.TreeMap; /** * @author Arnaud Thimel - thimel@codelutin.com */ public class ClassAdapter implements JsonSerializer<Class<?>>, JsonDeserializer<Class<?>> { - private static final Log log = LogFactory.getLog(ClassAdapter.class); - + private static final Map<String, Class<?>> CLASS_CACHE = new TreeMap<>(); + + static { + CLASS_CACHE.put("boolean", boolean.class); + CLASS_CACHE.put("byte", byte.class); + CLASS_CACHE.put("char", char.class); + CLASS_CACHE.put("short", short.class); + CLASS_CACHE.put("int", int.class); + CLASS_CACHE.put("long", long.class); + CLASS_CACHE.put("float", float.class); + CLASS_CACHE.put("double", double.class); + } + @Override public JsonElement serialize(Class<?> src, Type typeOfSrc, JsonSerializationContext context) { return context.serialize(src.getCanonicalName(), String.class); @@ -50,15 +61,25 @@ public class ClassAdapter implements JsonSerializer<Class<?>>, JsonDeserializer< public Class<?> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { String className = json.getAsString(); + Class<?> result = CLASS_CACHE.get(className); + if (result == null) { + result = loadClass(className); + CLASS_CACHE.put(className, result); + } + + return result; + + } + + protected Class<?> loadClass(String className) { + try { Class<?> result = Class.forName(className); return result; - } catch (ClassNotFoundException cnfe) { - if (log.isErrorEnabled()) { - log.error("An exception occurred", cnfe); - } - throw new JsonParseException("Class not found: " + className, cnfe); + } catch (ClassNotFoundException e) { + throw new JsonParseException("Class not found: " + className, e); } } + } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java index 9ba5b93..7552723 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java @@ -31,6 +31,7 @@ import com.google.gson.GsonBuilder; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.actions.report.ReportVariable; +import fr.ird.observe.services.dto.reference.ObserveReferenceSet; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import org.nuiton.util.version.Version; @@ -94,6 +95,7 @@ public class ObserveDtoGsonSupplier implements Supplier<Gson> { gsonBuilder.registerTypeAdapter(ImmutableSet.class, new ImmutableSetAdapter()); gsonBuilder.registerTypeAdapter(ImmutableMap.class, new ImmutableMapAdapter()); gsonBuilder.registerTypeAdapter(ReferenceDto.class, new ReferenceDtoAdapter()); + gsonBuilder.registerTypeAdapter(ObserveReferenceSet.class, new ObserveReferenceSetAdapter()); gsonBuilder.registerTypeAdapter(ReferentialReferenceDto.class, new ReferentialReferenceDtoAdapter()); gsonBuilder.registerTypeAdapter(FormDto.class, new FormDtoAdapter()); gsonBuilder.registerTypeAdapter(ReportVariable.class, new ReportVariableAdapter()); diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveReferenceSetAdapter.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveReferenceSetAdapter.java new file mode 100644 index 0000000..300ae53 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveReferenceSetAdapter.java @@ -0,0 +1,122 @@ +package fr.ird.observe.services.dto.gson; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.reference.ObserveReference; +import fr.ird.observe.services.dto.reference.ObserveReferenceSet; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetDefinition; +import fr.ird.observe.services.dto.reference.ObserveReferentialReference; +import fr.ird.observe.services.dto.referential.ReferentialDto; + +import java.io.Serializable; +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.Date; +import java.util.LinkedHashSet; + +/** + * Created on 13/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferenceSetAdapter implements JsonDeserializer<ObserveReferenceSet> { + + @Override + public ObserveReferenceSet deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + + JsonObject jsonObject = json.getAsJsonObject(); + + ObserveReferenceSetDefinition definition = context.deserialize(jsonObject.get("definition"), ObserveReferenceSetDefinition.class); + + Class type = definition.getType(); + + Date lastUpdate = context.deserialize(jsonObject.get("lastUpdate"), Date.class); + + JsonArray jsonValues = jsonObject.get("values").getAsJsonArray(); + + Class[] propertyTypes = definition.getPropertyTypes(); + + ObserveReferenceSet referenceDto = new ObserveReferenceSet(); + referenceDto.setDefinition(definition); + referenceDto.setLastUpdate(lastUpdate); + + if (ReferentialDto.class.isAssignableFrom(type)) { + + Collection<ObserveReferentialReference> values = new LinkedHashSet<>(); + + for (JsonElement jsonValue : jsonValues) { + + ObserveReferentialReference ref = deserializeReferentialReference(context, jsonValue.getAsJsonObject(), propertyTypes); + values.add(ref); + } + + referenceDto.setValues(values); + + } else { + + Collection<ObserveReference> values = new LinkedHashSet<>(); + + for (JsonElement jsonValue : jsonValues) { + + ObserveReference ref = deserializeReference(context, jsonValue.getAsJsonObject(), propertyTypes); + values.add(ref); + } + + referenceDto.setValues(values); + } + + + return referenceDto; + + } + + private ObserveReferentialReference deserializeReferentialReference(JsonDeserializationContext context, JsonObject jsonObject, Class[] propertyTypes) { + + ObserveReferentialReference result = new ObserveReferentialReference(); + + deserialize0(context, jsonObject, propertyTypes, result); + + result.setVersion((long) context.deserialize(jsonObject.get(ReferentialDto.PROPERTY_VERSION), long.class)); + result.setCreateDate((Date) context.deserialize(jsonObject.get(ReferentialDto.PROPERTY_CREATE_DATE), Date.class)); + result.setLastUpdate((Date) context.deserialize(jsonObject.get(ReferentialDto.PROPERTY_LAST_UPDATE), Date.class)); + result.setEnabled((Boolean) context.deserialize(jsonObject.get(ReferentialDto.PROPERTY_ENABLED), boolean.class)); + result.setNeedComment((Boolean) context.deserialize(jsonObject.get(ReferentialDto.PROPERTY_NEED_COMMENT), boolean.class)); + + return result; + } + + private ObserveReference deserializeReference(JsonDeserializationContext context, JsonObject jsonObject, Class[] propertyTypes) { + + ObserveReference result = new ObserveReference(); + + deserialize0(context, jsonObject, propertyTypes, result); + + return result; + } + + private void deserialize0(JsonDeserializationContext context, JsonObject jsonObject, Class[] propertyTypes, ObserveReference result) { + + JsonArray valuesElement = jsonObject.get("values").getAsJsonArray(); + + result.setId((String) context.deserialize(jsonObject.get(IdDto.PROPERTY_ID), String.class)); + + Serializable[] values = new Serializable[propertyTypes.length]; + result.setValues(values); + + for (int i = 0, max = propertyTypes.length; i < max; i++) { + Class type = propertyTypes[i]; + JsonElement jsonValue = valuesElement.get(i); + if (jsonValue != null) { + Serializable value = context.deserialize(jsonValue, type); + values[i] = value; + } + } + + } + +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReference.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReference.java new file mode 100644 index 0000000..95038a1 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReference.java @@ -0,0 +1,61 @@ +package fr.ird.observe.services.dto.reference; + +import com.google.common.base.MoreObjects; + +import java.io.Serializable; +import java.util.Arrays; +import java.util.Objects; + +/** + * Created on 13/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReference implements Serializable { + + public static final String PROPERTY_ID = "id"; + + private static final long serialVersionUID = 1L; + + protected String id; + + protected Serializable[] values; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Serializable[] getValues() { + return values; + } + + public void setValues(Serializable... values) { + this.values = values; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ObserveReference)) return false; + ObserveReference that = (ObserveReference) o; + return !(id == null || that.id == null) && Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("id", id) + .add("values", Arrays.asList(values)) + .toString(); + } + +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSet.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSet.java new file mode 100644 index 0000000..4d64af1 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSet.java @@ -0,0 +1,69 @@ +package fr.ird.observe.services.dto.reference; + +import com.google.common.base.MoreObjects; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetDefinition; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Date; + +/** + * Created on 13/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferenceSet<D extends IdDto, R extends ObserveReference> implements Serializable { + + private static final long serialVersionUID = 1L; + + protected ObserveReferenceSetDefinition<D> definition; + + protected Collection<R> values; + + protected Date lastUpdate; + + public static <D extends IdDto, R extends ObserveReference> ObserveReferenceSet<D, R> of(ObserveReferenceSetDefinition<D> definition, + Collection<R> labels, + Date lastUpdate) { + ObserveReferenceSet<D, R> dto = new ObserveReferenceSet<>(); + + dto.setDefinition(definition); + dto.setValues(labels); + dto.setLastUpdate(lastUpdate); + return dto; + } + + public ObserveReferenceSetDefinition<D> getDefinition() { + return definition; + } + + public void setDefinition(ObserveReferenceSetDefinition<D> definition) { + this.definition = definition; + } + + public Collection<R> getValues() { + return values; + } + + public void setValues(Collection<R> values) { + this.values = values; + } + + public Date getLastUpdate() { + return lastUpdate; + } + + public void setLastUpdate(Date lastUpdate) { + this.lastUpdate = lastUpdate; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("definition", definition) + .add("values", values == null ? 0 : values.size()) + .add("lastUpdate", lastUpdate) + .toString(); + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetRequest.java similarity index 57% rename from observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java rename to observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetRequest.java index 4801de4..25ea7b6 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetRequest.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.service; +package fr.ird.observe.services.dto.reference; import com.google.common.collect.ImmutableMap; @@ -9,16 +9,11 @@ import java.util.Date; * * @author Tony Chemit - chemit@codelutin.com */ -public class ReferenceSetRequest { +public class ObserveReferenceSetRequest { - private final String requestName; + private String requestName; - private final ImmutableMap<String, Date> lastUpdateDates; - - public ReferenceSetRequest(String requestName, ImmutableMap<String, Date> lastUpdateDates) { - this.requestName = requestName; - this.lastUpdateDates = lastUpdateDates; - } + private ImmutableMap<String, Date> lastUpdateDates; public String getRequestName() { return requestName; @@ -28,4 +23,11 @@ public class ReferenceSetRequest { return lastUpdateDates; } + public void setRequestName(String requestName) { + this.requestName = requestName; + } + + public void setLastUpdateDates(ImmutableMap<String, Date> lastUpdateDates) { + this.lastUpdateDates = lastUpdateDates; + } } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetResult.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetResult.java new file mode 100644 index 0000000..1c1614f --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetResult.java @@ -0,0 +1,64 @@ +package fr.ird.observe.services.dto.reference; + +import com.google.common.collect.ImmutableMap; + +import java.util.Date; +import java.util.Map; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferenceSetResult<R extends ObserveReference> { + + private final String requestName; + + private final ImmutableMap<String, ObserveReferenceSet<?, R>> referenceSets; + + public static <R extends ObserveReference> Builder<R> builder(String requestName) { + return new Builder<>(requestName); + } + + public ObserveReferenceSetResult(String requestName, ImmutableMap<String, ObserveReferenceSet<?, R>> referenceSets) { + this.requestName = requestName; + this.referenceSets = referenceSets; + } + + public String getRequestName() { + return requestName; + } + + public ImmutableMap<String, ObserveReferenceSet<?, R>> getReferenceSets() { + return referenceSets; + } + + public ImmutableMap<String,Date> getLastUpdateDates() { + ImmutableMap.Builder<String,Date> builder = ImmutableMap.builder(); + for (Map.Entry<String, ObserveReferenceSet<?, R>> entry : referenceSets.entrySet()) { + builder.put(entry.getKey(), entry.getValue().getLastUpdate()); + } + return builder.build(); + } + public static class Builder<R extends ObserveReference> { + + private final String requestName; + + private final ImmutableMap.Builder<String, ObserveReferenceSet<?, R>> referenceSetsMapBuilder; + + public Builder(String requestName) { + this.requestName = requestName; + this.referenceSetsMapBuilder = ImmutableMap.builder(); + } + + public Builder addKey(String name, ObserveReferenceSet<?, R> referenceSet) { + referenceSetsMapBuilder.put(name, referenceSet); + return this; + } + + public ObserveReferenceSetResult<R> build() { + return new ObserveReferenceSetResult<>(requestName, referenceSetsMapBuilder.build()); + } + } + +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferentialReference.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferentialReference.java new file mode 100644 index 0000000..f82dd81 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferentialReference.java @@ -0,0 +1,79 @@ +package fr.ird.observe.services.dto.reference; + +import com.google.common.base.MoreObjects; + +import java.util.Arrays; +import java.util.Date; + +/** + * Created on 13/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferentialReference extends ObserveReference { + + private static final long serialVersionUID = 1L; + + protected boolean needComment; + + protected boolean enabled; + + protected Date createDate; + + protected Date lastUpdate; + + protected long version; + + public boolean isNeedComment() { + return needComment; + } + + public void setNeedComment(boolean needComment) { + this.needComment = needComment; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public Date getLastUpdate() { + return lastUpdate; + } + + public void setLastUpdate(Date lastUpdate) { + this.lastUpdate = lastUpdate; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("id", id) + .add("needComment", needComment) + .add("enabled", enabled) + .add("version", version) + .add("createDate", createDate) + .add("lastUpdate", lastUpdate) + .add("values", Arrays.asList(values)) + .toString(); + } +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetDefinition.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetDefinition.java new file mode 100644 index 0000000..3a5f327 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetDefinition.java @@ -0,0 +1,76 @@ +package fr.ird.observe.services.dto.reference.definition; + +import fr.ird.observe.services.dto.IdDto; + +import java.io.Serializable; +import java.util.LinkedList; + +/** + * Pour définir ce que l'on doit retrouver dans un ensemble de références d'un même type. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferenceSetDefinition<D extends IdDto> implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * Le type du dto qui doit être transformé en références. + * {@link ObserveReferenceSetDefinition#getType()}. + */ + private final Class<D> type; + + private final String[] propertyNames; + + private final Class<?>[] propertyTypes; + + public static <D extends IdDto> Builder<D> builder(Class<D> type) { + return new Builder<>(type); + } + + protected ObserveReferenceSetDefinition(Class<D> type, Class<?>[] propertyTypes, String... propertyNames) { + this.type = type; + this.propertyTypes = propertyTypes; + this.propertyNames = propertyNames; + } + + public Class<D> getType() { + return type; + } + + public Class<?>[] getPropertyTypes() { + return propertyTypes; + } + + public String[] getPropertyNames() { + return propertyNames; + } + + public static class Builder<D extends IdDto> { + + private final Class<D> type; + + private final LinkedList<Class<?>> propertyTypes; + + private final LinkedList<String> propertyNames; + + public Builder(Class<D> type) { + this.type = type; + this.propertyTypes = new LinkedList<>(); + this.propertyNames = new LinkedList<>(); + } + + public <O> Builder<D> addProperty(Class<O> type, String name) { + propertyTypes.add(type); + propertyNames.add(name); + return this; + } + + public ObserveReferenceSetDefinition<D> build() { + return new ObserveReferenceSetDefinition<>(type, propertyTypes.toArray(new Class[propertyTypes.size()]), propertyNames.toArray(new String[propertyNames.size()])); + } + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetDefinitions.java similarity index 90% rename from observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java rename to observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetDefinitions.java index be4abc9..6e1f93b 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetDefinitions.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.service; +package fr.ird.observe.services.dto.reference.definition; import fr.ird.observe.services.dto.constants.GearType; import fr.ird.observe.services.dto.referential.CountryDto; @@ -64,13 +64,13 @@ import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; import fr.ird.observe.services.dto.referential.seine.WindDto; /** - * Contient les définitions de tous les ensembles de référence utilisables dans les services. + * Contient les définitions de tous les ensembles de référence reconnus dans l'application. * * Created on 11/11/15. * * @author Tony Chemit - chemit@codelutin.com */ -public enum ReferenceSetDefinitions { +public enum ObserveReferenceSetDefinitions { COUNTRY(newDefaultDefinitionBuilder(CountryDto.class)), @@ -102,9 +102,9 @@ public enum ReferenceSetDefinitions { PERSON(newDefinitionBuilder(PersonDto.class) .addProperty(String.class, PersonDto.PROPERTY_FIRST_NAME) .addProperty(String.class, PersonDto.PROPERTY_LAST_NAME) - .addProperty(String.class, PersonDto.PROPERTY_CAPTAIN) - .addProperty(String.class, PersonDto.PROPERTY_DATA_ENTRY_OPERATOR) - .addProperty(String.class, PersonDto.PROPERTY_OBSERVER)), + .addProperty(boolean.class, PersonDto.PROPERTY_CAPTAIN) + .addProperty(boolean.class, PersonDto.PROPERTY_DATA_ENTRY_OPERATOR) + .addProperty(boolean.class, PersonDto.PROPERTY_OBSERVER)), PROGRAM(newDefinitionBuilder(ProgramDto.class) .addProperty(GearType.class, ProgramDto.PROPERTY_GEAR_TYPE) @@ -225,23 +225,18 @@ public enum ReferenceSetDefinitions { .addProperty(String.class, WindDto.PROPERTY_SPEED_RANGE) ); - private final ReferenceSetDefinition definition; + private final ObserveReferenceSetDefinition definition; - ReferenceSetDefinitions(ReferenceSetDefinition.Builder definition) { - this.definition = definition.build(); - } - - public ReferenceSetDefinition<?> getDefinition() { - return definition; - } - - protected static <R extends ReferentialDto> ReferenceSetDefinition.Builder newDefinitionBuilder(Class<R> type) { - ReferenceSetDefinition.Builder<R> builder = ReferenceSetDefinition.builder(type); + protected static <R extends ReferentialDto> ObserveReferenceSetDefinition.Builder newDefinitionBuilder(Class<R> type) { + ObserveReferenceSetDefinition.Builder<R> builder = ObserveReferenceSetDefinition.builder(type); + if (I18nReferentialDto.class.isAssignableFrom(type)) { + builder.addProperty(String.class, I18nReferentialDto.PROPERTY_LABEL); + } return builder; } - protected static <R extends ReferentialDto> ReferenceSetDefinition.Builder newDefaultDefinitionBuilder(Class<R> type) { - ReferenceSetDefinition.Builder<R> builder = ReferenceSetDefinition + protected static <R extends ReferentialDto> ObserveReferenceSetDefinition.Builder newDefaultDefinitionBuilder(Class<R> type) { + ObserveReferenceSetDefinition.Builder<R> builder = ObserveReferenceSetDefinition .builder(type) .addProperty(String.class, ReferentialDto.PROPERTY_CODE); if (I18nReferentialDto.class.isAssignableFrom(type)) { @@ -250,4 +245,12 @@ public enum ReferenceSetDefinitions { return builder; } + ObserveReferenceSetDefinitions(ObserveReferenceSetDefinition.Builder definition) { + this.definition = definition.build(); + } + + public ObserveReferenceSetDefinition<?> getDefinition() { + return definition; + } + } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestDefinition.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestDefinition.java new file mode 100644 index 0000000..d3aa77c --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestDefinition.java @@ -0,0 +1,53 @@ +package fr.ird.observe.services.dto.reference.definition; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.IdDto; + +import java.io.Serializable; + +/** + * Pour définir une demande de récupération d'ensemble de références. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferenceSetRequestDefinition implements Serializable { + + private static final long serialVersionUID = 1L; + + private final ImmutableSet<ObserveReferenceSetRequestKeyDefinition> keys; + + public static <D extends IdDto> Builder<D> builder(Class<D> type) { + return new Builder<>(type); + } + + public ObserveReferenceSetRequestDefinition(ImmutableSet<ObserveReferenceSetRequestKeyDefinition> keys) { + this.keys = keys; + } + + public ImmutableSet<ObserveReferenceSetRequestKeyDefinition> getKeys() { + return keys; + } + + public static class Builder<D extends IdDto> { + + private final Class<D> parentType; + + private final ImmutableSet.Builder<ObserveReferenceSetRequestKeyDefinition> keysBuilder; + + public Builder(Class<D> parentType) { + this.parentType = parentType; + this.keysBuilder = ImmutableSet.builder(); + } + + public Builder<D> addKey(String name, ObserveReferenceSetDefinitions propertyDefinition) { + keysBuilder.add(new ObserveReferenceSetRequestKeyDefinition<>(parentType, propertyDefinition.getDefinition(), name)); + return this; + } + + public ObserveReferenceSetRequestDefinition build() { + return new ObserveReferenceSetRequestDefinition(keysBuilder.build()); + } + } +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestDefinitions.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestDefinitions.java new file mode 100644 index 0000000..e7e520f --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestDefinitions.java @@ -0,0 +1,50 @@ +package fr.ird.observe.services.dto.reference.definition; + +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.seine.TripSeineDto; + +/** + * Contient les définitions de tous les requêtes que les services proposent. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum ObserveReferenceSetRequestDefinitions { + + TRIP_SEINE_FORM(newBuilder(TripSeineDto.class) + .addKey(TripSeineDto.PROPERTY_OBSERVER, ObserveReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_CAPTAIN, ObserveReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_DATA_ENTRY_OPERATOR, ObserveReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_VESSEL, ObserveReferenceSetDefinitions.VESSEL) + .addKey(TripSeineDto.PROPERTY_OCEAN, ObserveReferenceSetDefinitions.OCEAN) + .addKey(TripSeineDto.PROPERTY_DEPARTURE_HARBOUR, ObserveReferenceSetDefinitions.HARBOUR) + .addKey(TripSeineDto.PROPERTY_LANDING_HARBOUR, ObserveReferenceSetDefinitions.HARBOUR) + .addKey(TripSeineDto.PROPERTY_PROGRAM, ObserveReferenceSetDefinitions.PROGRAM)),; + + public final ObserveReferenceSetRequestDefinition definition; + + public static <D extends IdDto> ObserveReferenceSetRequestDefinition.Builder<D> newBuilder(Class<D> parentType) { + return new ObserveReferenceSetRequestDefinition.Builder<>(parentType); + } + + ObserveReferenceSetRequestDefinitions(ObserveReferenceSetRequestDefinition.Builder definitionBuilder) { + this.definition = definitionBuilder.build(); + } + + public ObserveReferenceSetRequestDefinition getDefinition() { + return definition; + } + + public static ObserveReferenceSetRequestDefinition get(String definitionName) { + + ObserveReferenceSetRequestDefinitions requestDefinitions = valueOf(definitionName); + if (requestDefinitions == null) { + throw new IllegalArgumentException("No definition with name " + definitionName + "registred"); + } + + return requestDefinitions.getDefinition(); + + } + +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestKeyDefinition.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestKeyDefinition.java new file mode 100644 index 0000000..f5156b4 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/reference/definition/ObserveReferenceSetRequestKeyDefinition.java @@ -0,0 +1,74 @@ +package fr.ird.observe.services.dto.reference.definition; + +import com.google.common.base.MoreObjects; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; + +import java.util.Objects; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferenceSetRequestKeyDefinition<D extends IdDto> { + + private final Class<? extends IdDto> parentType; + + private final ObserveReferenceSetDefinition<D> referenceSetDefinition; + + private final String name; + + public ObserveReferenceSetRequestKeyDefinition(Class<? extends IdDto> parentType, ObserveReferenceSetDefinition<D> referenceSetDefinition, String name) { + this.parentType = parentType; + this.referenceSetDefinition = referenceSetDefinition; + this.name = name; + } + + public Class<? extends IdDto> getParentType() { + return parentType; + } + + public Class<D> getType() { + return referenceSetDefinition.getType(); + } + + public String getName() { + return name; + } + + public ObserveReferenceSetDefinition<D> getDefinition() { + return referenceSetDefinition; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ObserveReferenceSetRequestKeyDefinition)) return false; + ObserveReferenceSetRequestKeyDefinition that = (ObserveReferenceSetRequestKeyDefinition) o; + return Objects.equals(parentType, that.parentType) && + Objects.equals(referenceSetDefinition.getType(), that.referenceSetDefinition.getType()) && + Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(parentType, referenceSetDefinition.getType(), name); + } + + public boolean isReferential() { + Class<?> type = referenceSetDefinition.getType(); + return ReferentialDto.class.isAssignableFrom(type); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("parentType", parentType) + .add("name", name) + .add("type", referenceSetDefinition.getType()) + .add("propertyNames", referenceSetDefinition.getPropertyNames()) + .add("propertyTypes", referenceSetDefinition.getPropertyTypes()) + .toString(); + } +} diff --git a/observe-services-rest/src/test/java/fr/ird/observe/services/service/ReferenceSetServiceRestTest.java b/observe-services-rest/src/test/java/fr/ird/observe/services/service/ReferenceSetServiceRestTest.java new file mode 100644 index 0000000..e8a6eb2 --- /dev/null +++ b/observe-services-rest/src/test/java/fr/ird/observe/services/service/ReferenceSetServiceRestTest.java @@ -0,0 +1,96 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.TestClassResource; +import fr.ird.observe.services.TestMethodResource; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; +import fr.ird.observe.services.configuration.ObserveDataSourceConnection; +import fr.ird.observe.services.dto.reference.ObserveReferenceSet; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetRequest; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetResult; +import fr.ird.observe.services.dto.reference.ObserveReferentialReference; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetRequestDefinition; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetRequestDefinitions; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetRequestKeyDefinition; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import java.util.Date; + +/** + * Created on 13/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetServiceRestTest { + + @ClassRule + public static final TestClassResource testClassResource = new TestClassResource(); + + @Rule + public final TestMethodResource testMethodResource = new TestMethodResource(testClassResource); + + + protected ReferenceSetService service; + + @Before + public void setUp() throws Exception { + + ObserveDataSourceConfigurationRest dataSourceConfiguration = testMethodResource.getDataSourceConfiguration().clone(); + DataSourceService dataSourceService = testClassResource.newService(dataSourceConfiguration, DataSourceService.class); + ObserveDataSourceConnection connection = dataSourceService.open(dataSourceConfiguration); + + service = testClassResource.newService(connection, ReferenceSetService.class); + + } + + @Test + public void testGetTripSeineRequest() throws Exception { + + String requestName = ObserveReferenceSetRequestDefinitions.TRIP_SEINE_FORM.name(); + + ObserveReferenceSetRequest request = new ObserveReferenceSetRequest(); + request.setRequestName(requestName); + request.setLastUpdateDates(ImmutableMap.<String, Date>of()); + + ObserveReferenceSetResult<ObserveReferentialReference> referenceSetResult = service.loadReferentialReferenceSets(request); + Assert.assertNotNull(referenceSetResult); + Assert.assertEquals(requestName, referenceSetResult.getRequestName()); + ImmutableMap<String, ObserveReferenceSet<?, ObserveReferentialReference>> referenceSetsMap = referenceSetResult.getReferenceSets(); + Assert.assertNotNull(referenceSetsMap); + + ObserveReferenceSetRequestDefinition definition = ObserveReferenceSetRequestDefinitions.get(requestName); + + ImmutableSet<ObserveReferenceSetRequestKeyDefinition> keys = definition.getKeys(); + for (ObserveReferenceSetRequestKeyDefinition key : keys) { + + String name = key.getName(); + Assert.assertTrue(referenceSetsMap.containsKey(name)); + + } + Assert.assertEquals(keys.size(), referenceSetsMap.size()); + + ImmutableMap<String, Date> lastUpdateDates = referenceSetResult.getLastUpdateDates(); + + request.setRequestName(requestName); + request.setLastUpdateDates(lastUpdateDates); + + // Re run the request, should receive no data + + ObserveReferenceSetResult<ObserveReferentialReference> referenceSetResult2 = service.loadReferentialReferenceSets(request); + Assert.assertNotNull(referenceSetResult2); + Assert.assertEquals(requestName, referenceSetResult2.getRequestName()); + ImmutableMap<String, ObserveReferenceSet<?, ObserveReferentialReference>> referenceSetsMap2 = referenceSetResult2.getReferenceSets(); + Assert.assertNotNull(referenceSetsMap2); + Assert.assertTrue(referenceSetsMap2.isEmpty()); + + + + + } + +} \ No newline at end of file diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java index 25148fe..2cef244 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java @@ -24,7 +24,6 @@ package fr.ird.observe.services.builder; import com.google.common.base.Function; import com.google.common.base.Preconditions; -import fr.ird.observe.entities.referentiel.ReferenceEntities; import fr.ird.observe.entities.referentiel.ReferenceEntity; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.ObserveDtoBinders; @@ -33,16 +32,12 @@ import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDtos; -import fr.ird.observe.services.service.ReferenceSetRequestKeyDefinition; import org.hibernate.Hibernate; import org.hibernate.proxy.HibernateProxy; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import java.util.Set; @@ -55,110 +50,6 @@ import java.util.Set; */ public class EntityToReferentialReferenceDtoBuilder<E extends ReferenceEntity, D extends ReferentialDto> { - private Class<D> type; - - private Binder<E, E> binder; - - private String[] propertyNames; - - private String[] entityPropertyNames; - - private Class<?>[] propertyTypes; - - private int referentialLocaleOrdinal; - - public static <E extends ReferenceEntity, D extends ReferentialDto> EntityToReferentialReferenceDtoBuilder<E, D> of(ReferentialLocale referentialLocale, ReferenceSetRequestKeyDefinition<D> requestKeyDefinition, Class<E> entityType) { - - EntityToReferentialReferenceDtoBuilder<E, D> referenceDtoBuilder = new EntityToReferentialReferenceDtoBuilder<>(); - - referenceDtoBuilder.type = requestKeyDefinition.getType(); - referenceDtoBuilder.referentialLocaleOrdinal = referentialLocale.ordinal(); - referenceDtoBuilder.binder = BinderFactory.newBinder(entityType); - referenceDtoBuilder.propertyNames = requestKeyDefinition.getPropertyNames(); - - List<String> entityPropertyNames = new ArrayList<>(); - - for (String propertyName : referenceDtoBuilder.propertyNames) { - - if (ReferentialReferenceDto.PROPERTY_LABEL.contains(propertyName)) { - propertyName = referentialLocale.getLibelle(); - } - entityPropertyNames.add(propertyName); - } - referenceDtoBuilder.entityPropertyNames = entityPropertyNames.toArray(new String[entityPropertyNames.size()]); - referenceDtoBuilder.propertyTypes = requestKeyDefinition.getPropertyTypes(); - - return referenceDtoBuilder; - - } - - public ReferentialReferenceDto<D> build(E entity) { - - Preconditions.checkNotNull(entity, "'entity' can't be null"); - - // on extrait l' entité du proxy hibernate - if (entity instanceof HibernateProxy) { - Hibernate.initialize(entity); - entity = (E) ((HibernateProxy) entity).getHibernateLazyInitializer().getImplementation(); - } - - Map<String, Object> entityProperties = binder.obtainProperties(entity, true, entityPropertyNames); - - Serializable[] propertyValues = new Serializable[propertyTypes.length]; - for (int i = 0; i < propertyTypes.length; i++) { - String propertyName = propertyNames[i]; - - Serializable propertyValue = (Serializable) entityProperties.get(propertyName); - if (propertyValue != null) { - - Class<?> propertyType = propertyTypes[i]; - - if (propertyValue instanceof ReferenceEntity) { - - ReferenceEntity referentialEntity = (ReferenceEntity) propertyValue; - if (String.class.equals(propertyType)) { - - // Conversion - - propertyValue = ReferenceEntities.toString(referentialLocaleOrdinal, referentialEntity); - - } else { - - // on veut récupérer une référence - //TODO - - } - - } else { - - propertyValue = transform(propertyValue); - - } - - Preconditions.checkState(propertyType.isAssignableFrom(propertyValue.getClass()), "Le type de la propriété " + propertyName + " devrait être du type " + propertyType.getName() + " mais vaut: " + propertyValue); - - } - - propertyValues[i] = propertyValue; - - } - - ReferentialReferenceDto<D> result = new ReferentialReferenceDto<>(); - result.init(type, propertyNames, propertyTypes, propertyValues); - - result.setId(entity.getTopiaId()); - result.setEnabled(entity.isEnabled()); - result.setNeedComment(entity.isNeedComment()); - - result.setVersion(entity.getTopiaVersion()); - result.setCreateDate(entity.getTopiaCreateDate()); - result.setLastUpdate(entity.getLastUpdate()); - result.setEnabled(fr.ird.observe.entities.constants.ReferenceStatus.enabled == entity.getStatus()); - - return result; - - } - public static <E extends ReferenceEntity, D extends ReferentialDto> ReferentialReferenceDto<D> build(Class<D> dtoType, ReferentialLocale referentialLocale, E entity) { Preconditions.checkNotNull(dtoType, "'dtoType' can't be null"); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetBuilder.java new file mode 100644 index 0000000..bda5a57 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/reference/ObserveReferenceSetBuilder.java @@ -0,0 +1,250 @@ +package fr.ird.observe.services.dto.reference; + +import com.google.common.base.Defaults; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import fr.ird.observe.entities.referentiel.ReferenceEntities; +import fr.ird.observe.entities.referentiel.ReferenceEntity; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ObserveDtosInitializer; +import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetDefinition; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; +import org.hibernate.Hibernate; +import org.hibernate.proxy.HibernateProxy; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.ReflectUtil; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; + +/** + * Created on 13/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveReferenceSetBuilder<D extends IdDto, R extends ObserveReference> { + + private ObserveReferenceSetDefinition<D> definition; + + private Binder<TopiaEntity, TopiaEntity> binder; + + private String[] propertyNames; + + private String[] entityPropertyNames; + + private String i18nEntityPropertyName; + + private Class<?>[] propertyTypes; + + private int referentialLocaleOrdinal; + + private LinkedHashSet<R> references; + + private Date lastUpdateDate; + + public static <D extends IdDto, R extends ObserveReference> ObserveReferenceSetBuilder<D, R> of( + + ReferentialLocale referentialLocale, ObserveReferenceSetDefinition<D> definition, Class<TopiaEntity> entityType) { + + ObserveReferenceSetBuilder<D, R> referenceDtoBuilder = new ObserveReferenceSetBuilder<>(); + + referenceDtoBuilder.definition = definition; + referenceDtoBuilder.referentialLocaleOrdinal = referentialLocale.ordinal(); + referenceDtoBuilder.binder = BinderFactory.newBinder(entityType); + referenceDtoBuilder.propertyNames = definition.getPropertyNames(); + + List<String> entityPropertyNames = new ArrayList<>(); + + for (String propertyName : referenceDtoBuilder.propertyNames) { + + if (ReferentialReferenceDto.PROPERTY_LABEL.equals(propertyName)) { + propertyName = referenceDtoBuilder.i18nEntityPropertyName = referentialLocale.getLibelle(); + } + entityPropertyNames.add(propertyName); + } + referenceDtoBuilder.entityPropertyNames = entityPropertyNames.toArray(new String[entityPropertyNames.size()]); + referenceDtoBuilder.propertyTypes = definition.getPropertyTypes(); + referenceDtoBuilder.references = new LinkedHashSet<>(); + + return referenceDtoBuilder; + + } + + public ObserveReferenceSetBuilder<D, R> setLastUpdateDate(Date lastUpdateDate) { + this.lastUpdateDate = lastUpdateDate; + return this; + } + + public ObserveReferenceSet<D, R> build() { + return ObserveReferenceSet.of(definition, references, lastUpdateDate); + } + + public ObserveReferenceSetBuilder<D, R> addReferentialReference(TopiaEntity entity) { + + Map<String, Object> entityProperties = loadProperties(entity); + + Serializable[] propertyValues = new Serializable[propertyTypes.length]; + for (int i = 0; i < propertyTypes.length; i++) { + String propertyName = propertyNames[i]; + + if (ReferentialReferenceDto.PROPERTY_LABEL.equals(propertyName)) { + propertyName = i18nEntityPropertyName; + } + Serializable propertyValue = (Serializable) entityProperties.get(propertyName); + Class<?> propertyType = propertyTypes[i]; + + if (propertyValue == null) { + + if (propertyType.isPrimitive()) { + propertyValue = (Serializable) Defaults.defaultValue(propertyType); + } + + } else { + + if (propertyValue instanceof ReferenceEntity) { + + propertyValue = transformReferenceEntity(propertyType, (ReferenceEntity) propertyValue); + + } else { + + propertyValue = transform(propertyValue); + + } + + checkType(propertyName, propertyValue, propertyType); + + } + + propertyValues[i] = propertyValue; + + } + + ObserveReferentialReference result = new ObserveReferentialReference(); + + result.setValues(propertyValues); + result.setId(entity.getTopiaId()); + result.setVersion(entity.getTopiaVersion()); + result.setCreateDate(entity.getTopiaCreateDate()); + + ReferenceEntity referenceEntity = (ReferenceEntity) entity; + result.setEnabled(referenceEntity.isEnabled()); + result.setNeedComment(referenceEntity.isNeedComment()); + result.setLastUpdate(referenceEntity.getLastUpdate()); + result.setEnabled(fr.ird.observe.entities.constants.ReferenceStatus.enabled == referenceEntity.getStatus()); + + references.add((R) result); + + return this; + + } + + public ObserveReferenceSetBuilder<D, R> addReference(TopiaEntity entity) { + + Map<String, Object> entityProperties = loadProperties(entity); + + Serializable[] propertyValues = new Serializable[propertyTypes.length]; + for (int i = 0; i < propertyTypes.length; i++) { + String propertyName = propertyNames[i]; + + Serializable propertyValue = (Serializable) entityProperties.get(propertyName); + Class<?> propertyType = propertyTypes[i]; + + if (propertyValue == null) { + + if (propertyType.isPrimitive()) { + propertyValue = (Serializable) Defaults.defaultValue(propertyType); + } + + } else { + + if (propertyValue instanceof ReferenceEntity) { + + propertyValue = transformReferenceEntity(propertyType, (ReferenceEntity) propertyValue); + + } else if (propertyValue instanceof TopiaEntity) { + + //TODO + + } else { + + propertyValue = transform(propertyValue); + + } + + checkType(propertyName, propertyValue, propertyType); + + } + + propertyValues[i] = propertyValue; + + } + + ObserveReference result = new ObserveReference(); + result.setValues(propertyValues); + result.setId(entity.getTopiaId()); + + references.add((R) result); + + return this; + + } + + protected void checkType(String propertyName, Serializable propertyValue, Class<?> propertyType) { + if (propertyType.isPrimitive()) { + Preconditions.checkState(ReflectUtil.boxType(propertyType).isAssignableFrom(propertyValue.getClass()), "Le type de la propriété " + propertyName + " devrait être du type " + propertyType.getName() + " mais vaut: " + propertyValue); + } else { + Preconditions.checkState(propertyType.isAssignableFrom(propertyValue.getClass()), "Le type de la propriété " + propertyName + " devrait être du type " + propertyType.getName() + " mais vaut: " + propertyValue); + } + } + + protected Map<String, Object> loadProperties(TopiaEntity entity) { + + Preconditions.checkNotNull(entity, "'entity' can't be null"); + + // on extrait l' entité du proxy hibernate + if (entity instanceof HibernateProxy) { + Hibernate.initialize(entity); + entity = (TopiaEntity) ((HibernateProxy) entity).getHibernateLazyInitializer().getImplementation(); + } + + Map<String, Object> entityProperties = binder.obtainProperties(entity, true, entityPropertyNames); + return entityProperties; + + } + + protected Serializable transformReferenceEntity(Class<?> propertyType, ReferenceEntity referentialEntity) { + + Serializable result; + if (String.class.equals(propertyType)) { + + // Conversion + + result = ReferenceEntities.toString(referentialLocaleOrdinal, referentialEntity); + + } else { + + // on veut récupérer une référence + //TODO + result = null; + + } + + return result; + } + + protected Serializable transform(Object propertyValue) { + Function function = ObserveDtosInitializer.getEntityToDtoFunction(propertyValue); + if (function != null) { + propertyValue = function.apply(propertyValue); + } + return (Serializable) propertyValue; + } + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferenceSetServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferenceSetServiceTopia.java index 3178da1..0189f1a 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferenceSetServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferenceSetServiceTopia.java @@ -3,20 +3,25 @@ package fr.ird.observe.services.service; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import fr.ird.observe.entities.referentiel.ReferenceEntity; import fr.ird.observe.services.ObserveServiceTopia; -import fr.ird.observe.services.builder.EntityToReferentialReferenceDtoBuilder; import fr.ird.observe.services.dto.IdDto; -import fr.ird.observe.services.dto.ReferenceSetDto; -import fr.ird.observe.services.dto.ReferenceSetDtos; +import fr.ird.observe.services.dto.reference.ObserveReference; +import fr.ird.observe.services.dto.reference.ObserveReferenceSet; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetBuilder; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetRequest; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetResult; +import fr.ird.observe.services.dto.reference.ObserveReferentialReference; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetRequestDefinition; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetRequestDefinitions; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetRequestKeyDefinition; import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import fr.ird.observe.services.entity.EntitiesExtractor; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; import java.util.Collections; import java.util.Date; -import java.util.LinkedHashSet; import java.util.Map; /** @@ -26,27 +31,25 @@ import java.util.Map; */ public class ReferenceSetServiceTopia extends ObserveServiceTopia implements ReferenceSetService { + /** Logger. */ + private static final Log log = LogFactory.getLog(ReferenceSetServiceTopia.class); + @Override - public ReferentialReferenceSetResult loadDataReferenceSets(ReferenceSetRequest request) { + public ObserveReferenceSetResult<ObserveReference> loadDataReferenceSets(ObserveReferenceSetRequest request) { String requestName = request.getRequestName(); - ReferenceSetRequestDefinitions requestDefinitions = ReferenceSetRequestDefinitions.valueOf(requestName); - if (requestDefinitions == null) { - throw new IllegalArgumentException("No request with name " + requestName + "registred"); - } + ObserveReferenceSetRequestDefinition requestDefinition = ObserveReferenceSetRequestDefinitions.get(requestName); - ReferenceSetRequestDefinition requestDefinition = requestDefinitions.getDefinition(); + ObserveReferenceSetResult.Builder<ObserveReference> resultBuilder = ObserveReferenceSetResult.builder(requestName); - ReferentialReferenceSetResult.Builder resultBuilder = new ReferentialReferenceSetResult.Builder(request); + for (ObserveReferenceSetRequestKeyDefinition definition : requestDefinition.getKeys()) { - for (ReferenceSetRequestKeyDefinition requestKeyDefinition : requestDefinition.getKeys()) { + boolean referential = definition.isReferential(); + Preconditions.checkArgument(!referential, "Can't obtain referenceSet of referential here, but try with " + definition); - boolean referential = requestKeyDefinition.isReferential(); - Preconditions.checkArgument(!referential, "Can't obtain referenceSet of referential here, but try with " + requestKeyDefinition); + ObserveReferenceSet<IdDto, ObserveReference> referenceSet = loadDataReferenceSet(definition); - String name = requestKeyDefinition.getName(); - - ReferenceSetDto referenceSet = loadDataReferenceSet(requestKeyDefinition); - resultBuilder.addKey(name, referenceSet); + String name = definition.getName(); + addKey(resultBuilder, name, referenceSet); } @@ -55,73 +58,82 @@ public class ReferenceSetServiceTopia extends ObserveServiceTopia implements Ref } @Override - public ReferentialReferenceSetResult loadReferentialReferenceSets(ReferenceSetRequest request) { + public ObserveReferenceSetResult<ObserveReferentialReference> loadReferentialReferenceSets(ObserveReferenceSetRequest request) { String requestName = request.getRequestName(); - ReferenceSetRequestDefinitions requestDefinitions = ReferenceSetRequestDefinitions.valueOf(requestName); - if (requestDefinitions == null) { - throw new IllegalArgumentException("No request with name " + requestName + "registred"); - } - ReferenceSetRequestDefinition requestDefinition = requestDefinitions.getDefinition(); + ObserveReferenceSetRequestDefinition requestDefinition = ObserveReferenceSetRequestDefinitions.get(requestName); - ReferentialReferenceSetResult.Builder resultBuilder = new ReferentialReferenceSetResult.Builder(request); + ObserveReferenceSetResult.Builder<ObserveReferentialReference> resultBuilder = ObserveReferenceSetResult.builder(requestName); ImmutableMap<String, Date> lastUpdateDates = request.getLastUpdateDates(); - for (ReferenceSetRequestKeyDefinition requestKeyDefinition : requestDefinition.getKeys()) { + for (ObserveReferenceSetRequestKeyDefinition definition : requestDefinition.getKeys()) { - boolean referential = requestKeyDefinition.isReferential(); - Preconditions.checkArgument(referential, "Can't obtain referenceSet of data here, but try with " + requestKeyDefinition); + boolean referential = definition.isReferential(); + Preconditions.checkArgument(referential, "Can't obtain referenceSet of data here, but try with " + definition); - String name = requestKeyDefinition.getName(); + String name = definition.getName(); Date lastUpdateDate = lastUpdateDates.get(name); - ReferenceSetDto referenceSet = loadReferentialReferenceSet(requestKeyDefinition, lastUpdateDate); - resultBuilder.addKey(name, referenceSet); + ObserveReferenceSet<ReferentialDto, ObserveReferentialReference> referenceSet = loadReferentialReferenceSet(definition, lastUpdateDate); + addKey(resultBuilder, name, referenceSet); + } return resultBuilder.build(); } - protected <D extends IdDto> ReferenceSetDto<D> loadDataReferenceSet(ReferenceSetRequestKeyDefinition<D> requestKeyDefinition) { + protected <D extends IdDto, R extends ObserveReference> void addKey(ObserveReferenceSetResult.Builder<R> resultBuilder, String name, ObserveReferenceSet<D, R> referenceSet) { + if (referenceSet != null) { + if (log.isInfoEnabled()) { + log.info("Add reference set " + name + " : " + referenceSet); + } + resultBuilder.addKey(name, referenceSet); + } + } - Class<D> type = requestKeyDefinition.getType(); - Class<TopiaEntity> entityType = getEntityType(type); - String name = requestKeyDefinition.getName(); + protected <D extends IdDto> ObserveReferenceSet<D, ObserveReference> loadDataReferenceSet(ObserveReferenceSetRequestKeyDefinition<D> requestKeyDefinition) { + + Class<TopiaEntity> entityType = getEntityType(requestKeyDefinition.getType()); - Iterable<TopiaEntity> entitiesExtractor = getEntities(requestKeyDefinition, Collections.<String, Object>emptyMap()); + ObserveReferenceSetBuilder<D, ObserveReference> referenceBuilder = ObserveReferenceSetBuilder.of(serviceContext.getReferentialLocale(), requestKeyDefinition.getDefinition(), entityType); - //TODO - ReferenceSetDto<D> referenceSet = null; + Iterable<TopiaEntity> entities = getEntities(requestKeyDefinition, Collections.<String, Object>emptyMap()); + for (TopiaEntity entity : entities) { + + referenceBuilder.addReference(entity); + + } + + ObserveReferenceSet<D, ObserveReference> referenceSet = referenceBuilder.build(); return referenceSet; + } - protected <D extends ReferentialDto, E extends ReferenceEntity> ReferenceSetDto<D> loadReferentialReferenceSet(ReferenceSetRequestKeyDefinition<D> requestKeyDefinition, Date lastUpdateDate) { + protected <D extends ReferentialDto> ObserveReferenceSet<D, ObserveReferentialReference> loadReferentialReferenceSet(ObserveReferenceSetRequestKeyDefinition<D> requestKeyDefinition, Date lastUpdateDate) { - Class<D> type = requestKeyDefinition.getType(); - Class<E> entityType = getEntityType(type); - String name = requestKeyDefinition.getName(); + Class<TopiaEntity> entityType = getEntityType(requestKeyDefinition.getType()); Optional<Date> lastUpdateOptional = getLastUpdate(entityType); - ReferenceSetDto<D> referenceSet; - if (lastUpdateOptional.isPresent() && lastUpdateOptional.get().after(lastUpdateDate)) { + ObserveReferenceSet<D, ObserveReferentialReference> referenceSet; + if (lastUpdateOptional.isPresent() && (lastUpdateDate == null || lastUpdateOptional.get().after(lastUpdateDate))) { + + ObserveReferenceSetBuilder<D, ObserveReferentialReference> referenceBuilder = ObserveReferenceSetBuilder.of(serviceContext.getReferentialLocale(), requestKeyDefinition.getDefinition(), entityType); - EntityToReferentialReferenceDtoBuilder<E, D> referenceBuilder = EntityToReferentialReferenceDtoBuilder.of(serviceContext.getReferentialLocale(), requestKeyDefinition, entityType); + referenceBuilder.setLastUpdateDate(lastUpdateOptional.get()); - Iterable<E> entities = getEntities(requestKeyDefinition, Collections.<String, Object>emptyMap()); + Iterable<TopiaEntity> entities = getEntities(requestKeyDefinition, Collections.<String, Object>emptyMap()); - LinkedHashSet<ReferentialReferenceDto<D>> labels = new LinkedHashSet<>(); - for (E entity : entities) { + for (TopiaEntity entity : entities) { - ReferentialReferenceDto<D> dto = referenceBuilder.build(entity); - labels.add(dto); + referenceBuilder.addReferentialReference(entity); } - referenceSet = ReferenceSetDtos.newReferenceSetDto(type, name, labels, lastUpdateOptional.get()); + referenceSet = referenceBuilder.build(); } else { @@ -130,13 +142,12 @@ public class ReferenceSetServiceTopia extends ObserveServiceTopia implements Ref } return referenceSet; - } + } - protected <E extends TopiaEntity, D extends IdDto> Iterable<E> getEntities(ReferenceSetRequestKeyDefinition<D> requestKeyDefinition, + protected <E extends TopiaEntity, D extends IdDto> Iterable<E> getEntities(ObserveReferenceSetRequestKeyDefinition<D> requestKeyDefinition, Map<String, Object> dataContext) { - Class<D> type = requestKeyDefinition.getType(); Class<E> entityType = getEntityType(type); Class<TopiaEntity> entityParentType = getEntityType(requestKeyDefinition.getParentType()); @@ -157,6 +168,7 @@ public class ReferenceSetServiceTopia extends ObserveServiceTopia implements Ref } return entities; + } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferenceSetServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferenceSetServiceTopiaTest.java new file mode 100644 index 0000000..9af6322 --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferenceSetServiceTopiaTest.java @@ -0,0 +1,54 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetRequest; +import fr.ird.observe.services.dto.reference.definition.ObserveReferenceSetRequestDefinitions; +import fr.ird.observe.services.dto.reference.ObserveReferentialReference; +import fr.ird.observe.services.dto.reference.ObserveReferenceSetResult; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Set; + +/** + * Created on 13/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetServiceTopiaTest extends AbstractServiceTopiaTest { + + protected ReferenceSetService service; + + @Override + public Set<String> getTestNamesChangeDataBase() { + return ImmutableSet.of(); + } + + @Override + public String getScriptName() { + return "referentiel"; + } + + @Override + public void setUp() throws Exception { + super.setUp(); + + service = newService(ReferenceSetService.class); + + } + + @Test + public void testGetTripSeineRequest() throws Exception { + + String requestName = ObserveReferenceSetRequestDefinitions.TRIP_SEINE_FORM.name(); + ObserveReferenceSetRequest request = new ObserveReferenceSetRequest(); + request.setRequestName(requestName); + + ObserveReferenceSetResult<ObserveReferentialReference> referentialLabelSet = service.loadReferentialReferenceSets(request); + Assert.assertNotNull(referentialLabelSet); + Assert.assertEquals(requestName, referentialLabelSet.getRequestName()); + Assert.assertNotNull(referentialLabelSet.getReferenceSets()); + + } + +} \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git commit 65fcee2f8a94c1981cf00037d41a07a16dbed1ad Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Nov 14 02:12:49 2015 +0100 remove dead code --- .../fr/ird/observe/application/web/ObserveWebMotionRender.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionRender.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionRender.java index 32e82eb..07905fb 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionRender.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionRender.java @@ -56,14 +56,6 @@ public class ObserveWebMotionRender<T> extends Render { ObserveWebApplicationContext applicationContext = ObserveWebApplicationContext.getApplicationContext(context); -// if (model instanceof InvalidFormException || model instanceof FavoriteListImportException) { -// -// response.setStatus(HttpServletResponse.SC_BAD_REQUEST); -// -// } - - applicationContext.getGsonSupplier(); - Gson gson = applicationContext.getGsonSupplier().get(); String json = gson.toJson(model); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository observe. See http://git.codelutin.com/observe.git commit 30aadabb42bcdce8b7eea62cafd9acc8ac415779 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Nov 14 02:21:21 2015 +0100 Ajout d'une action pour recharger la configuration du serveur --- .../web/ObserveWebApplicationContext.java | 16 +++++++++++++++ .../web/controller/v1/ConfigurationController.java | 23 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationContext.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationContext.java index 9ace49b..912e808 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationContext.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationContext.java @@ -112,6 +112,22 @@ public class ObserveWebApplicationContext implements Closeable { } + public void reloadConfiguration() throws InvalidObserveWebUserPermissionException, InvalidObserveWebUsersException, InvalidObserveWebUserException, InvalidObserveWebDatabaseException, InvalidObserveWebDatabasesException, InvalidObserveWebDatabaseRoleException { + + // init databases + ObserveWebDatabasesHelper databasesHelper = new ObserveWebDatabasesHelper(); + databases = databasesHelper.load(applicationConfiguration.getDatabasesConfigurationFile()); + + // init users + ObserveWebUsersHelper usersHelper = new ObserveWebUsersHelper(); + users = usersHelper.load(databases, applicationConfiguration.getUsersConfigurationFile()); + + Version modelVersion = applicationConfiguration.getModelVersion(); + + securityApplicationContext.init(databases, users, modelVersion); + + } + @Override public void close() { diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ConfigurationController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ConfigurationController.java index 765b4d2..2763cd4 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ConfigurationController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ConfigurationController.java @@ -23,8 +23,14 @@ package fr.ird.observe.application.web.controller.v1; */ import com.google.common.collect.ImmutableMap; +import fr.ird.observe.application.web.configuration.db.InvalidObserveWebDatabaseException; +import fr.ird.observe.application.web.configuration.db.InvalidObserveWebDatabaseRoleException; +import fr.ird.observe.application.web.configuration.db.InvalidObserveWebDatabasesException; import fr.ird.observe.application.web.configuration.db.ObserveWebDatabases; import fr.ird.observe.application.web.configuration.db.ObserveWebDatabasesHelper; +import fr.ird.observe.application.web.configuration.user.InvalidObserveWebUserException; +import fr.ird.observe.application.web.configuration.user.InvalidObserveWebUserPermissionException; +import fr.ird.observe.application.web.configuration.user.InvalidObserveWebUsersException; import fr.ird.observe.application.web.configuration.user.ObserveWebUsers; import fr.ird.observe.application.web.configuration.user.ObserveWebUsersHelper; import fr.ird.observe.application.web.controller.ObserveWebMotionController; @@ -155,5 +161,22 @@ public class ConfigurationController extends ObserveWebMotionController { } + public RenderContent reload() throws IOException, InvalidObserveWebUserPermissionException, InvalidObserveWebDatabaseException, InvalidObserveWebDatabasesException, InvalidObserveWebDatabaseRoleException, InvalidObserveWebUsersException, InvalidObserveWebUserException { + + // Reset all connexions + + ObserveWebSecurityApplicationContext securityApplicationContext = getSecurityApplicationContext(); + ImmutableMap<String, ObserveDataSourceConfigurationAndConnection> authenticationTokensCache = securityApplicationContext.getConfigurationByAuthenticationToken(); + + for (String authenticationToken : authenticationTokensCache.keySet()) { + securityApplicationContext.invalidateAuthenticationToken(authenticationToken); + } + + getApplicationContext().reloadConfiguration(); + + return home(); + + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm