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 directly backed by a <code>byte[0]</code>.
    27   *
    28   * @version $Revision$
    29   */
    30  final public class EmptyPacket implements Packet {
    31
    32      static final public EmptyPacket EMPTY_PACKET = new EmptyPacket();
    33      static final byte EMPTY_BYTE_ARRAY[] = new byte[]{};
    34      static final ByteSequence EMPTY_BYTE_SEQUENCE = new ByteSequence(EMPTY_BYTE_ARRAY,0,0);
    35
    36      private EmptyPacket() {
    37      }
    38
    39      public void writeTo(OutputStream out) throws IOException {
    40      }
    41      public void writeTo(DataOutput out) throws IOException {
    42      }
    43
    44      public int position() {
    45          return 0;
    46      }
    47
    48      public void position(int position) {
    49      }
    50
    51      public int limit() {
    52          return 0;
    53      }
    54
    55      public void limit(int limit) {
    56      }
    57
    58      public void flip() {
    59      }
    60
    61      public int remaining() {
    62          return 0;
    63      }
    64
    65      public void rewind() {
    66      }
    67
    68      public boolean hasRemaining() {
    69          return false;
    70      }
    71
    72      public void clear() {
    73      }
    74
    75      public int capacity() {
    76          return 0;
    77      }
    78
    79      public Packet slice() {
    80          return this;
    81      }
    82
    83      public Packet duplicate() {
    84          return this;
    85      }
    86
    87      public Object duplicate(ClassLoader cl) throws IOException {
    88          try {
    89              Class clazz = cl.loadClass(EmptyPacket.class.getName());
    90              return clazz.getField("EMPTY_PACKET").get(null);
    91          } catch (Throwable e) {
    92              throw (IOException)new IOException("Could not duplicate packet in a different classloader: "+e).initCause(e);
    93          }
    94      }
    95
    96      /***
    97       * @see org.activeio.Packet#read()
    98       */
    99      public int read() {
    100         return -1;
    101     }
    102
    103     /***
    104      * @see org.activeio.Packet#read(byte[], int, int)
    105      */
    106     public int read(byte[] data, int offset, int length) {
    107         return -1;
    108     }
    109
    110     /***
    111      * @see org.activeio.Packet#write(int)
    112      */
    113     public boolean write(int data) {
    114         return false;
    115     }
    116
    117     /***
    118      * @see org.activeio.Packet#write(byte[], int, int)
    119      */
    120     public int write(byte[] data, int offset, int length) {
    121         return -1;
    122     }
    123
    124     public ByteSequence asByteSequence() {
    125         return EMPTY_BYTE_SEQUENCE;
    126     }
    127
    128     public byte[] sliceAsBytes() {
    129         return EMPTY_BYTE_ARRAY;
    130     }
    131
    132     /***
    133      * @param dest
    134      * @return the number of bytes read into the dest.
    135      */
    136     public int read(Packet dest) {
    137 	    return -1;
    138     }
    139
    140     public String toString() {
    141         return "{position="+position()+",limit="+limit()+",capacity="+capacity()+"}";
    142     }
    143
    144     public Object narrow(Class target) {
    145         if( target.isAssignableFrom(getClass()) ) {
    146             return this;
    147         }
    148         return null;
    149     }
    150
    151     public void dispose() {
    152     }
    153
    154 }