View Javadoc

    1   // ========================================================================
    2   // Copyright 1999-2005 Mort Bay Consulting Pty. Ltd.
    3   // ------------------------------------------------------------------------
    4   // Licensed under the Apache License, Version 2.0 (the "License");
    5   // you may not use this file except in compliance with the License.
    6   // You may obtain a copy of the License at
    7   // http://www.apache.org/licenses/LICENSE-2.0
    8   // Unless required by applicable law or agreed to in writing, software
    9   // distributed under the License is distributed on an "AS IS" BASIS,
    10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  // ========================================================================
    14
    15  package org.mortbay.util;
    16  import java.util.AbstractList;
    17  import java.util.Iterator;
    18  import java.util.ListIterator;
    19  import java.util.NoSuchElementException;
    20
    21  /* ------------------------------------------------------------ */
    22  /** Singleton List.
    23   * This simple efficient implementation of a List with a single
    24   * element is provided for JDK 1.2 JVMs, which do not provide
    25   * the Collections.singletonList method.
    26   *
    27   * @author Greg Wilkins (gregw)
    28   */
    29  public class SingletonList extends AbstractList
    30  {
    31      private Object o;
    32
    33      /* ------------------------------------------------------------ */
    34      private SingletonList(Object o)
    35      {
    36          this.o=o;
    37      }
    38
    39      /* ------------------------------------------------------------ */
    40      public static SingletonList newSingletonList(Object o)
    41      {
    42          return new SingletonList(o);
    43      }
    44
    45      /* ------------------------------------------------------------ */
    46      public Object get(int i)
    47      {
    48          if (i!=0)
    49              throw new IndexOutOfBoundsException("index "+i);
    50          return o;
    51      }
    52
    53      /* ------------------------------------------------------------ */
    54      public int size()
    55      {
    56          return 1;
    57      }
    58
    59      /* ------------------------------------------------------------ */
    60      public ListIterator listIterator()
    61      {
    62          return new SIterator();
    63      }
    64
    65      /* ------------------------------------------------------------ */
    66      public ListIterator listIterator(int i)
    67      {
    68          return new SIterator(i);
    69      }
    70
    71      /* ------------------------------------------------------------ */
    72      public Iterator iterator()
    73      {
    74          return new SIterator();
    75      }
    76
    77
    78      /* ------------------------------------------------------------ */
    79      private class SIterator implements ListIterator
    80      {
    81          int i;
    82
    83          SIterator(){i=0;}
    84          SIterator(int i)
    85          {
    86              if (i<0||i>1)
    87                  throw new IndexOutOfBoundsException("index "+i);
    88              this.i=i;
    89          }
    90          public void add(Object o){throw new UnsupportedOperationException("SingletonList.add()");}
    91          public boolean hasNext() {return i==0;}
    92          public boolean hasPrevious() {return i==1;}
    93          public Object next() {if (i!=0) throw new NoSuchElementException();i++;return o;}
    94          public int nextIndex() {return i;}
    95          public Object previous() {if (i!=1) throw new NoSuchElementException();i--;return o;}
    96          public int previousIndex() {return i-1;}
    97          public void remove(){throw new UnsupportedOperationException("SingletonList.remove()");}
    98          public void set(Object o){throw new UnsupportedOperationException("SingletonList.add()");}
    99      }
    100 }