// Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. // https://developers.google.com/protocol-buffers/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package com.google.protobuf; import java.util.AbstractList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.RandomAccess; /** * An implementation of {@link LazyStringList} that wraps another * {@link LazyStringList} such that it cannot be modified via the wrapper. * * @author jonp@google.com (Jon Perlow) */ public class UnmodifiableLazyStringList extends AbstractList<String> implements LazyStringList, RandomAccess { private final LazyStringList list; public UnmodifiableLazyStringList(LazyStringList list) { this.list = list; } @Override public String get(int index) { return list.get(index); } @Override public Object getRaw(int index) { return list.getRaw(index); } @Override public int size() { return list.size(); } @Override public ByteString getByteString(int index) { return list.getByteString(index); } @Override public void add(ByteString element) { throw new UnsupportedOperationException(); } @Override public void set(int index, ByteString element) { throw new UnsupportedOperationException(); } @Override public boolean addAllByteString(Collection<? extends ByteString> element) { throw new UnsupportedOperationException(); } @Override public byte[] getByteArray(int index) { return list.getByteArray(index); } @Override public void add(byte[] element) { throw new UnsupportedOperationException(); } @Override public void set(int index, byte[] element) { throw new UnsupportedOperationException(); } @Override public boolean addAllByteArray(Collection<byte[]> element) { throw new UnsupportedOperationException(); } @Override public ListIterator<String> listIterator(final int index) { return new ListIterator<String>() { ListIterator<String> iter = list.listIterator(index); @Override public boolean hasNext() { return iter.hasNext(); } @Override public String next() { return iter.next(); } @Override public boolean hasPrevious() { return iter.hasPrevious(); } @Override public String previous() { return iter.previous(); } @Override public int nextIndex() { return iter.nextIndex(); } @Override public int previousIndex() { return iter.previousIndex(); } @Override public void remove() { throw new UnsupportedOperationException(); } @Override public void set(String o) { throw new UnsupportedOperationException(); } @Override public void add(String o) { throw new UnsupportedOperationException(); } }; } @Override public Iterator<String> iterator() { return new Iterator<String>() { Iterator<String> iter = list.iterator(); @Override public boolean hasNext() { return iter.hasNext(); } @Override public String next() { return iter.next(); } @Override public void remove() { throw new UnsupportedOperationException(); } }; } @Override public List<?> getUnderlyingElements() { // The returned value is already unmodifiable. return list.getUnderlyingElements(); } @Override public void mergeFrom(LazyStringList other) { throw new UnsupportedOperationException(); } @Override public List<byte[]> asByteArrayList() { return Collections.unmodifiableList(list.asByteArrayList()); } @Override public List<ByteString> asByteStringList() { return Collections.unmodifiableList(list.asByteStringList()); } @Override public LazyStringList getUnmodifiableView() { return this; } }