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 }