001 /*--------------------------------------------------------------------------+
002 $Id: UnmodifiableHashedListMap.java 26283 2010-02-18 11:18:57Z juergens $
003 | |
004 | Copyright 2005-2010 Technische Universitaet Muenchen |
005 | |
006 | Licensed under the Apache License, Version 2.0 (the "License"); |
007 | you may not use this file except in compliance with the License. |
008 | You may obtain a copy of the License at |
009 | |
010 | http://www.apache.org/licenses/LICENSE-2.0 |
011 | |
012 | Unless required by applicable law or agreed to in writing, software |
013 | distributed under the License is distributed on an "AS IS" BASIS, |
014 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
015 | See the License for the specific language governing permissions and |
016 | limitations under the License. |
017 +--------------------------------------------------------------------------*/
018 package edu.tum.cs.commons.collections;
019
020 import java.util.List;
021
022 /**
023 * This is a wrapper for a {@link HashedListMap} prohibiting all calls that
024 * would modify its contents. As the construction of this class is performed in
025 * constant time it is prefered over copying the collection (which takes linear
026 * time). All prohibited methods throw an {@link UnsupportedOperationException}.
027 *
028 * @author Florian Deissenboeck
029 * @author $Author: juergens $
030 *
031 * @version $Revision: 26283 $
032 * @levd.rating GREEN Hash: DF82643A09598C2B595F267F0B8E66AA
033 */
034 public class UnmodifiableHashedListMap<K, I> extends HashedListMap<K, I> {
035
036 /** The wrapped list. */
037 private final HashedListMap<K, I> map;
038
039 /**
040 * Create new unmodifiable hashed list map.
041 *
042 * @param map
043 * the map to wrap
044 * @throws IllegalArgumentException
045 * if map is <code>null</code>
046 */
047 public UnmodifiableHashedListMap(HashedListMap<K, I> map) {
048 if (map == null) {
049 throw new IllegalArgumentException(
050 "Underlying map may not be null!");
051 }
052 this.map = map;
053 }
054
055 /**
056 * Operation is not supported.
057 *
058 * @throws UnsupportedOperationException
059 */
060 @Override
061 public List<I> createList(K key) {
062 throw new UnsupportedOperationException();
063 }
064
065 /**
066 * {@inheritDoc}
067 */
068 @Override
069 public UnmodifiableList<I> getList(K key) {
070 List<I> list = map.getList(key);
071 if (list == null) {
072 return null;
073 }
074 return CollectionUtils.asUnmodifiable(list);
075 }
076
077 /**
078 * Operation is not supported.
079 *
080 * @throws UnsupportedOperationException
081 */
082 @Override
083 public void add(K key, I item) {
084 throw new UnsupportedOperationException();
085 }
086
087 /**
088 * {@inheritDoc}
089 */
090 @Override
091 public boolean containsList(K key) {
092 return map.containsList(key);
093 }
094
095 /**
096 * {@inheritDoc}
097 */
098 @Override
099 public UnmodifiableSet<K> getKeys() {
100 return CollectionUtils.asUnmodifiable(map.getKeys());
101 }
102
103 /**
104 * {@inheritDoc}
105 */
106 @Override
107 public UnmodifiableList<I> getValues() {
108 return CollectionUtils.asUnmodifiable(map.getValues());
109 }
110
111 }