package de.jplag; import java.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class contains methods to load {@link Language Languages}. * @author Dominik Fuchss */ public final class LanguageLoader { private static final Logger logger = LoggerFactory.getLogger(LanguageLoader.class); private LanguageLoader() { throw new IllegalAccessError(); } /** * Load all languages that are currently in the classpath.
* Please remember to invoke {@link Language#initializeLanguage(ErrorConsumer)} to initialize the language. This method * does only return prototypes. * @return the languages */ public static List loadLanguages() { List languages = new ArrayList<>(); for (Language notInitializedLanguage : ServiceLoader.load(Language.class)) { logger.info("Loading Language Frontend '{}'", notInitializedLanguage.getName()); languages.add(notInitializedLanguage); } languages.sort(Comparator.comparing(Language::getShortName)); return languages; } /** * Load a language that is currently in the classpath by its short name.
* Please remember to invoke {@link Language#initializeLanguage(ErrorConsumer)} to initialize the language. This method * does only return prototypes. * @param shortName the short name of the language * @return the language or an empty optional if no language has been found. */ public static Optional loadLanguage(String shortName) { var result = loadLanguages().stream().filter(it -> Objects.equals(it.getShortName(), shortName)).findFirst(); if (result.isEmpty()) logger.warn("Attempt to load Language {} was not successful", shortName); return result; } /** * Get a list of all available languages with their short name. * @return the list of all languages */ public static List getAllLanguageNames() { return loadLanguages().stream().map(Language::getShortName).toList(); } }