LanguageLoader.java 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package de.jplag;
  2. import java.util.*;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. /**
  6. * This class contains methods to load {@link Language Languages}.
  7. * @author Dominik Fuchss
  8. */
  9. public final class LanguageLoader {
  10. private static final Logger logger = LoggerFactory.getLogger(LanguageLoader.class);
  11. private LanguageLoader() {
  12. throw new IllegalAccessError();
  13. }
  14. /**
  15. * Load all languages that are currently in the classpath.<br>
  16. * Please remember to invoke {@link Language#initializeLanguage(ErrorConsumer)} to initialize the language. This method
  17. * does only return prototypes.
  18. * @return the languages
  19. */
  20. public static List<Language> loadLanguages() {
  21. List<Language> languages = new ArrayList<>();
  22. for (Language notInitializedLanguage : ServiceLoader.load(Language.class)) {
  23. logger.info("Loading Language Frontend '{}'", notInitializedLanguage.getName());
  24. languages.add(notInitializedLanguage);
  25. }
  26. languages.sort(Comparator.comparing(Language::getShortName));
  27. return languages;
  28. }
  29. /**
  30. * Load a language that is currently in the classpath by its short name.<br>
  31. * Please remember to invoke {@link Language#initializeLanguage(ErrorConsumer)} to initialize the language. This method
  32. * does only return prototypes.
  33. * @param shortName the short name of the language
  34. * @return the language or an empty optional if no language has been found.
  35. */
  36. public static Optional<Language> loadLanguage(String shortName) {
  37. var result = loadLanguages().stream().filter(it -> Objects.equals(it.getShortName(), shortName)).findFirst();
  38. if (result.isEmpty())
  39. logger.warn("Attempt to load Language {} was not successful", shortName);
  40. return result;
  41. }
  42. /**
  43. * Get a list of all available languages with their short name.
  44. * @return the list of all languages
  45. */
  46. public static List<String> getAllLanguageNames() {
  47. return loadLanguages().stream().map(Language::getShortName).toList();
  48. }
  49. }