This is an automated email from the git hooks/post-receive script. New commit to branch feature/7594 in repository observe. See http://git.codelutin.com/observe.git commit 263b8c7bb6c95d70bde317ca3ee4bad2efa3686c Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Oct 12 10:00:30 2015 +0200 migration de l'ecran des activités palangre (refs #7594) --- .../impl/longline/ActivityLonglinesUIHandler.java | 4 +- .../open/impl/longline/ActivityLonglineUI.css | 2 - .../open/impl/longline/ActivityLonglineUI.jaxx | 2 - .../impl/longline/ActivityLonglineUIHandler.java | 111 +------------ .../ird/observe/ui/tree/ActivityLonglineNode.java | 8 +- .../loadors/ActivityLonglinesNodeChildLoador.java | 15 +- .../ird/observe/validation/ValidationContext.java | 48 +++++- ...ivityLonglineDto-n1-create-error-validation.xml | 185 +++++++++++++++++++++ ...ityLonglineDto-n1-create-warning-validation.xml | 47 ++++++ ...ivityLonglineDto-n1-update-error-validation.xml | 183 ++++++++++++++++++++ ...ityLonglineDto-n1-update-warning-validation.xml | 38 +++++ .../ActivityLonglineServiceController.java | 10 +- .../entities/longline/ActivityLonglines.java | 12 ++ .../service/longline/ActivityLonglineService.java | 6 +- .../services/dto/ObserveDtosInitializer.java | 3 + .../longline/ActivityLonglineServiceTopia.java | 45 +++-- 16 files changed, 559 insertions(+), 160 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java index cc1e8ac..5d1c6e8 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java @@ -24,13 +24,11 @@ package fr.ird.observe.ui.content.list.impl.longline; 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.ReferenceSetDto; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.longline.ActivityLonglineStubDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineDtos; import fr.ird.observe.services.service.longline.ActivityLonglineService; @@ -119,7 +117,7 @@ public class ActivityLonglinesUIHandler extends ContentListUIHandler<TripLonglin protected List<ReferenceDto> getChilds(TripLonglineDto bean) { ActivityLonglineService service = ObserveSwingApplicationContext.get().newService(ActivityLonglineService.class); - ReferenceSetDto<ActivityLonglineStubDto> activityLonglineStubByRoute = service.getActivityLonglineStubByRoute(bean.getId()); + ReferenceSetDto<ActivityLonglineDto> activityLonglineStubByRoute = service.getActivityLonglineByTripLongline(bean.getId()); if (log.isDebugEnabled()) { log.debug("Will use " + activityLonglineStubByRoute.sizeReference() + " activities."); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUI.css b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUI.css index 068d2e4..b743036 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUI.css +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUI.css @@ -37,8 +37,6 @@ #coordinatesEditor { propertyLatitude:{ActivityLonglineDto.PROPERTY_LATITUDE}; propertyLongitude:{ActivityLonglineDto.PROPERTY_LONGITUDE}; - //FIXME - //propertyQuadrant:{ActivityLonglineDto.PROPERTY_QUADRANT}; } #vesselActivityLonglineLabel { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUI.jaxx index 3fb80f9..77486f9 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUI.jaxx @@ -66,8 +66,6 @@ <field name='longitude' component='coordinatesEditor'/> <field name='latitude' component='coordinatesEditor'/> - <!--FIXME--> - <!--<field name='quadrant' component='coordinatesEditor'/>--> </BeanValidator> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java index 17a30bb..c5c87af 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java @@ -110,7 +110,7 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity } // l'activity existe en base - if (dataContext.isSelectedOpen(ActivityLonglineDto.class)) { + if (getOpenDataManager().isOpenActivityLongline(getSelectedId())) { // l'activity est ouverte, donc modifiable return ContentMode.UPDATE; @@ -119,7 +119,7 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity ActivityLonglineUI ui = getUi(); // l'activity n'est pas ouverte, donc pas éditable - if (!dataContext.isSelectedOpen(TripLonglineDto.class)) { + if (!getOpenDataManager().isOpenTripLongline(getSelectedParentId())) { // la marée n'est pas ouverte addMessage(ui, @@ -195,61 +195,11 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity finalizeOpenUI(mode, create); getUi().getCoordinatesEditor().setLatitudeAndLongitude(bean.getLatitude(), bean.getLongitude()); - if (create) { - //FIXME -// Integer quadrant = bean.getQuadrant(); - getUi().getCoordinatesEditor().setQuadrant(null); -// getUi().getCoordinatesEditor().setQuadrant(quadrant); - } // on annule la modification engendree par ce binding getModel().setModified(create); } - //FIXME -// @Override -// protected ActivityLongline onPreCreate(TopiaContext tx, Object parent, ActivityLongline bean) throws TopiaException { -// TripLongline parentBean = (TripLongline) parent; -// -// bean.setOpen(true); -// bean.setLatitude(null); -// bean.setLongitude(null); -// -// Date timestamp; -// -// ActivityLongline lastActivityLongline = parentBean.getLastActivity(); -// if (lastActivityLongline == null) { -// -// // première activité, on utilise la date de début de marée (voir http://forge.codelutin.com/issues/6777) -// Calendar calendar = Calendar.getInstance(); -// calendar.setTime(parentBean.getStartDate()); -// timestamp = calendar.getTime(); -// -// } else { -// -// // passage en coordonnées absolue + quadrant -// lastActivityLongline.initCoordinates(); -// -// // on recupère le quadrant de cette activity -// // et on l'affecte à la nouvelle activity -// Integer quadrant = lastActivityLongline.getQuadrant(); -// if (log.isDebugEnabled()) { -// log.debug("use quadrant of previous activity [" + quadrant + "]"); -// } -// bean.setQuadrant(quadrant); -// -// // on reprend la date et l'heure de la dernière activité -// timestamp = lastActivityLongline.getTimeStamp(); -// } -// -// bean.setTimeStamp(timestamp); -// -// if (log.isDebugEnabled()) { -// log.debug("has pre-created : " + bean); -// } -// return bean; -// } - @Override public void startEditUI(String... binding) { ActivityLonglineUI ui = getUi(); @@ -291,55 +241,23 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity String tripId = getSelectedParentId(); - bean.setOpen(true); - TripChildSaveResultDto saveResult = getActivityLonglineService().save(tripId, getModel().getBean()); bean.setId(saveResult.getId()); + bean.setLastUpdate(saveResult.getLastUpdate()); setUpdateMareeNodeTag(saveResult.isTripEndDateUpdated()); - //FIXME quand on gèrera l'arbre -// obtainChildPosition(bean); + obtainChildPosition(bean); return true; } @Override protected int getOpenablePosition(String parentId, ActivityLonglineDto bean) { - // TODO - return 0; + int position = getActivityLonglineService().getActivityLonglinePositionInTripLongline(parentId, bean.getId()); + return position; } - //FIXME -// @Override -// protected ActivityLongline onCreate(TopiaContext tx, Object parent, ActivityLongline editBean) throws TopiaException { -// TripLongline parentBean = (TripLongline) parent; -// ActivityLongline beanToSave = ObserveDAOHelper.getActivityLonglineDAO(tx).create(); -// editBean.setTopiaId(beanToSave.getTopiaId()); -// parentBean.addActivityLongline(beanToSave); -// return beanToSave; -// } - - //FIXME -// @Override -// protected ActivityLongline onUpdate(TopiaContext tx, Object parentBean, ActivityLongline beanToSave) throws TopiaException { -// -// ActivityLongline editBean = getBean(); -// -// if (log.isInfoEnabled()) { -// log.info("Final time to use : " + editBean.getTimeStamp()); -// } -// -// getLoadBinder().copyExcluding(editBean, beanToSave, -// ActivityLongline.PROPERTY_ENCOUNTER, -// ActivityLongline.PROPERTY_SENSOR_USED); -// -// if (log.isInfoEnabled()) { -// log.info("Is activity open ? : " + beanToSave.isOpen()); -// } -// return beanToSave; -// } - @Override protected boolean doDelete(ActivityLonglineDto bean) throws Exception { @@ -361,13 +279,6 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity } - //FIXME -// @Override -// protected void onDelete(TopiaContext tx, Object parent, ActivityLongline beanToDelete) { -// TripLongline parentBean = (TripLongline) parent; -// parentBean.removeActivityLongline(beanToDelete); -// } - @Override protected void afterSave(boolean refresh) { super.afterSave(refresh); @@ -383,14 +294,8 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity @Override protected boolean obtainCanReopen(boolean create) { - DataContext dataContext = getDataContext(); - // on peut reouvrir une activity si : - // - pas en mode creation - // - pas d'activity d'ouverte - // - la maree courante est ouverte - boolean canReopen = !create && - dataContext.isSelectedOpen(TripLonglineDto.class) && - !dataContext.isOpenActivity(); + boolean canReopen = !create && getOpenDataManager().canOpenActivityLongline(getSelectedParentId()); + return canReopen; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ActivityLonglineNode.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ActivityLonglineNode.java index 1d61903..a51ce1a 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ActivityLonglineNode.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ActivityLonglineNode.java @@ -48,7 +48,7 @@ public class ActivityLonglineNode extends DtoNodeSupport<ActivityLonglineDto> { @Override protected ReferenceDto<ActivityLonglineDto> fetchEntity() { ActivityLonglineService service = ObserveSwingApplicationContext.get().newService(ActivityLonglineService.class); - FormDto<ActivityLonglineDto> formDto = service.loadToRead(entity.getId()); + FormDto<ActivityLonglineDto> formDto = service.loadToRead(getId()); //FIXME kmorin 20151005 voir quels attributs sont à récupérer ReferenceDto<ActivityLonglineDto> referenceDto = @@ -61,10 +61,4 @@ public class ActivityLonglineNode extends DtoNodeSupport<ActivityLonglineDto> { return referenceDto; } - //FIXME -// @Override -// protected ActivityLonglineDto getEntity(DataService dataService, DataSource source) { -// return dataService.getActivityLonglineStub(source, id); -// } - } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ActivityLonglinesNodeChildLoador.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ActivityLonglinesNodeChildLoador.java index 16cdd2a..962ead1 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ActivityLonglinesNodeChildLoador.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/loadors/ActivityLonglinesNodeChildLoador.java @@ -22,14 +22,17 @@ package fr.ird.observe.ui.tree.loadors; * #L% */ -import fr.ird.observe.db.ObserveSwingDataSource; +import fr.ird.observe.ObserveSwingApplicationContext; 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.longline.ActivityLonglineDto; +import fr.ird.observe.services.service.longline.ActivityLonglineService; import fr.ird.observe.ui.tree.ActivityLonglineNode; -import fr.ird.observe.ui.tree.ObserveDataProvider; import fr.ird.observe.ui.tree.ObserveNode; import jaxx.runtime.swing.nav.NavDataProvider; +import java.util.ArrayList; import java.util.List; /** @@ -51,12 +54,10 @@ public class ActivityLonglinesNodeChildLoador extends AbstractReferenceDtoChildL String parentId, NavDataProvider dataProvider) throws Exception { - ObserveSwingDataSource dataSource = ((ObserveDataProvider) dataProvider).getDataSource(); - //FIXME -// List<ActivityLonglineDto> data = getDataService().getActivityLonglineStubByTrip(dataSource, parentId); -// return data; + ActivityLonglineService activityLonglineService = ObserveSwingApplicationContext.get().newService(ActivityLonglineService.class); + ReferenceSetDto<ActivityLonglineDto> refActivities = activityLonglineService.getActivityLonglineByTripLongline(parentId); - return null; + return new ArrayList<>(ReferenceDtos.castToCollectionOfReferenceDto(refActivities.getReference())); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java index e71e7f2..8d42c4b 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/ValidationContext.java @@ -98,42 +98,74 @@ public class ValidationContext { } public TripSeineDto getCurrentTripSeine() { - TripSeineDto result = getDto(TripSeineDto.class, dataContext.getSelectedTripId()); + String tripSeineId = dataContext.getSelectedTripSeineId(); + TripSeineDto result = null; + if (tripSeineId != null) { + result = getDto(TripSeineDto.class, tripSeineId); + } return result; } public TripLonglineDto getCurrentTripLongline() { - TripLonglineDto result = getDto(TripLonglineDto.class, dataContext.getSelectedTripId()); + String tripLonglineId = dataContext.getSelectedTripLonglineId(); + TripLonglineDto result = null; + if (tripLonglineId != null) { + result = getDto(TripLonglineDto.class, tripLonglineId); + } return result; } public RouteDto getCurrentRoute() { - RouteDto result = getDto(RouteDto.class, dataContext.getSelectedRouteId()); + String routeId = dataContext.getSelectedRouteId(); + RouteDto result = null; + if (routeId != null) { + result = getDto(RouteDto.class, routeId); + } return result; } public ActivitySeineDto getCurrentActivitySeine() { - ActivitySeineDto result = getDto(ActivitySeineDto.class, dataContext.getSelectedActivityId()); + String activitySeineId = dataContext.getSelectedActivitySeineId(); + ActivitySeineDto result = null; + if (activitySeineId != null) { + result = getDto(ActivitySeineDto.class, activitySeineId); + } return result; } public ActivityLonglineDto getCurrentActivityLongline() { - ActivityLonglineDto result = getDto(ActivityLonglineDto.class, dataContext.getSelectedActivityId()); + String activityLonglineId = dataContext.getSelectedActivityLonglineId(); + ActivityLonglineDto result = null; + if (activityLonglineId != null) { + result = getDto(ActivityLonglineDto.class, activityLonglineId); + } return result; } public SetSeineDto getCurrentSetSeine() { - SetSeineDto result = getDto(SetSeineDto.class, dataContext.getSelectedSetId()); + String setSeineId = dataContext.getSelectedSetSeineId(); + SetSeineDto result = null; + if (setSeineId != null) { + result = getDto(SetSeineDto.class, setSeineId); + } return result; } public SetLonglineDto getCurrentSetLongline() { - SetLonglineDto result = getDto(SetLonglineDto.class, dataContext.getSelectedSetId()); + String setLonglineId = dataContext.getSelectedSetLonglineId(); + SetLonglineDto result = null; + if (setLonglineId != null) { + result = getDto(SetLonglineDto.class, setLonglineId); + } return result; } public FloatingObjectDto getCurrentFloatingObject() { - FloatingObjectDto result = getDto(FloatingObjectDto.class, dataContext.getSelectedFloatingObjectId()); + String floatingObjectId = dataContext.getSelectedFloatingObjectId(); + FloatingObjectDto result = null; + if (floatingObjectId != null) { + result = getDto(FloatingObjectDto.class, floatingObjectId); + } return result; } diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-create-error-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-create-error-validation.xml new file mode 100644 index 0000000..7d14dcf --- /dev/null +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-create-error-validation.xml @@ -0,0 +1,185 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Validation + %% + Copyright (C) 2008 - 2010 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% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="vesselActivityLongline"> + + <!-- pas de vesselActivityLongline selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.vesselActivity</message> + </field-validator> + + <!-- vesselActivityLongline desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ vesselActivityLongline.enabled ]]> + </param> + <message>validator.activity.desactivated.vesselActivity</message> + </field-validator> + + </field> + + <field name="date"> + + <!-- pas de date selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.date</message> + </field-validator> + + </field> + + <field name="time"> + + <!-- pas d'heure d'observation selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.time</message> + </field-validator> + + <!-- heure observation non duplique --> + <!--field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ + routeEntity.isTimeAvailable(topiaId, time) + ]]> + </param> + <message>validator.activity.duplicated.time</message> + </field-validator--> + + <!--field-validator type="activitySimpleSpeed" short-circuit="true"> + <param name="speed">30.0</param> + <message>validator.activity.invalid.speed##${foundSpeed}##${speed}</message> + </field-validator--> + + </field> + + <field name="seaSurfaceTemperature"> + + <!-- temperature surface non saisie || 12.0 <= temperature surface <= 35.0 --> + <field-validator type="fieldexpressionwithparams" short-circuit="true"> + <param name="doubleParams">min:12.0|max:35.0</param> + <param name="expression"> + <![CDATA[ seaSurfaceTemperature == null || (doubles.min <= seaSurfaceTemperature && seaSurfaceTemperature <= doubles.max)]]> + </param> + <message> + validator.activity.bound.seaSurfaceTemperature##${doubles.min}##${doubles.max} + </message> + </field-validator> + + </field> + + <field name="latitude"> + + <!-- latitude obligatoire --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.latitude</message> + </field-validator> + + <!-- 0 <= latitude <= 90 --> + <field-validator type="double" short-circuit="true"> + <param name="minInclusive">-90.0</param> + <param name="maxInclusive">90.0</param> + <message> + validator.activity.bound.latitude##${0.0}##${maxInclusive} + </message> + </field-validator> + + </field> + + <field name="longitude"> + + <!-- longitude obligatoire --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.longitude</message> + </field-validator> + + <!-- 0 <= longitude <= 180 --> + <field-validator type="double" short-circuit="true"> + <param name="minInclusive">-180.0</param> + <param name="maxInclusive">180.0</param> + <message> + validator.activity.bound.longitude##${0.0}##${maxInclusive} + </message> + </field-validator> + + <!-- coherence quadrant par rapport a l'ocean de la maree --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"><![CDATA[ + currentTripLongline.ocean == null || longitude == null || latitude == null + || (currentTripLongline.ocean.getPropertyValue("code") == 3) + || (currentTripLongline.ocean.getPropertyValue("code") == 1) + || (currentTripLongline.ocean.getPropertyValue("code") == 2 && ( longitude >= 0)) + ]]> + </param> + <message> + validator.activity.invalid.quadrant##${currentTripSeine.ocean.getPropertyValue("label")} + </message> + </field-validator> + + </field> + + <field name="comment"> + <!-- comentaire de moins de 1024 caractères --> + <field-validator type="stringlength"> + <param name="maxLength">1024</param> + <message>validator.activity.comment.tobig</message> + </field-validator> + + <!-- comentaire requis pour le type d'activity vessel selectionne --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ vesselActivityLongline == null || !vesselActivityLongline.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.vesselActivity + </message> + </field-validator> + + <!-- comentaire requis pour fpaZone --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ fpaZone == null || !fpaZone.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.fpaZone + </message> + </field-validator> + + </field> + + <field name="fpaZone"> + + <!-- fpaZone desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ fpaZone == null || fpaZone.enabled ]]> + </param> + <message>validator.activityLongline.desactivated.fpaZone</message> + </field-validator> + + </field> + +</validators> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-create-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-create-warning-validation.xml new file mode 100644 index 0000000..30553a7 --- /dev/null +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-create-warning-validation.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Validation + %% + Copyright (C) 2008 - 2010 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% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="seaSurfaceTemperature"> + + <!-- temperature surface non saisie --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.null.seaSurfaceTemperature</message> + </field-validator> + + </field> + + <field name="fpaZone"> + + <!-- fpaZone non saisie --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.null.fpaZone</message> + </field-validator> + + </field> + +</validators> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-update-error-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-update-error-validation.xml new file mode 100644 index 0000000..8e16a39 --- /dev/null +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-update-error-validation.xml @@ -0,0 +1,183 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Validation + %% + Copyright (C) 2008 - 2010 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% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="vesselActivityLongline"> + + <!-- pas de vesselActivityLongline selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.vesselActivity</message> + </field-validator> + + <!-- vesselActivityLongline desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ vesselActivityLongline.enabled ]]> + </param> + <message>validator.activity.desactivated.vesselActivity</message> + </field-validator> + + </field> + + <field name="date"> + + <!-- pas de date selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.date</message> + </field-validator> + + </field> + + <field name="time"> + + <!-- pas d'heure d'observation selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.time</message> + </field-validator> + + </field> + + <field name="quadrant"> + + <!-- quadrant obligatoire (http://forge.codelutin.com/issues/840) --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.quadrant</message> + </field-validator> + + <!-- coherence quadrant par rapport a l'ocean de la maree --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"><![CDATA[ + tripLonglineEntity.ocean == null || quadrant == null || quadrant == 0 + || (tripLonglineEntity.ocean.code == 3) + || (tripLonglineEntity.ocean.code == 1 && ( quadrant == 1 || quadrant == 2 || quadrant == 3 || quadrant == 4)) + || (tripLonglineEntity.ocean.code == 2 && ( quadrant == 1 || quadrant == 2)) + ]]> + </param> + <message> + validator.activity.invalid.quadrant##${tripLonglineEntity.ocean.libelle} + </message> + </field-validator> + + </field> + + <field name="seaSurfaceTemperature"> + + <!-- temperature surface non saisie || 12.0 <= temperature surface <= 35.0 --> + <field-validator type="fieldexpressionwithparams" short-circuit="true"> + <param name="doubleParams">min:12.0|max:35.0</param> + <param name="expression"> + <![CDATA[ seaSurfaceTemperature == null || (doubles.min <= seaSurfaceTemperature && seaSurfaceTemperature <= doubles.max)]]> + </param> + <message> + validator.activity.bound.seaSurfaceTemperature##${doubles.min}##${doubles.max} + </message> + </field-validator> + + </field> + + <field name="latitude"> + + <!-- latitude obligatoire --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.latitude</message> + </field-validator> + + <!-- 0 <= latitude <= 90 --> + <field-validator type="double" short-circuit="true"> + <param name="minInclusive">-90.0</param> + <param name="maxInclusive">90.0</param> + <message> + validator.activity.bound.latitude##${0.0}##${maxInclusive} + </message> + </field-validator> + + </field> + + <field name="longitude"> + + <!-- longitude obligatoire --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.longitude</message> + </field-validator> + + <!-- 0 <= longitude <= 180 --> + <field-validator type="double" short-circuit="true"> + <param name="minInclusive">-180.0</param> + <param name="maxInclusive">180.0</param> + <message> + validator.activity.bound.longitude##${0.0}##${maxInclusive} + </message> + </field-validator> + + <!-- coherence quadrant par rapport a l'ocean de la maree --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"><![CDATA[ + currentTripLongline.ocean == null || longitude == null || latitude == null + || (currentTripLongline.ocean.getPropertyValue("code") == 3) + || (currentTripLongline.ocean.getPropertyValue("code") == 1) + || (currentTripLongline.ocean.getPropertyValue("code") == 2 && ( longitude >= 0)) + ]]> + </param> + <message> + validator.activity.invalid.quadrant##${currentTripSeine.ocean.getPropertyValue("label")} + </message> + </field-validator> + + </field> + + <field name="comment"> + <!-- comentaire de moins de 1024 caractères --> + <field-validator type="stringlength"> + <param name="maxLength">1024</param> + <message>validator.activity.comment.tobig</message> + </field-validator> + + <!-- comentaire requis pour le type d'activity vessel selectionne --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ vesselActivityLongline == null || !vesselActivityLongline.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.vesselActivity + </message> + </field-validator> + + </field> + + <field name="fpaZone"> + + <!-- fpaZone desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ fpaZone == null || fpaZone.enabled ]]> + </param> + <message>validator.activityLongline.desactivated.fpaZone</message> + </field-validator> + + </field> + +</validators> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-update-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-update-warning-validation.xml new file mode 100644 index 0000000..2620c25 --- /dev/null +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/longline/ActivityLonglineDto-n1-update-warning-validation.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Validation + %% + Copyright (C) 2008 - 2010 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% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="seaSurfaceTemperature"> + + <!-- temperature surface non saisie --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.null.seaSurfaceTemperature</message> + </field-validator> + + </field> + +</validators> diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/ActivityLonglineServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/ActivityLonglineServiceController.java index cefa9dc..1880648 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/ActivityLonglineServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/ActivityLonglineServiceController.java @@ -26,7 +26,6 @@ import fr.ird.observe.application.web.controller.v1.ObserveAuthenticatedServiceC import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.longline.ActivityLonglineStubDto; import fr.ird.observe.services.dto.result.TripChildSaveResultDto; import fr.ird.observe.services.service.longline.ActivityLonglineService; @@ -40,8 +39,13 @@ public class ActivityLonglineServiceController extends ObserveAuthenticatedServi } @Override - public ReferenceSetDto<ActivityLonglineStubDto> getActivityLonglineStubByRoute(String tripLonglineId) { - return service.getActivityLonglineStubByRoute(tripLonglineId); + public ReferenceSetDto<ActivityLonglineDto> getActivityLonglineByTripLongline(String tripLonglineId) { + return service.getActivityLonglineByTripLongline(tripLonglineId); + } + + @Override + public int getActivityLonglinePositionInTripLongline(String tripLonglineId, String activityLonglineId) { + return service.getActivityLonglinePositionInTripLongline(tripLonglineId, activityLonglineId); } @Override diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/longline/ActivityLonglines.java b/observe-entities/src/main/java/fr/ird/observe/entities/longline/ActivityLonglines.java index f236bf7..f350769 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/longline/ActivityLonglines.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/longline/ActivityLonglines.java @@ -22,8 +22,11 @@ package fr.ird.observe.entities.longline; * #L% */ +import com.google.common.base.Predicate; + import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.List; /** @@ -49,4 +52,13 @@ public class ActivityLonglines { public static void sort(List<ActivityLongline> routes) { Collections.sort(routes, ACTIVITY_LONGLINE_COMPARATOR); } + + public static Predicate<ActivityLongline> newTimeStampBeforePredicate(final Date timeStamp) { + return new Predicate<ActivityLongline>() { + @Override + public boolean apply(ActivityLongline input) { + return input.getTimeStamp().before(timeStamp); + } + }; + } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/ActivityLonglineService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/ActivityLonglineService.java index 0889ff9..9553db1 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/ActivityLonglineService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/ActivityLonglineService.java @@ -26,7 +26,6 @@ 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.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.longline.ActivityLonglineStubDto; import fr.ird.observe.services.dto.result.TripChildSaveResultDto; import fr.ird.observe.services.spi.DeleteRequest; import fr.ird.observe.services.spi.PostRequest; @@ -40,7 +39,10 @@ import fr.ird.observe.services.spi.WriteDataPermission; public interface ActivityLonglineService extends ObserveService { @ReadDataPermission - ReferenceSetDto<ActivityLonglineStubDto> getActivityLonglineStubByRoute(String tripLonglineId); + ReferenceSetDto<ActivityLonglineDto> getActivityLonglineByTripLongline(String tripLonglineId); + + @ReadDataPermission + int getActivityLonglinePositionInTripLongline(String tripLonglineId, String activityLonglineId); @ReadDataPermission FormDto<ActivityLonglineDto> loadToRead(String activityLonglineId); 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 3539f72..d407010 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 @@ -394,6 +394,9 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { ActivityLonglineDto.PROPERTY_FPA_ZONE, ActivityLonglineDto.PROPERTY_LAST_UPDATE ); + + registerReferenceBinder(ActivityLonglineDto.class, ActivityLongline.class, + ActivityLonglineDto.PROPERTY_TIME_STAMP); } @Override diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLonglineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLonglineServiceTopia.java index 25776a3..f0438fb 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLonglineServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLonglineServiceTopia.java @@ -24,21 +24,18 @@ package fr.ird.observe.services.service.longline; 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.constants.ReferenceLocale; import fr.ird.observe.entities.longline.ActivityLongline; +import fr.ird.observe.entities.longline.ActivityLonglines; import fr.ird.observe.entities.longline.TripLongline; import fr.ird.observe.entities.longline.TripLonglineTopiaDao; import fr.ird.observe.entities.seine.ActivitySeine; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; 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.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.longline.ActivityLonglineStubDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.result.TripChildSaveResultDto; import fr.ird.observe.services.service.DataNotFoundException; @@ -54,42 +51,43 @@ import java.util.LinkedHashSet; public class ActivityLonglineServiceTopia extends ObserveServiceTopia implements ActivityLonglineService { @Override - public ReferenceSetDto<ActivityLonglineStubDto> getActivityLonglineStubByRoute(String tripLonglineId) { - - ReferenceLocale referenceLocale = getReferenceLocale(); + public ReferenceSetDto<ActivityLonglineDto> getActivityLonglineByTripLongline(String tripLonglineId) { TripLongline tripLongline = loadEntity(TripLonglineDto.class, TripLongline.class, tripLonglineId); - LinkedHashSet<ReferenceDto<ActivityLonglineStubDto>> stubs = Sets.newLinkedHashSet(); + LinkedHashSet<ReferenceDto<ActivityLonglineDto>> stubs = Sets.newLinkedHashSet(); for (ActivityLongline activityLongline : tripLongline.getActivityLongline()) { - ReferenceDto<ActivityLonglineStubDto> stub = - ReferenceDtos.newReferenceDto(ActivityLonglineStubDto.class, - Lists.newArrayList(ActivityLonglineStubDto.PROPERTY_TIME_STAMP, - ActivityLonglineStubDto.PROPERTY_VESSEL_ACTIVITY_LONGLINE_LABEL, - ActivityLonglineStubDto.PROPERTY_HAS_SET_LONGLINE)); - - stub.setId(activityLongline.getTopiaId()); - stub.setPropertyValue(ActivityLonglineStubDto.PROPERTY_TIME_STAMP, activityLongline.getTimeStamp()); - stub.setPropertyValue(ActivityLonglineStubDto.PROPERTY_VESSEL_ACTIVITY_LONGLINE_LABEL, - referenceLocale.getLabel(activityLongline.getVesselActivityLongline())); - stub.setPropertyValue(ActivityLonglineStubDto.PROPERTY_HAS_SET_LONGLINE, - activityLongline.getSetLongline() != null); + ReferenceDto<ActivityLonglineDto> refActivity = entityToReferenceDto(ActivityLonglineDto.class, activityLongline); - stubs.add(stub); + stubs.add(refActivity); } Optional<Date> lastUpdateOptional = getLastUpdate(ActivitySeine.class); - ReferenceSetDto<ActivityLonglineStubDto> stubReferences = - ReferenceSetDtos.newReferenceSetDto(ActivityLonglineStubDto.class, stubs, lastUpdateOptional.orNull()); + + ReferenceSetDto<ActivityLonglineDto> stubReferences = + ReferenceSetDtos.newReferenceSetDto(ActivityLonglineDto.class, stubs, lastUpdateOptional.orNull()); return stubReferences; } @Override + public int getActivityLonglinePositionInTripLongline(String tripLonglineId, String activityLonglineId) { + TripLongline tripLongline = loadEntity(TripLonglineDto.class, TripLongline.class, tripLonglineId); + + ActivityLongline activityLongline = tripLongline.getActivityLonglineByTopiaId(activityLonglineId); + + int position = Iterables.size(Iterables.filter( + tripLongline.getActivityLongline(), + ActivityLonglines.newTimeStampBeforePredicate(activityLongline.getTimeStamp()))); + + return position; + } + + @Override public FormDto<ActivityLonglineDto> loadToRead(String activityLonglineId) { ActivityLongline activityLongline = loadEntity(ActivityLonglineDto.class, ActivityLongline.class, activityLonglineId); @@ -169,6 +167,7 @@ public class ActivityLonglineServiceTopia extends ObserveServiceTopia implements activityLongline = saveEntity(ActivityLongline.class, activityLongline); result.setId(activityLongline.getTopiaId()); + result.setLastUpdate(activityLongline.getLastUpdate()); if (activityLonglineDto.isNotPersisted()) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.