All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.ultreia.java4all.i18n.spi.I18nModuleDefinition Maven / Gradle / Ivy

package io.ultreia.java4all.i18n.spi;

/*-
 * #%L
 * I18n :: Spi
 * %%
 * Copyright (C) 2018 Code Lutin, Ultreia.io
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 *
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * Describe a i18n module.
 * 

* For each maven module using i18n mojo, a implementation of this class wil be generated and added as service. *

* Created by tchemit on 25/10/2018. * * @author Tony Chemit - [email protected] */ public class I18nModuleDefinition extends I18nCoordinate { /** * Module key sets. */ private final List moduleKeySetDefinitions; /** * Dependencies key sets. */ private final List dependenciesKeySetDefinitions; /** * Module translation sets. */ private final List moduleTranslationSetDefinitions; /** * Dependencies translation sets. */ private final List dependenciesTranslationSetDefinitions; /** * Module template sets. */ private final List moduleTemplateSetDefinitions; /** * Dependencies template sets. */ private final List dependenciesTemplateSetDefinitions; public I18nModuleDefinition(String packageName, String moduleName, String[] moduleGetters, String[] dependenciesGetters, String[] moduleTranslations, String[] dependenciesTranslations, String[] moduleTemplates, String[] dependenciesTemplates) { super(packageName, moduleName); this.moduleKeySetDefinitions = new LinkedList<>(); this.dependenciesKeySetDefinitions = new LinkedList<>(); this.moduleTranslationSetDefinitions = new LinkedList<>(); this.dependenciesTranslationSetDefinitions = new LinkedList<>(); this.moduleTemplateSetDefinitions = new LinkedList<>(); this.dependenciesTemplateSetDefinitions = new LinkedList<>(); Arrays.stream(moduleGetters).map(I18nKeySetDefinition::newKey).forEachOrdered(this.moduleKeySetDefinitions::add); Arrays.stream(dependenciesGetters).map(I18nKeySetDefinition::newKey).forEachOrdered(this.dependenciesKeySetDefinitions::add); Arrays.stream(moduleTranslations).map(I18nTranslationSetDefinition::translationSetListFromCoordinate).forEachOrdered(this.moduleTranslationSetDefinitions::addAll); Arrays.stream(dependenciesTranslations).map(I18nTranslationSetDefinition::translationSetListFromCoordinate).forEachOrdered(this.dependenciesTranslationSetDefinitions::addAll); Arrays.stream(moduleTemplates).map(I18nTemplateDefinition::templateListFromCoordinate).forEachOrdered(this.moduleTemplateSetDefinitions::addAll); Arrays.stream(dependenciesTemplates).map(I18nTemplateDefinition::templateListFromCoordinate).forEachOrdered(this.dependenciesTemplateSetDefinitions::addAll); } public static List detect(ClassLoader classLoader) { List result = new LinkedList<>(); for (I18nModuleDefinition i18nModuleDefinition : ServiceLoader.load(I18nModuleDefinition.class, classLoader)) { result.add(i18nModuleDefinition); } return result; } public boolean isContainsModuleKeySets() { return !moduleKeySetDefinitions.isEmpty(); } public boolean isContainsDependenciesKeySets() { return !dependenciesKeySetDefinitions.isEmpty(); } public boolean isContainsModuleTemplateSets() { return !moduleTemplateSetDefinitions.isEmpty(); } public boolean isContainsDependenciesTemplateSets() { return !dependenciesTemplateSetDefinitions.isEmpty(); } public boolean isContainsModuleTranslationSets() { return !moduleTranslationSetDefinitions.isEmpty(); } public boolean isContainsDependenciesTranslationSets() { return !dependenciesTranslationSetDefinitions.isEmpty(); } public List getModuleKeySetDefinitions() { return moduleKeySetDefinitions; } public List getDependenciesKeySetDefinitions() { return dependenciesKeySetDefinitions; } public List getModuleTranslationSetDefinitions() { return moduleTranslationSetDefinitions; } public Set getModuleTranslationSetLocales() { return moduleTranslationSetDefinitions.stream().map(I18nLocalizedResource::getLocale).collect(Collectors.toSet()); } public List getDependenciesTranslationSetDefinitions() { return dependenciesTranslationSetDefinitions; } public List getModuleTemplateSetDefinitions() { return moduleTemplateSetDefinitions; } public List getDependenciesTemplateSetDefinitions() { return dependenciesTemplateSetDefinitions; } @Override public String toString() { String moduleKeySetDefinitions = getModuleKeySetDefinitions().stream().map(I18nKeySetDefinition::getId).collect(Collectors.joining(" ")); String dependenciesKeySetDefinitions = getDependenciesKeySetDefinitions().stream().map(I18nKeySetDefinition::getId).collect(Collectors.joining(" ")); String moduleTemplateSetDefinitions = getModuleTemplateSetDefinitions().stream().map(I18nTemplateDefinition::getId).collect(Collectors.joining(" ")); String dependenciesTemplateSetDefinitions = getDependenciesTemplateSetDefinitions().stream().map(I18nTemplateDefinition::getId).collect(Collectors.joining(" ")); String moduleTranslationDefinitions = getModuleTranslationSetDefinitions().stream().map(I18nTranslationSetDefinition::getId).map(Object::toString).collect(Collectors.joining(" ")); String dependenciesTranslationDefinitions = getDependenciesTranslationSetDefinitions().stream().map(I18nTranslationSetDefinition::getId).map(Object::toString).collect(Collectors.joining(" ")); return "I18nModuleDefinition{" + "moduleId='" + getId() + '\'' + (moduleKeySetDefinitions.isEmpty() ? "" : "module.keySets='" + moduleKeySetDefinitions + '\'') + (dependenciesKeySetDefinitions.isEmpty() ? "" : "dependencies.keySets='" + dependenciesKeySetDefinitions + '\'') + (moduleTranslationDefinitions.isEmpty() ? "" : "module.translation='" + moduleTranslationDefinitions + '\'') + (dependenciesTranslationDefinitions.isEmpty() ? "" : "dependencies.translation='" + dependenciesTranslationDefinitions + '\'') + (moduleTemplateSetDefinitions.isEmpty() ? "" : "module.templateSets='" + moduleTemplateSetDefinitions + '\'') + (dependenciesTemplateSetDefinitions.isEmpty() ? "" : "dependencies.templateSets='" + dependenciesTemplateSetDefinitions + '\'') + '}'; } public Set getModuleTranslationSetDefinitions(Locale locale) { return moduleTranslationSetDefinitions.stream().filter(d -> locale.equals(d.getLocale())).collect(Collectors.toSet()); } public Set getModuleTemplateSetDefinitions(Locale locale) { return moduleTemplateSetDefinitions.stream().filter(d -> locale.equals(d.getLocale())).collect(Collectors.toSet()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy