package tc.oc.commons.core.localization; import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.annotation.Nullable; import com.google.common.collect.ForwardingMap; /** * {@link Map} adapter that passes keys through a {@link LocaleMatcher} * before looking them up in the delegated map. */ public class LocaleMap<V> extends ForwardingMap<Locale, V> { private final LocaleMatcher matcher; private final Map<Locale, V> map; public LocaleMap(Map<Locale, V> map) { this.map = map; this.matcher = new LocaleMatcher(Locales.DEFAULT_LOCALE, map.keySet()); } public LocaleMap() { this(new HashMap<>()); } @Override protected Map<Locale, V> delegate() { return map; } @Override public V get(@Nullable Object key) { return key instanceof Locale ? super.get(matcher.closestMatchFor((Locale) key)) : null; } @Override public boolean containsKey(@Nullable Object key) { return key instanceof Locale && super.containsKey(matcher.closestMatchFor((Locale) key)); } }