| /* |
| * Conditions Of Use |
| * |
| * This software was developed by employees of the National Institute of |
| * Standards and Technology (NIST), an agency of the Federal Government. |
| * Pursuant to title 15 Untied States Code Section 105, works of NIST |
| * employees are not subject to copyright protection in the United States |
| * and are considered to be in the public domain. As a result, a formal |
| * license is not needed to use the software. |
| * |
| * This software is provided by NIST as a service and is expressly |
| * provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED |
| * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT |
| * AND DATA ACCURACY. NIST does not warrant or make any representations |
| * regarding the use of the software or the results thereof, including but |
| * not limited to the correctness, accuracy, reliability or usefulness of |
| * the software. |
| * |
| * Permission to use this software is contingent upon your acceptance |
| * of the terms of this agreement. |
| * |
| */ |
| package gov.nist.core; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| public class MultiValueMapImpl<V> implements MultiValueMap<String, V>, Cloneable { |
| private HashMap<String, ArrayList<V>> map = new HashMap<String, ArrayList<V>>(); |
| |
| private static final long serialVersionUID = 4275505380960964605L; |
| |
| public MultiValueMapImpl() { |
| super(); |
| |
| } |
| |
| public List<V> put(String key, V value) { |
| ArrayList<V> keyList = map.get(key); |
| if (keyList == null) { |
| keyList = new ArrayList<V>(10); |
| map.put(key, keyList); |
| } |
| |
| keyList.add(value); |
| return keyList; |
| } |
| |
| public boolean containsValue(Object value) { |
| Set pairs = map.entrySet(); |
| |
| if (pairs == null) |
| return false; |
| |
| Iterator pairsIterator = pairs.iterator(); |
| while (pairsIterator.hasNext()) { |
| Map.Entry keyValuePair = (Map.Entry) (pairsIterator.next()); |
| ArrayList list = (ArrayList) (keyValuePair.getValue()); |
| if (list.contains(value)) |
| return true; |
| } |
| return false; |
| } |
| |
| public void clear() { |
| Set pairs = map.entrySet(); |
| Iterator pairsIterator = pairs.iterator(); |
| while (pairsIterator.hasNext()) { |
| Map.Entry keyValuePair = (Map.Entry) (pairsIterator.next()); |
| ArrayList list = (ArrayList) (keyValuePair.getValue()); |
| list.clear(); |
| } |
| map.clear(); |
| } |
| |
| public Collection values() { |
| ArrayList returnList = new ArrayList(map.size()); |
| |
| Set pairs = map.entrySet(); |
| Iterator pairsIterator = pairs.iterator(); |
| while (pairsIterator.hasNext()) { |
| Map.Entry keyValuePair = (Map.Entry) (pairsIterator.next()); |
| ArrayList list = (ArrayList) (keyValuePair.getValue()); |
| |
| Object[] values = list.toArray(); |
| for (int ii = 0; ii < values.length; ii++) { |
| returnList.add(values[ii]); |
| } |
| } |
| return returnList; |
| } |
| |
| public Object clone() { |
| MultiValueMapImpl obj = new MultiValueMapImpl<V>(); |
| obj.map = (HashMap<Object, ArrayList<V>>) this.map.clone(); |
| return obj; |
| } |
| |
| public int size() { |
| return this.map.size(); |
| } |
| |
| public boolean containsKey(Object key) { |
| return map.containsKey(key); |
| } |
| |
| public Set entrySet() { |
| return map.entrySet(); |
| } |
| |
| public boolean isEmpty() { |
| return map.isEmpty(); |
| } |
| |
| public Set<String> keySet() { |
| return this.map.keySet(); |
| } |
| |
| // remove(K, V) conflicts with a Map method added in 1.8. http://b/27426743 |
| /*public Object remove(String key, V item) { |
| ArrayList<V> list = this.map.get(key); |
| if (list == null) { |
| return null; |
| } else { |
| return list.remove(item); |
| } |
| }*/ |
| |
| public List<V> get(Object key) { |
| return map.get(key); |
| } |
| |
| public List<V> put(String key, List<V> value) { |
| return this.map.put(key,(ArrayList<V>) value); |
| } |
| |
| public List<V> remove(Object key) { |
| return map.remove(key); |
| } |
| |
| public void putAll(Map< ? extends String, ? extends List<V>> mapToPut) { |
| for (String k : mapToPut.keySet()) { |
| ArrayList<V> al = new ArrayList<V>(); |
| al.addAll(mapToPut.get(k)); |
| this.map.put(k, al); |
| } |
| } |
| |
| } |