• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.testng.collections;
2 
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.HashSet;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.Set;
9 
10 public abstract class MultiMap<K, V, C extends Collection<V>> {
11   protected final Map<K, C> m_objects = Maps.newHashMap();
12 
createValue()13   protected abstract C createValue();
14 
put(K key, V method)15   public boolean put(K key, V method) {
16     boolean setExists = true;
17     C l = m_objects.get(key);
18     if (l == null) {
19       setExists = false;
20       l = createValue();
21       m_objects.put(key, l);
22     }
23     return l.add(method) && setExists;
24   }
25 
get(K key)26   public C get(K key) {
27     return m_objects.get(key);
28   }
29 
30   @Deprecated
getKeys()31   public List<K> getKeys() {
32     return new ArrayList<>(keySet());
33   }
34 
keySet()35   public Set<K> keySet() {
36     return new HashSet(m_objects.keySet());
37   }
38 
containsKey(K k)39   public boolean containsKey(K k) {
40     return m_objects.containsKey(k);
41   }
42 
43   @Override
toString()44   public String toString() {
45     StringBuilder result = new StringBuilder();
46     Set<K> indices = keySet();
47     for (K i : indices) {
48       result.append("\n    ").append(i).append(" <-- ");
49       for (Object o : m_objects.get(i)) {
50         result.append(o).append(" ");
51       }
52     }
53     return result.toString();
54   }
55 
isEmpty()56   public boolean isEmpty() {
57     return m_objects.size() == 0;
58   }
59 
60   @Deprecated
getSize()61   public int getSize() {
62     return size();
63   }
64 
size()65   public int size() {
66     return m_objects.size();
67   }
68 
69   @Deprecated
remove(K key)70   public C remove(K key) {
71     return removeAll(key);
72   }
73 
remove(K key, V value)74   public boolean remove(K key, V value) {
75     C values = get(key);
76     if (values == null) {
77       return false;
78     }
79     return values.remove(value);
80   }
81 
removeAll(K key)82   public C removeAll(K key) {
83     return m_objects.remove(key);
84   }
85 
86   @Deprecated
getEntrySet()87   public Set<Map.Entry<K, C>> getEntrySet() {
88     return entrySet();
89   }
90 
entrySet()91   public Set<Map.Entry<K, C>> entrySet() {
92     return m_objects.entrySet();
93   }
94 
95   @Deprecated
getValues()96   public Collection<C> getValues() {
97     return values();
98   }
99 
values()100   public Collection<C> values() {
101     return m_objects.values();
102   }
103 
putAll(K k, Collection<? extends V> values)104   public boolean putAll(K k, Collection<? extends V> values) {
105     boolean result = false;
106     for (V v : values) {
107       result = put(k, v) || result;
108     }
109     return result;
110   }
111 }
112