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