View Javadoc

    1   /***
    2    *
    3    * Copyright 2004 Hiram Chirino
    4    *
    5    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
    6    * use this file except in compliance with the License. You may obtain a copy of
    7    * the License at
    8    *
    9    * http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    13   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    14   * License for the specific language governing permissions and limitations under
    15   * the License.
    16   */
    17  package org.activeio.packet;
    18
    19  import java.io.DataOutput;
    20  import java.io.IOException;
    21  import java.io.OutputStream;
    22
    23  import org.activeio.Packet;
    24
    25  /***
    26   * Provides a Packet implementation that is used to represent the end of a stream.
    27   *
    28   * @version $Revision$
    29   */
    30  final public class EOSPacket implements Packet {
    31
    32      static final public EOSPacket EOS_PACKET = new EOSPacket();
    33
    34      private EOSPacket() {
    35      }
    36
    37      public void writeTo(OutputStream out) throws IOException {
    38      }
    39      public void writeTo(DataOutput out) throws IOException {
    40      }
    41
    42      public int position() {
    43          return 1;
    44      }
    45
    46      public void position(int position) {
    47      }
    48
    49      public int limit() {
    50          return 0;
    51      }
    52
    53      public void limit(int limit) {
    54      }
    55
    56      public void flip() {
    57      }
    58
    59      public int remaining() {
    60          return -1;
    61      }
    62
    63      public void rewind() {
    64      }
    65
    66      public boolean hasRemaining() {
    67          return false;
    68      }
    69
    70      public void clear() {
    71      }
    72
    73      public int capacity() {
    74          return 0;
    75      }
    76
    77      public Packet slice() {
    78          return this;
    79      }
    80
    81      public Packet duplicate() {
    82          return this;
    83      }
    84
    85      public Object duplicate(ClassLoader cl) throws IOException {
    86          try {
    87              Class clazz = cl.loadClass(EOSPacket.class.getName());
    88              return clazz.getField("EOS_PACKET").get(null);
    89          } catch (Throwable e) {
    90              throw (IOException)new IOException("Could not duplicate packet in a different classloader: "+e).initCause(e);
    91          }
    92      }
    93
    94      /***
    95       * @see org.activeio.Packet#read()
    96       */
    97      public int read() {
    98          return -1;
    99      }
    100
    101     /***
    102      * @see org.activeio.Packet#read(byte[], int, int)
    103      */
    104     public int read(byte[] data, int offset, int length) {
    105         return -1;
    106     }
    107
    108     /***
    109      * @see org.activeio.Packet#write(int)
    110      */
    111     public boolean write(int data) {
    112         return false;
    113     }
    114
    115     /***
    116      * @see org.activeio.Packet#write(byte[], int, int)
    117      */
    118     public int write(byte[] data, int offset, int length) {
    119         return -1;
    120     }
    121
    122     public ByteSequence asByteSequence() {
    123         return EmptyPacket.EMPTY_BYTE_SEQUENCE;
    124     }
    125
    126     public byte[] sliceAsBytes() {
    127         return EmptyPacket.EMPTY_BYTE_ARRAY;
    128     }
    129
    130     /***
    131      * @param dest
    132      * @return the number of bytes read into the dest.
    133      */
    134     public int read(Packet dest) {
    135 	    return 0;
    136     }
    137
    138     public String toString() {
    139         return "{position="+position()+",limit="+limit()+",capacity="+capacity()+"}";
    140     }
    141
    142     public Object narrow(Class target) {
    143         if( target.isAssignableFrom(getClass()) ) {
    144             return this;
    145         }
    146         return null;
    147     }
    148
    149     public void dispose() {
    150     }
    151
    152 }