ELanguage.java

package fr.avenirsesr.portfolio.api.domain.model.enums;

import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public enum ELanguage {
  FRENCH("fr_FR"),
  ENGLISH("en_US"),
  SPANISH("es_ES");

  private final String code;

  public static final ELanguage FALLBACK = FRENCH;

  ELanguage(String code) {
    this.code = code;
  }

  public String getCode() {
    return code;
  }

  private static final Map<String, ELanguage> BY_CODE =
      Arrays.stream(values()).collect(Collectors.toMap(ELanguage::getCode, Function.identity()));

  public static ELanguage fromCode(String code) {
    var lang = Optional.ofNullable(BY_CODE.get(code));

    if (lang.isEmpty()) {
      log.error("Unknown language code: {} - using fallback language {}", code, FALLBACK);
    }

    return lang.orElse(FALLBACK);
  }
}