ErrorTypeUtils.java
package fr.inrae.agroclim.indicators.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import fr.inrae.agroclim.indicators.exception.ErrorType;
import fr.inrae.agroclim.indicators.resources.I18n;
/**
* Helper methods to ensure all implementations of {@link ErrorType} are well defined.
*
* @author Olivier Maury
*/
public interface ErrorTypeUtils {
/**
* Get duplicated codes for the Enum.
*
* @param clazz enum class
* @return duplicated codes
*/
static Set<String> getDuplicatedCodes(final Class<? extends Enum<?>> clazz) {
final Set<String> duplicates = new HashSet<>();
final Set<String> codes = new HashSet<>();
final Enum<?>[] values = clazz.getEnumConstants();
for (final Enum<?> value : values) {
final ErrorType k = (ErrorType) value;
if (codes.contains(k.getSubCode())) {
duplicates.add(k.getSubCode());
}
codes.add(k.getSubCode());
}
return duplicates;
}
/**
* Get missing translations for the Enum in the bundle for the locales.
*
* @param clazz enum class
* @param bundleName bundle name for the Properties file.
* @param locales locales of translations
* @return missing translations
*/
static Map<Locale, Map<Class<?>, List<String>>> getMissingTranslations(final Class<? extends Enum<?>> clazz,
final String bundleName, final List<Locale> locales) {
final Map<Locale, Map<Class<?>, List<String>>> missing = new HashMap<>();
for (final Locale locale : locales) {
final I18n i18n = new I18n(bundleName, locale);
final Enum<?>[] values = clazz.getEnumConstants();
for (final Enum<?> value : values) {
final ErrorType k = (ErrorType) value;
final String tr = i18n.get(k.getI18nKey());
if (tr.startsWith("!") && tr.endsWith("!")) {
missing.computeIfAbsent(locale, l -> new HashMap<>());
missing.get(locale).computeIfAbsent(clazz, l -> new ArrayList<>());
missing.get(locale).get(clazz).add(k.getI18nKey());
}
}
}
return missing;
}
}