branch feature/7593 created (now 07b7cfa)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7593 in repository observe. See http://git.codelutin.com/observe.git at 07b7cfa migration de l'ecran des activité seine (refs #7593) This branch includes the following new commits: new 07b7cfa migration de l'ecran des activité seine (refs #7593) 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 07b7cfa319afb97b33469c3b483abedadfc28f48 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Oct 9 16:02:15 2015 +0200 migration de l'ecran des activité seine (refs #7593) -- 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/7593 in repository observe. See http://git.codelutin.com/observe.git commit 07b7cfa319afb97b33469c3b483abedadfc28f48 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Oct 9 16:02:15 2015 +0200 migration de l'ecran des activité seine (refs #7593) --- .../ui/content/open/impl/seine/ActivitySeineUI.css | 2 - .../content/open/impl/seine/ActivitySeineUI.jaxx | 7 +- .../open/impl/seine/ActivitySeineUIHandler.java | 139 +-------- .../open/impl/seine/ActivitySeineUIModel.java | 2 - .../ui/content/open/impl/seine/RouteUIHandler.java | 4 +- .../fr/ird/observe/ui/tree/ActivitySeineNode.java | 2 +- .../dto/ActivityFinDeVeilleExistsDtoValidator.java | 3 +- .../dto/ActivitySimpleSpeedDtoValidator.java | 13 +- ...ActivitySeineDto-n1-create-error-validation.xml | 328 +++++++++++++++++++++ ...tivitySeineDto-n1-create-warning-validation.xml | 96 ++++++ ...ActivitySeineDto-n1-update-error-validation.xml | 274 +++++++++++++++++ ...tivitySeineDto-n1-update-warning-validation.xml | 95 ++++++ .../seine/RouteDto-n1-update-error-validation.xml | 2 +- .../v1/seine/ActivitySeineServiceController.java | 8 +- .../ird/observe/entities/seine/ActivitySeines.java | 10 + .../java/fr/ird/observe/entities/seine/Routes.java | 10 + .../service/seine/ActivitySeineService.java | 6 +- .../dto/referential/ReferentialReferenceDto.java | 5 + .../services/dto/seine/ActivitySeineDto.java | 21 ++ .../ird/observe/services/dto/seine/RouteDto.java | 59 ++++ .../observe/services/dto/seine/TripSeineDto.java | 23 ++ .../src/main/xmi/observe-services-dto-seine.zargo | Bin 59881 -> 60043 bytes .../services/dto/ObserveDtosInitializer.java | 8 +- .../service/seine/ActivitySeineServiceTopia.java | 29 +- .../services/service/seine/RouteServiceTopia.java | 9 +- 25 files changed, 1001 insertions(+), 154 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUI.css b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUI.css index 1503ec8..c9fd164 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUI.css +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUI.css @@ -42,8 +42,6 @@ #coordinatesEditor { propertyLatitude:{ActivitySeineDto.PROPERTY_LATITUDE}; propertyLongitude:{ActivitySeineDto.PROPERTY_LONGITUDE}; - //FIXME - //propertyQuadrant:{ActivitySeineDto.PROPERTY_QUADRANT}; } #generalTab { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUI.jaxx index 1a4cb4a..60bcf47 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUI.jaxx @@ -71,12 +71,11 @@ errorTableModel='{getErrorTableModel()}' context='n1-create'> - <!--<field name='observedSystem' component='{actionDown}'/>--> + <field name='observedSystemEmpty' component='{actionDown}'/> + <field name='observedSystemDistance' component='{actionDown}'/> <field name='longitude' component='coordinatesEditor'/> <field name='latitude' component='coordinatesEditor'/> - - <!--<field name='quadrant' component='coordinatesEditor'/>--> - <!--<field name='floatingObject' component='addDCP'/>--> + <field name='floatingObjectEmpty' component='addDCP'/> </BeanValidator> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIHandler.java index 42eb319..877db42 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIHandler.java @@ -28,6 +28,7 @@ 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.referential.seine.VesselActivitySeineDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.ActivitySeineDtos; import fr.ird.observe.services.dto.seine.RouteDto; @@ -122,7 +123,7 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei } // l'activity existe en base - if (dataContext.isSelectedOpen(ActivitySeineDto.class)) { + if (getOpenDataManager().isOpenActivitySeine(getSelectedId())) { // l'activity est ouverte, donc modifiable return ContentMode.UPDATE; @@ -131,7 +132,7 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei ActivitySeineUI ui = getUi(); // l'activity n'est pas ouverte, donc pas éditable - if (!dataContext.isSelectedOpen(RouteDto.class)) { + if (!getOpenDataManager().isOpenRoute(getSelectedParentId())) { // la route n'est pas ouverte addMessage(ui, @@ -139,7 +140,7 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei getEntityLabel(RouteDto.class), t("observe.route.message.not.open")); - } else if (!dataContext.isSelectedOpen(TripSeineDto.class)) { + } else if (!getOpenDataManager().isOpenTripSeine(dataContext.getSelectedTripSeineId())) { // la marée n'est past ouverte addMessage(ui, @@ -225,74 +226,11 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei 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 ActivitySeine onPreCreate(TopiaContext tx, -// Object parent, -// ActivitySeine bean) throws TopiaException { -// Route parentBean = (Route) parent; -// -// bean.setOpen(true); -// bean.setLatitude(null); -// bean.setLongitude(null); -// -// Date time; -// -// FpaZone currentFpaZone = null; -// -// ActivitySeine lastActivitySeine = parentBean.getLastActivity(); -// if (lastActivitySeine == null) { -// -// // première activité, on utilise l'heure courante -// time = new Date(); -// -// } else { -// -// // passage en coordonnées absolue + quadrant -// lastActivitySeine.initCoordinates(); -// -// // on recupère le quadrant de cette activity -// // et on l'affecte à la nouvelle activity -// Integer quadrant = lastActivitySeine.getQuadrant(); -// if (quadrant != null) { -// -// if (log.isDebugEnabled()) { -// log.debug("use quadrant of previous activity [" + quadrant + "]"); -// } -// bean.setQuadrant(quadrant); -// } -// -// // on reprend l'heure de la dernière activité -// time = lastActivitySeine.getTime(); -// -// // utilisation des zones fpa de la dernière activité -// currentFpaZone = lastActivitySeine.getNextFpaZone(); -// if (currentFpaZone == null) { -// currentFpaZone = lastActivitySeine.getCurrentFpaZone(); -// } -// -// } -// -// bean.setTime(DateUtil.getTime(time, false, false)); -// bean.setCurrentFpaZone(currentFpaZone); -// -// if (log.isDebugEnabled()) { -// log.debug("has pre-created : " + bean); -// } -// return bean; -// } - @Override public void startEditUI(String... binding) { ActivitySeineUI ui = getUi(); @@ -340,11 +278,11 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei bean.setOpen(true); - String beanId = getActivitySeineService().save(routeId, getModel().getBean()); - bean.setId(beanId); + SaveResultDto result = getActivitySeineService().save(routeId, getModel().getBean()); + bean.setId(result.getId()); + bean.setLastUpdate(result.getLastUpdate()); - //FIXME quand on gèrera l'arbre -// obtainChildPosition(bean); + obtainChildPosition(bean); return true; } @@ -353,45 +291,10 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei @Override protected int getOpenablePosition(String parentId, ActivitySeineDto bean) { - // TODO - return 0; + int position = getActivitySeineService().getActivitySeinePositionInRoute(parentId, bean.getId()); + return position; } - //FIXME -// @Override -// protected ActivitySeine onCreate(TopiaContext tx, Object parent, ActivitySeine editBean) throws TopiaException { -// Route parentBean = (Route) parent; -// ActivitySeine beanToSave = ObserveDAOHelper.getActivitySeineDAO(tx).create(); -// editBean.setTopiaId(beanToSave.getTopiaId()); -// parentBean.addActivitySeine(beanToSave); -// return beanToSave; -// } - - //FIXME -// @Override -// protected ActivitySeine onUpdate(TopiaContext tx, Object parentBean, ActivitySeine beanToSave) throws TopiaException { -// -// ActivitySeine editBean = getBean(); -// -// Route route = (Route) parentBean; -// -// Date d = DateUtil.getDateAndTime(route.getDate(), editBean.getTime(), false, false); -// editBean.setTime(d); -// -// if (log.isInfoEnabled()) { -// log.info("Final time to use : " + d); -// } -// -// getLoadBinder().copyExcluding(editBean, beanToSave, -// ActivitySeine.PROPERTY_FLOATING_OBJECT, -// ActivitySeine.PROPERTY_OBSERVED_SYSTEM); -// -// if (log.isInfoEnabled()) { -// log.info("Is activity open ? : " + beanToSave.isOpen()); -// } -// return beanToSave; -// } - @Override protected boolean doDelete(ActivitySeineDto bean) throws Exception { @@ -411,25 +314,11 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei return true; } - - //FIXME -// @Override -// protected void onDelete(TopiaContext tx, Object parent, ActivitySeine beanToDelete) { -// Route parentBean = (Route) parent; -// parentBean.removeActivitySeine(beanToDelete); -// } - @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 route courante est ouverte - boolean canReopen = !create && - dataContext.isSelectedOpen(RouteDto.class) && - !dataContext.isOpenActivity(); + boolean canReopen = !create && getOpenDataManager().canOpenActivitySeine(getSelectedParentId()); + return canReopen; } @@ -439,9 +328,7 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei ReferenceSetDto<VesselActivitySeineDto> activities = service.getReferentialReferenceSet(VesselActivitySeineDto.class); for (ReferenceDto vesselActivity : activities.getReference()) { - //FIXME -// if (ActivitySeineDto.ACTIVITY_FIN_DE_PECHE.equals(a.getCode())) { - if ("6".equals(vesselActivity.getPropertyValue(VesselActivitySeineDto.PROPERTY_CODE))) { + if (ActivitySeineDto.ACTIVITY_FIN_DE_PECHE.equals(vesselActivity.getPropertyValue(VesselActivitySeineDto.PROPERTY_CODE))) { String label = getDecoratorService().decorate(VesselActivitySeineDto.class.getSimpleName(), vesselActivity); return label; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIModel.java index 648a1f0..58c5792 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIModel.java @@ -47,8 +47,6 @@ public class ActivitySeineUIModel extends ContentOpenableUIModel<ActivitySeineDt public static final Set<String> GENERAL_TAB_PROPERTIES = ImmutableSet.<String>builder().add(ActivitySeineDto.PROPERTY_TIME, - //FIXME -// ActivitySeineDto.PROPERTY_QUADRANT, ActivitySeineDto.PROPERTY_LATITUDE, ActivitySeineDto.PROPERTY_LONGITUDE, ActivitySeineDto.PROPERTY_VESSEL_ACTIVITY_SEINE, 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 5162792..4da84fc 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 @@ -44,7 +44,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.util.DateUtil; import org.nuiton.validator.NuitonValidatorScope; -import javax.swing.*; +import javax.swing.JOptionPane; import java.util.Date; import static org.nuiton.i18n.I18n.n; @@ -272,7 +272,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { // on doit vérifier qu'il existe une activité de fin // de veille (type activity vessel == 16) - boolean mustAddFinVeille = !RouteDtos.isActivityFindDeVeilleFound(route); + boolean mustAddFinVeille = !route.isActivityFindDeVeilleFound(); boolean createActivityFinDeVeille = false; boolean closeActivityFinDeVeille = false; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ActivitySeineNode.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ActivitySeineNode.java index 86c5edd..477d6ea 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ActivitySeineNode.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ActivitySeineNode.java @@ -48,7 +48,7 @@ public class ActivitySeineNode extends DtoNodeSupport<ActivitySeineDto> { @Override protected ReferenceDto<ActivitySeineDto> fetchEntity() { ActivitySeineService service = ObserveSwingApplicationContext.get().newService(ActivitySeineService.class); - FormDto<ActivitySeineDto> formDto = service.loadToRead(entity.getId()); + FormDto<ActivitySeineDto> formDto = service.loadToRead(getId()); //FIXME kmorin 20151005 voir quels attributs sont à récupérer ReferenceDto<ActivitySeineDto> referenceDto = diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityFinDeVeilleExistsDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityFinDeVeilleExistsDtoValidator.java index dc7b743..742b6ab 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityFinDeVeilleExistsDtoValidator.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivityFinDeVeilleExistsDtoValidator.java @@ -27,7 +27,6 @@ import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.RouteDto; -import fr.ird.observe.services.dto.seine.RouteDtos; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -165,7 +164,7 @@ public class ActivityFinDeVeilleExistsDtoValidator extends FieldValidatorSupport + "sur " + route.sizeActivitySeine() + " activity(s)."); } - boolean detected = RouteDtos.isActivityFindDeVeilleFound(route); + boolean detected = route.isActivityFindDeVeilleFound(); boolean valid = required ? detected : !detected; if (log.isDebugEnabled()) { log.debug("detected activity fin de veille " + detected); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySimpleSpeedDtoValidator.java b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySimpleSpeedDtoValidator.java index b569bb2..6dc48f7 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySimpleSpeedDtoValidator.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/validation/validator/dto/ActivitySimpleSpeedDtoValidator.java @@ -28,6 +28,7 @@ import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; import fr.ird.observe.business.gps.GPSPoint; import fr.ird.observe.business.gps.GpsPoints; import fr.ird.observe.services.dto.seine.ActivitySeineDto; +import fr.ird.observe.services.dto.seine.ActivitySeineStubDto; import fr.ird.observe.services.dto.seine.RouteDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -122,11 +123,10 @@ public class ActivitySimpleSpeedDtoValidator extends FieldValidatorSupport { return; } - RouteDto route = (RouteDto) stack.findValue("routeEntity"); + RouteDto route = (RouteDto) stack.findValue("currentRoute"); + + ActivitySeineStubDto previousActivity = route.getPreviousActivity(activity.getId()); - // FIXME migration client-serveur -// ActivitySeineDto previousActivity = ActivitySeineDtos.getPreviousActivity(route, activity); - ActivitySeineDto previousActivity = null; if (previousActivity == null) { // pas d'activity avant, rien à valider @@ -176,6 +176,11 @@ public class ActivitySimpleSpeedDtoValidator extends FieldValidatorSupport { } //FIXME + protected String decorate(ActivitySeineStubDto activitySeine) { + return activitySeine.toString(); + } + + //FIXME protected String decorate(GPSPoint currentPoint) { return currentPoint.toString(); } diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-create-error-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-create-error-validation.xml new file mode 100644 index 0000000..b3f42c6 --- /dev/null +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-create-error-validation.xml @@ -0,0 +1,328 @@ +<?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="vesselActivitySeine"> + + <!-- pas de vesselActivitySeine selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.required.vesselActivity</message> + </field-validator> + + <!-- vesselActivitySeine desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ vesselActivitySeine.enabled ]]> + </param> + <message>validator.activity.desactivated.vesselActivity</message> + </field-validator> + + <!-- activity de fin de veille possible --> + <field-validator type="activityFinDeVeilleExistsDto" short-circuit="true"> + <param name="required">false</param> + <message>validator.route.activityFinDeVeille.notAvailable</message> + </field-validator> + + <!-- activity de debut de pêche possible --> + <!--field-validator type="activityDebutDePecheSane"> + <message>validator.route.activityDebutDePeche.notAvailable</message> + </field-validator--> + + <!-- activity de fin de pêche possible --> + <!--field-validator type="activityFinDePecheSane"> + <message>validator.route.activityFinDePeche.notAvailable</message> + </field-validator--> + + </field> + + <field name="surroundingActivity"> + + <!-- surroundingActivity desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ surroundingActivity == null || surroundingActivity.enabled ]]> + </param> + <message>validator.activity.desactivated.surroundingActivity</message> + </field-validator> + + </field> + + <field name="reasonForNoFishing"> + + <!-- reasonForNoFishing desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ reasonForNoFishing == null || reasonForNoFishing.enabled ]]> + </param> + <message>validator.activity.desactivated.reasonForNoFishing</message> + </field-validator> + + </field> + + <field name="detectionMode"> + + <!-- detectionMode desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ detectionMode == null || detectionMode.enabled ]]> + </param> + <message>validator.activity.desactivated.detectionMode</message> + </field-validator> + + </field> + + <field name="wind"> + + <!-- wind desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ wind == null || wind.enabled ]]> + </param> + <message>validator.activity.desactivated.wind</message> + </field-validator> + + </field> + + <field name="previousFpaZone"> + + <!-- previousFpaZone desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ previousFpaZone == null || previousFpaZone.enabled ]]> + </param> + <message>validator.activity.desactivated.previousFpaZone</message> + </field-validator> + + </field> + + + <field name="currentFpaZone"> + + <!-- currentFpaZone desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ currentFpaZone == null || currentFpaZone.enabled ]]> + </param> + <message>validator.activity.desactivated.currentFpaZone</message> + </field-validator> + + </field> + + <field name="nextFpaZone"> + + <!-- nextFpaZone desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ nextFpaZone == null || nextFpaZone.enabled ]]> + </param> + <message>validator.activity.desactivated.nextFpaZone</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[ + currentRoute.isTimeAvailable(id, time) + ]]> + </param> + <message>validator.activity.duplicated.time</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[ + currentTripSeine.ocean == null || longitude == null || latitude == null + || (currentTripSeine.ocean.getPropertyValue("code") == 3) + || (currentTripSeine.ocean.getPropertyValue("code") == 1) + || (currentTripSeine.ocean.getPropertyValue("code") == 2 && ( longitude >= 0)) + ]]> + </param> + <message> + validator.activity.invalid.quadrant##${currentTripSeine.ocean.getPropertyValue("label")} + </message> + </field-validator> + + </field> + + <field name="vesselSpeed"> + + <!-- 0 <= vesselSpeed <= 35 --> + <field-validator type="double" short-circuit="true"> + <param name="minInclusive">0</param> + <param name="maxInclusive">35</param> + <message> + validator.activity.bound.vesselSpeed##${minInclusive}##${maxInclusive} + </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> + + <!-- coherence temperature surface (delta de 12° par rapport a celle de l'activity precedente) --> + <field-validator type="fieldexpression"> + <param name="expression"><![CDATA[ + seaSurfaceTemperature == null || previousActivity == null || previousActivity.seaSurfaceTemperature == null || + (previousActivity.seaSurfaceTemperature > seaSurfaceTemperature ? + previousActivity.seaSurfaceTemperature - seaSurfaceTemperature <= 12.0 + : seaSurfaceTemperature - previousActivity.seaSurfaceTemperature <= 12.0 + ) + ]]> + </param> + <message> + validator.activity.invalid.seaSurfaceTemperature##${seaSurfaceTemperature}##${previousActivity.seaSurfaceTemperature}##${previousActivity.time} + </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[ vesselActivitySeine == null || !vesselActivitySeine.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.vesselActivity + </message> + </field-validator> + + <!-- comentaire requis pour le type de mode de dectection selectionne --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ detectionMode == null || !detectionMode.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.detectionMode + </message> + </field-validator> + + <!-- comentaire requis pour le type de cause non coup de senne selectionne --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ reasonForNoFishing == null || !reasonForNoFishing.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.reasonForNoFishing + </message> + </field-validator> + + <!-- comentaire requis pour previousFpaZone --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ previousFpaZone == null || !previousFpaZone.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.previousFpaZone + </message> + </field-validator> + + <!-- comentaire requis pour currentFpaZone --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ currentFpaZone == null || !currentFpaZone.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.currentFpaZone + </message> + </field-validator> + + <!-- comentaire requis pour nextFpaZone --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ nextFpaZone == null || !nextFpaZone.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.nextFpaZone + </message> + </field-validator> + + </field> + +</validators> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-create-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-create-warning-validation.xml new file mode 100644 index 0000000..170113c --- /dev/null +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-create-warning-validation.xml @@ -0,0 +1,96 @@ +<?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="time"> + + <field-validator type="activitySimpleSpeedDto" short-circuit="true"> + <param name="speed">30.0</param> + <message>validator.activity.invalid.speed##${foundSpeed}##${speed}</message> + </field-validator> + + </field> + + <field name="surroundingActivity"> + + <!-- Aucune activity environnante selectionnee --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.null.surroundingActivity</message> + </field-validator> + + </field> + + <field name="wind"> + + <!-- Aucun vent beaufort selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.null.wind</message> + </field-validator> + + </field> + + <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="latitude"> + + <field-validator type="activitySimpleSpeedDto" short-circuit="true"> + <param name="speed">30.0</param> + <message>validator.activity.invalid.speed##${foundSpeed}##${speed}</message> + </field-validator> + + </field> + + <field name="longitude"> + + <field-validator type="activitySimpleSpeedDto" short-circuit="true"> + <param name="speed">30.0</param> + <message>validator.activity.invalid.speed##${foundSpeed}##${speed}</message> + </field-validator> + + </field> + + <field name="vesselSpeed"> + + <!-- 0 <= vesselSpeed <= 35 --> + <field-validator type="double" short-circuit="true"> + <param name="minInclusive">0</param> + <param name="maxInclusive">35</param> + <message> + validator.activity.bound.vesselSpeed##${minInclusive}##${maxInclusive} + </message> + </field-validator> + + </field> + +</validators> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-update-error-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-update-error-validation.xml new file mode 100644 index 0000000..f43b105 --- /dev/null +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-update-error-validation.xml @@ -0,0 +1,274 @@ +<?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="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[ + currentTripSeine.ocean == null || longitude == null || latitude == null + || (currentTripSeine.ocean.getPropertyValue("code") == 3) + || (currentTripSeine.ocean.getPropertyValue("code") == 1) + || (currentTripSeine.ocean.getPropertyValue("code") == 2 && ( longitude >= 0)) + ]]> + </param> + <message> + validator.activity.invalid.quadrant##${currentTripSeine.ocean.getPropertyValue("label")} + </message> + </field-validator> + + + </field> + + <field name="time"> + + <!-- heure observation non selectionnee --> + <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[ currentRoute.isTimeAvailable(topiaId, time) ]]> + </param> + <message>validator.activity.duplicated.time</message> + </field-validator> + + </field> + + <field name="surroundingActivity"> + + <!-- surroundingActivity desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ surroundingActivity == null || surroundingActivity.enabled ]]> + </param> + <message>validator.activity.desactivated.surroundingActivity</message> + </field-validator> + + </field> + + <field name="reasonForNoFishing"> + + <!-- reasonForNoFishing desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ reasonForNoFishing == null || reasonForNoFishing.enabled ]]> + </param> + <message>validator.activity.desactivated.reasonForNoFishing</message> + </field-validator> + + </field> + + <field name="detectionMode"> + + <!-- detectionMode desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ detectionMode == null || detectionMode.enabled ]]> + </param> + <message>validator.activity.desactivated.detectionMode</message> + </field-validator> + + </field> + + <field name="wind"> + + <!-- windSpeed desactive --> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ windSpeed == null || ventBeaufort.enabled ]]> + </param> + <message>validator.activity.desactivated.wind</message> + </field-validator> + + </field> + + <field name="vesselSpeed"> + + <!-- 0 <= vesselSpeed <= 35 --> + <field-validator type="double" short-circuit="true"> + <param name="minInclusive">0</param> + <param name="maxInclusive">35</param> + <message> + validator.activity.bound.vesselSpeed##${minInclusive}##${maxInclusive} + </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> + + <!-- coherence temperature surface (delta de 12° par rapport a celle de l'activity precedente) --> + <field-validator type="fieldexpression"> + <param name="expression"><![CDATA[ + seaSurfaceTemperature == null || previousActivity == null || previousActivity.seaSurfaceTemperature == null || + (previousActivity.seaSurfaceTemperature > seaSurfaceTemperature ? + previousActivity.seaSurfaceTemperature - seaSurfaceTemperature <= 12.0 + : seaSurfaceTemperature - previousActivity.seaSurfaceTemperature <= 12.0 + ) + ]]> + </param> + <message> + validator.activity.invalid.seaSurfaceTemperature##${seaSurfaceTemperature}##${previousActivity.seaSurfaceTemperature}##${previousActivity.time} + </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[ vesselActivitySeine == null || !vesselActivitySeine.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.vesselActivity + </message> + </field-validator> + + <!-- comentaire requis pour le type de mode de dectection selectionne --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ detectionMode == null || !detectionMode.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.detectionMode + </message> + </field-validator> + + <!-- comentaire requis pour le type de cause non coup de senne selectionne --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ reasonForNoFishing == null || !reasonForNoFishing.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.reasonForNoFishing + </message> + </field-validator> + + <!-- comentaire requis pour previousFpaZone --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ previousFpaZone == null || !previousFpaZone.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.previousFpaZone + </message> + </field-validator> + + <!-- comentaire requis pour currentFpaZone --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ currentFpaZone == null || !currentFpaZone.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.currentFpaZone + </message> + </field-validator> + + <!-- comentaire requis pour nextFpaZone --> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ nextFpaZone == null || !nextFpaZone.needComment || (comment != null && !comment.empty) ]]> + </param> + <message> + validator.activity.required.comment.for.nextFpaZone + </message> + </field-validator> + + <!-- comment requis selon le systeme observe --> + + <!--FIXME les système observée ne sont pas connue sur cette écran--> + <!--<field-validator type="collectionFieldExpression">--> + + <!--<param name="collectionFieldName">observedSystem</param>--> + <!--<param name="mode">ALL</param>--> + <!--<param name="useSensitiveContext">true</param>--> + <!--<param name="expression">--> + <!--<![CDATA[ (comment != null && !comment.empty) || !current.needComment ]]>--> + <!--</param>--> + <!--<message>--> + <!--validator.activity.required.comment.for.observedSystem##${index}--> + <!--</message>--> + <!--</field-validator>--> + + </field> + +</validators> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-update-warning-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-update-warning-validation.xml new file mode 100644 index 0000000..f7d2799 --- /dev/null +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/ActivitySeineDto-n1-update-warning-validation.xml @@ -0,0 +1,95 @@ +<?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="surroundingActivity"> + + <!-- Aucune activity environnante selectionnee --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.null.surroundingActivity</message> + </field-validator> + + </field> + + <field name="wind"> + + <!-- Aucun vent beaufort selectionne --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.null.wind</message> + </field-validator> + + </field> + + + <field name="floatingObjectEmpty"> + + <!-- Aucun DCP saisie --> + <field-validator type="fieldexpression"> + <param name="expression"><![CDATA[ !floatingObjectEmpty ]]></param> + <message>validator.activity.null.dcp</message> + </field-validator> + + </field> + + <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="observedSystemDistance"> + + <!-- Pas de distance au système observé renseignee --> + <field-validator type="required" short-circuit="true"> + <message>validator.activity.null.observedSystemDistance</message> + </field-validator> + + </field> + + <field name="observedSystemEmpty"> + + <!-- Aucune systeme observe selectionne --> + <field-validator type="fieldexpression"> + <param name="expression"><![CDATA[ !observedSystemEmpty ]]></param> + <message>validator.activity.null.observedSystem</message> + </field-validator> + + </field> + + <field name="time"> + + <field-validator type="activitySimpleSpeedDto" short-circuit="true"> + <param name="speed">30.0</param> + <message>validator.activity.invalid.speed##${foundSpeed}##${speed}</message> + </field-validator> + + </field> + +</validators> diff --git a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/RouteDto-n1-update-error-validation.xml b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/RouteDto-n1-update-error-validation.xml index fc8e70f..b1a5529 100644 --- a/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/RouteDto-n1-update-error-validation.xml +++ b/observe-application-swing/src/main/resources/fr/ird/observe/services/dto/seine/RouteDto-n1-update-error-validation.xml @@ -92,7 +92,7 @@ || (currentTripSeine.ocean.getPropertyValue("code") == 2 && ( current.longitude >= 0)) ]]> </param> - <message>validator.route.invalid.quadrant##${index}##${tripSeineDto.ocean.libelle}</message> + <message>validator.route.invalid.quadrant##${index}##${currentTripSeine.ocean.getPropertyValue("code")}</message> </field-validator> </field> diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/ActivitySeineServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/ActivitySeineServiceController.java index 368aa10..bf7847c 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/ActivitySeineServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/ActivitySeineServiceController.java @@ -25,6 +25,7 @@ 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.result.SaveResultDto; import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.service.seine.ActivitySeineService; @@ -43,6 +44,11 @@ public class ActivitySeineServiceController extends ObserveAuthenticatedServiceC } @Override + public int getActivitySeinePositionInRoute(String routeId, String activitySeineId) { + return service.getActivitySeinePositionInRoute(routeId, activitySeineId); + } + + @Override public FormDto<ActivitySeineDto> loadToRead(String activitySeineId) { return service.loadToRead(activitySeineId); } @@ -58,7 +64,7 @@ public class ActivitySeineServiceController extends ObserveAuthenticatedServiceC } @Override - public String save(String routeId, ActivitySeineDto dto) { + public SaveResultDto save(String routeId, ActivitySeineDto dto) { return service.save(routeId, dto); } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java index 21435f8..bf22c23 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java @@ -22,6 +22,7 @@ package fr.ird.observe.entities.seine; * #L% */ +import com.google.common.base.Predicate; import com.google.common.collect.Lists; import fr.ird.observe.entities.constants.ReferenceLocale; import fr.ird.observe.entities.constants.seine.SchoolType; @@ -301,4 +302,13 @@ public class ActivitySeines { } return i; } + + public static Predicate<ActivitySeine> newDateBeforePredicate(final Date time) { + return new Predicate<ActivitySeine>() { + @Override + public boolean apply(ActivitySeine input) { + return input.getTime().before(time); + } + }; + } } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/Routes.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/Routes.java index c59c644..d49e279 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/Routes.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/Routes.java @@ -22,11 +22,13 @@ package fr.ird.observe.entities.seine; * #L% */ +import com.google.common.base.Predicate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.List; /** @@ -91,4 +93,12 @@ public class Routes { return previous; } + public static Predicate<Route> newDateBeforePredicate(final Date date) { + return new Predicate<Route>() { + @Override + public boolean apply(Route input) { + return input.getDate().before(date); + } + }; + } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/ActivitySeineService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/ActivitySeineService.java index 05b91b2..1aa93f3 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/ActivitySeineService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/ActivitySeineService.java @@ -25,6 +25,7 @@ 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.result.SaveResultDto; import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.spi.DeleteRequest; import fr.ird.observe.services.spi.PostRequest; @@ -41,6 +42,9 @@ public interface ActivitySeineService extends ObserveService { ReferenceSetDto<ActivitySeineDto> getActivitySeineByRoute(String routeId); @ReadDataPermission + int getActivitySeinePositionInRoute(String routeId, String activitySeineId); + + @ReadDataPermission FormDto<ActivitySeineDto> loadToRead(String activitySeineId); @WriteDataPermission @@ -52,7 +56,7 @@ public interface ActivitySeineService extends ObserveService { @Write @WriteDataPermission @PostRequest - String save(String routeId, ActivitySeineDto dto); + SaveResultDto save(String routeId, ActivitySeineDto dto); @Write @WriteDataPermission diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java index 84b5114..b29f2f3 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java @@ -25,6 +25,7 @@ package fr.ird.observe.services.dto.referential; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.constants.ReferenceStatus; import fr.ird.observe.services.dto.constants.ReferentialLocale; import java.io.Serializable; @@ -84,4 +85,8 @@ public class ReferentialReferenceDto<D extends ReferentialDto> extends AbstractR init(type, labelPropertyNamesBuilder.build()); } + public boolean isEnabled() { + return ! ReferenceStatus.disabled.equals(getPropertyValue(ReferentialDto.PROPERTY_STATUS)); + } + } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/ActivitySeineDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/ActivitySeineDto.java new file mode 100644 index 0000000..ec9976d --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/ActivitySeineDto.java @@ -0,0 +1,21 @@ +package fr.ird.observe.services.dto.seine; + +import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; + +public class ActivitySeineDto extends AbstractActivitySeineDto { + + public static final String ACTIVITY_FIN_DE_VEILLE = "16"; + + public static final String ACTIVITY_DEBUT_DE_PECHE = "7"; + + public static final String ACTIVITY_FIN_DE_PECHE = "6"; + + + private static final long serialVersionUID = 3846974823980413495L; + + public boolean isActivityFinDeVeille() { + return vesselActivitySeine != null + && ACTIVITY_FIN_DE_VEILLE.equals( + vesselActivitySeine.getPropertyValue(VesselActivitySeineDto.PROPERTY_CODE)); + } +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/RouteDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/RouteDto.java new file mode 100644 index 0000000..095f342 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/RouteDto.java @@ -0,0 +1,59 @@ +package fr.ird.observe.services.dto.seine; + +import com.google.common.base.Optional; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import fr.ird.observe.services.dto.IdDtos; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Date; + +public class RouteDto extends AbstractRouteDto { + + private static final Log log = LogFactory.getLog(RouteDto.class); + + private static final long serialVersionUID = 7162466353421772386L; + + public boolean isActivityFindDeVeilleFound() { + int position = Iterables.indexOf( + getActivitySeine(), + ActivitySeineStubDtos.newActivityFinDeVeillePredicate(true)); + return position >= 0; + + } + + public boolean isTimeAvailable(String activitySeineId, Date time) { + Optional<ActivitySeineStubDto> optional = Iterables.tryFind(getActivitySeine(), + Predicates.and(ActivitySeineStubDtos.newTimePredicate(time), + Predicates.not(IdDtos.newIdPredicate(activitySeineId)))); + + return ! optional.isPresent(); + } + + public ActivitySeineStubDto getPreviousActivity(String activitySeineId) { + + ActivitySeineStubDto previous = null; + + if (activitySeineId != null) { + + int currentPosition = Iterables.indexOf(getActivitySeine(), IdDtos.newIdPredicate(activitySeineId)); + if (currentPosition >= 1) { + previous = Iterables.get(getActivitySeine(), currentPosition - 1); + } + } + + if (previous != null) { + if (log.isDebugEnabled()) { + log.debug("previous activity " + + previous.getTime()); + } + } else { + if (log.isDebugEnabled()) { + log.debug("no previous activity for " + activitySeine); + } + } + + return previous; + } +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/TripSeineDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/TripSeineDto.java new file mode 100644 index 0000000..ea34acf --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/seine/TripSeineDto.java @@ -0,0 +1,23 @@ +package fr.ird.observe.services.dto.seine; + +import com.google.common.base.Optional; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import fr.ird.observe.services.dto.IdDtos; + +import java.util.Date; + +public class TripSeineDto extends AbstractTripSeineDto { + + private static final long serialVersionUID = 3976788848141361507L; + + public boolean isDateAvailable(String routeId, Date date) { + Optional<RouteStubDto> optional = Iterables.tryFind(getRoute(), + Predicates.and(RouteStubDtos.newDatePredicate(date), + Predicates.not(IdDtos.newIdPredicate(routeId)))); + + return ! optional.isPresent(); + } + + +} 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 7d5b32d..146b059 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 21a9f84..3539f72 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 @@ -280,7 +280,12 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { I18nReferentialDto.PROPERTY_LABEL8 }; - private static final String[] DEFAULT_REFERENTIAL_REFERENCE_PROPERTIES = {ReferentialDto.PROPERTY_CODE, I18nReferentialDto.PROPERTY_LABEL1, I18nReferentialDto.PROPERTY_LABEL2, I18nReferentialDto.PROPERTY_LABEL3, + private static final String[] DEFAULT_REFERENTIAL_REFERENCE_PROPERTIES = { + ReferentialDto.PROPERTY_CODE, + I18nReferentialDto.PROPERTY_LABEL1, + I18nReferentialDto.PROPERTY_LABEL2, + I18nReferentialDto.PROPERTY_LABEL3, + ReferentialDto.PROPERTY_STATUS, ReferentialDto.PROPERTY_LAST_UPDATE}; // { @@ -1333,6 +1338,7 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { ActivitySeineDto.PROPERTY_CURRENT_FPA_ZONE, ActivitySeineDto.PROPERTY_NEXT_FPA_ZONE, ActivitySeineDto.PROPERTY_WIND, + ActivitySeineDto.PROPERTY_OBSERVED_SYSTEM_DISTANCE, ActivitySeineDto.PROPERTY_LAST_UPDATE ); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ActivitySeineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ActivitySeineServiceTopia.java index 54135b3..6630e10 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ActivitySeineServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ActivitySeineServiceTopia.java @@ -28,6 +28,7 @@ import com.google.common.collect.Sets; import fr.ird.observe.entities.constants.ReferenceLocale; import fr.ird.observe.entities.referentiel.FpaZone; 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.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; @@ -35,6 +36,8 @@ 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.result.SaveResultDto; +import fr.ird.observe.services.dto.result.SaveResultDtos; import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.RouteDto; import fr.ird.observe.services.service.DataNotFoundException; @@ -80,12 +83,28 @@ public class ActivitySeineServiceTopia extends ObserveServiceTopia implements Ac } @Override + public int getActivitySeinePositionInRoute(String routeId, String activitySeineId) { + Route route = loadEntity(RouteDto.class, Route.class, routeId); + + ActivitySeine activitySeine = route.getActivitySeineByTopiaId(activitySeineId); + + int position = Iterables.size(Iterables.filter( + route.getActivitySeine(), + ActivitySeines.newDateBeforePredicate(activitySeine.getTime()))); + + return position; + } + + @Override public FormDto<ActivitySeineDto> loadToRead(String activitySeineId) { ActivitySeine activitySeine = loadEntity(ActivitySeineDto.class, ActivitySeine.class, activitySeineId); FormDto<ActivitySeineDto> form = entityToReadFormDto(ActivitySeineDto.class, ActivitySeine.class, activitySeine); + form.getForm().setObservedSystemEmpty(activitySeine.isObservedSystemEmpty()); + form.getForm().setFloatingObjectEmpty(activitySeine.isFloatingObjectEmpty()); + return form; } @@ -96,6 +115,9 @@ public class ActivitySeineServiceTopia extends ObserveServiceTopia implements Ac FormDto<ActivitySeineDto> form = entityToEditFormDto(ActivitySeineDto.class, ActivitySeine.class, activitySeine); + form.getForm().setObservedSystemEmpty(activitySeine.isObservedSystemEmpty()); + form.getForm().setFloatingObjectEmpty(activitySeine.isFloatingObjectEmpty()); + return form; } @@ -147,11 +169,14 @@ public class ActivitySeineServiceTopia extends ObserveServiceTopia implements Ac FormDto<ActivitySeineDto> form = entityToEditFormDto(ActivitySeineDto.class, ActivitySeine.class, preCreated); + form.getForm().setObservedSystemEmpty(preCreated.isObservedSystemEmpty()); + form.getForm().setFloatingObjectEmpty(preCreated.isFloatingObjectEmpty()); + return form; } @Override - public String save(String routeId, ActivitySeineDto activitySeineDto) { + public SaveResultDto save(String routeId, ActivitySeineDto activitySeineDto) { Route route = loadEntity(RouteDto.class, Route.class, routeId); @@ -167,7 +192,7 @@ public class ActivitySeineServiceTopia extends ObserveServiceTopia implements Ac } - return activitySeine.getTopiaId(); + return SaveResultDtos.newSaveResult(activitySeine.getTopiaId(), activitySeine.getLastUpdate()); } @Override 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 ef284d8..7a00014 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 @@ -49,7 +49,6 @@ import org.nuiton.util.DateUtil; import java.util.Date; import java.util.LinkedHashSet; -import java.util.List; import java.util.Set; /** @@ -87,11 +86,11 @@ public class RouteServiceTopia extends ObserveServiceTopia implements RouteServi Route route = tripSeine.getRouteByTopiaId(routeId); - List<Route> routes = Lists.newArrayList(tripSeine.getRoute()); + int position = Iterables.size(Iterables.filter( + tripSeine.getRoute(), + Routes.newDateBeforePredicate(route.getDate()))); - Routes.sort(routes); - - return routes.indexOf(route); + return position; } -- 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