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