diff --git a/internationalization.markdown b/internationalization.markdown new file mode 100644 index 0000000000000000000000000000000000000000..ee3f1f12c55ddcc4298a7c3c074dd5b95f8c3c77 --- /dev/null +++ b/internationalization.markdown @@ -0,0 +1,15 @@ +``` mermaid + classDiagram + HashMap <|-- Internationalization + InternationalizationApplicationMap *-- Internationalization:internationalization + InternationalizationMap "1"-->"*" InternationalizationApplicationMap + InternationalizationMap : + InternationalizationApplicationMap application + InternationalizationMap "*"-->"*" InternationalizationReferenceMap + InternationalizationMap : + Map<String, InternationalizationReferenceMap> references + InternationalizationMap "*"-->"*" InternationalizationDataTypeMap + InternationalizationMap : + Map<String, InternationalizationDataTypeMap> references + InternationalizationDisplay + InternationalizationReferenceMap "1"-->"*" Internationalization internationalizationName + InternationalizationReferenceMap "1"-->"*" InternationalizationDisplay internationalizationDisplay + InternationalizationReferenceMap : + Map<String, InternationalizationDataTypeMap> internationalizationDisplay +``` \ No newline at end of file diff --git a/src/main/java/fr/inra/oresing/checker/CheckerFactory.java b/src/main/java/fr/inra/oresing/checker/CheckerFactory.java index a82c5ae3683d1540278734008298cad21e7fed81..f41576066d0ed8342fce3bca4d68ac27401b3a46 100644 --- a/src/main/java/fr/inra/oresing/checker/CheckerFactory.java +++ b/src/main/java/fr/inra/oresing/checker/CheckerFactory.java @@ -22,6 +22,7 @@ import org.springframework.stereotype.Component; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -72,7 +73,7 @@ public class CheckerFactory { return getLineCheckers(app, dataType, null); } - public ImmutableSet<LineChecker> getLineCheckers(Application app, String dataType, String locale) { + public ImmutableSet<LineChecker> getLineCheckers(Application app, String dataType, Locale locale) { Preconditions.checkArgument(app.getConfiguration().getDataTypes().containsKey(dataType), "Pas de type de données " + dataType + " dans " + app); Configuration.DataTypeDescription dataTypeDescription = app.getConfiguration().getDataTypes().get(dataType); ImmutableSet.Builder<LineChecker> checkersBuilder = ImmutableSet.builder(); @@ -91,7 +92,7 @@ public class CheckerFactory { return lineCheckers; } - private void parseVariableComponentdescription(Application app, String dataType, String locale, ImmutableSet.Builder<LineChecker> checkersBuilder, String variable, Configuration.ColumnDescription variableDescription, Map.Entry<String, Configuration.VariableComponentDescription> componentEntry) { + private void parseVariableComponentdescription(Application app, String dataType, Locale locale, ImmutableSet.Builder<LineChecker> checkersBuilder, String variable, Configuration.ColumnDescription variableDescription, Map.Entry<String, Configuration.VariableComponentDescription> componentEntry) { String component = componentEntry.getKey(); VariableComponentKey variableComponentKey = new VariableComponentKey(variable, component); if (variableDescription.getComponents().get(component) == null) { @@ -130,7 +131,7 @@ public class CheckerFactory { } } - private CheckerOnOneVariableComponentLineChecker getCheckerOnReferenceChecker(Application app, String dataType, String locale, Configuration.CheckerDescription checkerDescription, CheckerTarget checkerTarget, LineTransformer transformer) { + private CheckerOnOneVariableComponentLineChecker getCheckerOnReferenceChecker(Application app, String dataType, Locale locale, Configuration.CheckerDescription checkerDescription, CheckerTarget checkerTarget, LineTransformer transformer) { CheckerOnOneVariableComponentLineChecker variableComponentChecker; String refType = checkerDescription.getParams().getRefType(); ReferenceValueRepository referenceValueRepository = repository.getRepository(app).referenceValue(); diff --git a/src/main/java/fr/inra/oresing/model/Configuration.java b/src/main/java/fr/inra/oresing/model/Configuration.java index 0b1f40b27eb7d5ba9ee14d23eb53ae494364aa2f..f332751c1344b02c51f74f706cd61e18b3867d3f 100644 --- a/src/main/java/fr/inra/oresing/model/Configuration.java +++ b/src/main/java/fr/inra/oresing/model/Configuration.java @@ -5,8 +5,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.MoreCollectors; import fr.inra.oresing.checker.*; -import fr.inra.oresing.model.internationalization.Internationalization; -import fr.inra.oresing.model.internationalization.InternationalizationMap; +import fr.inra.oresing.model.internationalization.*; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -15,16 +14,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.annotation.Nullable; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.TreeMap; +import java.util.*; @Getter @Setter @@ -40,6 +30,14 @@ public class Configuration { private LinkedHashMap<String, CompositeReferenceDescription> compositeReferences = new LinkedHashMap<>(); private LinkedHashMap<String, DataTypeDescription> dataTypes = new LinkedHashMap<>(); + public InternationalizationMap getInternationalization() { + final InternationalizationMap internationalizationMap = new InternationalizationMap(); + internationalizationMap.setApplication(Optional.ofNullable(application).map(ApplicationDescription::getInternationalization).orElse(null)); + internationalizationMap.setDataTypes(Optional.ofNullable(dataTypes).map(DataTypeDescription::getInternationalization).orElse(null)); + internationalizationMap.setReferences(Optional.ofNullable(references).map(ReferenceDescription::getInternationalization).orElse(null)); + return internationalizationMap; + } + public Optional<CompositeReferenceDescription> getCompositeReferencesUsing(String reference) { return getCompositeReferences().values().stream() .filter(compositeReferenceDescription -> compositeReferenceDescription.isDependentOfReference(reference)) @@ -98,12 +96,26 @@ public class Configuration { @Getter @Setter @ToString - public static class ReferenceDescription { + public static class ReferenceDescription extends InternationalizationDisplayImpl { private char separator = ';'; private List<String> keyColumns = new LinkedList<>(); private LinkedHashMap<String, ReferenceColumnDescription> columns = new LinkedHashMap<>(); private LinkedHashMap<String, ReferenceDynamicColumnDescription> dynamicColumns = new LinkedHashMap<>(); private LinkedHashMap<String, LineValidationRuleDescription> validations = new LinkedHashMap<>(); + + public static Map<String, InternationalizationReferenceMap> getInternationalization(LinkedHashMap<String, ReferenceDescription> referenceDescriptionMap) { + Map<String, InternationalizationReferenceMap> internationalizationReferenceMap = new HashMap<>(); + for (Map.Entry<String, ReferenceDescription> entry : referenceDescriptionMap.entrySet()) { + final String reference = entry.getKey(); + final ReferenceDescription referenceDescription = entry.getValue(); + final InternationalizationReferenceMap internationalizationReference = new InternationalizationReferenceMap(); + internationalizationReference.setInternationalizationDisplay(referenceDescription.getInternationalizationDisplay()); + internationalizationReference.setInternationalizationName(referenceDescription.getInternationalizationName()); + internationalizationReference.setInternationalizedColumns(referenceDescription.getInternationalizedColumns()); + internationalizationReferenceMap.put(reference, internationalizationReference); + } + return internationalizationReferenceMap; + } } @Getter @@ -126,7 +138,7 @@ public class Configuration { @Getter @Setter @ToString - public static class CompositeReferenceDescription { + public static class CompositeReferenceDescription extends InternationalizationImpl { List<CompositeReferenceComponentDescription> components = new LinkedList<>(); public boolean isDependentOfReference(String reference) { @@ -139,7 +151,7 @@ public class Configuration { @Getter @Setter @ToString - public static class CompositeReferenceComponentDescription { + public static class CompositeReferenceComponentDescription extends InternationalizationImpl { String reference; String parentKeyColumn; String parentRecursiveKey; @@ -148,7 +160,7 @@ public class Configuration { @Getter @Setter @ToString - public static class DataTypeDescription { + public static class DataTypeDescription extends InternationalizationMapDisplayImpl { FormatDescription format; LinkedHashMap<String, ColumnDescription> data = new LinkedHashMap<>(); LinkedHashMap<String, LineValidationRuleDescription> validations = new LinkedHashMap<>(); @@ -156,6 +168,21 @@ public class Configuration { TreeMap<Integer, List<MigrationDescription>> migrations = new TreeMap<>(); AuthorizationDescription authorization; LinkedHashMap<String, String> repository = null; + + public static Map<String, InternationalizationDataTypeMap> getInternationalization(LinkedHashMap<String, DataTypeDescription> dataTypeDescriptionMap) { + Map<String, InternationalizationDataTypeMap> internationalizationDataTypeMapMap = new HashMap<>(); + for (Map.Entry<String, DataTypeDescription> entry : dataTypeDescriptionMap.entrySet()) { + final String datatype = entry.getKey(); + final DataTypeDescription dataTypeDescription = entry.getValue(); + final InternationalizationDataTypeMap internationalizationDataTypeMap = new InternationalizationDataTypeMap(); + internationalizationDataTypeMap.setInternationalizationDisplay(dataTypeDescription.getInternationalizationDisplays()); + internationalizationDataTypeMap.setInternationalizationName(dataTypeDescription.getInternationalizationName()); + internationalizationDataTypeMap.setInternationalizedColumns(dataTypeDescription.getInternationalizedColumns()); + internationalizationDataTypeMap.setAuthorization(Optional.ofNullable(dataTypeDescription.getAuthorization()).map(AuthorizationDescription::getInternationalization).orElse(null)); + internationalizationDataTypeMapMap.put(datatype, internationalizationDataTypeMap); + } + return internationalizationDataTypeMapMap; + } } @Getter @@ -171,8 +198,39 @@ public class Configuration { @ToString public static class AuthorizationDescription { VariableComponentKey timeScope; - LinkedHashMap<String, VariableComponentKey> authorizationScopes = new LinkedHashMap<>(); + LinkedHashMap<String, AuthorizationScopeDescription> authorizationScopes = new LinkedHashMap<>(); LinkedHashMap<String, DataGroupDescription> dataGroups = new LinkedHashMap<>(); + + public InternationalizationAuthorisationMap getInternationalization() { + final InternationalizationAuthorisationMap internationalizationAuthorisationMap = new InternationalizationAuthorisationMap(); + Map<String, InternationalizationAuthorisationName> authorizationScopesLocalization = new HashMap<>(); + for (Map.Entry<String, AuthorizationScopeDescription> entry : authorizationScopes.entrySet()) { + final InternationalizationAuthorisationName internationalizationAuthorisationName = new InternationalizationAuthorisationName(); + internationalizationAuthorisationName.setInternationalizationName(entry.getValue().getInternationalizationName()); + authorizationScopesLocalization.put(entry.getKey(), internationalizationAuthorisationName); + } + internationalizationAuthorisationMap.setAuthorizationScopes(authorizationScopesLocalization); + Map<String, InternationalizationAuthorisationName> datagroupsLocalization = new HashMap<>(); + for (Map.Entry<String, DataGroupDescription> entry : dataGroups.entrySet()) { + final InternationalizationAuthorisationName internationalizationAuthorisationName = new InternationalizationAuthorisationName(); + internationalizationAuthorisationName.setInternationalizationName(entry.getValue().getInternationalizationName()); + datagroupsLocalization.put(entry.getKey(), internationalizationAuthorisationName); + } + internationalizationAuthorisationMap.setDataGroups(datagroupsLocalization); + return internationalizationAuthorisationMap; + } + } + + @Getter + @Setter + @ToString + public static class AuthorizationScopeDescription extends InternationalizationImpl { + String variable; + String component; + + public VariableComponentKey getVariableComponentKey() { + return new VariableComponentKey(variable, component); + } } @Getter @@ -347,7 +405,7 @@ public class Configuration { @Getter @Setter @ToString - public static class DataGroupDescription { + public static class DataGroupDescription extends InternationalizationImpl { Internationalization internationalizationName; String label; Set<String> data = new LinkedHashSet<>(); @@ -356,11 +414,16 @@ public class Configuration { @Getter @Setter @ToString - public static class ApplicationDescription { + public static class ApplicationDescription extends InternationalizationImpl { String name; int version; - String defaultLanguage; - Internationalization internationalization; + Locale defaultLanguage; + + public InternationalizationApplicationMap getInternationalization() { + final InternationalizationApplicationMap internationalizationApplicationMap = new InternationalizationApplicationMap(); + internationalizationApplicationMap.setInternationalizationName(getInternationalizationName()); + return internationalizationApplicationMap; + } } @Getter diff --git a/src/main/java/fr/inra/oresing/model/ReferenceColumn.java b/src/main/java/fr/inra/oresing/model/ReferenceColumn.java index 6469219b78b0b94fd9e67f77d5369cf84592235e..0b942eb010714b3d8dddb5970820759f4a3ceaba 100644 --- a/src/main/java/fr/inra/oresing/model/ReferenceColumn.java +++ b/src/main/java/fr/inra/oresing/model/ReferenceColumn.java @@ -2,12 +2,14 @@ package fr.inra.oresing.model; import lombok.Value; +import java.util.Locale; + @Value public class ReferenceColumn implements SomethingToBeStoredAsJsonInDatabase<String> { String column; - public static ReferenceColumn forDisplay(String locale) { - return new ReferenceColumn("__display_" + locale); + public static ReferenceColumn forDisplay(Locale locale) { + return new ReferenceColumn("__display_" + locale.toLanguageTag()); } public String asString() { diff --git a/src/main/java/fr/inra/oresing/model/internationalization/Internationalization.java b/src/main/java/fr/inra/oresing/model/internationalization/Internationalization.java index c850e437c65db85b66ee819824f91740faa81573..1c862897d754ff40eeeddd958fc620fe17a39179 100644 --- a/src/main/java/fr/inra/oresing/model/internationalization/Internationalization.java +++ b/src/main/java/fr/inra/oresing/model/internationalization/Internationalization.java @@ -4,8 +4,9 @@ import lombok.Getter; import lombok.Setter; import java.util.LinkedHashMap; +import java.util.Locale; @Getter @Setter -public class Internationalization extends LinkedHashMap<String, String> { +public class Internationalization extends LinkedHashMap<Locale, String> { } \ No newline at end of file diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationApplicationMap.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationApplicationMap.java index 32f76e515f05a32ca8a64362d1d2647e7f28082f..e5e647b273aff0aabb5fdb2c826e36c4b30d0601 100644 --- a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationApplicationMap.java +++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationApplicationMap.java @@ -6,5 +6,5 @@ import lombok.Setter; @Getter @Setter public class InternationalizationApplicationMap { - Internationalization internationalization; + Internationalization internationalizationName; } \ No newline at end of file diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDataTypeMap.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDataTypeMap.java index cf421bb3da4a981ebf5d837892fe38dad9b3b891..28410175eb88735411ad9b1dca5faa8332614a0e 100644 --- a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDataTypeMap.java +++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDataTypeMap.java @@ -7,7 +7,7 @@ import java.util.Map; @Getter @Setter -public class InternationalizationDataTypeMap { +public class InternationalizationDataTypeMap { Internationalization internationalizationName; Map<String, Internationalization> internationalizedColumns; InternationalizationAuthorisationMap authorization; diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplay.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplay.java index 5ecf041b313652cfad9c64dcc4e08a719367157c..9668e5e4a1e7898c4b1a1dab9dab5faf5514e06c 100644 --- a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplay.java +++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplay.java @@ -9,6 +9,7 @@ import lombok.Setter; import org.assertj.core.util.Strings; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -17,10 +18,10 @@ import java.util.stream.Stream; @Getter @Setter public class InternationalizationDisplay { - Map<String, String> pattern; + Map<Locale, String> pattern; public static ReferenceDatum getDisplays(ReferenceImporterContext referenceImporterContext, ReferenceDatum refValues) { - Optional<Map<String, String>> displayPattern =referenceImporterContext.getDisplayPattern(); + Optional<Map<Locale, String>> displayPattern =referenceImporterContext.getDisplayPattern(); Map<String, Internationalization> displayColumns = referenceImporterContext.getDisplayColumns(); String refType = referenceImporterContext.getRefType(); ReferenceDatum displays = new ReferenceDatum(); @@ -37,7 +38,7 @@ public class InternationalizationDisplay { if (displayColumns.containsKey(referencedColumn)) { referencedColumn = displayColumns.get(referencedColumn).getOrDefault(stringEntry.getKey(), referencedColumn); } - internationalizedPattern += refValues.get(new ReferenceColumn(referencedColumn)).toValueString(referenceImporterContext, referencedColumn, stringEntry.getKey()); + internationalizedPattern += refValues.get(new ReferenceColumn(referencedColumn)); } return internationalizedPattern; } diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplayImpl.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplayImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..25b223029ee498fd4f10b32c90d3a5227382b381 --- /dev/null +++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationDisplayImpl.java @@ -0,0 +1,12 @@ +package fr.inra.oresing.model.internationalization; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +public class InternationalizationDisplayImpl extends InternationalizationImpl{ + InternationalizationDisplay internationalizationDisplay; +} \ No newline at end of file diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationImpl.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..c7fda5bb463c1c6a08ad6de99d27a5a1f4de541f --- /dev/null +++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationImpl.java @@ -0,0 +1,15 @@ +package fr.inra.oresing.model.internationalization; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Map; + +@Getter +@Setter +@ToString +public class InternationalizationImpl { + Internationalization internationalizationName; + Map<String, Internationalization> internationalizedColumns; +} \ No newline at end of file diff --git a/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationMapDisplayImpl.java b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationMapDisplayImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..d205f322e0f064b0ac979ba3625c46274c594053 --- /dev/null +++ b/src/main/java/fr/inra/oresing/model/internationalization/InternationalizationMapDisplayImpl.java @@ -0,0 +1,14 @@ +package fr.inra.oresing.model.internationalization; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Map; + +@Getter +@Setter +@ToString +public class InternationalizationMapDisplayImpl extends InternationalizationImpl{ + Map<String, InternationalizationDisplay> internationalizationDisplays; +} \ No newline at end of file diff --git a/src/main/java/fr/inra/oresing/persistence/ReferenceValueRepository.java b/src/main/java/fr/inra/oresing/persistence/ReferenceValueRepository.java index 3c9a7bd74f3227af9052c57715f1dedf5d218ec2..cd972696f210ebae5eb0d0aff8ad240752060e05 100644 --- a/src/main/java/fr/inra/oresing/persistence/ReferenceValueRepository.java +++ b/src/main/java/fr/inra/oresing/persistence/ReferenceValueRepository.java @@ -3,7 +3,12 @@ package fr.inra.oresing.persistence; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterators; -import fr.inra.oresing.model.*; +import fr.inra.oresing.model.Application; +import fr.inra.oresing.model.ReferenceColumn; +import fr.inra.oresing.model.ReferenceColumnSingleValue; +import fr.inra.oresing.model.ReferenceColumnValue; +import fr.inra.oresing.model.ReferenceDatum; +import fr.inra.oresing.model.ReferenceValue; import fr.inra.oresing.rest.ApplicationResult; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -17,6 +22,7 @@ import org.springframework.util.MultiValueMap; import java.sql.PreparedStatement; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; @@ -151,7 +157,7 @@ public class ReferenceValueRepository extends JsonTableInApplicationSchemaReposi return result; } - public ImmutableMap<Ltree, ApplicationResult.Reference.ReferenceUUIDAndDisplay> getReferenceIdAndDisplayPerKeys(String referenceType, String locale) { + public ImmutableMap<Ltree, ApplicationResult.Reference.ReferenceUUIDAndDisplay> getReferenceIdAndDisplayPerKeys(String referenceType, Locale locale) { Function<ReferenceValue, ApplicationResult.Reference.ReferenceUUIDAndDisplay> referenceValueToReferenceUuidAndDisplayFunction = result -> { ReferenceDatum referenceDatum = result.getRefValues(); ReferenceColumn referenceColumnForDisplay = ReferenceColumn.forDisplay(locale); diff --git a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java index 600a939b0450bd2247b465e04c017678492058a2..50a56dcebba561eb99a9f798e3424de20529449e 100644 --- a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java +++ b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java @@ -2,7 +2,6 @@ package fr.inra.oresing.rest; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.exc.InvalidFormatException; import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; @@ -18,7 +17,10 @@ import fr.inra.oresing.groovy.GroovyExpression; import fr.inra.oresing.model.Configuration; import fr.inra.oresing.model.LocalDateTimeRange; import fr.inra.oresing.model.VariableComponentKey; -import fr.inra.oresing.model.internationalization.*; +import fr.inra.oresing.model.internationalization.InternationalizationDataTypeMap; +import fr.inra.oresing.model.internationalization.InternationalizationDisplay; +import fr.inra.oresing.model.internationalization.InternationalizationMap; +import fr.inra.oresing.model.internationalization.InternationalizationReferenceMap; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -36,50 +38,10 @@ import java.util.stream.Stream; @Component @Slf4j public class ApplicationConfigurationService { - public static final List<String> INTERNATIONALIZED_FIELDS = List.of("internationalization", "internationalizationName", "internationalizedColumns", "internationalizationDisplay"); - - Map<String, Map> getInternationalizedSections(Map<String, Object> toParse, List<IllegalArgumentException> exceptions) { - Map<String, Map> parsedMap = new LinkedHashMap<>(); - Iterator<Map.Entry<String, Object>> iterator = toParse.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry<String, Object> entry = iterator.next(); - String key = entry.getKey(); - Object value = entry.getValue(); - if (INTERNATIONALIZED_FIELDS.contains(key)) { - value = formatSection((Map<String, Object>) value, exceptions); - parsedMap.put(key, (Map) value); - iterator.remove(); - } else if (value instanceof Map) { - Map<String, Map> internationalizedSections = getInternationalizedSections((Map<String, Object>) value, exceptions); - if (!internationalizedSections.isEmpty()) { - parsedMap.put(key, internationalizedSections); - } - } - } - return parsedMap; - } + public static final List INTERNATIONALIZED_FIELDS = List.of("internationalization", "internationalizationName", "internationalizedColumns", "internationalizationDisplay"); - private Object formatSection(Map<String, Object> value, List<IllegalArgumentException> exceptions) { - try { - return new ObjectMapper().convertValue(value, Internationalization.class); - } catch (IllegalArgumentException e) { - Map<String, Object> internationalizationMap = new HashMap<>(); - for (Map.Entry<String, Object> entry : value.entrySet()) { - try { - internationalizationMap.put(entry.getKey(), new ObjectMapper().convertValue(entry.getValue(), Internationalization.class)); - } catch (IllegalArgumentException e2) { - try { - internationalizationMap.put(entry.getKey(), new ObjectMapper().convertValue(entry.getValue(), InternationalizationDisplay.class)); - } catch (IllegalArgumentException e3) { - exceptions.add(e2); - } - } - } - return internationalizationMap; - } - } - ConfigurationParsingResult unzipConfiguration(MultipartFile file) { + ConfigurationParsingResult unzipConfiguration(MultipartFile file){ return null; } @@ -114,23 +76,8 @@ public class ApplicationConfigurationService { Configuration configuration; try { YAMLMapper mapper = new YAMLMapper(); - Map<String, Object> mappedObject = (Map<String, Object>) mapper.readValue(bytes, Object.class); - List<IllegalArgumentException> exceptions = List.of(); - internationalizedSections = getInternationalizedSections(mappedObject, exceptions); - try { - configuration = mapper.convertValue(mappedObject, Configuration.class); - configuration.setInternationalization(mapper.convertValue(internationalizedSections, InternationalizationMap.class)); - } catch (IllegalArgumentException e) { - if (e.getCause() instanceof UnrecognizedPropertyException) { - throw (UnrecognizedPropertyException) e.getCause(); - } else if (e.getCause() instanceof InvalidFormatException) { - throw (InvalidFormatException) e.getCause(); - } else if (e.getCause() instanceof JsonProcessingException) { - throw (JsonProcessingException) e.getCause(); - } else { - throw e; - } - } + configuration = mapper.readValue(bytes, Configuration.class); + } catch (UnrecognizedPropertyException e) { return onUnrecognizedPropertyException(e); } catch (InvalidFormatException e) { @@ -154,10 +101,10 @@ public class ApplicationConfigurationService { } for (Map.Entry<String, Configuration.ReferenceDescription> referenceEntry : configuration.getReferences().entrySet()) { - verifyReferenceKeyColumns(builder, referenceEntry); + verifyReferenceKeyColumns( builder, referenceEntry); verifyInternationalizedColumnsExists(configuration, builder, referenceEntry); verifyInternationalizedColumnsExistsForPattern(configuration, builder, referenceEntry); - verifyValidationCheckersAreValids(builder, referenceEntry, references); + verifyValidationCheckersAreValids( builder, referenceEntry, references); } for (Map.Entry<String, Configuration.DataTypeDescription> entry : configuration.getDataTypes().entrySet()) { @@ -180,7 +127,7 @@ public class ApplicationConfigurationService { VariableComponentKey timeScopeVariableComponentKey = authorization.getTimeScope(); verifyDatatypeTimeScopeExistsAndIsValid(builder, dataType, dataTypeDescription, variables, timeScopeVariableComponentKey); - LinkedHashMap<String, VariableComponentKey> authorizationScopesVariableComponentKey = authorization.getAuthorizationScopes(); + LinkedHashMap<String, Configuration.AuthorizationScopeDescription> authorizationScopesVariableComponentKey = authorization.getAuthorizationScopes(); verifyDatatypeAuthorizationScopeExistsAndIsValid(builder, dataType, configuration, variables, authorizationScopesVariableComponentKey); requiredAuthorizationsAttributesBuilder.addAll(authorizationScopesVariableComponentKey.keySet()); } @@ -368,12 +315,15 @@ public class ApplicationConfigurationService { } } - private void verifyDatatypeAuthorizationScopeExistsAndIsValid(ConfigurationParsingResult.Builder builder, String dataType, Configuration configuration, Set<String> variables, LinkedHashMap<String, VariableComponentKey> authorizationScopesVariableComponentKey) { + private void verifyDatatypeAuthorizationScopeExistsAndIsValid(ConfigurationParsingResult.Builder builder, String dataType, Configuration configuration, Set<String> variables, LinkedHashMap<String, Configuration.AuthorizationScopeDescription> authorizationScopesVariableComponentKey) { if (authorizationScopesVariableComponentKey == null || authorizationScopesVariableComponentKey.isEmpty()) { builder.recordMissingAuthorizationScopeVariableComponentKey(dataType); } else { Configuration.DataTypeDescription dataTypeDescription = configuration.getDataTypes().get(dataType); - authorizationScopesVariableComponentKey.forEach((authorizationScopeName, authorizationScopeVariableComponentKey) -> { + authorizationScopesVariableComponentKey.entrySet().stream().forEach(authorizationScopeVariableComponentKeyEntry -> { + String authorizationScopeName = authorizationScopeVariableComponentKeyEntry.getKey(); + Configuration.AuthorizationScopeDescription authorizationScopeDescription = authorizationScopeVariableComponentKeyEntry.getValue(); + VariableComponentKey authorizationScopeVariableComponentKey = authorizationScopeDescription.getVariableComponentKey(); if (authorizationScopeVariableComponentKey.getVariable() == null) { builder.recordAuthorizationScopeVariableComponentKeyMissingVariable(dataType, authorizationScopeName, variables); } else { @@ -554,11 +504,11 @@ public class ApplicationConfigurationService { if (internationalization != null) { Map<String, fr.inra.oresing.model.internationalization.InternationalizationReferenceMap> references = internationalization.getReferences(); if (references != null) { - fr.inra.oresing.model.internationalization.InternationalizationReferenceMap orDefault = references.getOrDefault(reference, null); - if (orDefault != null) { - InternationalizationDisplay internationalizationDisplay = orDefault.getInternationalizationDisplay(); + fr.inra.oresing.model.internationalization.InternationalizationReferenceMap internationalizationReferenceMap = references.getOrDefault(reference, null); + if (internationalizationReferenceMap != null) { + InternationalizationDisplay internationalizationDisplay = internationalizationReferenceMap.getInternationalizationDisplay(); if (internationalizationDisplay != null) { - Map<String, String> patterns = internationalizationDisplay.getPattern(); + Map<Locale, String> patterns = internationalizationDisplay.getPattern(); if (patterns != null) { internationalizedColumnsForDisplay = patterns.values() .stream() @@ -803,5 +753,4 @@ public class ApplicationConfigurationService { int version; } - } \ No newline at end of file diff --git a/src/main/java/fr/inra/oresing/rest/DownloadDatasetQuery.java b/src/main/java/fr/inra/oresing/rest/DownloadDatasetQuery.java index 81fb6934279e5930b2b53ef90a52c44dd63e91e5..3521d45ac1bbaff5740dc86e83f3679821d89f18 100644 --- a/src/main/java/fr/inra/oresing/rest/DownloadDatasetQuery.java +++ b/src/main/java/fr/inra/oresing/rest/DownloadDatasetQuery.java @@ -3,6 +3,7 @@ package fr.inra.oresing.rest; import fr.inra.oresing.checker.CheckerTarget; import fr.inra.oresing.checker.DateLineChecker; import fr.inra.oresing.model.Application; +import fr.inra.oresing.model.Configuration; import fr.inra.oresing.model.VariableComponentKey; import fr.inra.oresing.persistence.DataRow; import lombok.Getter; @@ -105,6 +106,7 @@ public class DownloadDatasetQuery { ); getApplication().getConfiguration().getDataTypes().get(getDataType()).getAuthorization().getAuthorizationScopes().values() .stream() + .map(Configuration.AuthorizationScopeDescription::getVariableComponentKey) .forEach(vck -> variableComponentKeySet.add( new VariableComponentOrderBy(vck, Order.ASC) )); diff --git a/src/main/java/fr/inra/oresing/rest/OreSiResources.java b/src/main/java/fr/inra/oresing/rest/OreSiResources.java index d0215b833cb6de860ba15744afb59f3980a1c27a..a72d179fe0f0d9374f110bf2db29d9925563408e 100644 --- a/src/main/java/fr/inra/oresing/rest/OreSiResources.java +++ b/src/main/java/fr/inra/oresing/rest/OreSiResources.java @@ -262,7 +262,10 @@ public class OreSiResources { LinkedHashSet<String> orderedVariables = buildOrderedVariables(nameOrId, dataType); DownloadDatasetQuery downloadDatasetQuery = deserialiseParamDownloadDatasetQuery(params); - String locale = downloadDatasetQuery != null && downloadDatasetQuery.getLocale() != null ? downloadDatasetQuery.getLocale() : LocaleContextHolder.getLocale().getLanguage(); + Locale locale = Optional.ofNullable(downloadDatasetQuery) + .map(DownloadDatasetQuery::getLocale) + .map(Locale::new) + .orElseGet(LocaleContextHolder::getLocale); List<DataRow> list = service.findData(downloadDatasetQuery, nameOrId, dataType); ImmutableSet<String> variables = list.stream() .limit(1) @@ -340,7 +343,7 @@ public class OreSiResources { private FileOrUUID deserialiseFileOrUUIDQuery(String datatype, String params) { try { - FileOrUUID fileOrUUID = params != null && params != "undefined" ? new ObjectMapper().readValue(params, FileOrUUID.class) : null; + FileOrUUID fileOrUUID = params != null && params !="undefined" ? new ObjectMapper().readValue(params, FileOrUUID.class) : null; Optional<BinaryFileDataset> binaryFileDatasetOpt = Optional.ofNullable(fileOrUUID) .map(fileOrUUID1 -> fileOrUUID.binaryfiledataset); if ( @@ -359,7 +362,7 @@ public class OreSiResources { try { BinaryFileDataset binaryFileDataset = params != null ? new ObjectMapper().readValue(params, BinaryFileDataset.class) : null; Optional<BinaryFileDataset> binaryFileDatasetOpt = Optional.ofNullable(binaryFileDataset); - if (binaryFileDatasetOpt.map(binaryFileDataset1 -> binaryFileDataset1.getDatatype()).isEmpty()) { + if (binaryFileDatasetOpt.map(binaryFileDataset1 -> binaryFileDataset1.getDatatype()).isEmpty()) { binaryFileDatasetOpt.ifPresent(binaryFileDataset1 -> binaryFileDataset1.setDatatype(datatype)); } return binaryFileDataset; diff --git a/src/main/java/fr/inra/oresing/rest/OreSiService.java b/src/main/java/fr/inra/oresing/rest/OreSiService.java index d4754bc5bfe8f7f15807650f926d267fce706895..20cb24524ed3505410768b83ade9c0b990f3172a 100644 --- a/src/main/java/fr/inra/oresing/rest/OreSiService.java +++ b/src/main/java/fr/inra/oresing/rest/OreSiService.java @@ -43,10 +43,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.time.Duration; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneOffset; +import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; @@ -718,7 +715,8 @@ public class OreSiService { LocalDateTimeRange timeScope = LocalDateTimeRange.parse(timeScopeValue, timeScopeDateLineChecker); Map<String, String> requiredAuthorizations = new LinkedHashMap<>(); - dataTypeDescription.getAuthorization().getAuthorizationScopes().forEach((authorizationScope, variableComponentKey) -> { + dataTypeDescription.getAuthorization().getAuthorizationScopes().forEach((authorizationScope, authorizationScopeDescription) -> { + VariableComponentKey variableComponentKey = authorizationScopeDescription.getVariableComponentKey(); String requiredAuthorization = datum.get(variableComponentKey); Ltree.checkSyntax(requiredAuthorization); requiredAuthorizations.put(authorizationScope, requiredAuthorization); @@ -1116,7 +1114,8 @@ public class OreSiService { List<String> variableComponentsFromRepository = new LinkedList<>(); if (requiredAuthorizations != null) { for (Map.Entry<String, String> entry : requiredAuthorizations.entrySet()) { - VariableComponentKey variableComponentKey = dataTypeDescription.getAuthorization().getAuthorizationScopes().get(entry.getKey()); + Configuration.AuthorizationScopeDescription authorizationScopeDescription = dataTypeDescription.getAuthorization().getAuthorizationScopes().get(entry.getKey()); + VariableComponentKey variableComponentKey = authorizationScopeDescription.getVariableComponentKey(); String value = entry.getValue(); defaultValueExpressionsBuilder.put(variableComponentKey, StringGroovyExpression.forExpression("\"" + value + "\"")); variableComponentsFromRepository.add(variableComponentKey.getId()); @@ -1227,7 +1226,7 @@ public class OreSiService { .build(); } - public Map<String, Map<String, LineChecker>> getcheckedFormatVariableComponents(String nameOrId, String dataType, String locale) { + public Map<String, Map<String, LineChecker>> getcheckedFormatVariableComponents(String nameOrId, String dataType, Locale locale) { return checkerFactory.getLineCheckers(getApplication(nameOrId), dataType, locale) .stream() .filter(c -> (c instanceof DateLineChecker) || (c instanceof IntegerChecker) || (c instanceof FloatChecker) || (c instanceof ReferenceLineChecker)) @@ -1358,7 +1357,7 @@ public class OreSiService { return applicationConfigurationService.parseConfigurationBytes(file.getBytes()); } - public Map<String, Map<String, Map<String, String>>> getEntitiesTranslation(String nameOrId, String locale, String datatype, Map<String, Map<String, LineChecker>> checkedFormatVariableComponents) { + public Map<String, Map<String, Map<String, String>>> getEntitiesTranslation(String nameOrId, Locale locale, String datatype, Map<String, Map<String, LineChecker>> checkedFormatVariableComponents) { Application application = getApplication(nameOrId); return Optional.ofNullable(application) .map(a -> a.getConfiguration()) diff --git a/src/main/java/fr/inra/oresing/rest/ReferenceImporterContext.java b/src/main/java/fr/inra/oresing/rest/ReferenceImporterContext.java index 8d5eadc3341d88e49fcd25f47678598994318571..9bf8885d6771803b2df07135a93defcb83febbb4 100644 --- a/src/main/java/fr/inra/oresing/rest/ReferenceImporterContext.java +++ b/src/main/java/fr/inra/oresing/rest/ReferenceImporterContext.java @@ -2,22 +2,10 @@ package fr.inra.oresing.rest; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.MoreCollectors; -import com.google.common.collect.SetMultimap; +import com.google.common.collect.*; import fr.inra.oresing.checker.LineChecker; import fr.inra.oresing.checker.ReferenceLineChecker; -import fr.inra.oresing.model.ColumnPresenceConstraint; -import fr.inra.oresing.model.Configuration; -import fr.inra.oresing.model.ReferenceColumn; -import fr.inra.oresing.model.ReferenceColumnIndexedValue; -import fr.inra.oresing.model.ReferenceColumnMultipleValue; -import fr.inra.oresing.model.ReferenceColumnSingleValue; -import fr.inra.oresing.model.ReferenceColumnValue; -import fr.inra.oresing.model.ReferenceDatum; +import fr.inra.oresing.model.*; import fr.inra.oresing.model.internationalization.Internationalization; import fr.inra.oresing.model.internationalization.InternationalizationDisplay; import fr.inra.oresing.model.internationalization.InternationalizationMap; @@ -36,16 +24,19 @@ import java.util.stream.Collectors; */ @AllArgsConstructor public class ReferenceImporterContext { + private static final String COMPOSITE_NATURAL_KEY_COMPONENTS_SEPARATOR = "__"; private final Constants constants; /** * Tous les {@link LineChecker} qui s'appliquent sur chaque ligne à importer */ private final ImmutableSet<LineChecker> lineCheckers; + /** * Les clés techniques de chaque clé naturelle hiérarchique de toutes les lignes existantes en base (avant l'import) */ private final ImmutableMap<Ltree, UUID> storedReferences; + private final ImmutableMap<String, Column> columnsPerHeader; Map<String, Map<String, Map<String, String>>> displayByReferenceAndNaturalKey; @@ -182,7 +173,7 @@ public class ReferenceImporterContext { return column.getCsvCellContent(referenceDatum); } - public Optional<Map<String, String>> getDisplayPattern() { + public Optional<Map<Locale, String>> getDisplayPattern() { return constants.getDisplayPattern(); } @@ -205,10 +196,10 @@ public class ReferenceImporterContext { private final String refType; private final Optional<InternationalizationReferenceMap> internationalizationReferenceMap; private final Map<String, Internationalization> displayColumns; - private final Optional<Map<String, String>> displayPattern; + private final Optional<Map<Locale, String>> displayPattern; private final HierarchicalKeyFactory hierarchicalKeyFactory; - private final Optional<Map<String, List<String>>> patternColumns; - private final Optional<Map<String, List<InternationalizationDisplay.PatternSection>>> patternSection; + private final Optional<Map<Locale, List<String>>> patternColumns; + private final Optional<Map<Locale, List<InternationalizationDisplay.PatternSection>>> patternSection; Constants constants; public Constants(UUID applicationId, Configuration conf, String refType, ReferenceValueRepository referenceValueRepository) { @@ -241,7 +232,7 @@ public class ReferenceImporterContext { .orElseGet(HashMap::new); } - private Optional<Map<String, String>> buildDisplayPattern() { + private Optional<Map<Locale, String>> buildDisplayPattern() { return this.internationalizationReferenceMap .map(InternationalizationReferenceMap::getInternationalizationDisplay) .map(InternationalizationDisplay::getPattern); @@ -253,12 +244,12 @@ public class ReferenceImporterContext { return hierarchicalKeyFactory; } - private Optional<Map<String, List<InternationalizationDisplay.PatternSection>>> buildPatternSection() { + private Optional<Map<Locale, List<InternationalizationDisplay.PatternSection>>> buildPatternSection() { return displayPattern .map(dp -> dp.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, k -> InternationalizationDisplay.parsePattern(k.getValue())))); } - private Optional<Map<String, List<String>>> buildPatternColumns() { + private Optional<Map<Locale, List<String>>> buildPatternColumns() { return displayPattern .map(dp -> dp.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, k -> InternationalizationDisplay.getPatternColumns(k.getValue())))); } @@ -283,7 +274,7 @@ public class ReferenceImporterContext { return displayColumns; } - public Optional<Map<String, String>> getDisplayPattern() { + public Optional<Map<Locale, String>> getDisplayPattern() { return displayPattern; } @@ -291,11 +282,11 @@ public class ReferenceImporterContext { return hierarchicalKeyFactory; } - public Optional<Map<String, List<String>>> getPatternColumns() { + public Optional<Map<Locale, List<String>>> getPatternColumns() { return patternColumns; } - public Optional<Map<String, List<InternationalizationDisplay.PatternSection>>> getPatternSection() { + public Optional<Map<Locale, List<InternationalizationDisplay.PatternSection>>> getPatternSection() { return patternSection; } } diff --git a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java index 207ba4dbe964cff8d5169f4a75282e3d291ec1eb..519004526edd850101d9bf56cade97d912644ca2 100644 --- a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java +++ b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java @@ -365,6 +365,9 @@ public class ApplicationConfigurationServiceTest { ValidationCheckResult onlyError = Iterables.getOnlyElement(configurationParsingResult.getValidationCheckResults()); log.debug(onlyError.getMessage()); Assert.assertEquals("unrecognizedProperty", onlyError.getMessage()); + Assert.assertEquals(9, onlyError.getMessageParams().get("lineNumber")); + Assert.assertEquals(3, onlyError.getMessageParams().get("columnNumber")); + Assert.assertEquals("compositReference", onlyError.getMessageParams().get("unknownPropertyName")); } @Test @@ -452,8 +455,8 @@ public class ApplicationConfigurationServiceTest { @Test public void testUnknownReferenceInInternationalizationDisplayPatternInDatatype() { - ConfigurationParsingResult configurationParsingResult = parseYaml("internationalizationDisplay:\n" + - " sites:", "internationalizationDisplay:\n" + + ConfigurationParsingResult configurationParsingResult = parseYaml("internationalizationDisplays:\n" + + " sites:", "internationalizationDisplays:\n" + " plateforme:"); Assert.assertFalse(configurationParsingResult.isValid()); ValidationCheckResult onlyError = Iterables.getOnlyElement(configurationParsingResult.getValidationCheckResults()); diff --git a/src/test/resources/data/foret/foret_essai.yaml b/src/test/resources/data/foret/foret_essai.yaml index a7467c4a2faf6778b1a9eaf9b1981d039f213f89..b41b67846f323a53c6e4a02be4df8bc93d74a970 100644 --- a/src/test/resources/data/foret/foret_essai.yaml +++ b/src/test/resources/data/foret/foret_essai.yaml @@ -2,6 +2,9 @@ version: 0 application: name: foret version: 1 + internationalizationName: + fr: ORE F-ORE-T + en: ORE F-ORE-T compositeReferences: localizations: components: diff --git a/src/test/resources/data/monsore/monsore-with-repository.yaml b/src/test/resources/data/monsore/monsore-with-repository.yaml index 596fd33fac89e97b88ea0e0fe7cef7ebd731aab6..13818fc880504757db07b5e23774d344fac908ae 100644 --- a/src/test/resources/data/monsore/monsore-with-repository.yaml +++ b/src/test/resources/data/monsore/monsore-with-repository.yaml @@ -1,7 +1,7 @@ version: 0 application: defaultLanguage: fr - internationalization: + internationalizationName: fr: SOERE mon SOERE avec dépôt en: SOERE my SOERE with repository name: MONSORE @@ -347,7 +347,7 @@ dataTypes: internationalizationName: fr: Piégeage en Montée en: Trap in ascent - internationalizationDisplay: + internationalizationDisplays: especes: pattern: fr: 'espèce :{esp_nom}' diff --git a/src/test/resources/data/monsore/monsore.yaml b/src/test/resources/data/monsore/monsore.yaml index ce613e5b114a629a5dab8dd360f2d104cf4ca0f1..bd9eedb49d8c07ef2c35ec9ea6488c97edad2c06 100644 --- a/src/test/resources/data/monsore/monsore.yaml +++ b/src/test/resources/data/monsore/monsore.yaml @@ -1,7 +1,7 @@ version: 0 application: defaultLanguage: fr - internationalization: + internationalizationName: fr: SOERE mon SOERE avec dépôt en: SOERE my SOERE with repository name: MONSORE @@ -347,7 +347,7 @@ dataTypes: internationalizationName: fr: Piégeage en Montée en: Trap in ascent - internationalizationDisplay: + internationalizationDisplays: especes: pattern: fr: 'espèce :{esp_nom}' diff --git a/src/test/resources/data/olac/olac.yaml b/src/test/resources/data/olac/olac.yaml index 22e1c44582244434c9806c40929e756ab6dd612f..740d0f52bb5c3b27a73bd88a829dc501e37c6e17 100644 --- a/src/test/resources/data/olac/olac.yaml +++ b/src/test/resources/data/olac/olac.yaml @@ -1,7 +1,7 @@ version: 0 application: defaultLanguage: fr - internationalization: + internationalizationName: fr: Observatoire des lacs en: Lake observatory name: ola diff --git a/src/test/resources/data/recursivite/recusivite.yaml b/src/test/resources/data/recursivite/recusivite.yaml index 927fd64a9bd64024585513884494675268f0fdd8..413548f572985f54921bba87d7126462ee2ebf05 100644 --- a/src/test/resources/data/recursivite/recusivite.yaml +++ b/src/test/resources/data/recursivite/recusivite.yaml @@ -1,7 +1,7 @@ version: 0 application: defaultLanguage: fr - internationalization: + internationalizationName: fr: Récursivité en: recusivity name: recursivite diff --git a/src/test/resources/data/validation/fake-app.yaml b/src/test/resources/data/validation/fake-app.yaml index 92400598cb66089e1125b1a10deafef071c44b3e..1d5fde143e613bd7a32f0d2a16ea7934a17a9f0c 100644 --- a/src/test/resources/data/validation/fake-app.yaml +++ b/src/test/resources/data/validation/fake-app.yaml @@ -2,6 +2,9 @@ version: 0 application: name: Sites version: 1 + internationalizationName: + fr: Fausse application + en: Fake application compositeReferences: localizations: components: @@ -89,7 +92,7 @@ dataTypes: internationalizationName: fr: Le site en: the good place - internationalizationDisplay: + internationalizationDisplays: sites: pattern: fr: 'le nom du site {nom du site_fr}'