1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   * SOFTWARE.
18   */
19  
20  package com.liferay.portal.util;
21  
22  import com.liferay.portal.kernel.util.MultiValueMap;
23  
24  import java.io.Serializable;
25  
26  import java.util.Collection;
27  import java.util.HashMap;
28  import java.util.HashSet;
29  import java.util.Map;
30  import java.util.Set;
31  
32  /**
33   * <a href="MemoryMultiValueMap.java.html"><b><i>View Source</i></b></a>
34   *
35   * @author Alexander Chow
36   *
37   */
38  public class MemoryMultiValueMap<K extends Serializable, V extends Serializable>
39      extends MultiValueMap<K, V> {
40  
41      public void clear() {
42          _map.clear();
43      }
44  
45      public boolean containsKey(Object key) {
46          return _map.containsKey(key);
47      }
48  
49      public boolean containsValue(Object value) {
50          for (K key : keySet()) {
51              Set<V> values = getAll(key);
52  
53              if (values.contains(value)) {
54                  return true;
55              }
56          }
57  
58          return false;
59      }
60  
61      public Set<V> getAll(Object key) {
62          return _map.get(key);
63      }
64  
65      public boolean isEmpty() {
66          return _map.isEmpty();
67      }
68  
69      public Set<K> keySet() {
70          return _map.keySet();
71      }
72  
73      public V put(K key, V value) {
74          Set<V> values = _map.get(key);
75  
76          if (values == null) {
77              values = new HashSet<V>();
78          }
79  
80          values.add(value);
81  
82          _map.put(key, values);
83  
84          return value;
85      }
86  
87      public Set<V> putAll(K key, Collection<? extends V> values) {
88          Set<V> oldValues = _map.get(key);
89  
90          if (oldValues == null) {
91              oldValues = new HashSet<V>();
92          }
93  
94          oldValues.addAll(values);
95  
96          _map.put(key, oldValues);
97  
98          return oldValues;
99      }
100 
101     public V remove(Object key) {
102         V value = null;
103 
104         Set<V> values = _map.remove(key);
105 
106         if ((values != null) && !values.isEmpty()) {
107             value = values.iterator().next();
108         }
109 
110         return value;
111     }
112 
113     private Map<K, Set<V>> _map = new HashMap<K, Set<V>>();
114 
115 }