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>.