1
22
23 package com.liferay.portal.kernel.util;
24
25 import java.io.Serializable;
26
27 import java.util.Collection;
28 import java.util.HashSet;
29 import java.util.Map;
30 import java.util.Set;
31
32
38 public abstract class MultiValueMap
39 <K extends Serializable, V extends Serializable> implements Map<K, V> {
40
41 public Set<Map.Entry<K, V>> entrySet() {
42 throw new UnsupportedOperationException();
43 }
44
45 public V get(Object key) {
46 throw new UnsupportedOperationException();
47 }
48
49 public abstract Set<V> getAll(Object key);
50
51 public abstract Set<V> putAll(K key, Collection<? extends V> values);
52
53 public void putAll(Map<? extends K, ? extends V> map) {
54 MultiValueMap<? extends K, ? extends V> multiValueMap = null;
55
56 if (map instanceof MultiValueMap) {
57 multiValueMap = (MultiValueMap<? extends K, ? extends V>)map;
58 }
59
60 for (K key : map.keySet()) {
61 if (multiValueMap != null) {
62 putAll(key, multiValueMap.getAll(key));
63 }
64 else {
65 put(key, map.get(key));
66 }
67 }
68 }
69
70 public int size() {
71 int size = 0;
72
73 for (K key : keySet()) {
74 size += size(key);
75 }
76
77 return size;
78 }
79
80 public int size(Object key) {
81 int size = 0;
82
83 Collection<V> values = getAll(key);
84
85 if (values != null) {
86 size = values.size();
87 }
88
89 return size;
90 }
91
92 public Collection<V> values() {
93 Set<V> values = new HashSet<V>();
94
95 Set<K> keys = keySet();
96
97 for (K key : keys) {
98 values.addAll(getAll(key));
99 }
100
101 return values;
102 }
103
104 }