001: /*
002: * Copyright 2003-2004 The Apache Software Foundation
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.apache.commons.collections.list;
017:
018: import java.util.Collection;
019: import java.util.Iterator;
020: import java.util.List;
021: import java.util.ListIterator;
022:
023: import org.apache.commons.collections.Unmodifiable;
024: import org.apache.commons.collections.iterators.UnmodifiableIterator;
025: import org.apache.commons.collections.iterators.UnmodifiableListIterator;
026:
027: /**
028: * Decorates another <code>List</code> to ensure it can't be altered.
029: * <p>
030: * This class is Serializable from Commons Collections 3.1.
031: *
032: * @since Commons Collections 3.0
033: * @version $Revision: 155406 $ $Date: 2005-02-26 12:55:26 +0000 (Sat, 26 Feb 2005) $
034: *
035: * @author Stephen Colebourne
036: */
037: public final class UnmodifiableList extends
038: AbstractSerializableListDecorator implements Unmodifiable {
039:
040: /** Serialization version */
041: private static final long serialVersionUID = 6595182819922443652L;
042:
043: /**
044: * Factory method to create an unmodifiable list.
045: *
046: * @param list the list to decorate, must not be null
047: * @throws IllegalArgumentException if list is null
048: */
049: public static List decorate(List list) {
050: if (list instanceof Unmodifiable) {
051: return list;
052: }
053: return new UnmodifiableList(list);
054: }
055:
056: //-----------------------------------------------------------------------
057: /**
058: * Constructor that wraps (not copies).
059: *
060: * @param list the list to decorate, must not be null
061: * @throws IllegalArgumentException if list is null
062: */
063: private UnmodifiableList(List list) {
064: super (list);
065: }
066:
067: //-----------------------------------------------------------------------
068: public Iterator iterator() {
069: return UnmodifiableIterator
070: .decorate(getCollection().iterator());
071: }
072:
073: public boolean add(Object object) {
074: throw new UnsupportedOperationException();
075: }
076:
077: public boolean addAll(Collection coll) {
078: throw new UnsupportedOperationException();
079: }
080:
081: public void clear() {
082: throw new UnsupportedOperationException();
083: }
084:
085: public boolean remove(Object object) {
086: throw new UnsupportedOperationException();
087: }
088:
089: public boolean removeAll(Collection coll) {
090: throw new UnsupportedOperationException();
091: }
092:
093: public boolean retainAll(Collection coll) {
094: throw new UnsupportedOperationException();
095: }
096:
097: //-----------------------------------------------------------------------
098: public ListIterator listIterator() {
099: return UnmodifiableListIterator.decorate(getList()
100: .listIterator());
101: }
102:
103: public ListIterator listIterator(int index) {
104: return UnmodifiableListIterator.decorate(getList()
105: .listIterator(index));
106: }
107:
108: public void add(int index, Object object) {
109: throw new UnsupportedOperationException();
110: }
111:
112: public boolean addAll(int index, Collection coll) {
113: throw new UnsupportedOperationException();
114: }
115:
116: public Object remove(int index) {
117: throw new UnsupportedOperationException();
118: }
119:
120: public Object set(int index, Object object) {
121: throw new UnsupportedOperationException();
122: }
123:
124: public List subList(int fromIndex, int toIndex) {
125: List sub = getList().subList(fromIndex, toIndex);
126: return new UnmodifiableList(sub);
127: }
128:
129: }
|