001 package com.softnetConsult.utils.collections;
002
003 import java.util.ArrayList;
004 import java.util.Collection;
005
006
007 /**
008 * Extends the default Java {@code ArrayList} by exposing its already present
009 * method {@code removeRange} for public access.
010 *
011 * <p style="font-size:smaller;">This product includes software developed by the
012 * <strong>SoftNet-Consult Java Utility Library</strong> project and its contributors.<br />
013 * (<a href="http://java-tools.sourceforge.net" target="_blank">http://java-tools.sourceforge.net</a>)<br />
014 * Copyright (c) 2007-2008 SoftNet-Consult.<br />
015 * Copyright (c) 2007-2008 G. Paperin.<br />
016 * All rights reserved.
017 * </p>
018 * <p style="font-size:smaller;">File: ArrayListRemovableRange.java<br />
019 * Library API version: {@value com.softnetConsult.utils.APIProperties#apiVersion}<br />
020 * Java compliance version: {@value com.softnetConsult.utils.APIProperties#javaComplianceVersion}
021 * </p>
022 * <p style="font-size:smaller;">Redistribution and use in source and binary forms, with or
023 * without modification, are permitted provided that the following terms and conditions are met:
024 * </p>
025 * <p style="font-size:smaller;">1. Redistributions of source code must retain the above
026 * acknowledgement of the SoftNet-Consult Java Utility Library project, the above copyright
027 * notice, this list of conditions and the following disclaimer.<br />
028 * 2. Redistributions in binary form must reproduce the above acknowledgement of the
029 * SoftNet-Consult Java Utility Library project, the above copyright notice, this list of
030 * conditions and the following disclaimer in the documentation and/or other materials
031 * provided with the distribution.<br />
032 * 3. All advertising materials mentioning features or use of this software or any derived
033 * software must display the following acknowledgement:<br />
034 * <em>This product includes software developed by the SoftNet-Consult Java Utility Library
035 * project and its contributors.</em>
036 * </p>
037 * <p style="font-size:smaller;">THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY
038 * OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
039 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
040 * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
041 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
042 * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
043 * </p>
044 * @author Greg Paperin (<a href="http://www.paperin.org" target="_blank">http://www.paperin.org</a>)
045 * @version {@value com.softnetConsult.utils.APIProperties#apiVersion}
046 *
047 * @param <E> The type of the array-list elements.
048 */
049 public class ArrayListRemovableRange<E> extends ArrayList<E> {
050
051 /**
052 * Constructs an empty list.
053 *
054 * @see ArrayList#ArrayList()
055 */
056 public ArrayListRemovableRange() {
057 super();
058 }
059
060 /**
061 * Constructs an empty list with the specified initial capacity.
062 *
063 * @param initialCapacity The initial capacity of the list.
064 * @see ArrayList#ArrayList(int)
065 */
066 public ArrayListRemovableRange(int initialCapacity) {
067 super(initialCapacity);
068 }
069
070 /**
071 * Constructs a list containing the elements of the specified collection,
072 * in the order they are returned by the collection's iterator.
073 *
074 * @param c The collection whose elements are to be placed into this list.
075 * @see ArrayList#ArrayList(Collection)
076 */
077 public ArrayListRemovableRange(Collection<? extends E> c) {
078 super(c);
079 }
080
081 /**
082 * Removes from this list all of the elements whose index is between fromIndex, inclusive,
083 * and toIndex, exclusive. Shifts any succeeding elements to the left (reduces their index).
084 * This call shortens the list by (toIndex - fromIndex) elements.
085 * (If toIndex==fromIndex, this operation has no effect.)
086 *
087 * @param fromIndex Index of first element to be removed.
088 * @param toIndex Index after last element to be removed.
089 * @throws IndexOutOfBoundsException If fromIndex or toIndex out of range
090 * {@code (fromIndex < 0 || fromIndex >= size() || toIndex > size() || toIndex < fromIndex)}
091 */
092 @Override
093 public void removeRange(int fromIndex, int toIndex) {
094
095 if (fromIndex < 0 || fromIndex >= size())
096 throw new IndexOutOfBoundsException("Invalid index: " + fromIndex);
097
098 if (toIndex > size() || toIndex < fromIndex)
099 throw new IndexOutOfBoundsException("Invalid index: " + toIndex);
100
101 super.removeRange(fromIndex, toIndex);
102 }
103
104 } // public class ArrayListRemovableRange<E>