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

de.digitalcollections.model.identifiable.alias.LocalizedUrlAliases Maven / Gradle / Ivy

package de.digitalcollections.model.identifiable.alias;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;

public class LocalizedUrlAliases extends HashMap> {

  /** Default constructor, is needed by Jackson */
  public LocalizedUrlAliases() {
    super();
  }

  public LocalizedUrlAliases(UrlAlias... urlAliases) {
    super();
    this.add(urlAliases);
  }

  public LocalizedUrlAliases(List urlAliases) {
    this(urlAliases.toArray(UrlAlias[]::new));
  }

  public void add(UrlAlias... urlAliases) {
    if (urlAliases == null) {
      return;
    }
    for (UrlAlias urlAlias : urlAliases) {
      if (urlAlias == null) {
        continue;
      }
      if (urlAlias.getTargetLanguage() == null) {
        throw new IllegalArgumentException(
            "Missing mandatory targetLanguage for urlAlias=" + urlAlias);
      }
      this.compute(
          urlAlias.getTargetLanguage(),
          (locale, listOfAliases) -> {
            if (listOfAliases == null) {
              listOfAliases = new ArrayList<>();
            }
            listOfAliases.add(urlAlias);
            return listOfAliases;
          });
    }
  }

  /**
   * @param urlAlias url alias to be checked
   * @return true if the passed {@code UrlAlias} is contained in any of the locale specific lists
   */
  public boolean containsUrlAlias(UrlAlias urlAlias) {
    return this.flatten().contains(urlAlias);
  }

  @Override
  public boolean equals(Object o) {
    if (o == this) {
      return true;
    }
    if (o == null || !(o instanceof LocalizedUrlAliases)) {
      return false;
    }
    LocalizedUrlAliases other = (LocalizedUrlAliases) o;
    try {
      if (this.flatten().size() != other.flatten().size()) {
        return false;
      }
      return flatten().containsAll(other.flatten());
    } catch (NullPointerException | ClassCastException unused) {
      return false;
    }
  }

  /**
   * Flatten this map to a list.
   *
   * @return list containing all {@code UrlAlias}es from this object
   */
  public List flatten() {
    return this.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
  }

  public List getTargetLanguages() {
    return new ArrayList<>(this.keySet());
  }

  public boolean hasTargetLanguage(Locale locale) {
    return this.containsKey(locale);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy