branch feature/7591 updated (7c2189f -> b06e4ad)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7591 in repository observe. See http://git.codelutin.com/observe.git from 7c2189f mise en place de la validation de DTO (refs #7591) new b06e4ad migration de l'ecran de route (refs #7591) The 1 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 b06e4ad0836465df59de7ddfd08e772a7abaad30 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Oct 9 08:56:45 2015 +0200 migration de l'ecran de route (refs #7591) Summary of changes: .../java/fr/ird/observe/ObserveServiceHelper.java | 4 +- .../observe/ObserveSwingApplicationContext.java | 11 +- .../observe/ui/content/ContentUIInitializer.java | 2 +- .../open/impl/longline/TripLonglineUIHandler.java | 4 +- .../ui/content/open/impl/seine/RouteUI.jaxx | 3 +- .../ui/content/open/impl/seine/RouteUIHandler.java | 136 +------ .../ui/content/open/impl/seine/RouteUIModel.java | 24 +- .../open/impl/seine/TripSeineUIHandler.java | 2 +- .../ui/content/ref/ContentReferenceUIHandler.java | 2 +- .../content/table/impl/seine/NonTargetCatchUI.jaxx | 2 +- .../fr/ird/observe/ui/tree/RouteSeineNode.java | 2 +- .../controller/v1/DataSourceServiceController.java | 6 + .../v1/longline/TripLonglineServiceController.java | 2 +- .../v1/seine/RouteServiceController.java | 5 + .../v1/seine/TripSeineServiceController.java | 2 +- .../field/AbstractEspeceFieldValidator.java | 295 -------------- .../field/ActivityDebutDePecheSaneValidator.java | 199 --------- .../field/ActivityFinDePecheSaneValidator.java | 237 ----------- .../field/ActivityFinDeVeilleExistsValidator.java | 185 --------- .../field/ActivitySimpleSpeedValidator.java | 183 --------- .../validation/field/ActivitySpeedValidator.java | 222 ---------- .../field/RouteActivitysFieldValidator.java | 135 ------- .../field/SetLonglineUniqueHomeIdValidator.java | 102 ----- .../field/SetLonglineUniqueNumberValidator.java | 102 ----- .../field/SpeciesLengthFieldValidator.java | 49 --- .../field/SpeciesWeightFieldValidator.java | 49 --- .../field/VesselActivityFieldValidator.java | 446 --------------------- .../field/ActivitySeineSpeedValidatorTest.java | 121 ------ .../services/service/DataSourceService.java | 6 + .../service/longline/TripLonglineService.java | 2 +- .../services/service/seine/RouteService.java | 4 +- .../services/service/seine/TripSeineService.java | 2 +- .../services/dto/{ => result}/SaveResultDtos.java | 2 +- .../src/main/xmi/observe-services-dto-common.zargo | Bin 42247 -> 42474 bytes .../main/xmi/observe-services-dto-seine.properties | 1 + .../src/main/xmi/observe-services-dto-seine.zargo | Bin 59456 -> 59881 bytes .../services/dto/ObserveDtosInitializer.java | 16 +- .../services/service/DataSourceServiceTopia.java | 14 + .../service/longline/TripLonglineServiceTopia.java | 4 +- .../services/service/seine/RouteServiceTopia.java | 44 +- .../service/seine/TripSeineServiceTopia.java | 4 +- .../service/seine/TripSeineServiceTopiaTest.java | 2 +- 42 files changed, 136 insertions(+), 2497 deletions(-) delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/AbstractEspeceFieldValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityDebutDePecheSaneValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityFinDePecheSaneValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityFinDeVeilleExistsValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivitySimpleSpeedValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivitySpeedValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/RouteActivitysFieldValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SetLonglineUniqueHomeIdValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SetLonglineUniqueNumberValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SpeciesLengthFieldValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SpeciesWeightFieldValidator.java delete mode 100644 observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/VesselActivityFieldValidator.java delete mode 100644 observe-entities-validation/src/test/java/fr/ird/observe/business/validation/field/ActivitySeineSpeedValidatorTest.java rename observe-services-model/src/main/java/fr/ird/observe/services/dto/{ => result}/SaveResultDtos.java (87%) -- 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/7591 in repository observe. See http://git.codelutin.com/observe.git commit b06e4ad0836465df59de7ddfd08e772a7abaad30 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Oct 9 08:56:45 2015 +0200 migration de l'ecran de route (refs #7591) --- .../java/fr/ird/observe/ObserveServiceHelper.java | 4 +- .../observe/ObserveSwingApplicationContext.java | 11 +- .../observe/ui/content/ContentUIInitializer.java | 2 +- .../open/impl/longline/TripLonglineUIHandler.java | 4 +- .../ui/content/open/impl/seine/RouteUI.jaxx | 3 +- .../ui/content/open/impl/seine/RouteUIHandler.java | 136 +------ .../ui/content/open/impl/seine/RouteUIModel.java | 24 +- .../open/impl/seine/TripSeineUIHandler.java | 2 +- .../ui/content/ref/ContentReferenceUIHandler.java | 2 +- .../content/table/impl/seine/NonTargetCatchUI.jaxx | 2 +- .../fr/ird/observe/ui/tree/RouteSeineNode.java | 2 +- .../controller/v1/DataSourceServiceController.java | 6 + .../v1/longline/TripLonglineServiceController.java | 2 +- .../v1/seine/RouteServiceController.java | 5 + .../v1/seine/TripSeineServiceController.java | 2 +- .../field/AbstractEspeceFieldValidator.java | 295 -------------- .../field/ActivityDebutDePecheSaneValidator.java | 199 --------- .../field/ActivityFinDePecheSaneValidator.java | 237 ----------- .../field/ActivityFinDeVeilleExistsValidator.java | 185 --------- .../field/ActivitySimpleSpeedValidator.java | 183 --------- .../validation/field/ActivitySpeedValidator.java | 222 ---------- .../field/RouteActivitysFieldValidator.java | 135 ------- .../field/SetLonglineUniqueHomeIdValidator.java | 102 ----- .../field/SetLonglineUniqueNumberValidator.java | 102 ----- .../field/SpeciesLengthFieldValidator.java | 49 --- .../field/SpeciesWeightFieldValidator.java | 49 --- .../field/VesselActivityFieldValidator.java | 446 --------------------- .../field/ActivitySeineSpeedValidatorTest.java | 121 ------ .../services/service/DataSourceService.java | 6 + .../service/longline/TripLonglineService.java | 2 +- .../services/service/seine/RouteService.java | 4 +- .../services/service/seine/TripSeineService.java | 2 +- .../services/dto/{ => result}/SaveResultDtos.java | 2 +- .../src/main/xmi/observe-services-dto-common.zargo | Bin 42247 -> 42474 bytes .../main/xmi/observe-services-dto-seine.properties | 1 + .../src/main/xmi/observe-services-dto-seine.zargo | Bin 59456 -> 59881 bytes .../services/dto/ObserveDtosInitializer.java | 16 +- .../services/service/DataSourceServiceTopia.java | 14 + .../service/longline/TripLonglineServiceTopia.java | 4 +- .../services/service/seine/RouteServiceTopia.java | 44 +- .../service/seine/TripSeineServiceTopia.java | 4 +- .../service/seine/TripSeineServiceTopiaTest.java | 2 +- 42 files changed, 136 insertions(+), 2497 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ObserveServiceHelper.java b/observe-application-swing/src/main/java/fr/ird/observe/ObserveServiceHelper.java index c930dab..fdee002 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ObserveServiceHelper.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ObserveServiceHelper.java @@ -23,8 +23,8 @@ package fr.ird.observe; import fr.ird.observe.business.db.DataContext; import fr.ird.observe.business.gps.GPSService; -import fr.ird.observe.business.validation.ValidationContext; -import fr.ird.observe.business.validation.ValidationService; +import fr.ird.observe.validation.ValidationContext; +import fr.ird.observe.validation.ValidationService; import fr.ird.observe.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java index fc9dd44..5ee0f06 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java @@ -25,8 +25,8 @@ import com.google.common.base.Preconditions; import fr.ird.observe.business.BinderService; import fr.ird.observe.business.db.DataContext; import fr.ird.observe.business.gps.GPSService; -import fr.ird.observe.business.validation.ObserveSwingValidator; -import fr.ird.observe.business.validation.ValidationContext; +import fr.ird.observe.validation.ObserveSwingValidator; +import fr.ird.observe.validation.ValidationContext; import fr.ird.observe.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.db.constantes.DbMode; @@ -361,8 +361,6 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext { setDataSource(null); } - getValidationContext().closeDataSource(); - // fermeture du context principal clear(); @@ -650,11 +648,6 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext { super.onClosing(event); - ObserveSwingDataSource source = event.getSource(); - - // on dettache la validation - getValidationContext().closeDataSource(); - ObserveMainUI mainUI = getObserveMainUI(); DataContext dataContext = getDataContext(); dataContext.setEnabled(false); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java index da0148a..1ec336c 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java @@ -26,7 +26,7 @@ import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import fr.ird.observe.ObserveSwingApplicationContext; -import fr.ird.observe.business.validation.ObserveSwingValidator; +import fr.ird.observe.validation.ObserveSwingValidator; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ReferenceDto; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java index 23bf984..2b0eced 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java @@ -27,10 +27,10 @@ import fr.ird.observe.business.db.DataContext; import fr.ird.observe.business.db.constants.DataContextType; import fr.ird.observe.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.services.dto.FormDto; -import fr.ird.observe.services.dto.SaveResultDto; import fr.ird.observe.services.dto.TripMapDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineDtos; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.longline.TripLonglineService; import fr.ird.observe.ui.content.ContentMode; import fr.ird.observe.ui.content.open.ContentOpenableUIHandler; @@ -272,8 +272,6 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline log.debug("endDate = " + endDate); } - bean.setOpen(true); - SaveResultDto saveResult = getTripLonglineService().save(bean); bean.setId(saveResult.getId()); bean.setLastUpdate(saveResult.getLastUpdate()); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUI.jaxx index 3031ea9..f7cca18 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUI.jaxx @@ -50,8 +50,7 @@ beanClass='fr.ird.observe.services.dto.seine.RouteDto' errorTableModel='{getErrorTableModel()}' context='n1-update'> - <!--FIXME--> - <!--<field name='activitySeine' component='{actionDown}'/>--> + <field name='activitySeine' component='{actionDown}'/> </BeanValidator> <!-- formulaire --> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java index 1855ff6..5162792 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java @@ -25,6 +25,8 @@ import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.business.db.DataContext; import fr.ird.observe.business.db.constants.DataContextType; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; import fr.ird.observe.services.dto.result.TripChildSaveResultDto; import fr.ird.observe.services.dto.seine.ActivitySeineDto; @@ -83,7 +85,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { } // route deja existante - if (dataContext.isSelectedOpen(RouteDto.class)) { + if (getOpenDataManager().isOpenRoute(routeId)) { // la route est ouverte return ContentMode.UPDATE; @@ -127,9 +129,6 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { log.info(prefix + "content mode = " + mode); } - //FIXME -// DataService dataService = getDataService(); - RouteDto editBean = getBean(); boolean create = routeId == null; @@ -145,12 +144,6 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { // update mode formDto = getRouteService().loadToEdit(routeId); - //FIXME -// if (!editBean.isActivitySeineEmpty()) { -// -// // on force le trie des activitys -// ActivitySeines.sort(editBean.getActivitySeine()); -// } } getModel().setFormDto(formDto); @@ -159,38 +152,6 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { finalizeOpenUI(mode, create); } -// @Override -// protected Route onPreCreate(TopiaContext tx, Object parent, Route bean) throws TopiaException { -// -// TripSeine parentBean = (TripSeine) parent; -// Route lastRoute = parentBean.getLastRoute(); -// -// Date date; -// if (lastRoute == null) { -// -// // aucune route defini, on utilise la date courante -// date = new Date(); -// -// } else { -// -// // une route precedente est definie sur la maree -// // le jour d'observation est le jour suivant celui de la -// // derniere route -// date = DateUtils.addDays(lastRoute.getDate(), 1); -// -// // le loch du matin est le loch du soir de la derniere route -// bean.setStartLogValue(lastRoute.getEndLogValue()); -// } -// -// bean.setDate(DateUtil.getDay(date)); -// -// if (log.isInfoEnabled()) { -// log.info("Will use date : " + bean.getDate()); -// log.info("Will loch matin ast last loch soir : " + bean.getStartLogValue()); -// } -// return bean; -// } - @Override public void startEditUI(String... binding) { @@ -245,19 +206,19 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { TripChildSaveResultDto saveResult = getRouteService().save(tripId, bean); bean.setId(saveResult.getId()); + bean.setLastUpdate(saveResult.getLastUpdate()); setUpdateMareeNodeTag(saveResult.isTripEndDateUpdated()); - //FIXME -// obtainChildPosition(bean, dataService, dataSource); + obtainChildPosition(bean); return true; } @Override protected int getOpenablePosition(String parentId, RouteDto bean) { - //TODO - return 0; + int position = getRouteService().getRoutePositionInTripSeine(parentId, bean.getId()); + return position; } @Override @@ -272,44 +233,6 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { repaintTripNode(); } - //FIXME -// @Override -// protected Route onCreate(TopiaContext tx, Object parent, Route editBean) throws TopiaException { -// -// TripSeine parentBean = (TripSeine) parent; -// -// // creation de la route -// Route beanToSave = ObserveDAOHelper.getRouteDAO(tx).create(); -// editBean.setTopiaId(beanToSave.getTopiaId()); -// -// // ajout de la route dans la amree -// parentBean.addRoute(beanToSave); -// -// // on renseigne le jour d'observation car on en a besoin pour -// // mettre la date de fin de la maree -// beanToSave.setDate(editBean.getDate()); -// -// return beanToSave; -// } - - //FIXME -// @Override -// protected Route onUpdate(TopiaContext tx, Object parent, Route beanToSave) throws TopiaException { -// -// Route editBean = getBean(); -// -// // on conserve l'ancienne date d'observation -// Date oldDate = DateUtil.getDay(beanToSave.getDate()); -// -// // recopie des propriétés vers le bean a sauver -// getLoadBinder().copyExcluding(editBean, beanToSave, Route.PROPERTY_ACTIVITY_SEINE); -// -// // si le jour a change, il faut mettre à jour les dates des activitéset des sets -// dateHasChanged = !oldDate.equals(editBean.getDate()); -// -// return beanToSave; -// } - @Override protected boolean doDelete(RouteDto bean) throws Exception { @@ -332,15 +255,6 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { return true; } -// @Override -// protected void onDelete(TopiaContext tx, Object parent, Route beanToDelete) { -// TripSeine parentBean = (TripSeine) parent; -// -// // suppression de la route -// parentBean.removeRoute(beanToDelete); -// -// } - @Override protected boolean doOpenData() { boolean result = getOpenDataManager().canOpenRoute(getSelectedParentId()); @@ -357,8 +271,8 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { // on doit vérifier qu'il existe une activité de fin // de veille (type activity vessel == 16) - //FIXME -// boolean mustAddFinVeille = !route.isActivityFindDeVeilleFound(); + + boolean mustAddFinVeille = !RouteDtos.isActivityFindDeVeilleFound(route); boolean createActivityFinDeVeille = false; boolean closeActivityFinDeVeille = false; @@ -367,8 +281,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { ObserveTreeHelper treeHelper = getTreeHelper(getUi()); ObserveNode routeNode = treeHelper.getSelectedNode(); - //FIXME -// if (mustAddFinVeille) { + if (mustAddFinVeille) { // on indique à l'observer qu'il doit créer une activité de type // 16 @@ -417,8 +330,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { gotoActivityFinDeVeille = true; break; } - //FIXME -// } + } if (createActivityFinDeVeille) { @@ -467,19 +379,18 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { ActivitySeineUI selectedUI = (ActivitySeineUI) ObserveSwingApplicationContext.get().getSelectedContentUI(); // on recupère l'activity de fin de veille - VesselActivitySeineDto vesselActivitySeine = null; - - for (Object o : selectedUI.getVesselActivitySeine().getData()) { - VesselActivitySeineDto a = (VesselActivitySeineDto) o; -// if (ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE.equals(a.getCode())) { -// vesselActivitySeine = a; -// break; -// } + ReferentialReferenceDto<VesselActivitySeineDto> vesselActivitySeine = null; + + for (ReferenceDto<VesselActivitySeineDto> refVesselActivity : selectedUI.getVesselActivitySeine().getData()) { + + if (ActivitySeineDto.ACTIVITY_FIN_DE_VEILLE.equals(refVesselActivity.getPropertyValue(VesselActivitySeineDto.PROPERTY_CODE))) { + vesselActivitySeine = (ReferentialReferenceDto) refVesselActivity; + break; + } } // on la positionne sur le bean d'édition - // FIXME -// selectedUI.getBean().setVesselActivitySeine(vesselActivitySeine); + selectedUI.getBean().setVesselActivitySeine(vesselActivitySeine); if (close) { // on sauvegarde l'activity @@ -497,15 +408,10 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { @Override protected boolean obtainCanReopen(boolean create) { - - DataContext dataContext = getDataContext(); - // on peut reouvrir une route si : // - pas de route ouverte // - la maree courante est ouverte - boolean canReopen = !create && - dataContext.isSelectedOpen(TripSeineDto.class) && - !dataContext.isOpenRoute(); + boolean canReopen = !create && getOpenDataManager().canOpenRoute(getSelectedParentId()); return canReopen; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIModel.java index fcca4bb..970b755 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIModel.java @@ -23,9 +23,9 @@ package fr.ird.observe.ui.content.open.impl.seine; */ import fr.ird.observe.business.BinderService; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.RouteDto; import fr.ird.observe.ui.content.open.ContentOpenableUIModel; +import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderModelBuilder; /** @@ -51,29 +51,11 @@ public class RouteUIModel extends ContentOpenableUIModel<RouteDto> { RouteDto.PROPERTY_START_LOG_VALUE, RouteDto.PROPERTY_END_LOG_VALUE, RouteDto.PROPERTY_CHECK_LEVEL, - //FIXME -// RouteDto.PROPERTY_ACTIVITY_SEINE, + RouteDto.PROPERTY_ACTIVITY_SEINE, RouteDto.PROPERTY_OPEN, RouteDto.PROPERTY_COMMENT); - BinderModelBuilder<ActivitySeineDto, ActivitySeineDto> builder2 = binderService.newBinderBuilder( - ActivitySeineDto.class, - //FIXME -// ActivitySeineDto.PROPERTY_QUADRANT, - ActivitySeineDto.PROPERTY_LATITUDE, - ActivitySeineDto.PROPERTY_LONGITUDE, - ActivitySeineDto.PROPERTY_TIME, - ActivitySeineDto.PROPERTY_SEA_SURFACE_TEMPERATURE, - ActivitySeineDto.PROPERTY_REASON_FOR_NO_FISHING, - ActivitySeineDto.PROPERTY_VESSEL_ACTIVITY_SEINE, - ActivitySeineDto.PROPERTY_WIND, - ActivitySeineDto.PROPERTY_OPEN); - - //FIXME -// TopiaEntityBinder<ActivitySeineDto> binder = -// binderService.registerTopiaBinder(ActivitySeineDto.class, builder2, binderName); - -// builder.addCollectionBinder(binder, RouteDto.PROPERTY_ACTIVITY_SEINE); + builder.addCollectionStrategy(Binder.CollectionStrategy.duplicate, RouteDto.PROPERTY_ACTIVITY_SEINE); return builder; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java index 83de93e..faa8f50 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java @@ -26,8 +26,8 @@ import fr.ird.observe.business.db.DataContext; import fr.ird.observe.business.db.constants.DataContextType; import fr.ird.observe.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.services.dto.FormDto; -import fr.ird.observe.services.dto.SaveResultDto; import fr.ird.observe.services.dto.TripMapDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.dto.seine.TripSeineDtos; import fr.ird.observe.services.service.seine.TripSeineService; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java index eeae2be..1adb75e 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java @@ -24,7 +24,7 @@ package fr.ird.observe.ui.content.ref; import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.business.db.DataContext; -import fr.ird.observe.business.validation.ValidationContext; +import fr.ird.observe.validation.ValidationContext; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.services.dto.IdDto; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.jaxx index 1b6c48a..9636945 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.jaxx @@ -40,7 +40,7 @@ fr.ird.observe.services.dto.referential.SpeciesDto fr.ird.observe.services.dto.referential.seine.ReasonForDiscardDto fr.ird.observe.ui.content.table.* - fr.ird.observe.business.validation.ObserveSwingValidator + fr.ird.observe.validation.ObserveSwingValidator jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.bean.BeanComboBox diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/RouteSeineNode.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/RouteSeineNode.java index e6843fe..9793a41 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/RouteSeineNode.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/RouteSeineNode.java @@ -47,7 +47,7 @@ public class RouteSeineNode extends DtoNodeSupport<RouteDto> { @Override protected ReferenceDto<RouteDto> fetchEntity() { RouteService routeService = ObserveSwingApplicationContext.get().newService(RouteService.class); - FormDto<RouteDto> formDto = routeService.loadToRead(entity.getId()); + FormDto<RouteDto> formDto = routeService.loadToRead(getId()); ReferenceDto<RouteDto> referenceDto = ReferenceDtos.newReferenceDto(RouteDto.class, Lists.newArrayList(RouteDto.PROPERTY_ID, diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java index 5f486e6..bd05431 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java @@ -34,6 +34,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConnectionRest; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; +import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.service.BabModelVersionException; @@ -126,6 +127,11 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport } @Override + public <D extends IdDto> D getObserveDto(Class<D> dtoType, String id) { + return getAuthenticatedService().getObserveDto(dtoType, id); + } + + @Override public void migrateData() { getAuthenticatedService().migrateData(); } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/TripLonglineServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/TripLonglineServiceController.java index 7c44158..f302220 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/TripLonglineServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/TripLonglineServiceController.java @@ -25,9 +25,9 @@ package fr.ird.observe.application.web.controller.v1.longline; import fr.ird.observe.application.web.controller.v1.ObserveAuthenticatedServiceControllerSupport; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceSetDto; -import fr.ird.observe.services.dto.SaveResultDto; import fr.ird.observe.services.dto.TripMapDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.longline.TripLonglineService; /** diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/RouteServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/RouteServiceController.java index 309ad47..bc3ae09 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/RouteServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/RouteServiceController.java @@ -44,6 +44,11 @@ public class RouteServiceController extends ObserveAuthenticatedServiceControlle } @Override + public int getRoutePositionInTripSeine(String tripSeineId, String routeId) { + return service.getRoutePositionInTripSeine(tripSeineId, routeId); + } + + @Override public FormDto<RouteDto> loadToRead(String routeId) { return service.loadToRead(routeId); } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/TripSeineServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/TripSeineServiceController.java index 53a1760..e1b3d91 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/TripSeineServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/TripSeineServiceController.java @@ -25,8 +25,8 @@ package fr.ird.observe.application.web.controller.v1.seine; import fr.ird.observe.application.web.controller.v1.ObserveAuthenticatedServiceControllerSupport; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceSetDto; -import fr.ird.observe.services.dto.SaveResultDto; import fr.ird.observe.services.dto.TripMapDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.seine.TripSeineService; diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/AbstractEspeceFieldValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/AbstractEspeceFieldValidator.java deleted file mode 100644 index 333b3d2..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/AbstractEspeceFieldValidator.java +++ /dev/null @@ -1,295 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.referentiel.Species; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * <!-- START SNIPPET: javadoc --> - * Ce validateur verifie qu'une espece respece bien les tailles ou - * les poids définis par les bornes de l'espece : - * <ul> - * <li>minLength</li> - * <li>maxLength</li> - * <li>minWeight</li> - * <li>maxWeight</li> - * </ul> - * <p/> - * Lorsqu'il s'agit d'une espece faune, si aucune borne n'est trouvée, alors - * on se base sur les bornes définis dans son groupe d'espece (si il est défini). - * <p/> - * Le paramètre {@link #ratio} permet de spécifier une marge à appliquer sur - * les bornes, il s'agit d'un pourcentage décimal. - * <p/> - * Example : si ratio = 10, alors on utilise les bornes suivantes : - * <pre> - * bMin -10% et bMax + 10% - * </pre> - * <!-- END SNIPPET: javadoc --> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public abstract class AbstractEspeceFieldValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(AbstractEspeceFieldValidator.class); - - public static class Bound { - - private Float min; - - private Float max; - - Bound(Float min, Float max) { - this.min = min; - this.max = max; - } - - public Float getMin() { - return min; - } - - public Float getMax() { - return max; - } - - public Bound applyRatio(float ratio) { - float delta = min / 100 * ratio; - float min = this.min - delta; - if (min < 0) { - min = 0f; - } - delta = max / 100 * ratio; - float max = this.max + delta; - return new Bound(min, max); - } - - @Override - public String toString() { - return super.toString() + '<' + min + ',' + max + '>'; - } - } - - /** - * la stack de validation interceptée lors de la création du validateur. - * <p/> - * Utilisée pour pousser des données dans le context. - */ - protected ValueStack valueStack; - - /** le ratio a appliquer sur les bornes définies dans le référentiel */ - protected Float ratio; - - /** - * Une expression qui si elle est remplie doit être vérifié avant de faire - * la validation par borne, si l'expression n'est pas vérifiée, alors - * le test sur les borne n'est pas effectué. - * - * @since 2.3 - */ - protected String expression; - - protected String speciesField = "espece"; - - public ValueStack getValueStack() { - return valueStack; - } - - public String getSpeciesField() { - return speciesField; - } - - @Override - public void setValueStack(ValueStack valueStack) { - this.valueStack = valueStack; - super.setValueStack(valueStack); - } - - public void setSpeciesField(String speciesField) { - this.speciesField = speciesField; - } - - public void setRatio(float ratio) { - this.ratio = ratio; - } - - public void setExpression(String expression) { - this.expression = expression; - } - - protected abstract Float getBoundMin(Species referentiel); - - protected abstract Float getBoundMax(Species referentiel); - - protected boolean shouldValidate(Object object) throws ValidationException { - Object obj = null; - Boolean answer; - if (StringUtils.isNotEmpty(expression)) { - try { - obj = getFieldValue(expression, object); - } catch (ValidationException e) { - throw e; - } catch (Exception e) { - // let this pass, but it will be logged right below - } - - if (obj != null && obj instanceof Boolean) { - answer = (Boolean) obj; - } else { - answer = false; - if (log.isWarnEnabled()) { - log.warn("Got result of " + obj + - " when trying to get Boolean with expression [" + - expression + "]."); - } - } - } else { - - // no pre-expression, always wants to validate - answer = true; - } - - return answer; - } - - @Override - public void validate(Object object) throws ValidationException { - - if (ratio == null) { - throw new ValidationException("No parameter 'ratio' filled"); - } - - String fieldName = getFieldName(); - if (fieldName == null) { - throw new ValidationException("No parameter 'fieldName' filled"); - } - - String speciesFieldName = getSpeciesField(); - if (speciesFieldName == null) { - throw new ValidationException("No parameter 'speciesFieldName' filled"); - } - - boolean shouldValidate = shouldValidate(object); - - if (!shouldValidate) { - return; - } - - // la donnee a valider - Object value = getFieldValue(fieldName, object); - Float data = value == null ? null : Float.valueOf(String.valueOf(value)); - - if (data == null) { - // la donnee a valider n'est pas définie - return; - } - - if (log.isDebugEnabled()) { - log.debug("data to validate : " + data); - } - - // l'species associée - Species species = (Species) getFieldValue(speciesFieldName, object); - - if (species == null) { - - // pas de species trouvée, on ne peut pas valider - return; - } - - if (log.isDebugEnabled()) { - log.debug("Espece to validate : " + species); - } - - Bound bound = getBound(species); - - if (log.isDebugEnabled()) { - log.debug("Espece Bound to validate : " + bound); - } - - if (bound == null) { - - // pas de donnée dans le référentiel acceptable - return; - } - - Bound boundWithRatio = bound.applyRatio(ratio); - - if (log.isInfoEnabled()) { - log.info("Bound : " + bound); - log.info("Ratio to validate : " + ratio); - log.info("Bound with ratio : " + boundWithRatio); - } - - boolean valid = validateBound(data, boundWithRatio); - - if (!valid) { - - valueStack.push(bound); - - try { - addFieldError(fieldName, object); - } finally { - valueStack.pop(); - } - } - } - - protected Bound getBound(Species referentiel) { - - Float min = getBoundMin(referentiel); - Float max = getBoundMax(referentiel); - - if (min == null || min == 0 || max == null || max == 0) { - // l'une des deux borne n'est pas définie, on ne peut pas utiliser - // la données - return null; - } - return new Bound(min, max); - } - - protected boolean validateBound(Float value, - Bound bound) { - if (value == null) { - - // valeur non définie - return true; - } - boolean valid; - - float min = bound.getMin(); - float max = bound.getMax(); - - valid = min <= value && value <= max; - return valid; - } - -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityDebutDePecheSaneValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityDebutDePecheSaneValidator.java deleted file mode 100644 index da8781c..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityDebutDePecheSaneValidator.java +++ /dev/null @@ -1,199 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.Route; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Date; - -/** - * <!-- START SNIPPET: javadoc --> ActivityDebutDePecheSaneValidator vérifie que - * que l'utilisation d'une activity de début de calée est possible. - * <p/> - * On peut utiliser une activité de ce type uniquement si il n'existe pas déjà - * une telle activité de calée positive et qui n'est pas suivie d'une activité - * de fin de veille. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class ActivityDebutDePecheSaneValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(ActivityDebutDePecheSaneValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "activityDebutDePecheSane"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - ActivitySeine activitySeine = (ActivitySeine) object; - - if (!activitySeine.isSetOperation()) { - - // rien a valider - return; - } - - if (activitySeine.getTime() == null) { - - // heure d'obsersation non encore positionne, on ne peut pas valider - return; - } - - // l'activity est une activite de début de pêche - // on doit vérifier qu'il n'existe pas déjà une autre telle - // activité (de caléé positive) qui n'est pas suivi d'une activité - // de fin de pêche - - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - boolean valid; - - if (activitySeine.getTopiaId() == null) { - - // activity en creation - valid = checkCreateMode(route, activitySeine); - - } else { - - // activity en mise a jour - valid = checkUpdateMode(route, activitySeine); - } - - if (!valid) { - - addError(object); - } - } - - protected boolean checkCreateMode(Route route, ActivitySeine activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // recuperation de l'activity de debut de peche juste avant la nouvelle - // activity - ActivitySeine openSet = - ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); - - if (openSet == null) { - - // pas de peche positive avant la nouvelle activity - // on autorise donc celle-ci - return true; - } - - // on cherche la fin de pêche associée à l'actitivé retenue - ActivitySeine closeSet = - ActivitySeines.getNextActivityFinDePeche(route, openSet); - - return closeSet != null && - currentTime.after(closeSet.getTime()); - } - - protected boolean checkUpdateMode(Route route, ActivitySeine activitySeine) { - - // on recupere l'activity de fermeture de l'activite de peche - ActivitySeine closeSet = - ActivitySeines.getNextActivityFinDePeche(route, activitySeine); - - if (closeSet == null) { - // pas d'activity de fin, cela est possible ? - return true; - } - - Date currentTime = activitySeine.getTime(); - - // on doit vérifier que l'heure du debut de set n'est pas apres la fin - return !currentTime.after(closeSet.getTime()); - } - - protected void addError(Object object) { - // la set n'est pas fermee ou bien on veut inserer le debut de peche - // avant la fermeture d'une autre peche ce qui n'est pas possible - String fieldName = getFieldName(); - if (log.isInfoEnabled()) { - log.info("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityFinDePecheSaneValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityFinDePecheSaneValidator.java deleted file mode 100644 index 5e04cb5..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityFinDePecheSaneValidator.java +++ /dev/null @@ -1,237 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.Route; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.Date; - -/** - * <!-- START SNIPPET: javadoc --> ActivityFinDePecheSaneValidator vérifie que - * que l'utilisation d'une activity de fin de pêche est requise ou non. - * <p/> - * On peut utiliser une activité de ce type uniquement si il existe déjà - * une activité de calée positive et sans activity de fin de pêche. - * <!-- END SNIPPET: javadoc --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class ActivityFinDePecheSaneValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(ActivityFinDePecheSaneValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "activityFinDePecheSane"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - ActivitySeine activitySeine = (ActivitySeine) object; - - if (!activitySeine.isActivityFinDePeche()) { - - // rien a valider - return; - } - - Date currentTime = activitySeine.getTime(); - - if (currentTime == null) { - - // heure d'obsersation non encore positionne, on ne peut pas valider - return; - } - - // l'activity est une activite de début de pêche - // on doit vérifier qu'il n'existe pas déjà une autre telle - // activité (de caléé positive) qui n'est pas suivi d'une activité - // de fin de pêche - - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - boolean valid; - - if (activitySeine.getTopiaId() == null) { - - // activity en creation - valid = checkCreateMode(route, activitySeine); - - } else { - - // activity en mise a jour - valid = checkUpdateMode(route, activitySeine); - } - - if (!valid) { - - addError(object); - } - - } - - - protected boolean checkCreateMode(Route route, ActivitySeine activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // recuperation de l'activity de debut de peche juste avant la nouvelle - // activity - ActivitySeine openSet = - ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); - - if (openSet == null) { - - // pas de peche positive avant la nouvelle activity - // pas possible de fermer une peche - return false; - } - - // on cherche la fin de pêche associée à l'actitivé retenue - ActivitySeine closeSet = ActivitySeines.getNextActivityFinDePeche(route, openSet); - - if (closeSet == null) { - - // la set n'est pas fermee, on peut donc ajouter une activity - // de fin de peche - return true; - } - - // la set est deja ferme, on ne peut donc pas creer une activity de - // fin de peche - return false; - } - - protected boolean checkUpdateMode(Route route, ActivitySeine activitySeine) { - - Date currentTime = activitySeine.getTime(); - - // on recupere le debut de peche de cette activity de fin de peche - ActivitySeine openSet = - ActivitySeines.getLastActivityDebutDePechePositiveBefore(route, currentTime); - - if (openSet == null) { - - // la fin de peche ne couvre plus son debut de peche - return false; - } - - if (currentTime.before(openSet.getTime())) { - - // l'activity de fin ne peut pas etre avant le debut de peche - return false; - } - - // on recupere la prochaine activity de peche - openSet = - ActivitySeines.getNextActivityDebutDePechePositive(route, activitySeine); - - if (openSet == null) { - // pas de set apres cell-ci, donc pas de probleme - return true; - } - - - // il existe une activity de peche apres celle-ci - - if (currentTime.after(openSet.getTime())) { - - // la fin de peche ne couvre plus son debut de peche - return false; - } - - //TODO On doit interdire dans l'éditeur de temps la possibilite - //TODO de saisir une fil de set avant un debut de calee... - return true; - - } - - - protected void addError(Object object) { - // ce qui est requis et ce qui existe n'est pas en adequation - String fieldName = getFieldName(); - if (log.isInfoEnabled()) { - log.info("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } - -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityFinDeVeilleExistsValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityFinDeVeilleExistsValidator.java deleted file mode 100644 index 1a6e0a1..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivityFinDeVeilleExistsValidator.java +++ /dev/null @@ -1,185 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.Route; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * <!-- START SNIPPET: javadoc --> VesselActivityFieldValidator vérifie que - * l'activity vessel d'une activité est cohérente. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.0 - */ -public class ActivityFinDeVeilleExistsValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(ActivityFinDeVeilleExistsValidator.class); - - /** - * l'état attendu : la route possède-t-ell ou non une activity de fin de - * veille. - * <p/> - * Si le drapeau vaut {@code true}, la route est valide si elle possède une - * activité de fin de veille (cas de vérification de la présence de - * l'activité sur l'ensemble au niveau de sa route). - * <p/> - * Si le drapeau vaut {@code false}, la route est valide si elle ne possède - * déjà d'activité de fin de veille (cas de création d'une nouvelle - * activité). - */ - private Boolean required; - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "activityFinDeVeilleExists"; - } - - public void setRequired(Boolean required) { - this.required = required; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (required == null) { - throw new ValidationException("le parametre required est obligatoire"); - } - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - if (object instanceof Route) { - - // on verifie qu'il existe bien une activity de fin de veille - // parmi les activitys de la route - - Route route = (Route) object; - - checkAgainstRequired(route, route); - return; - } - - if (object instanceof ActivitySeine) { - - // on verifie qu'il n'existe pas d'activity de fin de veille - - ActivitySeine activitySeine = (ActivitySeine) object; - - if (!activitySeine.isActivityFinDeVeille()) { - - // rien a valider (on est pas sur une activity de fin de veille - return; - } - - // l'activity est une activite de fin de veille - // on doit vérifier qu'il n'existe pas déjà une autre activité de - // fin de veille - - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - checkAgainstRequired(route, activitySeine); - } - } - - protected void checkAgainstRequired(Route route, Object object) { - - if (log.isInfoEnabled()) { - - log.info("check [required : " + required + - "?] activity fin de veille sur la route " + - route.getTopiaId() + ":" + route.getDate() - + "sur " + route.sizeActivitySeine() + " activity(s)."); - } - - boolean detected = ActivitySeines.isActivityFindDeVeilleFound(route); - boolean valid = required ? detected : !detected; - if (log.isDebugEnabled()) { - log.debug("detected activity fin de veille " + detected); - log.debug("is valid = " + valid); - } - - if (valid) { - return; - } - - String fieldName = getFieldName(); - if (log.isDebugEnabled()) { - log.debug("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivitySimpleSpeedValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivitySimpleSpeedValidator.java deleted file mode 100644 index 80c9190..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivitySimpleSpeedValidator.java +++ /dev/null @@ -1,183 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.business.gps.GPSPoint; -import fr.ird.observe.business.gps.GpsPoints; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * <!-- START SNIPPET: javadoc --> ActivitySimpleSpeedValidator vérifie que - * la cohérence de vitesse entre l'activité courante et sa précédente. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.0 - */ -public class ActivitySimpleSpeedValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = LogFactory.getLog(ActivitySimpleSpeedValidator.class); - - private Float speed; - - public Float getSpeed() { - return speed; - } - - public void setSpeed(float speed) { - this.speed = speed; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (speed == null) { - throw new ValidationException("le parametre speed est obligatoire"); - } - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - ActivitySeine activity = (ActivitySeine) object; - - if (activity.getTime() == null) { - - // heure d'observation non encore positionne, on ne peut pas valider - if (log.isDebugEnabled()) { - log.debug("Missing time on current activity : " + decorate(activity) + ", skip speed computation"); - } - return; - } - - - if (activity.getLatitude() == null || - activity.getLongitude() == null) { - - // pas de position, on ne peut pas valider - if (log.isDebugEnabled()) { - log.debug("Missing latitude or longitude on current activity : " + decorate(activity) + ", skip speed computation"); - } - return; - } - - Route route = (Route) stack.findValue("routeEntity"); - - ActivitySeine previousActivity = ActivitySeines.getPreviousActivity(route, activity); - - if (previousActivity == null) { - - // pas d'activity avant, rien à valider - if (log.isDebugEnabled()) { - log.debug("No previous activity for current activity : " + decorate(activity) + ", skip speed computation"); - } - return; - } - - if (previousActivity.getLatitude() == null || - previousActivity.getLongitude() == null) { - - // pas de position, on ne peut pas valider - if (log.isDebugEnabled()) { - log.debug("Missing latitude or longitude on previous activity : " + decorate(previousActivity) + ", skip speed computation"); - } - return; - } - - GPSPoint currentPoint = GpsPoints.newPoint(route, activity); - GPSPoint previousPoint = GpsPoints.newPoint(route, previousActivity); - - float computedSpeed = GpsPoints.getSpeed(previousPoint, currentPoint); - - if (log.isDebugEnabled()) { - log.debug("Speed computed between previous activity point " + decorate(previousPoint) + " to current activity point " + decorate(currentPoint) + ", speed is : " + computedSpeed); - } - boolean b = computedSpeed <= speed; - - if (!b) { - - stack.set("foundSpeed", computedSpeed); - - // vitesse trop grande - addFieldError(getFieldName(), object); - } - } - - @Override - public String getValidatorType() { - return "activitySimpleSpeed"; - } - - //FIXME - protected String decorate(ActivitySeine activitySeine) { - return activitySeine.toString(); - } - - //FIXME - protected String decorate(GPSPoint currentPoint) { - return currentPoint.toString(); - } - -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivitySpeedValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivitySpeedValidator.java deleted file mode 100644 index f2b6a17..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/ActivitySpeedValidator.java +++ /dev/null @@ -1,222 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.business.gps.GPSPoint; -import fr.ird.observe.business.gps.GpsPoints; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.validator.xwork2.field.CollectionFieldExpressionValidator; - -/** - * <!-- START SNIPPET: javadoc --> ActivityspeedValidator vérifie que - * la cohérence de vitesses entre toutes les activités d'une route. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.0 - */ -public class ActivitySpeedValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log LOG = LogFactory.getLog(ActivitySimpleSpeedValidator.class); - - private CollectionFieldExpressionValidator delegate; - - private Float speed; - - public Float getSpeed() { - return speed; - } - - public void setSpeed(float speed) { - this.speed = speed; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - protected String invalidActivity; - - public String getInvalidActivity() { - return invalidActivity; - } - - //FIXME - protected String decorate(ActivitySeine activitySeine) { - return activitySeine.toString(); - } - - //FIXME - protected String decorate(GPSPoint currentPoint) { - return currentPoint.toString(); - } - - public CollectionFieldExpressionValidator getDelegate(final Route route) { - if (delegate == null) { - delegate = new CollectionFieldExpressionValidator() { - - @Override - protected boolean validateOneEntry(Object object) { - - c.addCurrent(object); - - ActivitySeine previousActivity = (ActivitySeine) c.getPrevious(); - ActivitySeine currentActivity = (ActivitySeine) c.getCurrent(); - - if (previousActivity == null) { - if (LOG.isDebugEnabled()) { - LOG.debug("No previous activity for current activity : " + decorate(currentActivity) + ", skip speed computation"); - } - return true; - } - - if (previousActivity.getLatitude() == null || previousActivity.getLongitude() == null) { - // cas limite (pas de précédent ou position non renseigne) - - if (LOG.isDebugEnabled()) { - LOG.debug("Missing latitude or longitude on previous activity : " + decorate(previousActivity) + ", skip speed computation"); - } - - return true; - } - - if (currentActivity.getLongitude() == null || currentActivity.getLatitude() == null) { - // cas limite (pas de précédent ou position non renseigne) - if (LOG.isDebugEnabled()) { - LOG.debug("Missing latitude or longitude on current activity : " + decorate(currentActivity) + ", skip speed computation"); - } - return true; - } - - GPSPoint previousPoint = GpsPoints.newPoint(route, previousActivity); - GPSPoint currentPoint = GpsPoints.newPoint(route, currentActivity); - - float computedSpeed = GpsPoints.getSpeed(previousPoint, currentPoint); - - if (LOG.isDebugEnabled()) { - LOG.debug("Speed computed between previous activity point " + decorate(previousPoint) + " to current activity point " + decorate(currentPoint) + ", speed is : " + computedSpeed); - } - - boolean valid = computedSpeed <= speed; - - if (!valid) { - stack.set("foundSpeed", computedSpeed); - - invalidActivity = decorate(currentActivity); - - if (LOG.isInfoEnabled()) { - LOG.info("Speed from " + - decorate(previousActivity) + - " to " + invalidActivity + - " is " + computedSpeed + - " which is more thant authorized one " + - speed); - } - } - return valid; - } - - @Override - public String getMessage(Object object) { - boolean pop = false; - if (!stack.getRoot().contains(ActivitySpeedValidator.this)) { - stack.push(ActivitySpeedValidator.this); - pop = true; - } - try { - String message = super.getMessage(object); - return message; - } finally { - if (pop) { - stack.pop(); - } - } - } - }; - delegate.setCollectionFieldName(Route.PROPERTY_ACTIVITY_SEINE); - delegate.setMode(CollectionFieldExpressionValidator.Mode.ALL); - delegate.setValueStack(stack); - delegate.setUseSensitiveContext(true); - delegate.setExpressionForFirst(null); - delegate.setExpressionForLast(null); - delegate.setFieldName(getFieldName()); - delegate.setExpression("true"); - delegate.setMessageKey(getMessageKey()); - delegate.setDefaultMessage(getDefaultMessage()); - delegate.setValidatorContext(getValidatorContext()); - } - return delegate; - } - - @Override - public void validate(Object object) throws ValidationException { - - if (speed == null) { - throw new ValidationException("le parametre speed est obligatoire"); - } - - invalidActivity = null; - - getDelegate((Route) object).validate(object); - } - - @Override - public String getValidatorType() { - return "activitySpeed"; - } -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/RouteActivitysFieldValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/RouteActivitysFieldValidator.java deleted file mode 100644 index bcd892d..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/RouteActivitysFieldValidator.java +++ /dev/null @@ -1,135 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.Route; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.List; - -/** - * <!-- START SNIPPET: javadoc --> RouteActivitysFieldValidator vérifie que - * les activtés d'une route sont cohérentes au niveau des activités vessel. - * <p/> - * On vérifie que chaque activté de pêche positive a été fermée. - * <p/> - * <!-- END SNIPPET: javadoc --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class RouteActivitysFieldValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(RouteActivitysFieldValidator.class); - - private ValueStack stack; - - @Override - public String getValidatorType() { - return "routeActivitys"; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - if (object == null) { - - // pas d'objet, donc rien a faire - return; - } - - // On utilise la route fournie par la pile pour pouvoir la parcourir - // en profondeur (alors que celle offerte par l 'objet est celle de l'ui - // et qu'elle est déconnectée de la base ). - - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - if (log.isWarnEnabled()) { - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - } - return; - } - - if (route.isActivitySeineEmpty()) { - - // aucune activité, donc rien à valider - return; - } - - // récupération des activités de pêche positive sur la route - List<ActivitySeine> positiveSet = ActivitySeines.getActivityDebutDePechePositive(route); - - List<ActivitySeine> closedSet = ActivitySeines.getActivityFinDePeche(route); - - if (positiveSet.size() < closedSet.size()) { - - // il manque une activity de fin de pêche - String fieldName = getFieldName(); - if (log.isInfoEnabled()) { - log.info("missing a activity fin de peche , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } - } -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SetLonglineUniqueHomeIdValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SetLonglineUniqueHomeIdValidator.java deleted file mode 100644 index e92482d..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SetLonglineUniqueHomeIdValidator.java +++ /dev/null @@ -1,102 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2014 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Objects; -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.longline.ActivityLongline; -import fr.ird.observe.entities.longline.SetLongline; -import fr.ird.observe.entities.longline.TripLongline; - -import java.util.Set; - -/** - * Created on 12/7/14. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.9 - */ -public class SetLonglineUniqueHomeIdValidator extends FieldValidatorSupport { - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - SetLongline setLongline = (SetLongline) object; - String homeId = setLongline.getHomeId(); - - if (homeId != null) { - - String setLonglineTopiaId = setLongline.getTopiaId(); - - TripLongline tripLongline = (TripLongline) stack.findValue("TripEntity"); - - Set<ActivityLongline> activityLonglines = tripLongline.getActivityLongline(); - - boolean notValid = false; - - for (ActivityLongline activityLongline : activityLonglines) { - - SetLongline setLongline1 = activityLongline.getSetLongline(); - - - if (setLongline1 != null - && !Objects.equal(setLonglineTopiaId, setLongline1.getTopiaId()) - && homeId.equals(setLongline1.getHomeId())) { - - notValid = true; - - //FIXME -// DecoratorService provider = ObserveServiceHelper.getDecoratorService(); -// Decorator<?> decorator = provider.getDecorator(activityLongline); - - stack.set("duplicatedActivity", activityLongline); - - break; - - } - - } - - if (notValid) { - - // vitesse trop grande - addFieldError(getFieldName(), object); - } - } - - - } - - @Override - public String getValidatorType() { - return "setLonglineUniqueHomeId"; - } -} \ No newline at end of file diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SetLonglineUniqueNumberValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SetLonglineUniqueNumberValidator.java deleted file mode 100644 index 8563192..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SetLonglineUniqueNumberValidator.java +++ /dev/null @@ -1,102 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2014 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Objects; -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.longline.ActivityLongline; -import fr.ird.observe.entities.longline.SetLongline; -import fr.ird.observe.entities.longline.TripLongline; - -import java.util.Set; - -/** - * Created on 12/7/14. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.9 - */ -public class SetLonglineUniqueNumberValidator extends FieldValidatorSupport { - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - - SetLongline setLongline = (SetLongline) object; - Integer number = setLongline.getNumber(); - - if (number != null) { - - String setLonglineTopiaId = setLongline.getTopiaId(); - - TripLongline tripLongline = (TripLongline) stack.findValue("tripEntity"); - - Set<ActivityLongline> activityLonglines = tripLongline.getActivityLongline(); - - boolean notValid = false; - - for (ActivityLongline activityLongline : activityLonglines) { - - SetLongline setLongline1 = activityLongline.getSetLongline(); - - - if (setLongline1 != null - && !Objects.equal(setLonglineTopiaId, setLongline1.getTopiaId()) - && number.equals(setLongline1.getNumber())) { - - notValid = true; - - //FIXME -// DecoratorService provider = ObserveServiceHelper.getDecoratorService(); -// Decorator<?> decorator = provider.getDecorator(activityLongline); - - stack.set("duplicatedActivity", activityLongline); - - break; - - } - - } - - if (notValid) { - - // vitesse trop grande - addFieldError(getFieldName(), object); - } - } - - - } - - @Override - public String getValidatorType() { - return "setLonglineUniqueNumber"; - } -} \ No newline at end of file diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SpeciesLengthFieldValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SpeciesLengthFieldValidator.java deleted file mode 100644 index 6c05cc4..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SpeciesLengthFieldValidator.java +++ /dev/null @@ -1,49 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.entities.referentiel.Species; - -/** - * Validateurs sur la taille d'une species. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class SpeciesLengthFieldValidator extends AbstractEspeceFieldValidator { - - @Override - protected Float getBoundMin(Species referentiel) { - return referentiel.getMinLength(); - } - - @Override - protected Float getBoundMax(Species referentiel) { - return referentiel.getMaxLength(); - } - - @Override - public String getValidatorType() { - return "species_length"; - } -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SpeciesWeightFieldValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SpeciesWeightFieldValidator.java deleted file mode 100644 index d82e572..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/SpeciesWeightFieldValidator.java +++ /dev/null @@ -1,49 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.entities.referentiel.Species; - -/** - * Validateur sur le weight d'une species. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.5 - */ -public class SpeciesWeightFieldValidator extends AbstractEspeceFieldValidator { - - @Override - protected Float getBoundMin(Species referentiel) { - return referentiel.getMinWeight(); - } - - @Override - protected Float getBoundMax(Species referentiel) { - return referentiel.getMaxWeight(); - } - - @Override - public String getValidatorType() { - return "species_weight"; - } -} diff --git a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/VesselActivityFieldValidator.java b/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/VesselActivityFieldValidator.java deleted file mode 100644 index 8ad9a2d..0000000 --- a/observe-entities-validation/src/main/java/fr/ird/observe/business/validation/field/VesselActivityFieldValidator.java +++ /dev/null @@ -1,446 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.ValidationException; -import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeineImpl; -import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.entities.seine.TripSeine; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * <!-- START SNIPPET: javadoc --> VesselActivityFieldValidator vérifie que - * l'activity vessel d'une activité est cohérente. <!-- END SNIPPET: javadoc - * --> - * <p/> - * <p/> - * <!-- START SNIPPET: parameters --> <ul> <li>fieldName - The field name this - * validator is validating. Required if using Plain-Validator Syntax otherwise - * not required</li> </ul> <!-- END SNIPPET: parameters --> - * <p/> - * <pre> - * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain-Validator Syntax --> - * <validator type="invalidLochMatin"> - * <param name="fieldName">startLogValue</param> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </validator> - * <p/> - * <!-- Field-Validator Syntax --> - * <field name="startLogValue"> - * <field-validator type="invalidLochMatin"> - * <message>loch matin must be greater or equals to last - * closed route loch soir</message> - * </field-validator> - * </field> - * </validators> - * <!-- END SNIPPET: examples --> - * </pre> - * - * @author Tony Chemit - chemit@codelutin.com - * @since 1.0 - */ -public class VesselActivityFieldValidator extends FieldValidatorSupport { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(VesselActivityFieldValidator.class); - - private ValueStack stack; - - private String code; - - public void setCode(String code) { - this.code = code; - } - - @Override - public void setValueStack(ValueStack stack) { - this.stack = stack; - super.setValueStack(stack); - } - - @Override - public void validate(Object object) throws ValidationException { - if (code == null) { - throw new ValidationException("le parametre code est obligatoire"); - } - - try { - ActivitySeine activitySeine = (ActivitySeine) object; - if (activitySeine == null) { - if (log.isDebugEnabled()) { - log.debug("pas d'activity!"); - } - // pas d'activity - return; - } -// boolean create = activity.getTopiaId() == null; -// if (!create) { -// // l'activity vessel est uniquement modifiable en mode creation -// return; -// } - - VesselActivitySeine property; - property = (VesselActivitySeine) getFieldValue(ActivitySeine.PROPERTY_VESSEL_ACTIVITY_SEINE, - object); - if (property == null) { - // si pas de valeur, on ne fait rien - if (log.isDebugEnabled()) { - log.debug("pas d'activity vessel!"); - } - return; - } - - boolean valid = true; - - TripSeine maree = (TripSeine) stack.findValue("tripEntity"); - - if (maree == null) { - - log.warn("COULD NOT FIND DATA CONTEXT! [tripEntity]"); - return; - } - if (log.isDebugEnabled()) { - log.debug("maree : " + maree); - } - Route route = (Route) stack.findValue("routeEntity"); - if (route == null) { - - log.warn("COULD NOT FIND DATA CONTEXT! [routeEntity]"); - return; - } - if (log.isDebugEnabled()) { - log.debug("route : " + route); - } - - String activityCode = activitySeine.getVesselActivitySeine().getCode(); - int nbActivitys = route.sizeActivitySeine(); - - if (code.equals("-16") && !activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE)) { - - valid = validate_16(activitySeine, maree, route, nbActivitys, false); - } - - switch (Integer.valueOf(code)) { - case 6: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE)) { - valid = validate_6(activitySeine, maree, route, nbActivitys); - } - break; - case 7: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE)) { - valid = validate_7(activitySeine, maree, route, nbActivitys); - } - break; - case 16: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE)) { - valid = validate_16(activitySeine, maree, route, - nbActivitys, true); - } - break; - } - - - if (!valid) { - String fieldName = getFieldName(); - if (log.isDebugEnabled()) { - log.debug("not valid , fieldName : " + fieldName); - } - addFieldError(fieldName, object); - } - } catch (ValidationException e) { - throw e; - } catch (Exception e) { - log.error(e.getMessage(), e); - - } - - } - - @Override - public String getValidatorType() { - return "activityvessel"; - } - - /** - * validation de l'activity vessel 6 (debut de peche). - * <p/> - * Pour accepter une activité de début de pêche, on doit vérifier toutes les - * conditions suivantes : - * <p/> - * - si une activité de début de pêches existe sur la route avant cette - * activité, elle doit être fermée. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_6(ActivitySeine activitySeine, - TripSeine maree, - Route route, - int nbActivitys) { - if (nbActivitys == 0) { - // aucune activity : ok - return true; - } - //FIXME: non l'algo ne fonctionne pas : il faut calculer les intervalles - //FIXME: de set (debut -fin) ou (debut) - //FIXME: si on un intervalle (debut) alors pas possible - //FIXME: sinon on verifier que l'activity qu'on veut créer n'est pas - //FIXME: dans un intervalle (debut-fin) - List<ActivitySeine> activitySeines = Lists.newArrayList(route.getActivitySeine()); - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - int nbDebutReal = 0; - int lastDebutReal = 0; - for (Integer i : detectDebutSet) { - ActivitySeine bActivitySeine = activitySeines.get(i); - if (bActivitySeine.getReasonForNoFishing() == null && - bActivitySeine.getSetSeine() != null) { - // une senne - nbDebutReal++; - lastDebutReal = i; - } - } - // il n'y a pas d'activity de debut de peche disponible - if (nbDebutReal > detectFinSet.length) { - ActivitySeine bActivitySeine = activitySeines.get(lastDebutReal); - log.info("il existe deja une activity de peche non fini : " + - bActivitySeine.getTime()); - return false; - } - - // tout est ok - return true; - } - - /** - * validation de l'activity vessel 7 (fin de peche) - * <p/> - * Pour accepter une activité de fin de pêche, on doit vérifier que toutes - * les conditions suivantes sont remplies : - * <p/> - * - une activité de début de pêche (avec coup de senne ?) précède cette - * activité et n'est pas déjà associée à une activité de fin de pêche. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_7(ActivitySeine activitySeine, - TripSeine maree, - Route route, - int nbActivitys) { - if (nbActivitys == 0) { - // aucune activity : donc pas possible - return false; - } - List<ActivitySeine> activitySeines = Lists.newArrayList(route.getActivitySeine()); - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - Integer lastFinSet = null; - if (detectFinSet.length > 0) { - lastFinSet = detectFinSet[detectFinSet.length - 1]; - } -// int nbDebutReal = 0; -// Integer lastDebutReal = 0; - Integer lastDebutReal = null; - for (Integer i : detectDebutSet) { - ActivitySeine bActivitySeine = activitySeines.get(i); - if (bActivitySeine.getReasonForNoFishing() == null && - bActivitySeine.getSetSeine() != null) { - // une senne -// nbDebutReal++; - lastDebutReal = i; - } - } - if (lastDebutReal == null) { - // pas de set ouverte - log.info("pas d'activity de debut de peche ouverte"); - return false; - } - - // il n'y a pas d'activity de debut de peche disponible - if (lastFinSet != null && lastDebutReal < lastFinSet) { - log.info("pas d'activity de debut de peche disponible"); - return false; - } - - // il existe une set ouverte - ActivitySeine bActivitySeine = activitySeines.get(lastDebutReal); - - if (bActivitySeine.getTime().after(activitySeine.getTime())) { - log.info("activity de fin " + activitySeine.getTime() + - " doit etre apres celle de debut de peche : " + - bActivitySeine.getTime()); - // pas ok - return false; - } - - // tout est ok - return true; - } - - /** - * validation de l'activity vessel 16 (fin de veille). - * <p/> - * Pour accepter une activité de fin de veille, on doit vérifier toutes les - * conditions suivantes sont remplies : - * <p/> - * <pre> - * - toute activité de début de pêche doit être associée à une activité de - * fin de pêche (sauf si non coup de senne ?). - * - une seule activité de fin par route - * </pre> - * <p/> - * Pour toutes les autres activités (<code>is16 == false</code>), on doit - * vérifier : - * <p/> - * - l'activité est toujours avant une éventuelle activité de fin de - * veille. - * - * @param activitySeine l'activite en cours de creation - * @param maree la maree courante - * @param route la route courante - * @param nbActivitys le counts d'activités actuellement (sans l'activity a - * tester) - * @param is16 drapeau pour savoir si on accepte la valeur ou toutes - * les autres valeurs. - * @return {@code true} if valid, {@code false} otherwise - */ - protected boolean validate_16(ActivitySeine activitySeine, - TripSeine maree, - Route route, - int nbActivitys, - boolean is16) { - if (nbActivitys == 0) { - // pas d'autre activity : ok - return true; - } - - if (is16) { - // on est sur une activity de fin de veille - List<ActivitySeine> activitySeines = Lists.newArrayList(route.getActivitySeine()); - // une seule activity de fin de veille par route - Integer[] detectActivity = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE); - if (activitySeine.getTopiaId() == null && detectActivity.length > 0) { - - log.info("il existe deja une activity de fin de veille!"); - return false; - } - - // chemit 2010-05-23 Cela n'est plus d'actualité : On peut avoir une activité après celle de fin de veille - - // l'activity de fin de veille doit toujours etre la plus recente -// Activity lastActivity = route.getLastActivity(); -// if (activity.getTime().before( -// lastActivity.getTime())) { -// // activity pas en derniere position -// log.info("l'activity de fin de veille doit etre la derniere " + -// "activity de la route"); -// -// return false; -// } - // il ne peut pas rester une activity de debut de peche sans fin - // de set (sauf si non coup de senne ?) - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - int nbDebutReal = 0; - for (Integer i : detectDebutSet) { - ActivitySeine bActivitySeine = activitySeines.get(i); - if (bActivitySeine.getReasonForNoFishing() == null && - bActivitySeine.getSetSeine() != null) { - // une senne - nbDebutReal++; - } - } - if (nbDebutReal > detectFinSet.length) { - log.info("il manque une activity de fin de peche"); - return false; - } - - // tout est ok - return true; - } - - // chemit 2010-05-23 Cela n'est plus d'actualité : On peut avoir une activité après celle de fin de veille - - // on est sur une autre activity que celle de fin de veille, - // elle doit obligatoirement etre avant une eventuelle activity - // de fin de veille - -// List<Activity> activitys = route.getActivity(); -// Integer[] detectActivity = detectActivity(route, 16); -// if (detectActivity.length > 0) { -// Activity activityFinVeille = activites.get(detectActivity[0]); -// if (activity.getTime().after( -// activityFinVeille.getTime())) { -// log.info("activity doit etre avant la fin de veille : " + -// activityFinVeille.getTime()); -// // pas ok -// return false; -// } -// } - - // tout est ok - return true; - } - - /** - * Recupere les positions des activitys d'un certain type - * - * @param route la route à inspecter - * @param code le code du type d'activité à rechercher - * @return les positions des activitys d'un certain type donné - */ - protected Integer[] detectActivity(Route route, String code) { - List<Integer> list = new ArrayList<Integer>(); - int index = 0; - for (ActivitySeine a : route.getActivitySeine()) { - String c = a.getVesselActivitySeine().getCode(); - if (code.equals(c)) { - list.add(index); - } - index++; - } - return list.toArray(new Integer[list.size()]); - } -} diff --git a/observe-entities-validation/src/test/java/fr/ird/observe/business/validation/field/ActivitySeineSpeedValidatorTest.java b/observe-entities-validation/src/test/java/fr/ird/observe/business/validation/field/ActivitySeineSpeedValidatorTest.java deleted file mode 100644 index 766958f..0000000 --- a/observe-entities-validation/src/test/java/fr/ird/observe/business/validation/field/ActivitySeineSpeedValidatorTest.java +++ /dev/null @@ -1,121 +0,0 @@ -package fr.ird.observe.business.validation.field; - -/* - * #%L - * ObServe :: Validation - * %% - * Copyright (C) 2008 - 2013 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; -import fr.ird.observe.entities.referentiel.seine.VesselActivitySeineImpl; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeineImpl; -import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.entities.seine.RouteImpl; -import org.apache.commons.lang3.time.DateUtils; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.nuiton.util.DateUtil; -import org.nuiton.validator.NuitonValidator; -import org.nuiton.validator.NuitonValidatorFactory; -import org.nuiton.validator.NuitonValidatorResult; - -import java.util.Date; -import java.util.Locale; - -/** - * @author Tony Chemit - chemit@codelutin.com - * @since 3.0 - */ -public class ActivitySeineSpeedValidatorTest { - - NuitonValidatorResult messages; - - static VesselActivitySeine vesselActivitySeine; - - static Locale locale; - - @BeforeClass - public static void beforeTest() { - - locale = Locale.getDefault(); - - Locale.setDefault(Locale.FRENCH); - -// TestHelper.createApplicationContext(); - - vesselActivitySeine = new VesselActivitySeineImpl(); - - vesselActivitySeine.setLabel1("VesselActivity"); - } - - @After - public void tearDonw() { - if (messages != null) { - messages = null; - } - } - - @AfterClass - public static void afterTest() { - Locale.setDefault(locale); - } - - @Test - public void testValidate() { - - NuitonValidator<Route> validator = - NuitonValidatorFactory.newValidator(Route.class, "testSpeed"); - - // il y a 316 Km (196 Miles) en tre Rouen et Nantes - ActivitySeine aFromNantes = new ActivitySeineImpl(); - aFromNantes.setVesselActivitySeine(vesselActivitySeine); - - aFromNantes.setLatitude(47.197f); - aFromNantes.setLongitude(-1.525f); - Date nantesTime = DateUtil.getTime(DateUtil.createDate(0, 10, 10, 1, 1, 2014), false, false); - - aFromNantes.setTime(nantesTime); - - ActivitySeine aFromRouen = new ActivitySeineImpl(); - aFromRouen.setVesselActivitySeine(vesselActivitySeine); - aFromRouen.setLatitude(49.447f); - aFromRouen.setLongitude(1.096f); - - - Route r = new RouteImpl(); - r.setDate(DateUtil.createDate(13, 12, 2014)); - r.addActivitySeine(aFromNantes); - r.addActivitySeine(aFromRouen); - - // en 1 heure, on fait pas plus de 100 miles - - aFromRouen.setTime(DateUtils.addHours(nantesTime, 1)); - messages = validator.validate(r); - Assert.assertFalse(messages.isValid()); - - aFromRouen.setTime(DateUtils.addHours(nantesTime, 2)); - - messages = validator.validate(r); - Assert.assertTrue(messages.isValid()); - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java index 036704d..38798bd 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java @@ -28,6 +28,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; +import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.spi.NoDataAccess; @@ -72,6 +73,11 @@ public interface DataSourceService extends ObserveService { @Write void applySecurity(Set<ObserveDbUserDto> users); + @ReadDataPermission + @ReadReferentialPermission + <D extends IdDto> D getObserveDto(Class<D> dtoType, String id); + @NoDataAccess + <D extends IdDto> void migrateData(); } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/TripLonglineService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/TripLonglineService.java index c4e28e8..18f8264 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/TripLonglineService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/TripLonglineService.java @@ -25,9 +25,9 @@ package fr.ird.observe.services.service.longline; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceSetDto; -import fr.ird.observe.services.dto.SaveResultDto; import fr.ird.observe.services.dto.TripMapDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.spi.DeleteRequest; import fr.ird.observe.services.spi.PostRequest; import fr.ird.observe.services.spi.ReadDataPermission; diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/RouteService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/RouteService.java index ec04df2..92922ff 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/RouteService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/RouteService.java @@ -42,6 +42,9 @@ public interface RouteService extends ObserveService { ReferenceSetDto<RouteDto> getRouteByTripSeine(String tripSeineId); @ReadDataPermission + int getRoutePositionInTripSeine(String tripSeineId, String routeId); + + @ReadDataPermission FormDto<RouteDto> loadToRead(String routeId); @WriteDataPermission @@ -59,5 +62,4 @@ public interface RouteService extends ObserveService { @WriteDataPermission @DeleteRequest boolean delete(String tripSeineId, String routeId); - } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/TripSeineService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/TripSeineService.java index 7dbf404..83913eb 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/TripSeineService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/TripSeineService.java @@ -25,8 +25,8 @@ package fr.ird.observe.services.service.seine; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceSetDto; -import fr.ird.observe.services.dto.SaveResultDto; import fr.ird.observe.services.dto.TripMapDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.spi.DeleteRequest; import fr.ird.observe.services.spi.PostRequest; diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/SaveResultDtos.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/result/SaveResultDtos.java similarity index 87% rename from observe-services-model/src/main/java/fr/ird/observe/services/dto/SaveResultDtos.java rename to observe-services-model/src/main/java/fr/ird/observe/services/dto/result/SaveResultDtos.java index 5c0031c..5b635ca 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/SaveResultDtos.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/result/SaveResultDtos.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.dto; +package fr.ird.observe.services.dto.result; import java.util.Date; diff --git a/observe-services-model/src/main/xmi/observe-services-dto-common.zargo b/observe-services-model/src/main/xmi/observe-services-dto-common.zargo index cd26edf..53937bc 100644 Binary files a/observe-services-model/src/main/xmi/observe-services-dto-common.zargo and b/observe-services-model/src/main/xmi/observe-services-dto-common.zargo differ diff --git a/observe-services-model/src/main/xmi/observe-services-dto-seine.properties b/observe-services-model/src/main/xmi/observe-services-dto-seine.properties index 4346372..c1e641c 100644 --- a/observe-services-model/src/main/xmi/observe-services-dto-seine.properties +++ b/observe-services-model/src/main/xmi/observe-services-dto-seine.properties @@ -84,3 +84,4 @@ fr.ird.observe.services.dto.seine.NonTargetSample.attribute.nonTargetLength.ster fr.ird.observe.services.dto.seine.GearUseFeaturesSeine.attribute.gearUseFeaturesMeasurement.stereotype=unique fr.ird.observe.services.dto.seine.ActivitySeineObservedSystem.attribute.observedSystem.stereotype=unique fr.ird.observe.services.dto.seine.TripSeine.attribute.route.stereotype=unique,ordered +fr.ird.observe.services.dto.seine.Route.attribute.activitySeine.stereotype=unique,ordered diff --git a/observe-services-model/src/main/xmi/observe-services-dto-seine.zargo b/observe-services-model/src/main/xmi/observe-services-dto-seine.zargo index e08f6db..7d5b32d 100644 Binary files a/observe-services-model/src/main/xmi/observe-services-dto-seine.zargo and b/observe-services-model/src/main/xmi/observe-services-dto-seine.zargo differ diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java index 0fc18fe..21a9f84 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java @@ -208,6 +208,7 @@ import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; import fr.ird.observe.services.dto.referential.seine.WindDto; import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.ActivitySeineObservedSystemDto; +import fr.ird.observe.services.dto.seine.ActivitySeineStubDto; import fr.ird.observe.services.dto.seine.FloatingObjectDto; import fr.ird.observe.services.dto.seine.FloatingObjectObservedSpeciesDto; import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto; @@ -220,6 +221,7 @@ import fr.ird.observe.services.dto.seine.NonTargetSampleDto; import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto; import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto; import fr.ird.observe.services.dto.seine.RouteDto; +import fr.ird.observe.services.dto.seine.RouteStubDto; import fr.ird.observe.services.dto.seine.SchoolEstimateDto; import fr.ird.observe.services.dto.seine.SetSeineDto; import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; @@ -1348,7 +1350,11 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { @Override public void initActivitySeineStubDto() { - // la logique de copie est à ecrire directement dans le service + registerDto(ActivitySeineStubDto.class, ActivitySeine.class, + ActivitySeineStubDto.PROPERTY_TIME, + ActivitySeineStubDto.PROPERTY_LATITUDE, + ActivitySeineStubDto.PROPERTY_LONGITUDE, + ActivitySeineStubDto.PROPERTY_SEA_SURFACE_TEMPERATURE); } @Override @@ -1477,13 +1483,17 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { RouteDto.PROPERTY_START_LOG_VALUE, RouteDto.PROPERTY_END_LOG_VALUE, RouteDto.PROPERTY_CHECK_LEVEL, - RouteDto.PROPERTY_LAST_UPDATE + RouteDto.PROPERTY_LAST_UPDATE, + RouteDto.PROPERTY_ACTIVITY_SEINE ); } @Override public void initRouteStubDto() { - // la logique de copie est à ecrire directement dans le service + registerDto(RouteStubDto.class, Route.class, + RouteStubDto.PROPERTY_DATE, + RouteStubDto.PROPERTY_START_LOG_VALUE, + RouteStubDto.PROPERTY_END_LOG_VALUE); } @Override diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java index 4f3713d..8dcd761 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -42,10 +42,12 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConnectionTopia; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; +import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.jdbc.JdbcHelper; import org.nuiton.util.version.Version; @@ -347,6 +349,18 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } @Override + public <D extends IdDto> D getObserveDto(Class<D> dtoType, String id) { + + Class<TopiaEntity> entityType = getEntityType(dtoType); + + TopiaEntity entity = loadEntity(dtoType, entityType, id); + + D observeDto = entityToDto(dtoType, entityType, entity); + + return observeDto; + } + + @Override public void migrateData() { ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TripLonglineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TripLonglineServiceTopia.java index b56554b..69555d0 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TripLonglineServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TripLonglineServiceTopia.java @@ -35,12 +35,12 @@ import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceDtos; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.ReferenceSetDtos; -import fr.ird.observe.services.dto.SaveResultDto; -import fr.ird.observe.services.dto.SaveResultDtos; import fr.ird.observe.services.dto.TripMapDto; import fr.ird.observe.services.dto.TripMapPointDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.result.SaveResultDto; +import fr.ird.observe.services.dto.result.SaveResultDtos; import org.nuiton.util.DateUtil; import java.util.Collections; diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/RouteServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/RouteServiceTopia.java index cbe3b36..ef284d8 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/RouteServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/RouteServiceTopia.java @@ -22,13 +22,14 @@ package fr.ird.observe.services.service.seine; * #L% */ -import com.google.common.base.Optional; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ird.observe.entities.seine.ActivitySeine; +import fr.ird.observe.entities.seine.ActivitySeineImpl; import fr.ird.observe.entities.seine.Route; import fr.ird.observe.entities.seine.RouteTopiaDao; +import fr.ird.observe.entities.seine.Routes; import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.entities.seine.TripSeineTopiaDao; import fr.ird.observe.services.ObserveServiceTopia; @@ -38,14 +39,18 @@ import fr.ird.observe.services.dto.ReferenceDtos; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.ReferenceSetDtos; import fr.ird.observe.services.dto.result.TripChildSaveResultDto; +import fr.ird.observe.services.dto.seine.ActivitySeineStubDto; import fr.ird.observe.services.dto.seine.RouteDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.DataNotFoundException; import org.apache.commons.lang3.time.DateUtils; +import org.nuiton.topia.persistence.TopiaEntities; import org.nuiton.util.DateUtil; import java.util.Date; import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -76,12 +81,46 @@ public class RouteServiceTopia extends ObserveServiceTopia implements RouteServi } @Override + public int getRoutePositionInTripSeine(String tripSeineId, String routeId) { + + TripSeine tripSeine = loadEntity(TripSeineDto.class, TripSeine.class, tripSeineId); + + Route route = tripSeine.getRouteByTopiaId(routeId); + + List<Route> routes = Lists.newArrayList(tripSeine.getRoute()); + + Routes.sort(routes); + + return routes.indexOf(route); + + } + + protected void bindFindeVeilleProperties(Set<ActivitySeine> activitySeines, LinkedHashSet<ActivitySeineStubDto> activitySeineDtos) { + + for (ActivitySeineStubDto activitySeineDto : activitySeineDtos) { + + ActivitySeine activitySeine = Iterables.find( + activitySeines, + TopiaEntities.entityHasId(activitySeineDto.getId())); + + boolean isFindeVeille = activitySeine.getVesselActivitySeine() != null + && ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE.equals(activitySeine.getVesselActivitySeine().getCode()); + + activitySeineDto.setActivityFinDeVeille(isFindeVeille); + + } + + } + + @Override public FormDto<RouteDto> loadToRead(String routeId) { Route route = loadEntity(RouteDto.class, Route.class, routeId); FormDto<RouteDto> form = entityToReadFormDto(RouteDto.class, Route.class, route); + bindFindeVeilleProperties(route.getActivitySeine(), form.getForm().getActivitySeine()); + return form; } @@ -92,6 +131,8 @@ public class RouteServiceTopia extends ObserveServiceTopia implements RouteServi FormDto<RouteDto> form = entityToEditFormDto(RouteDto.class, Route.class, route); + bindFindeVeilleProperties(route.getActivitySeine(), form.getForm().getActivitySeine()); + return form; } @@ -141,6 +182,7 @@ public class RouteServiceTopia extends ObserveServiceTopia implements RouteServi route = saveEntity(Route.class, route); result.setId(route.getTopiaId()); + result.setLastUpdate(route.getLastUpdate()); if (routeDto.isNotPersisted()) { diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TripSeineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TripSeineServiceTopia.java index 9682918..d0fa952 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TripSeineServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TripSeineServiceTopia.java @@ -34,11 +34,11 @@ import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceDtos; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.ReferenceSetDtos; -import fr.ird.observe.services.dto.SaveResultDto; -import fr.ird.observe.services.dto.SaveResultDtos; import fr.ird.observe.services.dto.TripMapDto; import fr.ird.observe.services.dto.TripMapPointDto; import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.result.SaveResultDto; +import fr.ird.observe.services.dto.result.SaveResultDtos; import fr.ird.observe.services.dto.seine.TripSeineDto; import org.nuiton.util.DateUtil; diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java index add020f..f44daa5 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java @@ -30,12 +30,12 @@ import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.ReferenceSetDtos; -import fr.ird.observe.services.dto.SaveResultDto; import fr.ird.observe.services.dto.referential.HarbourDto; import fr.ird.observe.services.dto.referential.OceanDto; import fr.ird.observe.services.dto.referential.PersonDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import fr.ird.observe.services.dto.referential.VesselDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.AbstractServiceTopiaTest; import fr.ird.observe.services.service.ConcurrentModificationException; -- 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