branch feature/7594 created (now 263b8c7)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7594 in repository observe. See http://git.codelutin.com/observe.git at 263b8c7 migration de l'ecran des activités palangre (refs #7594) This branch includes the following new commits: new 263b8c7 migration de l'ecran des activités palangre (refs #7594) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 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) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/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>.
participants (1)
-
codelutin.com scm