package com.constellio.data.utils; import java.io.Serializable; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; public class KeySetMap<K, V> implements Serializable { Map<K, Set<V>> map = new HashMap<>(); public KeySetMap() { } public KeySetMap(KeySetMap<K, V> filters) { for (Entry<K, Set<V>> entry : filters.getMapEntries()) { Set<V> values = new HashSet<>(entry.getValue()); map.put(entry.getKey(), values); } } public void addAll(K key, List<V> values) { for (V value : values) { add(key, value); } } public void add(K key, V value) { Set<V> values = map.get(key); if (values == null) { values = new HashSet<>(); map.put(key, values); } values.add(value); } public void remove(V key) { map.remove(key); } public Set<V> get(K key) { Set<V> values = map.get(key); if (values == null) { values = new HashSet<>(); map.put(key, values); } return values; } public Set<Entry<K, Set<V>>> getMapEntries() { return map.entrySet(); } public Map<K, Set<V>> getNestedMap() { return map; } public void set(K key, Set<V> values) { map.put(key, values); } public boolean contains(K key) { return map.containsKey(key); } public void clear() { map.clear(); } public void remove(V key, V value) { if (map.containsKey(key)) { map.get(key).remove(value); } } public boolean isEmpty() { return map.isEmpty(); } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } @Override public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } public void putAll(Map<K, Set<V>> values) { getNestedMap().putAll(values); } }