This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit f8c65d8eaf9870585f006d9252dc94fd50e8c5e4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 3 20:33:09 2016 +0200 Introduce ObserveI18nDecoratorHelper + use new type i18n keys generator --- application-swing-decoration/pom.xml | 39 +++ .../swing/decoration/DecoratorService.java | 369 ++++++++------------- .../decoration/ObserveI18nDecoratorHelper.java | 81 +++++ .../application-swing-decoration_en_GB.properties | 222 ++++++++++++- .../application-swing-decoration_es_ES.properties | 220 ++++++++++++ .../application-swing-decoration_fr_FR.properties | 220 ++++++++++++ .../main/java/fr/ird/observe/util/ObserveUtil.java | 47 +++ 7 files changed, 962 insertions(+), 236 deletions(-) diff --git a/application-swing-decoration/pom.xml b/application-swing-decoration/pom.xml index 8e9de18..0311684 100644 --- a/application-swing-decoration/pom.xml +++ b/application-swing-decoration/pom.xml @@ -73,6 +73,11 @@ <artifactId>nuiton-decorator</artifactId> </dependency> + <dependency> + <groupId>org.atteo</groupId> + <artifactId>evo-inflector</artifactId> + </dependency> + <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> @@ -94,6 +99,32 @@ <plugins> <plugin> + <groupId>${project.groupId}</groupId> + <artifactId>toolbox-maven-plugin</artifactId> + <version>${project.version}</version> + <executions> + <execution> + <id>generate-i18n-types</id> + <goals> + <goal>generate-i18n-types</goal> + </goals> + <configuration> + <prefix>observe.type.</prefix> + <removeSuffix>Dto</removeSuffix> + <skipSuffix>ResultDto,StubDto,IdDto</skipSuffix> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>services-model</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> + </plugin> + + <plugin> <groupId>org.nuiton.i18n</groupId> <artifactId>i18n-maven-plugin</artifactId> <executions> @@ -103,6 +134,14 @@ <goal>parserJava</goal> <goal>gen</goal> </goals> + <configuration> + <entries> + <entry> + <specificGoal>parserJava</specificGoal> + <basedir>${project.build.directory}/generated-sources/java</basedir> + </entry> + </entries> + </configuration> </execution> </executions> </plugin> diff --git a/application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/DecoratorService.java b/application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/DecoratorService.java index 6d3db0b..4c518fa 100644 --- a/application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/DecoratorService.java +++ b/application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/DecoratorService.java @@ -21,7 +21,6 @@ */ package fr.ird.observe.application.swing.decoration; -import com.google.common.collect.Lists; import fr.ird.observe.application.swing.decoration.decorators.DataReferenceDecorator; import fr.ird.observe.application.swing.decoration.decorators.LengthWeightParameterDecorator; import fr.ird.observe.application.swing.decoration.decorators.NonTargetCatchDecorator; @@ -33,7 +32,6 @@ import fr.ird.observe.application.swing.decoration.decorators.SpeciesDecorator; import fr.ird.observe.application.swing.decoration.decorators.TargetCatchDecorator; import fr.ird.observe.application.swing.decoration.decorators.TripLonglineDecorator; import fr.ird.observe.application.swing.decoration.decorators.TripSeineDecorator; -import fr.ird.observe.services.dto.AbstractObserveDto; import fr.ird.observe.services.dto.DataDto; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.IdDto; @@ -122,20 +120,10 @@ import fr.ird.observe.services.dto.seine.TargetLengthDto; import fr.ird.observe.services.dto.seine.TransmittingBuoyDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.util.GPSPoint; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; import org.nuiton.decorator.DecoratorProvider; -import java.beans.Introspector; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -152,20 +140,18 @@ import static org.nuiton.i18n.I18n.t; */ public class DecoratorService extends DecoratorProvider { - /** Logger */ - private static final Log log = LogFactory.getLog(DecoratorService.class); +// /** Logger */ +// private static final Log log = LogFactory.getLog(DecoratorService.class); /** Le pattern pour utiliser les clef i18n generees dans les entites */ - protected static final Pattern LABEL_PATTERN = Pattern.compile("observe\\.common\\.(.+)"); + private static final Pattern LABEL_PATTERN = Pattern.compile("observe\\.common\\.(.+)"); public static final String HAULING_IDENTIFIER = "haulingIdentifier"; - public static final String OBSERVE_COMMON_PREFIX = "observe.common."; - public static final String TRIP_CONTEXT = "Trip"; /** la locale du referentiel. */ - protected ReferentialLocale referentialLocale; + private ReferentialLocale referentialLocale; public DecoratorService(ReferentialLocale referentialLocale) { this.referentialLocale = referentialLocale; @@ -184,64 +170,12 @@ public class DecoratorService extends DecoratorProvider { return LABEL_PATTERN.matcher(regex); } - @SuppressWarnings({"unchecked"}) - public static String getEntityLabel(Class entityClass) { - return getEntityLabel(OBSERVE_COMMON_PREFIX, entityClass); - } - - public static String getEntityLabel(String prefix, Class entityClass) { - if (!AbstractObserveDto.class.isAssignableFrom(entityClass)) { - throw new IllegalArgumentException( - entityClass + " is not an Observe DTO"); - } - String entityClassName = StringUtils.removeEnd(entityClass.getSimpleName(), "Dto"); - return getPropertyLabel(prefix, entityClassName); - } - - - public static String getPropertyLabel(String propertyName) { - return getPropertyLabel(OBSERVE_COMMON_PREFIX, propertyName); - } - - public static String getPropertyLabel(String prefix, String propertyName) { - return prefix + Introspector.decapitalize(propertyName); - } - - public List<Class<? extends IdDto>> sortTypes(Collection<Class<? extends IdDto>> types) { - final Map<Class<?>, String> cache = new HashMap<>(); - - List<Class<? extends IdDto>> list = Lists.newArrayList(types); - - Comparator<Class<?>> result = new Comparator<Class<?>>() { - - @Override - public int compare(Class<?> o1, Class<?> o2) { - String s1 = getValue(o1); - String s2 = getValue(o2); - return s1.compareTo(s2); - } - - String getValue(Class<?> klass) { - String result = cache.get(klass); - if (result == null) { - // calcul de la valeur - result = t(getEntityLabel(klass)); - cache.put(klass, result); - } - return result; - } - }; - Collections.sort(list, result); - cache.clear(); - return list; - } - public String decorate(Object o) { return decorate(null, o); } - public String decorate(String context, Object o) { + private String decorate(String context, Object o) { //FIXME if (o == null) { return null; @@ -255,7 +189,7 @@ public class DecoratorService extends DecoratorProvider { } static { - // pour avoir les traduction sur le lastName de la propriété + // pour avoir les traduction sur le nom de la propriété n("observe.common.vesselActivitySeine/label1"); n("observe.common.vesselActivitySeine/label2"); n("observe.common.vesselActivitySeine/label3"); @@ -288,119 +222,119 @@ public class DecoratorService extends DecoratorProvider { n("observe.common.label"); - n("observe.common.targetSample"); - n("observe.common.targetLength"); - n("observe.common.nonTargetSample"); - n("observe.common.nonTargetLength"); - n("observe.common.nonTargetCatch"); - n("observe.common.setSeine"); - n("observe.common.targetCatch"); - n("observe.common.transmittingBuoy"); - n("observe.common.objectObservedSpecies"); - n("observe.common.schoolEstimate"); - n("observe.common.objectSchoolEstimate"); - n("observe.common.floatingObject"); - n("observe.common.activitySeine"); - n("observe.common.route"); - n("observe.common.tripSeine"); - - n("observe.common.activityLongline"); - n("observe.common.baitsComposition"); - n("observe.common.basket"); - n("observe.common.branchline"); - n("observe.common.branchlinesComposition"); - n("observe.common.catchLongline"); - n("observe.common.encounter"); - n("observe.common.setLongline"); - n("observe.common.time"); - n("observe.common.floatlinesComposition"); - n("observe.common.hooksComposition"); - n("observe.common.section"); - n("observe.common.sensorUsed"); - n("observe.common.sizeMeasure"); - n("observe.common.tdr"); - n("observe.common.tdrRecord"); - n("observe.common.tripLongline"); - n("observe.common.weightMeasure"); - n("observe.common.gearUseFeaturesSeine"); - n("observe.common.gearUseFeaturesLongline"); - n("observe.common.longlineDetailComposition"); - - n("observe.common.vesselSizeCategory"); - n("observe.common.harbour"); - n("observe.common.country"); - n("observe.common.vesselType"); - n("observe.common.vessel"); - n("observe.common.speciesGroup"); - n("observe.common.species"); - n("observe.common.sex"); - n("observe.common.fpaZone"); - n("observe.common.speciesList"); - n("observe.common.person"); - n("observe.common.ocean"); - n("observe.common.organism"); - n("observe.common.lengthWeightParameter"); - n("observe.common.program"); - - n("observe.common.vesselActivitySeine"); - n("observe.common.surroundingActivity"); - n("observe.common.reasonForNullSet"); - n("observe.common.reasonForNoFishing"); - n("observe.common.speciesFate"); - n("observe.common.objectFate"); - n("observe.common.weightCategory"); - n("observe.common.detectionMode"); - n("observe.common.transmittingBuoyOperation"); - n("observe.common.objectOperation"); - n("observe.common.reasonForDiscard"); - n("observe.common.speciesStatus"); - n("observe.common.observedSystem"); - n("observe.common.transmittingBuoyType"); - n("observe.common.objectType"); - n("observe.common.wind"); - - n("observe.common.baitHaulingStatus"); - n("observe.common.baitSettingStatus"); - n("observe.common.baitType"); - n("observe.common.catchFateLongline"); - n("observe.common.encounterType"); - n("observe.common.healthness"); - n("observe.common.hookPosition"); - n("observe.common.hookSize"); - n("observe.common.hookType"); - n("observe.common.itemVerticalPosition"); - n("observe.common.itemHorizontalPosition"); - n("observe.common.lightsticksColor"); - n("observe.common.lightsticksType"); - n("observe.common.lineType"); - n("observe.common.maturityStatus"); - n("observe.common.mitigationType"); - n("observe.common.sensorBrand"); - n("observe.common.sensorDataFormat"); - n("observe.common.sensorPosition"); - n("observe.common.sensorType"); - n("observe.common.settingShape"); - n("observe.common.sizeMeasureType"); - n("observe.common.stomacFullness"); - n("observe.common.tripType"); - n("observe.common.vesselActivityLongline"); - n("observe.common.weightMeasureType"); - n("observe.common.id"); - n("observe.common.floatlineLengths"); - n("observe.common.locode"); - n("observe.common.name"); - n("observe.common.gearCaracteristicType"); - n("observe.common.gearCaracteristic"); - n("observe.common.gear"); - n("observe.common.gender"); - - n("observe.common.floatline1Length"); - n("observe.common.floatline2Length"); - n("observe.common.branchlineLength"); - n("observe.common.tracelineLength"); - - n("observe.common.gearUseFeaturesMeasurementSeine"); - n("observe.common.gearUseFeaturesMeasurementLongline"); +// n("observe.common.targetSample"); +// n("observe.common.targetLength"); +// n("observe.common.nonTargetSample"); +// n("observe.common.nonTargetLength"); +// n("observe.common.nonTargetCatch"); +// n("observe.common.setSeine"); +// n("observe.common.targetCatch"); +// n("observe.common.transmittingBuoy"); +// n("observe.common.objectObservedSpecies"); +// n("observe.common.schoolEstimate"); +// n("observe.common.objectSchoolEstimate"); +// n("observe.common.floatingObject"); +// n("observe.common.activitySeine"); +// n("observe.common.route"); +// n("observe.common.tripSeine"); + +// n("observe.common.activityLongline"); +// n("observe.common.baitsComposition"); +// n("observe.common.basket"); +// n("observe.common.branchline"); +// n("observe.common.branchlinesComposition"); +// n("observe.common.catchLongline"); +// n("observe.common.encounter"); +// n("observe.common.setLongline"); +// n("observe.common.time"); +// n("observe.common.floatlinesComposition"); +// n("observe.common.hooksComposition"); +// n("observe.common.section"); +// n("observe.common.sensorUsed"); +// n("observe.common.sizeMeasure"); +// n("observe.common.tdr"); +// n("observe.common.tdrRecord"); +// n("observe.common.tripLongline"); +// n("observe.common.weightMeasure"); +// n("observe.common.gearUseFeaturesSeine"); +// n("observe.common.gearUseFeaturesLongline"); +// n("observe.common.longlineDetailComposition"); + +// n("observe.common.vesselSizeCategory"); +// n("observe.common.harbour"); +// n("observe.common.country"); +// n("observe.common.vesselType"); +// n("observe.common.vessel"); +// n("observe.common.speciesGroup"); +// n("observe.common.species"); +// n("observe.common.sex"); +// n("observe.common.fpaZone"); +// n("observe.common.speciesList"); +// n("observe.common.person"); +// n("observe.common.ocean"); +// n("observe.common.organism"); +// n("observe.common.lengthWeightParameter"); +// n("observe.common.program"); + +// n("observe.common.vesselActivitySeine"); +// n("observe.common.surroundingActivity"); +// n("observe.common.reasonForNullSet"); +// n("observe.common.reasonForNoFishing"); +// n("observe.common.speciesFate"); +// n("observe.common.objectFate"); +// n("observe.common.weightCategory"); +// n("observe.common.detectionMode"); +// n("observe.common.transmittingBuoyOperation"); +// n("observe.common.objectOperation"); +// n("observe.common.reasonForDiscard"); +// n("observe.common.speciesStatus"); +// n("observe.common.observedSystem"); +// n("observe.common.transmittingBuoyType"); +// n("observe.common.objectType"); +// n("observe.common.wind"); +// +// n("observe.common.baitHaulingStatus"); +// n("observe.common.baitSettingStatus"); +// n("observe.common.baitType"); +// n("observe.common.catchFateLongline"); +// n("observe.common.encounterType"); +// n("observe.common.healthness"); +// n("observe.common.hookPosition"); +// n("observe.common.hookSize"); +// n("observe.common.hookType"); +// n("observe.common.itemVerticalPosition"); +// n("observe.common.itemHorizontalPosition"); +// n("observe.common.lightsticksColor"); +// n("observe.common.lightsticksType"); +// n("observe.common.lineType"); +// n("observe.common.maturityStatus"); +// n("observe.common.mitigationType"); +// n("observe.common.sensorBrand"); +// n("observe.common.sensorDataFormat"); +// n("observe.common.sensorPosition"); +// n("observe.common.sensorType"); +// n("observe.common.settingShape"); +// n("observe.common.sizeMeasureType"); +// n("observe.common.stomacFullness"); +// n("observe.common.tripType"); +// n("observe.common.vesselActivityLongline"); +// n("observe.common.weightMeasureType"); +// n("observe.common.id"); +// n("observe.common.floatlineLengths"); +// n("observe.common.locode"); +// n("observe.common.name"); +// n("observe.common.gearCaracteristicType"); +// n("observe.common.gearCaracteristic"); +// n("observe.common.gear"); +// n("observe.common.gender"); + +// n("observe.common.floatline1Length"); +// n("observe.common.floatline2Length"); +// n("observe.common.branchlineLength"); +// n("observe.common.tracelineLength"); + +// n("observe.common.gearUseFeaturesMeasurementSeine"); +// n("observe.common.gearUseFeaturesMeasurementLongline"); } @@ -602,7 +536,7 @@ public class DecoratorService extends DecoratorProvider { } public <T extends DataDto> DataReferenceDecorator<T> getDataReferenceDecorator(Class<T> referenceType, String context) { - return (DataReferenceDecorator<T>) (DataReferenceDecorator) getDecoratorByType(DataReference.class, referenceType.getSimpleName()+ context); + return (DataReferenceDecorator<T>) (DataReferenceDecorator) getDecoratorByType(DataReference.class, referenceType.getSimpleName() + context); } public Decorator getReferenceDecorator(Class referenceType) { @@ -627,101 +561,66 @@ public class DecoratorService extends DecoratorProvider { return decorator; } - protected <T extends ReferentialDto> void registerDefaultReferentialAndReferentialReferenceDecorator(Class<T> referenceType, String libelle) { + private <T extends ReferentialDto> void registerDefaultReferentialAndReferentialReferenceDecorator(Class<T> referenceType, String libelle) { registerReferentialReferenceDecorator(referenceType, "${code}$s##${label}$s"); registerObserveDecorator(referenceType, "${code}$s##${" + libelle + "}$s", " "); } - protected <T extends ReferentialDto> void registerReferentialAndReferentialReferenceDecorator(Class<T> referenceType, String expression) { + private <T extends ReferentialDto> void registerReferentialAndReferentialReferenceDecorator(Class<T> referenceType, String expression) { registerReferentialReferenceDecorator(referenceType, expression); registerObserveDecorator(referenceType, expression); } - protected <T extends ReferentialDto> void registerReferentialAndReferentialReferenceDecorator(Class<T> referenceType, String expression, String referenceExpression) { + private <T extends ReferentialDto> void registerReferentialAndReferentialReferenceDecorator(Class<T> referenceType, String expression, String referenceExpression) { registerReferentialReferenceDecorator(referenceType, referenceExpression); registerObserveDecorator(referenceType, expression); } - protected <T extends ReferentialDto> void registerReferentialReferenceDecorator(Class<T> referenceType, String referenceExpression) { + private <T extends ReferentialDto> void registerReferentialReferenceDecorator(Class<T> referenceType, String referenceExpression) { registerDecorator(referenceType.getSimpleName(), new ReferentialReferenceDecorator<>(referenceExpression)); } - protected <T extends IdDto> void registerDataAndDataReferenceDecorator(String context, Class<T> referenceType, String expression) { + private <T extends IdDto> void registerDataAndDataReferenceDecorator(String context, Class<T> referenceType, String expression) { registerDataReferenceDecorator(context, referenceType, expression); registerObserveDecorator(context, referenceType, expression, " "); } - protected <T extends IdDto> void registerDataAndDataReferenceDecorator(Class<T> referenceType, String expression) { + private <T extends IdDto> void registerDataAndDataReferenceDecorator(Class<T> referenceType, String expression) { registerDataReferenceDecorator(referenceType, expression); registerObserveDecorator(referenceType, expression, " "); } - protected <T extends IdDto> void registerDataAndDataReferenceDecorator(Class<T> referenceType, String expression, String referenceExpression) { + private <T extends IdDto> void registerDataAndDataReferenceDecorator(Class<T> referenceType, String expression, String referenceExpression) { registerDataReferenceDecorator(referenceType, referenceExpression); registerObserveDecorator(referenceType, expression, " "); } - protected <T extends IdDto> void registerDataAndDataReferenceDecorator(Class<T> referenceType, String expression, String referenceExpression, String separator) { + private <T extends IdDto> void registerDataAndDataReferenceDecorator(Class<T> referenceType, String expression, String referenceExpression, String separator) { registerDataReferenceDecorator(referenceType, referenceExpression); registerObserveDecorator(referenceType, expression, separator); } - protected <T extends IdDto> void registerDataReferenceDecorator(Class<T> referenceType, String referenceExpression) { + private <T extends IdDto> void registerDataReferenceDecorator(Class<T> referenceType, String referenceExpression) { registerDataReferenceDecorator(null, referenceType, referenceExpression); } - protected <T extends IdDto> void registerDataReferenceDecorator(String context, Class<T> referenceType, String referenceExpression) { + private <T extends IdDto> void registerDataReferenceDecorator(String context, Class<T> referenceType, String referenceExpression) { registerDecorator(referenceType.getSimpleName() + (context == null ? "" : context), new DataReferenceDecorator<>(referenceExpression)); } - -// protected <T extends IdDto> void registerReferenceDtoDecorator(Class<T> referenceType, String expression) { -// registerReferenceDtoDecorator(referenceType, expression, expression); -// } -// -// protected <T extends IdDto> void registerReferenceDtoDecorator(Class<T> referenceType, -// String expression, -// String referenceExpression) { -// registerReferenceDtoDecorator(referenceType, expression, referenceExpression, " "); -// } -// -// protected <T extends IdDto> void registerReferenceDtoDecorator(String context, -// Class<T> referenceType, -// String expression) { -// registerReferenceDtoDecorator(context, referenceType, expression, expression, " "); -// } -// -// protected <T extends IdDto> void registerReferenceDtoDecorator(Class<T> referenceType, -// String expression, -// String referenceExpression, -// String separator) { -// registerDecorator(referenceType.getSimpleName(), new ReferenceDecorator(referenceExpression)); -// registerObserveDecorator(referenceType, expression, separator); -// } -// -// protected <T extends IdDto> void registerReferenceDtoDecorator(String context, -// Class<T> referenceType, -// String expression, -// String referenceExpression, -// String separator) { -// registerDecorator(referenceType.getSimpleName() + context, new ReferenceDecorator(referenceExpression)); -// registerObserveDecorator(context, referenceType, expression, separator); -// } - - - protected <T> void registerObserveDecorator(Class<T> referenceType, String expression) { + private <T> void registerObserveDecorator(Class<T> referenceType, String expression) { registerDecorator(new ObserveDecorator<>(referenceType, expression)); } - protected <T> void registerObserveDecorator(Class<T> referenceType, String expression, String separator) { + private <T> void registerObserveDecorator(Class<T> referenceType, String expression, String separator) { registerDecorator(new ObserveDecorator<>(referenceType, expression, separator)); } - protected <T> void registerObserveDecorator(String context, Class<T> referenceType, String expression) { + private <T> void registerObserveDecorator(String context, Class<T> referenceType, String expression) { registerDecorator(context, new ObserveDecorator<>(referenceType, expression)); } - protected <T> void registerObserveDecorator(String context, Class<T> referenceType, String expression, String separator) { + private <T> void registerObserveDecorator(String context, Class<T> referenceType, String expression, String separator) { registerDecorator(context, new ObserveDecorator<>(referenceType, expression, separator)); } diff --git a/application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/ObserveI18nDecoratorHelper.java b/application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/ObserveI18nDecoratorHelper.java new file mode 100644 index 0000000..138d301 --- /dev/null +++ b/application-swing-decoration/src/main/java/fr/ird/observe/application/swing/decoration/ObserveI18nDecoratorHelper.java @@ -0,0 +1,81 @@ +package fr.ird.observe.application.swing.decoration; + +import com.google.common.cache.AbstractLoadingCache; +import fr.ird.observe.services.dto.ObserveDto; +import org.apache.commons.lang3.StringUtils; +import org.atteo.evo.inflector.English; + +import java.beans.Introspector; +import java.util.function.Function; + +/** + * Created on 03/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class ObserveI18nDecoratorHelper { + + private static final String OBSERVE_COMMON_PREFIX = "observe.common."; + private static final String OBSERVE_TYPE_PREFIX = "observe.type."; + + public static String getTypeI18nKey(String name) { + name = StringUtils.removeEnd(name, "Dto"); + String propertyName = Introspector.decapitalize(name); + return OBSERVE_TYPE_PREFIX + Introspector.decapitalize(propertyName); + } + + public static String getTypeI18nKey(Class key) { + return TYPE_CACHE.get(key); + } + + public static String getTypePlurialI18nKey(Class entityClass) { + return TYPE_PLURALIZE_CACHE.get(entityClass); + } + + public static String getPropertyI18nKey(String propertyName) { + return getPropertyI18nKey(OBSERVE_COMMON_PREFIX, propertyName); + } + + private static String getPropertyI18nKey(String prefix, String propertyName) { + return prefix + Introspector.decapitalize(propertyName); + } + + private static String getTypeI18nKey0(Class type) { + String entityClassName = StringUtils.removeEnd(type.getSimpleName(), "Dto"); + String propertyName = Introspector.decapitalize(entityClassName); + return OBSERVE_TYPE_PREFIX + Introspector.decapitalize(propertyName); + } + + private static String getTypePlurialI18nKey0(Class type) { + String entityClassName = StringUtils.removeEnd(type.getSimpleName(), "Dto"); + String propertyName = Introspector.decapitalize(entityClassName); + return OBSERVE_TYPE_PREFIX + English.plural(propertyName); + } + + private static final ClassToI18nKeyCache TYPE_CACHE = new ClassToI18nKeyCache(ObserveI18nDecoratorHelper::getTypeI18nKey0); + + private static final ClassToI18nKeyCache TYPE_PLURALIZE_CACHE = new ClassToI18nKeyCache(ObserveI18nDecoratorHelper::getTypePlurialI18nKey0); + + private static class ClassToI18nKeyCache extends AbstractLoadingCache<Class, String> { + + private final Function<Class, String> function; + + private ClassToI18nKeyCache(Function<Class, String> function) { + this.function = function; + } + + @Override + public String get(Class key) { + if (!ObserveDto.class.isAssignableFrom(key)) { + throw new IllegalArgumentException(key + " is not an Observe DTO"); + } + return function.apply(key); + } + + @Override + public String getIfPresent(Object key) { + return getUnchecked((Class) key); + } + } +} diff --git a/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_en_GB.properties b/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_en_GB.properties index 2e4b9bf..ecd2bb9 100644 --- a/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_en_GB.properties +++ b/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_en_GB.properties @@ -92,7 +92,7 @@ observe.common.sensorType=Sensor type observe.common.sensorUsed=Sensor used observe.common.setLongline=Set observe.common.setSeine=Set -observe.common.settingIdentifier=Setting identifier +observe.common.settingIdentifier=Setting observe.common.settingShape=Setting shape observe.common.sex=Sex observe.common.sizeMeasure=Size measure @@ -143,3 +143,223 @@ observe.common.weightCategory=Weight category observe.common.weightMeasure=Weight measure observe.common.weightMeasureType=Weight measure type observe.common.wind=Wind +observe.type.activityLongline=Activity +observe.type.activityLonglineEncounter=Encounter +observe.type.activityLonglineEncounters=Encounters +observe.type.activityLonglineSensorUsed=Sensor used +observe.type.activityLonglineSensorUseds=Sensors used +observe.type.activityLonglines=Activitys +observe.type.activitySeine=Activity +observe.type.activitySeineObservedSystem=Observed system +observe.type.activitySeineObservedSystems=Observeds system +observe.type.activitySeines=Activitys +observe.type.baitHaulingStatus=Bait hauling status +observe.type.baitHaulingStatuses=Baits hauling status +observe.type.baitSettingStatus=Bait setting status +observe.type.baitSettingStatuses=Baits setting status +observe.type.baitType=Bait type +observe.type.baitTypes=Baits type +observe.type.baitsComposition=Baits composition +observe.type.baitsCompositions=Baitss composition +observe.type.basket=Basket +observe.type.baskets=Baskets +observe.type.branchline=Branchline +observe.type.branchlines=Branchlines +observe.type.branchlinesComposition=Branchlines composition +observe.type.branchlinesCompositions=Branchliness composition +observe.type.catchFateLongline=Catch fate +observe.type.catchFateLonglines=Catchs fate +observe.type.catchLongline=Catch +observe.type.catchLonglines=Catchs +observe.type.countries=Countrys +observe.type.country=Country +observe.type.detectionMode=Detection mode +observe.type.detectionModes=Detections mode +observe.type.encounter=Encounter +observe.type.encounterType=Encounter type +observe.type.encounterTypes=Encounters type +observe.type.encounters=Encounters +observe.type.floatingObject=Floating object +observe.type.floatingObjectObservedSpecies=Floating object observed species +observe.type.floatingObjectSchoolEstimate=Floating object school estimate +observe.type.floatingObjectSchoolEstimates=Floatings object school estimate +observe.type.floatingObjectTransmittingBuoy=Transmitting buoy +observe.type.floatingObjectTransmittingBuoys=Transmittings buoy +observe.type.floatingObjects=Floatings object +observe.type.floatlinesComposition=Floatines composition +observe.type.floatlinesCompositions=Floatiness composition +observe.type.fpaZone=Fpa zone +observe.type.fpaZones=Fpas zone +observe.type.gear=Gear +observe.type.gearCaracteristic=Gear caracteristic +observe.type.gearCaracteristicType=Gear caracteristic type +observe.type.gearCaracteristicTypes=Gears caracteristic type +observe.type.gearCaracteristics=Gears caracteristic +observe.type.gearUseFeaturesLongline=Gear uses features +observe.type.gearUseFeaturesLonglines=Gears uses features +observe.type.gearUseFeaturesMeasurementLongline=Gear uses feature measurements +observe.type.gearUseFeaturesMeasurementLonglines=Gears uses feature measurements +observe.type.gearUseFeaturesMeasurementSeine=Gear uses feature measurements +observe.type.gearUseFeaturesMeasurementSeines=Gears uses feature measurements +observe.type.gearUseFeaturesSeine=Gear uses features +observe.type.gearUseFeaturesSeines=Gears uses features +observe.type.gears=Gears +observe.type.harbour=Harbour +observe.type.harbours=Harbours +observe.type.healthness=Healthness +observe.type.healthnesses=Healthnesss +observe.type.hookPosition=Hook position +observe.type.hookPositions=Hooks position +observe.type.hookSize=Hook size +observe.type.hookSizes=Hooks size +observe.type.hookType=Hook type +observe.type.hookTypes=Hooks type +observe.type.hooksComposition=Hooks composition +observe.type.hooksCompositions=Hookss composition +observe.type.itemHorizontalPosition=Item horizontal position +observe.type.itemHorizontalPositions=Items horizontal position +observe.type.itemVerticalPosition=Item vertical position +observe.type.itemVerticalPositions=Items vertical position +observe.type.lengthWeightParameter=Length weight parameter +observe.type.lengthWeightParameters=Lengths weight parameter +observe.type.lightsticksColor=Lightsticks color +observe.type.lightsticksColors=Lightstickss color +observe.type.lightsticksType=Lightsticks type +observe.type.lightsticksTypes=Lightstickss type +observe.type.lineType=Line type +observe.type.lineTypes=Lines type +observe.type.maturityStatus=Maturity status +observe.type.maturityStatuses=Maturitys status +observe.type.mitigationType=Mitigation type +observe.type.mitigationTypes=Mitigations type +observe.type.nonTargetCatch=Non target catch +observe.type.nonTargetCatches=Nons target catch +observe.type.nonTargetLength=Non target length +observe.type.nonTargetLengths=Nons target length +observe.type.nonTargetSample=Non target sample +observe.type.nonTargetSamples=Nons target sample +observe.type.objectFate=Object fate +observe.type.objectFates=Objects fate +observe.type.objectObservedSpecies=Object observed species +observe.type.objectOperation=Object operation +observe.type.objectOperations=Objects operation +observe.type.objectSchoolEstimate=Object school estimate +observe.type.objectSchoolEstimates=Objects school estimate +observe.type.objectType=Object type +observe.type.objectTypes=Objects type +observe.type.observedSystem=Observed system +observe.type.observedSystems=Observeds system +observe.type.ocean=Ocean +observe.type.oceans=Oceans +observe.type.organism=Organism +observe.type.organisms=Organisms +observe.type.person=Person +observe.type.persons=Persons +observe.type.program=Program +observe.type.programs=Programs +observe.type.reasonForDiscard=Reason for discard +observe.type.reasonForDiscards=Reasons for discard +observe.type.reasonForNoFishing=Reason for no fishing +observe.type.reasonForNoFishings=Reasons for no fishing +observe.type.reasonForNullSet=Reason for null set +observe.type.reasonForNullSets=Reasons for null set +observe.type.route=Route +observe.type.routes=Routes +observe.type.schoolEstimate=School estimate +observe.type.schoolEstimates=Schools estimate +observe.type.section=Section +observe.type.sections=Sections +observe.type.sensorBrand=Sensor brand +observe.type.sensorBrands=Sensor brands +observe.type.sensorDataFormat=Sensor data format +observe.type.sensorDataFormats=Sensors data format +observe.type.sensorType=Sensor type +observe.type.sensorTypes=Sensors type +observe.type.sensorUsed=Sensor used +observe.type.sensorUseds=Sensors used +observe.type.setLongline=Set +observe.type.setLonglineCatch=Catch +observe.type.setLonglineCatches=Catchs +observe.type.setLonglineDetailComposition=Detailed composition +observe.type.setLonglineDetailCompositions=Detaileds composition +observe.type.setLonglineGlobalComposition=Global composition +observe.type.setLonglineGlobalCompositions=Globals composition +observe.type.setLonglineTdr=Tdr +observe.type.setLonglineTdrs=Tdrs +observe.type.setLonglines=Sets +observe.type.setSeine=Set +observe.type.setSeineNonTargetCatch=NonTarget catch +observe.type.setSeineNonTargetCatches=NonTargets catch +observe.type.setSeineSchoolEstimate=School estimate +observe.type.setSeineSchoolEstimates=Schools estimate +observe.type.setSeineTargetCatch=Target catch +observe.type.setSeineTargetCatches=Targets catch +observe.type.setSeines=Sets +observe.type.settingShape=Setting shape +observe.type.settingShapes=Settings shape +observe.type.sex=Sex +observe.type.sexes=Sexs +observe.type.sizeMeasure=Size measure +observe.type.sizeMeasureType=Size measure type +observe.type.sizeMeasureTypes=Sizes measure type +observe.type.sizeMeasures=Sizes measure +observe.type.species=Species +observe.type.speciesFate=Species fate +observe.type.speciesFates=Speciess fate +observe.type.speciesGroup=Species group +observe.type.speciesGroups=Speciess group +observe.type.speciesList=Species list +observe.type.speciesLists=Speciess list +observe.type.speciesStatus=Species status +observe.type.speciesStatuses=Speciess status +observe.type.speciess=Speciess +observe.type.stomacFullness=Stomac fullness +observe.type.stomacFullnesses=Stomacs fullness +observe.type.surroundingActivities=Surroundings activity +observe.type.surroundingActivity=Surrounding activity +observe.type.targetCatch=Target catch +observe.type.targetCatches=Targets catch +observe.type.targetLength=Target length +observe.type.targetLengths=Targets length +observe.type.targetSample=Target sample +observe.type.targetSamples=Targets sample +observe.type.tdr=Tdr +observe.type.tdrs=Tdrs +observe.type.transmittingBuoy=Transmitting buoy +observe.type.transmittingBuoyOperation=Transmitting buoy operation +observe.type.transmittingBuoyOperations=Transmittings buoy operation +observe.type.transmittingBuoyType=Transmitting buoy type +observe.type.transmittingBuoyTypes=Transmittings buoy type +observe.type.transmittingBuoys=Transmittings buoy +observe.type.tripLongline=Trip +observe.type.tripLonglineActivities=Activitys +observe.type.tripLonglineActivity=Activity +observe.type.tripLonglineGearUse=Gear use +observe.type.tripLonglineGearUses=Gears use +observe.type.tripLonglines=Trips +observe.type.tripMap=Map +observe.type.tripMaps=Maps +observe.type.tripSeine=Trip +observe.type.tripSeineGearUse=Gear use +observe.type.tripSeineGearUses=Gears use +observe.type.tripSeines=Trips +observe.type.tripType=Trip type +observe.type.tripTypes=Trips type +observe.type.vessel=Vessel +observe.type.vesselActivityLongline=Vessel activity +observe.type.vesselActivityLonglines=Vessels activity +observe.type.vesselActivitySeine=Vessel activity +observe.type.vesselActivitySeines=Vessels activity +observe.type.vesselSizeCategories=Vessels size category +observe.type.vesselSizeCategory=Vessel size category +observe.type.vesselType=Vessel type +observe.type.vesselTypes=Vessels type +observe.type.vessels=Vessels +observe.type.weightCategories=Weights category +observe.type.weightCategory=Weight category +observe.type.weightMeasure=Weight measure +observe.type.weightMeasureType=Weight measure type +observe.type.weightMeasureTypes=Weights measure type +observe.type.weightMeasures=Weights measure +observe.type.wind=Wind +observe.type.winds=Winds diff --git a/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_es_ES.properties b/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_es_ES.properties index 5c02e58..4d5c36f 100644 --- a/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_es_ES.properties +++ b/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_es_ES.properties @@ -143,3 +143,223 @@ observe.common.weightCategory=Categoría de peso observe.common.weightMeasure=Medida de peso observe.common.weightMeasureType=Tipo de medida de peso observe.common.wind=Viento Beaufort +observe.type.activityLongline=Actividad +observe.type.activityLonglineEncounter=TODO +observe.type.activityLonglineEncounters=TODO +observe.type.activityLonglineSensorUsed=TODO +observe.type.activityLonglineSensorUseds=TODO +observe.type.activityLonglines=Actividad TODO +observe.type.activitySeine=Actividad +observe.type.activitySeineObservedSystem=TODO +observe.type.activitySeineObservedSystems=TODO +observe.type.activitySeines=Actividad TODO +observe.type.baitHaulingStatus=Estatuto del cebo en el arrastre +observe.type.baitHaulingStatuses=Estatuto del cebo en el arrastre TODO +observe.type.baitSettingStatus=Estatuto del cebo en la calada +observe.type.baitSettingStatuses=Estatuto del cebo en la calada TODO +observe.type.baitType=Tipo de cebo +observe.type.baitTypes=Tipo de cebo TODO +observe.type.baitsComposition=Composición de los cebos +observe.type.baitsCompositions=Composición de los cebos TODO +observe.type.basket=Cesta +observe.type.baskets=Cesta TODO +observe.type.branchline=Arponcillo +observe.type.branchlines=Arponcillo TODO +observe.type.branchlinesComposition=Composición de los arponcillos +observe.type.branchlinesCompositions=Composición de los arponcillos TODO +observe.type.catchFateLongline=Futuro de la captura +observe.type.catchFateLonglines=Futuro de la captura TODO +observe.type.catchLongline=Captura +observe.type.catchLonglines=Captura TODO +observe.type.countries=País TODO +observe.type.country=País +observe.type.detectionMode=Modo de detección +observe.type.detectionModes=Modo de detección TODO +observe.type.encounter=Encuentro +observe.type.encounterType=Tipo de encuentro +observe.type.encounterTypes=Tipo de encuentro TODO +observe.type.encounters=Encuentro TODO +observe.type.floatingObject=Objeto flotante +observe.type.floatingObjectObservedSpecies=TODO +observe.type.floatingObjectSchoolEstimate=TODO +observe.type.floatingObjectSchoolEstimates=TODO +observe.type.floatingObjectTransmittingBuoy=TODO +observe.type.floatingObjectTransmittingBuoys=TODO +observe.type.floatingObjects=Objeto flotante TODO +observe.type.floatlinesComposition=Composición de los orinques +observe.type.floatlinesCompositions=Composición de los orinques TODO +observe.type.fpaZone=Zona FPA +observe.type.fpaZones=Zona FPA TODO +observe.type.gear=Equipamiento +observe.type.gearCaracteristic=Característica de un equipamiento +observe.type.gearCaracteristicType=Tipo de característica de equipamientos +observe.type.gearCaracteristicTypes=Tipo de característica de equipamientos TODO +observe.type.gearCaracteristics=Característica de un equipamiento TODO +observe.type.gearUseFeaturesLongline=Equipamiento +observe.type.gearUseFeaturesLonglines=Equipamiento TODO +observe.type.gearUseFeaturesMeasurementLongline=Medida +observe.type.gearUseFeaturesMeasurementLonglines=Medida TODO +observe.type.gearUseFeaturesMeasurementSeine=Medida +observe.type.gearUseFeaturesMeasurementSeines=Medida TODO +observe.type.gearUseFeaturesSeine=Equipamiento +observe.type.gearUseFeaturesSeines=Equipamiento TODO +observe.type.gears=Equipamiento TODO +observe.type.harbour=Puerto +observe.type.harbours=Puerto TODO +observe.type.healthness=Estado de salud +observe.type.healthnesses=Estado de salud TODO +observe.type.hookPosition=Posición del anzuelo +observe.type.hookPositions=Posición del anzuelo TODO +observe.type.hookSize=Tamaño +observe.type.hookSizes=Tamaño TODO +observe.type.hookType=Tipo de anzuelo +observe.type.hookTypes=Tipo de anzuelo TODO +observe.type.hooksComposition=Composición de los anzuelos +observe.type.hooksCompositions=Composición de los anzuelos TODO +observe.type.itemHorizontalPosition=Localización del elemento sobre la línea principal +observe.type.itemHorizontalPositions=Localización del elemento sobre la línea principal TODO +observe.type.itemVerticalPosition=Localización del elemento sobre el arponcillo +observe.type.itemVerticalPositions=Localización del elemento sobre el arponcillo TODO +observe.type.lengthWeightParameter=Relación Tamaño-Peso +observe.type.lengthWeightParameters=Relación Tamaño-Peso TODO +observe.type.lightsticksColor=Color de barrita de luz +observe.type.lightsticksColors=Color de barrita de luz TODO +observe.type.lightsticksType=Tipo de barrita de luz +observe.type.lightsticksTypes=Tipo de barrita de luz TODO +observe.type.lineType=Tipo de línea +observe.type.lineTypes=Tipo de línea TODO +observe.type.maturityStatus=Maturidad +observe.type.maturityStatuses=Maturidad TODO +observe.type.mitigationType=Tipo de medida de atenuación +observe.type.mitigationTypes=Tipo de medida de atenuación TODO +observe.type.nonTargetCatch=Fauna accesoria conservada o descartada +observe.type.nonTargetCatches=Fauna accesoria conservada o descartada TODO +observe.type.nonTargetLength=Longitud (cm inf.) +observe.type.nonTargetLengths=Longitud (cm inf.) TODO +observe.type.nonTargetSample=Muestreo de fauna accesoria +observe.type.nonTargetSamples=Muestreo de fauna accesoria TODO +observe.type.objectFate=Futuro del objeto +observe.type.objectFates=Futuro del objeto TODO +observe.type.objectObservedSpecies=Fauna observada +observe.type.objectOperation=Operación sobre el objeto +observe.type.objectOperations=Operación sobre el objeto TODO +observe.type.objectSchoolEstimate=Estimación banco de objetos +observe.type.objectSchoolEstimates=Estimación banco de objetos TODO +observe.type.objectType=Tipo de objeto +observe.type.objectTypes=Tipo de objeto TODO +observe.type.observedSystem=Système observé +observe.type.observedSystems=Système observé TODO +observe.type.ocean=Oceano +observe.type.oceans=Oceano TODO +observe.type.organism=Organismo +observe.type.organisms=Organismo TODO +observe.type.person=Persona +observe.type.persons=Persona TODO +observe.type.program=Programa +observe.type.programs=Programa TODO +observe.type.reasonForDiscard=Razón de descarte +observe.type.reasonForDiscards=Razón de descarte TODO +observe.type.reasonForNoFishing=Razón de no pesca Senne +observe.type.reasonForNoFishings=Razón de no pesca Senne TODO +observe.type.reasonForNullSet=Causa de lance nulo +observe.type.reasonForNullSets=Causa de lance nulo TODO +observe.type.route=Ruta +observe.type.routes=Ruta TODO +observe.type.schoolEstimate=Estimación banco +observe.type.schoolEstimates=Estimación banco TODO +observe.type.section=Sección +observe.type.sections=Sección TODO +observe.type.sensorBrand=Marca de sensor +observe.type.sensorBrands=Marca de sensor TODO +observe.type.sensorDataFormat=Formato de los datos del sensor +observe.type.sensorDataFormats=Formato de los datos del sensor TODO +observe.type.sensorType=Tipo de sensor +observe.type.sensorTypes=Tipo de sensor TODO +observe.type.sensorUsed=Sensor utilizado +observe.type.sensorUseds=Sensor utilizado TODO +observe.type.setLongline=Operación de pesca +observe.type.setLonglineCatch=TODO +observe.type.setLonglineCatches=TODO +observe.type.setLonglineDetailComposition=TODO +observe.type.setLonglineDetailCompositions=TODO +observe.type.setLonglineGlobalComposition=TODO +observe.type.setLonglineGlobalCompositions=TODO +observe.type.setLonglineTdr=TODO +observe.type.setLonglineTdrs=TODO +observe.type.setLonglines=Operación de pesca TODO +observe.type.setSeine=Lance +observe.type.setSeineNonTargetCatch=TODO +observe.type.setSeineNonTargetCatches=TODO +observe.type.setSeineSchoolEstimate=TODO +observe.type.setSeineSchoolEstimates=TODO +observe.type.setSeineTargetCatch=TODO +observe.type.setSeineTargetCatches=TODO +observe.type.setSeines=Lance TODO +observe.type.settingShape=Forma en al calada +observe.type.settingShapes=Forma en al calada TODO +observe.type.sex=Sexo +observe.type.sexes=Sexo TODO +observe.type.sizeMeasure=Medida del tamaño +observe.type.sizeMeasureType=Tipo de medida del tamaño +observe.type.sizeMeasureTypes=Tipo de medida del tamaño TODO +observe.type.sizeMeasures=Medida del tamaño TODO +observe.type.species=Especie +observe.type.speciesFate=Futuro de la especie +observe.type.speciesFates=Futuro de la especie TODO +observe.type.speciesGroup=Grupo de especie +observe.type.speciesGroups=Grupo de especie TODO +observe.type.speciesList=Lista de especies +observe.type.speciesLists=Lista de especies TODO +observe.type.speciesStatus=Estatuto de la fauna observada +observe.type.speciesStatuses=Estatuto de la fauna observada TODO +observe.type.speciess=Especie TODO +observe.type.stomacFullness=Nivel de llenado del estomago +observe.type.stomacFullnesses=Nivel de llenado del estomago TODO +observe.type.surroundingActivities=Actividad circundante TODO +observe.type.surroundingActivity=Actividad circundante +observe.type.targetCatch=Captura destinataria +observe.type.targetCatches=Captura destinataria TODO +observe.type.targetLength=Tamaño del atún +observe.type.targetLengths=Tamaño del atún TODO +observe.type.targetSample=Muestreo del atún descartado +observe.type.targetSamples=Muestreo del atún descartado TODO +observe.type.tdr=Registrador de profundidad +observe.type.tdrs=Registrador de profundidad TODO +observe.type.transmittingBuoy=Baliza leida +observe.type.transmittingBuoyOperation=Operación baliza +observe.type.transmittingBuoyOperations=Operación baliza TODO +observe.type.transmittingBuoyType=Tipo de baliza +observe.type.transmittingBuoyTypes=Tipo de baliza TODO +observe.type.transmittingBuoys=Baliza leida TODO +observe.type.tripLongline=Marea +observe.type.tripLonglineActivities=TODO +observe.type.tripLonglineActivity=TODO +observe.type.tripLonglineGearUse=TODO +observe.type.tripLonglineGearUses=TODO +observe.type.tripLonglines=Marea TODO +observe.type.tripMap=TODO +observe.type.tripMaps=TODO +observe.type.tripSeine=Marea +observe.type.tripSeineGearUse=TODO +observe.type.tripSeineGearUses=TODO +observe.type.tripSeines=Marea TODO +observe.type.tripType=Tipo de marea +observe.type.tripTypes=Tipo de marea TODO +observe.type.vessel=Buque +observe.type.vesselActivityLongline=Actividad buque +observe.type.vesselActivityLonglines=Actividad buque TODO +observe.type.vesselActivitySeine=Actividad buque +observe.type.vesselActivitySeines=Actividad buque TODO +observe.type.vesselSizeCategories=Categoría de buque TODO +observe.type.vesselSizeCategory=Categoría de buque +observe.type.vesselType=Tipo de pesquería +observe.type.vesselTypes=Tipo de pesquería TODO +observe.type.vessels=Buque TODO +observe.type.weightCategories=Categoría de peso TODO +observe.type.weightCategory=Categoría de peso +observe.type.weightMeasure=Medida de peso +observe.type.weightMeasureType=Tipo de medida de peso +observe.type.weightMeasureTypes=Tipo de medida de peso TODO +observe.type.weightMeasures=Medida de peso TODO +observe.type.wind=Viento Beaufort +observe.type.winds=Viento Beaufort TODO diff --git a/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_fr_FR.properties b/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_fr_FR.properties index bc3e52e..14b18c4 100644 --- a/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_fr_FR.properties +++ b/application-swing-decoration/src/main/resources/i18n/application-swing-decoration_fr_FR.properties @@ -143,3 +143,223 @@ observe.common.weightCategory=Catégorie de poids observe.common.weightMeasure=Mesure de poids observe.common.weightMeasureType=Type de mesure de poids observe.common.wind=Vent Beaufort +observe.type.activityLongline=Activité +observe.type.activityLonglineEncounter=Rencontre +observe.type.activityLonglineEncounters=Rencontres +observe.type.activityLonglineSensorUsed=Sonde utilisé +observe.type.activityLonglineSensorUseds=Sondes utilisé +observe.type.activityLonglines=Activités +observe.type.activitySeine=Activité +observe.type.activitySeineObservedSystem=Système observé +observe.type.activitySeineObservedSystems=Systèmes observé +observe.type.activitySeines=Activités +observe.type.baitHaulingStatus=Statut de l'appât au virage +observe.type.baitHaulingStatuses=Statuts de l'appât au virage +observe.type.baitSettingStatus=Statut de l'appât au filage +observe.type.baitSettingStatuses=Statuts de l'appât au filage +observe.type.baitType=Type d'appât +observe.type.baitTypes=Types d'appât +observe.type.baitsComposition=Composition des appâts +observe.type.baitsCompositions=Compositions des appâts +observe.type.basket=Basket +observe.type.baskets=Baskets +observe.type.branchline=Avançon +observe.type.branchlines=Avançons +observe.type.branchlinesComposition=Composition des avançons +observe.type.branchlinesCompositions=Compositions des avançons +observe.type.catchFateLongline=Devenir capture +observe.type.catchFateLonglines=Devenirs capture +observe.type.catchLongline=Capture +observe.type.catchLonglines=Captures +observe.type.countries=Payss +observe.type.country=Pays +observe.type.detectionMode=Mode détection +observe.type.detectionModes=Modes détection +observe.type.encounter=Rencontre +observe.type.encounterType=Type de rencontre +observe.type.encounterTypes=Types de rencontre +observe.type.encounters=Rencontres +observe.type.floatingObject=Objet flottant +observe.type.floatingObjectObservedSpecies=Espèces observées sur banc +observe.type.floatingObjectSchoolEstimate=Estimation du banc objet +observe.type.floatingObjectSchoolEstimates=Estimations du banc objet +observe.type.floatingObjectTransmittingBuoy=Opérations sur balise +observe.type.floatingObjectTransmittingBuoys=Opérationss sur balise +observe.type.floatingObjects=Objets flottant +observe.type.floatlinesComposition=Composition des orins +observe.type.floatlinesCompositions=Compositions des orins +observe.type.fpaZone=Zone FPA +observe.type.fpaZones=Zones FPA +observe.type.gear=Équipement +observe.type.gearCaracteristic=Caractéristique d'un équipement +observe.type.gearCaracteristicType=Type de caractéristique d'équipement +observe.type.gearCaracteristicTypes=Types de caractéristique d'équipement +observe.type.gearCaracteristics=Caractéristiques d'un équipement +observe.type.gearUseFeaturesLongline=Équipement +observe.type.gearUseFeaturesLonglines=Équipements +observe.type.gearUseFeaturesMeasurementLongline=Mesure +observe.type.gearUseFeaturesMeasurementLonglines=Mesures +observe.type.gearUseFeaturesMeasurementSeine=Mesure +observe.type.gearUseFeaturesMeasurementSeines=Mesures +observe.type.gearUseFeaturesSeine=Équipement +observe.type.gearUseFeaturesSeines=Équipements +observe.type.gears=Équipements +observe.type.harbour=Port +observe.type.harbours=Ports +observe.type.healthness=État de santé +observe.type.healthnesses=États de santé +observe.type.hookPosition=Position du hameçon +observe.type.hookPositions=Positions du hameçon +observe.type.hookSize=Taille +observe.type.hookSizes=Tailles +observe.type.hookType=Type d'hameçon +observe.type.hookTypes=Types d'hameçon +observe.type.hooksComposition=Composition des hameçons +observe.type.hooksCompositions=Compositions des hameçons +observe.type.itemHorizontalPosition=Localisation de l'élément sur la ligne mère +observe.type.itemHorizontalPositions=Localisations de l'élément sur la ligne mère +observe.type.itemVerticalPosition=Localisation de l'élément sur l'avançon +observe.type.itemVerticalPositions=Localisations de l'élément sur l'avançon +observe.type.lengthWeightParameter=Relation Taille-Poids +observe.type.lengthWeightParameters=Relations Taille-Poids +observe.type.lightsticksColor=Couleur de baton lumineux +observe.type.lightsticksColors=Couleurs de baton lumineux +observe.type.lightsticksType=Type de baton lumineux +observe.type.lightsticksTypes=Types de baton lumineux +observe.type.lineType=Type de ligne +observe.type.lineTypes=Types de ligne +observe.type.maturityStatus=Maturité +observe.type.maturityStatuses=Maturités +observe.type.mitigationType=Type de mesure d'atténuation +observe.type.mitigationTypes=Types de mesure d'atténuation +observe.type.nonTargetCatch=Faune accessoire conservée ou rejetée +observe.type.nonTargetCatches=Faunes accessoire conservée ou rejetée +observe.type.nonTargetLength=Longueur (cm inf.) +observe.type.nonTargetLengths=Longueurs (cm inf.) +observe.type.nonTargetSample=Echantillon faune accessoire +observe.type.nonTargetSamples=Echantillons faune accessoire +observe.type.objectFate=Devenir de l'objet +observe.type.objectFates=Devenirs de l'objet +observe.type.objectObservedSpecies=Faune observée +observe.type.objectOperation=Opération sur l'objet +observe.type.objectOperations=Opérations sur l'objet +observe.type.objectSchoolEstimate=Estimation banc objet +observe.type.objectSchoolEstimates=Estimations banc objet +observe.type.objectType=Type d'objet +observe.type.objectTypes=Types d'objet +observe.type.observedSystem=Système observé +observe.type.observedSystems=Systèmes observé +observe.type.ocean=Océan +observe.type.oceans=Océans +observe.type.organism=Organisme +observe.type.organisms=Organismes +observe.type.person=Personne +observe.type.persons=Personnes +observe.type.program=Programme +observe.type.programs=Programmes +observe.type.reasonForDiscard=Raison rejet +observe.type.reasonForDiscards=Raisons rejet +observe.type.reasonForNoFishing=Raison de non coup de Senne +observe.type.reasonForNoFishings=Raisons de non coup de Senne +observe.type.reasonForNullSet=Cause coup nul +observe.type.reasonForNullSets=Causes coup nul +observe.type.route=Route +observe.type.routes=Routes +observe.type.schoolEstimate=Estimation banc +observe.type.schoolEstimates=Estimations banc +observe.type.section=Section +observe.type.sections=Sections +observe.type.sensorBrand=Marque de capteur +observe.type.sensorBrands=Marques de capteur +observe.type.sensorDataFormat=Format de données de capteur +observe.type.sensorDataFormats=Formats de données de capteur +observe.type.sensorType=Type de capteur +observe.type.sensorTypes=Types de capteur +observe.type.sensorUsed=Capteur utilisé +observe.type.sensorUseds=Capteurs utilisé +observe.type.setLongline=Opération de pêche +observe.type.setLonglineCatch=Capture +observe.type.setLonglineCatches=Captures +observe.type.setLonglineDetailComposition=Composition détaillé +observe.type.setLonglineDetailCompositions=Compositions détaillé +observe.type.setLonglineGlobalComposition=Composition globale +observe.type.setLonglineGlobalCompositions=Compositions globale +observe.type.setLonglineTdr=Enregisteur +observe.type.setLonglineTdrs=Enregisteurs +observe.type.setLonglines=Opérations de pêche +observe.type.setSeine=Calée +observe.type.setSeineNonTargetCatch=Capture de faune accessoire +observe.type.setSeineNonTargetCatches=Captures de faune accessoire +observe.type.setSeineSchoolEstimate=Ésitmation de banc +observe.type.setSeineSchoolEstimates=Ésitmations de banc +observe.type.setSeineTargetCatch=Capture cible +observe.type.setSeineTargetCatches=Captures cible +observe.type.setSeines=Calées +observe.type.settingShape=Forme au filage +observe.type.settingShapes=Formes au filage +observe.type.sex=Sexe +observe.type.sexes=Sexes +observe.type.sizeMeasure=Mesure de taille +observe.type.sizeMeasureType=Type de mesure de taille +observe.type.sizeMeasureTypes=Types de mesure de taille +observe.type.sizeMeasures=Mesures de taille +observe.type.species=Espèce +observe.type.speciesFate=Devenir espèce +observe.type.speciesFates=Devenirs espèce +observe.type.speciesGroup=Groupe espèce +observe.type.speciesGroups=Groupes espèce +observe.type.speciesList=Liste d'espèces +observe.type.speciesLists=Listes d'espèces +observe.type.speciesStatus=Statut faune observée +observe.type.speciesStatuses=Statuts faune observée +observe.type.speciess=Espèces +observe.type.stomacFullness=Niveau de remplissage de l'estomac +observe.type.stomacFullnesses=Niveaus de remplissage de l'estomac +observe.type.surroundingActivities=Activités environnante +observe.type.surroundingActivity=Activité environnante +observe.type.targetCatch=Capture cible +observe.type.targetCatches=Captures cible +observe.type.targetLength=Taille Thon +observe.type.targetLengths=Tailles Thon +observe.type.targetSample=Echantillon thon rejeté +observe.type.targetSamples=Echantillons thon rejeté +observe.type.tdr=Enregistreur de profondeur +observe.type.tdrs=Enregistreurs de profondeur +observe.type.transmittingBuoy=Balise lue +observe.type.transmittingBuoyOperation=Opération balise +observe.type.transmittingBuoyOperations=Opérations balise +observe.type.transmittingBuoyType=Type de balise +observe.type.transmittingBuoyTypes=Types de balise +observe.type.transmittingBuoys=Balises lue +observe.type.tripLongline=Marée +observe.type.tripLonglineActivities=Activités +observe.type.tripLonglineActivity=Activité +observe.type.tripLonglineGearUse=Équipement +observe.type.tripLonglineGearUses=Équipements +observe.type.tripLonglines=Marées +observe.type.tripMap=Carte +observe.type.tripMaps=Cartes +observe.type.tripSeine=Marée +observe.type.tripSeineGearUse=Équipement +observe.type.tripSeineGearUses=Équipements +observe.type.tripSeines=Marées +observe.type.tripType=Type de marée +observe.type.tripTypes=Types de marée +observe.type.vessel=Bateau +observe.type.vesselActivityLongline=Activité bateau +observe.type.vesselActivityLonglines=Activités bateau +observe.type.vesselActivitySeine=Activité bateau +observe.type.vesselActivitySeines=Activités bateau +observe.type.vesselSizeCategories=Catégories de bateau +observe.type.vesselSizeCategory=Catégorie de bateau +observe.type.vesselType=Type de pêcherie +observe.type.vesselTypes=Types de pêcherie +observe.type.vessels=Bateaux +observe.type.weightCategories=Catégories de poids +observe.type.weightCategory=Catégorie de poids +observe.type.weightMeasure=Mesure de poids +observe.type.weightMeasureType=Type de mesure de poids +observe.type.weightMeasureTypes=Types de mesure de poids +observe.type.weightMeasures=Mesures de poids +observe.type.wind=Vent Beaufort +observe.type.winds=Vents Beaufort diff --git a/services-model/src/main/java/fr/ird/observe/util/ObserveUtil.java b/services-model/src/main/java/fr/ird/observe/util/ObserveUtil.java index 00b99af..dce06c7 100644 --- a/services-model/src/main/java/fr/ird/observe/util/ObserveUtil.java +++ b/services-model/src/main/java/fr/ird/observe/util/ObserveUtil.java @@ -24,8 +24,15 @@ package fr.ird.observe.util; import org.nuiton.config.ApplicationConfig; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.function.Function; /** * Pour mettre du code util commun. @@ -48,4 +55,44 @@ public class ObserveUtil { } return targetProperties; } + + public static List<Class> sortTypes(Collection<Class> types, Function<Class, String> function) { + + List<Class> list = new ArrayList<>(types); + new ClassComparator(function).sort(list); + return list; + + } + + private static class ClassComparator implements Comparator<Class> { + + private final Map<Class, String> cache; + private final Function<Class, String> function; + + private ClassComparator(Function<Class, String> function) { + this.cache = new HashMap<>(); + this.function = function; + } + + @Override + public int compare(Class o1, Class o2) { + String s1 = getValue(o1); + String s2 = getValue(o2); + return s1.compareTo(s2); + } + + String getValue(Class klass) { + String result = cache.get(klass); + if (result == null) { + result = function.apply(klass); + cache.put(klass, result); + } + return result; + } + + public void sort(List<Class> list) { + Collections.sort(list, this); + cache.clear(); + } + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.