Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 5c906f6b by tchemit at 2019-07-23T14:15:49Z [LL][LOGBOOKS] Echantillons, ajouter l'unité ° - Closes #1366 - - - - - 55df1b79 by tchemit at 2019-07-23T14:15:50Z [LL][LOGBOOKS] Plage de taille d'un échantillon - Closes #1365 - - - - - c351b54d by tchemit at 2019-07-23T14:15:50Z [LL][LOGBOOKS] Source d'information d'un débarquement - Closes #1364 - - - - - 285711c2 by tchemit at 2019-07-23T14:16:10Z [LL] Fenêtre d'appariement d'activités - Closes #1363 - - - - - 16 changed files: - client-core/src/main/java/fr/ird/observe/client/ui/content/data/ll/landing/TripLonglineLandingUIHandler.java - dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/SampleLogbookDto.java - + dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/SampleLogbookReference.java - dto/src/main/java/fr/ird/observe/dto/decoration/DecoratorService.java - dto/src/main/java/fr/ird/observe/dto/decoration/ObserveI18nLabelsBuilder.java - dto/src/main/java/fr/ird/observe/dto/decoration/decorators/ObserveDecorator.java - dto/src/main/java/fr/ird/observe/dto/referential/common/PersonReference.java - observe-i18n/src/main/i18n/translations/observe_en_GB.properties - observe-i18n/src/main/i18n/translations/observe_es_ES.properties - observe-i18n/src/main/i18n/translations/observe_fr_FR.properties - services/src/main/i18n/getters/java.getter - services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingEngine.java - services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingResultItem.java - services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingResultItemDecorator.java - validation/src/main/resources/fr/ird/observe/dto/data/ll/logbook/SamplePartLogbookDto-update-error-validation.xml - validation/src/main/resources/fr/ird/observe/dto/data/ll/logbook/SamplePartLogbookDto-update-warning-validation.xml Changes: ===================================== client-core/src/main/java/fr/ird/observe/client/ui/content/data/ll/landing/TripLonglineLandingUIHandler.java ===================================== @@ -32,6 +32,8 @@ import fr.ird.observe.client.ui.content.api.ui.ObserveLayoutFocusTraversalPolicy import fr.ird.observe.dto.data.ll.landing.LandingLonglineDto; import fr.ird.observe.dto.data.ll.landing.LandingLonglineReference; import fr.ird.observe.dto.form.Form; +import fr.ird.observe.dto.referential.common.PersonDto; +import fr.ird.observe.dto.referential.common.PersonReference; import fr.ird.observe.dto.referential.common.VesselDto; import fr.ird.observe.dto.referential.common.VesselReference; import fr.ird.observe.dto.referential.ll.landing.DataSourceReference; @@ -119,6 +121,7 @@ class TripLonglineLandingUIHandler extends ContentOpenableUIHandler<LandingLongl @Override protected void onAfterInitAddReferentialFilters(ContentUIReferenceCache referenceCache) { + referenceCache.addReferentialFilter(LandingLonglineDto.PROPERTY_PERSON, (ReferentialReferencesFilter<PersonDto, PersonReference>) PersonReference::filterDataSourceReferences); referenceCache.addReferentialFilter(LandingLonglineDto.PROPERTY_VESSEL, (ReferentialReferencesFilter<VesselDto, VesselReference>) incomingReferences -> incomingReferences.stream().filter(e -> LANDING_VESSEL_TYPE_IDS.contains(e.getVesselTypeId())).collect(Collectors.toList())); } ===================================== dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/SampleLogbookDto.java ===================================== @@ -22,11 +22,13 @@ package fr.ird.observe.dto.data.ll.logbook; * #L% */ +import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; import org.nuiton.util.DateUtil; import java.util.Date; import java.util.List; +@GenerateJavaBeanDefinition(types = {"fr.ird.observe.dto.data.ll.logbook.SampleLogbookDto"}) public class SampleLogbookDto extends GeneratedSampleLogbookDto { public static final String PROPERTY_DATE = "date"; @@ -55,6 +57,10 @@ public class SampleLogbookDto extends GeneratedSampleLogbookDto { } } + public String getCoordinateStr() { + return String.format("(%s°;%s°)", latitude, longitude); + } + public void setTimeStamp(Date timeStamp) { Date oldDate = getDate(); Date oldTime = getTime(); ===================================== dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/SampleLogbookReference.java ===================================== @@ -0,0 +1,36 @@ +package fr.ird.observe.dto.data.ll.logbook; + +import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; + +/*- + * #%L + * ObServe :: Dto + * %% + * Copyright (C) 2008 - 2019 IRD, Code Lutin, Ultreia.io + * %% + * 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% + */ +@GenerateJavaBeanDefinition(types = {"fr.ird.observe.dto.data.ll.logbook.SampleLogbookReference"}) +public class SampleLogbookReference extends GeneratedSampleLogbookReference { + + public SampleLogbookReference(fr.ird.observe.dto.reference.DtoReferenceAware dto, java.util.Date timeStamp, java.lang.Float latitude, java.lang.Float longitude) { + super(dto, timeStamp, latitude, longitude); + } + + public String getCoordinateStr() { + return String.format("(%s°;%s°)", getLatitude(), getLongitude()); + } +} ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/DecoratorService.java ===================================== @@ -386,8 +386,8 @@ public class DecoratorService extends DecoratorProvider { @Override public void initLlLogbookSampleLogbookDto() { registerDataAndDataReferenceDecorator(SampleLogbookDto.class, SampleLogbookReference.class, - "${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$tM##${latitude}$s##${longitude}$s", - "${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$tM##${latitude}$s##${longitude}$s", + "${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$tM##${coordinateStr}$s", + "${timeStamp}$td/%1$tm/%1$tY %1$tH:%1$tM##${coordinateStr}$s", " - "); } ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/ObserveI18nLabelsBuilder.java ===================================== @@ -114,6 +114,8 @@ public class ObserveI18nLabelsBuilder extends BeanPropertyI18nKeyProducerSupport .put("sizeMeasureTypeCode", "sizeMeasureType") .put("inputSizeMeasureTypeCode", "inputSizeMeasureType") .put("outputSizeMeasureTypeCode", "outputSizeMeasureType") + .put("computedTimeStr", "computedTime") + .put("coordinateStr", "coordinate") .build(); } ===================================== dto/src/main/java/fr/ird/observe/dto/decoration/decorators/ObserveDecorator.java ===================================== @@ -24,8 +24,8 @@ package fr.ird.observe.dto.decoration.decorators; import fr.ird.observe.dto.reference.DtoReference; import org.apache.commons.jxpath.JXPathContext; import org.apache.commons.lang3.StringUtils; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.decorator.MultiJXPathDecorator; import java.io.Serializable; @@ -115,6 +115,8 @@ public class ObserveDecorator<E> extends MultiJXPathDecorator<E> implements Clon String lastToken = tokens[tokens.length - 1]; if (referenceBean.getPropertyNames().contains(lastToken)) { value = referenceBean.getPropertyValue(lastToken); + } else { + value = referenceBean.get(lastToken); } return value; ===================================== dto/src/main/java/fr/ird/observe/dto/referential/common/PersonReference.java ===================================== @@ -46,6 +46,10 @@ public class PersonReference extends GeneratedPersonReference { return incoming.stream().filter(PersonReference::isDataEntryOperator).collect(Collectors.toList()); } +public static List<PersonReference> filterDataSourceReferences(Collection<PersonReference> incoming) { + return incoming.stream().filter(PersonReference::isDataSource).collect(Collectors.toList()); + } + public String getLabel() { return getFirstName() + " " + getLastName(); } ===================================== observe-i18n/src/main/i18n/translations/observe_en_GB.properties ===================================== @@ -468,8 +468,11 @@ observe.common.ActivityLonglineObsEncounterDto.comment=Comment observe.common.ActivityLonglineObsSensorUsedDto.comment=Comment observe.common.ActivityLonglinePairingResultItemDto.computedDistance=Distance (km) observe.common.ActivityLonglinePairingResultItemDto.computedDistanceValue=Distance (%s kms) -observe.common.ActivityLonglinePairingResultItemDto.computedTime=Time (minutes) -observe.common.ActivityLonglinePairingResultItemDto.computedTimeValue=Time (%s minutes) +observe.common.ActivityLonglinePairingResultItemDto.computedTime=Time shift (days\:hours\:minutes) +observe.common.ActivityLonglinePairingResultItemDto.computedTimeAfter=after +observe.common.ActivityLonglinePairingResultItemDto.computedTimeBefore=before +observe.common.ActivityLonglinePairingResultItemDto.computedTimeEquals=Same date - time +observe.common.ActivityLonglinePairingResultItemDto.computedTimeValue=Time shift (%s) observe.common.ActivityLonglinePairingResultItemDto.observationActivity=Observed activity observe.common.ActivityLonglinePairingResultItemDto.type=Observed activity observe.common.ActivityObsDto.action.goToOpen.short=Observations - Open activity ===================================== observe-i18n/src/main/i18n/translations/observe_es_ES.properties ===================================== @@ -468,8 +468,11 @@ observe.common.ActivityLonglineObsEncounterDto.comment=Comentarios observe.common.ActivityLonglineObsSensorUsedDto.comment=Comentarios observe.common.ActivityLonglinePairingResultItemDto.computedDistance=Distance (km) \#TODO observe.common.ActivityLonglinePairingResultItemDto.computedDistanceValue=Distance (%s kms) \#TODO -observe.common.ActivityLonglinePairingResultItemDto.computedTime=Time (minutes) \#TODO -observe.common.ActivityLonglinePairingResultItemDto.computedTimeValue=Time (%s minutes) \#TODO +observe.common.ActivityLonglinePairingResultItemDto.computedTime=Time shift (days\:hours\:minutes) \#TODO +observe.common.ActivityLonglinePairingResultItemDto.computedTimeAfter=after \#TODO +observe.common.ActivityLonglinePairingResultItemDto.computedTimeBefore=before \#TODO +observe.common.ActivityLonglinePairingResultItemDto.computedTimeEquals=Same date - time \#TODO +observe.common.ActivityLonglinePairingResultItemDto.computedTimeValue=Time shift (%s) \#TODO observe.common.ActivityLonglinePairingResultItemDto.observationActivity=Observed activity \#TODO observe.common.ActivityLonglinePairingResultItemDto.type=Observed activity \#TODO observe.common.ActivityObsDto.action.goToOpen.short=Observations - Open activity \#TODO ===================================== observe-i18n/src/main/i18n/translations/observe_fr_FR.properties ===================================== @@ -468,8 +468,11 @@ observe.common.ActivityLonglineObsEncounterDto.comment=Commentaire observe.common.ActivityLonglineObsSensorUsedDto.comment=Commentaire observe.common.ActivityLonglinePairingResultItemDto.computedDistance=Distance (km) observe.common.ActivityLonglinePairingResultItemDto.computedDistanceValue=Distance (%s kms) -observe.common.ActivityLonglinePairingResultItemDto.computedTime=Temps (minutes) -observe.common.ActivityLonglinePairingResultItemDto.computedTimeValue=Temps (%s minutes) +observe.common.ActivityLonglinePairingResultItemDto.computedTime=Écart de temps (jours\:heures\:minutes) +observe.common.ActivityLonglinePairingResultItemDto.computedTimeAfter=après +observe.common.ActivityLonglinePairingResultItemDto.computedTimeBefore=avant +observe.common.ActivityLonglinePairingResultItemDto.computedTimeEquals=Même date - heure +observe.common.ActivityLonglinePairingResultItemDto.computedTimeValue=Écart de temps (%s) observe.common.ActivityLonglinePairingResultItemDto.observationActivity=Activité observée observe.common.ActivityLonglinePairingResultItemDto.type=Activité observée observe.common.ActivityObsDto.action.goToOpen.short=Observations - Activité ouverte ===================================== services/src/main/i18n/getters/java.getter ===================================== @@ -1,6 +1,9 @@ observe.common.ActivityLonglinePairingResultItemDto.computedDistance observe.common.ActivityLonglinePairingResultItemDto.computedDistanceValue observe.common.ActivityLonglinePairingResultItemDto.computedTime +observe.common.ActivityLonglinePairingResultItemDto.computedTimeAfter +observe.common.ActivityLonglinePairingResultItemDto.computedTimeBefore +observe.common.ActivityLonglinePairingResultItemDto.computedTimeEquals observe.common.ActivityLonglinePairingResultItemDto.computedTimeValue observe.common.ActivityLonglinePairingResultItemDto.observationActivity observe.common.ActivityLonglinePairingResultItemDto.type ===================================== services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingEngine.java ===================================== @@ -96,9 +96,9 @@ public class ActivityLonglinePairingEngine { private ActivityLonglinePairingResultItem toActivityResultItem(ActivityLonglineAware activityLonglineLogbook, ActivityLonglineObsReference activityLonglineObsReference, double maxTime, double maxDistance) { Date logbookTimeStamp = activityLonglineLogbook.getTimeStamp(); Date obsTimeStamp = activityLonglineObsReference.getTimeStamp(); - long computedTime = Math.abs(TimeUnit.MINUTES.convert(logbookTimeStamp.getTime() - obsTimeStamp.getTime(), TimeUnit.MILLISECONDS)); + long computedTime = TimeUnit.MINUTES.convert(logbookTimeStamp.getTime() - obsTimeStamp.getTime(), TimeUnit.MILLISECONDS); double computedDistance = activityLonglineLogbook.getGPSPoint().getDistanceInKm(activityLonglineObsReference.getGPSPoint()); - return new ActivityLonglinePairingResultItem(activityLonglineObsReference, computedTime, computedDistance, computedTime < maxTime, computedDistance < maxDistance); + return new ActivityLonglinePairingResultItem(activityLonglineObsReference, computedTime, computedDistance, Math.abs(computedTime) < maxTime, computedDistance < maxDistance); } } ===================================== services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingResultItem.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.services.service.data.ll.pairing; * 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>. @@ -27,6 +27,9 @@ import fr.ird.observe.dto.data.ll.observation.ActivityLonglineObsReference; import io.ultreia.java4all.lang.Numbers; import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import static io.ultreia.java4all.i18n.I18n.t; /** * Created by tchemit on 15/10/2018. @@ -37,14 +40,15 @@ public class ActivityLonglinePairingResultItem implements ObserveDto { private final ActivityLonglineObsReference observationActivity; private final long computedTime; - private final double computedDistance; + private final float computedDistance; private final boolean timeValid; private final boolean distanceValid; + private String computedTimeStr; public ActivityLonglinePairingResultItem(ActivityLonglineObsReference observationActivity, long computedTime, double computedDistance, boolean timeValid, boolean distanceValid) { this.observationActivity = observationActivity; this.computedTime = computedTime; - this.computedDistance = Numbers.roundOneDigit((float) computedDistance); + this.computedDistance = Numbers.roundTwoDigits((float) computedDistance); this.timeValid = timeValid; this.distanceValid = distanceValid; } @@ -57,7 +61,7 @@ public class ActivityLonglinePairingResultItem implements ObserveDto { return computedTime; } - public double getComputedDistance() { + public float getComputedDistance() { return computedDistance; } @@ -69,6 +73,24 @@ public class ActivityLonglinePairingResultItem implements ObserveDto { return distanceValid; } + public String getComputedTimeStr() { + if (computedTimeStr == null) { + if (computedTime == 0) { + return computedTimeStr = t("observe.common.ActivityLonglinePairingResultItemDto.computedTimeEquals"); + } + if (computedTime < 0) { + computedTimeStr = t("observe.common.ActivityLonglinePairingResultItemDto.computedTimeAfter") + " - "; + } else { + computedTimeStr = t("observe.common.ActivityLonglinePairingResultItemDto.computedTimeBefore") +" - "; + } + long days = TimeUnit.MINUTES.toDays(computedTime); + long hours = TimeUnit.MINUTES.toHours(computedTime) % 24; + long minutes = TimeUnit.MINUTES.toMinutes(computedTime) % 60; + computedTimeStr += String.format("%s:%s:%s", days, hours, minutes); + } + return computedTimeStr; + } + @Override public boolean equals(Object o) { if (this == o) return true; ===================================== services/src/main/java/fr/ird/observe/services/service/data/ll/pairing/ActivityLonglinePairingResultItemDecorator.java ===================================== @@ -44,6 +44,8 @@ public class ActivityLonglinePairingResultItemDecorator extends ObserveDecorator n("observe.common.ActivityLonglinePairingResultItemDto.type"); n("observe.common.ActivityLonglinePairingResultItemDto.observationActivity"); n("observe.common.ActivityLonglinePairingResultItemDto.computedTime"); + n("observe.common.ActivityLonglinePairingResultItemDto.computedTimeBefore"); + n("observe.common.ActivityLonglinePairingResultItemDto.computedTimeAfter"); n("observe.common.ActivityLonglinePairingResultItemDto.computedDistance"); } @@ -51,7 +53,7 @@ public class ActivityLonglinePairingResultItemDecorator extends ObserveDecorator private final DataReferenceDecorator<ActivityLonglineObsReference> activityDecorator; public ActivityLonglinePairingResultItemDecorator(DecoratorService decoratorService, Locale locale) { - super(ActivityLonglinePairingResultItem.class, "${observationActivity}$s##${computedTime}$s##${computedDistance}$s"); + super(ActivityLonglinePairingResultItem.class, "${observationActivity}$s##${computedTimeStr}$s##${computedDistance}$s"); this.locale = locale; activityDecorator = decoratorService.getDataReferenceDecorator(ActivityLonglineObsReference.class); } @@ -61,7 +63,7 @@ public class ActivityLonglinePairingResultItemDecorator extends ObserveDecorator protected Comparable<Comparable<?>> getTokenValue(JXPathContext jxcontext, String token) { Object value0 = jxcontext.getValue(token); switch (token) { - case "computedTime": + case "computedTimeStr": return (Comparable) l(locale, "observe.common.ActivityLonglinePairingResultItemDto.computedTimeValue", value0); case "computedDistance": return (Comparable) l(locale, "observe.common.ActivityLonglinePairingResultItemDto.computedDistanceValue", value0); ===================================== validation/src/main/resources/fr/ird/observe/dto/data/ll/logbook/SamplePartLogbookDto-update-error-validation.xml ===================================== @@ -74,6 +74,16 @@ <message>observe.validation.targetLength.positive.length</message> </field-validator> + <!-- validation de la taille par borne --> + <field-validator type="species_lengthDto"> + <param name="ratio">1.0</param> + <param name="enable">true</param> + <param name="expression"> + <![CDATA[ species != null && length != null ]]> + </param> + <message>observe.validation.targetLength.bound.length##${min}##${max}</message> + </field-validator> + </field> <field name="weight"> ===================================== validation/src/main/resources/fr/ird/observe/dto/data/ll/logbook/SamplePartLogbookDto-update-warning-validation.xml ===================================== @@ -23,22 +23,7 @@ "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> - - <field name="length"> - - <!-- validation de la taille par borne --> - <field-validator type="species_lengthDto"> - <param name="ratio">1.0</param> - <param name="enable">true</param> - <param name="expression"> - <![CDATA[ species != null && length != null ]]> - </param> - <message>observe.validation.targetLength.bound.length##${min}##${max}</message> - </field-validator> - - </field> - - + <field name="weight"> <!-- validation du weight par borne (uniquement pour mode saisie par individus) --> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/de4d9d6869a1fc57338a18588d1... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/de4d9d6869a1fc57338a18588d1... You're receiving this email because of your account on gitlab.com.