1 /*
2 * Copyright 2012 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package org.jboss.netty.handler.codec.http.multipart;
17
18 import org.jboss.netty.buffer.ChannelBuffer;
19
20 import java.io.File;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.nio.charset.Charset;
24
25 /**
26 * Extended interface for InterfaceHttpData
27 */
28 public interface HttpData extends InterfaceHttpData {
29 /**
30 * Set the maxSize for this HttpData. When limit will be reached, an exception will be raised.
31 * Setting it to (-1) means no limitation.
32 *
33 * By default, to be set from the HttpDataFactory.
34 * @param maxSize
35 */
36 void setMaxSize(long maxSize);
37
38 /**
39 * Check if the new size is not reaching the max limit allowed.
40 * The limit is always computed in term of bytes.
41 * @param newSize
42 * @throws IOException
43 */
44 void checkSize(long newSize) throws IOException;
45
46 /**
47 * Set the content from the ChannelBuffer (erase any previous data)
48 *
49 * @param buffer
50 * must be not null
51 * @exception IOException
52 */
53 void setContent(ChannelBuffer buffer) throws IOException;
54
55 /**
56 * Add the content from the ChannelBuffer
57 *
58 * @param buffer
59 * must be not null except if last is set to False
60 * @param last
61 * True of the buffer is the last one
62 * @exception IOException
63 */
64 void addContent(ChannelBuffer buffer, boolean last) throws IOException;
65
66 /**
67 * Set the content from the file (erase any previous data)
68 *
69 * @param file
70 * must be not null
71 * @exception IOException
72 */
73 void setContent(File file) throws IOException;
74
75 /**
76 * Set the content from the inputStream (erase any previous data)
77 *
78 * @param inputStream
79 * must be not null
80 * @exception IOException
81 */
82 void setContent(InputStream inputStream) throws IOException;
83
84 /**
85 *
86 * @return True if the InterfaceHttpData is completed (all data are stored)
87 */
88 boolean isCompleted();
89
90 /**
91 * Returns the size in byte of the InterfaceHttpData
92 *
93 * @return the size of the InterfaceHttpData
94 */
95 long length();
96
97 /**
98 * Deletes the underlying storage for a file item, including deleting any
99 * associated temporary disk file.
100 */
101 void delete();
102
103 /**
104 * Returns the contents of the file item as an array of bytes.
105 *
106 * @return the contents of the file item as an array of bytes.
107 * @exception IOException
108 */
109 byte[] get() throws IOException;
110
111 /**
112 * Returns the content of the file item as a ChannelBuffer
113 *
114 * @return the content of the file item as a ChannelBuffer
115 * @throws IOException
116 */
117 ChannelBuffer getChannelBuffer() throws IOException;
118
119 /**
120 * Returns a ChannelBuffer for the content from the current position with at
121 * most length read bytes, increasing the current position of the Bytes
122 * read. Once it arrives at the end, it returns an EMPTY_BUFFER and it
123 * resets the current position to 0.
124 *
125 * @return a ChannelBuffer for the content from the current position or an
126 * EMPTY_BUFFER if there is no more data to return
127 */
128 ChannelBuffer getChunk(int length) throws IOException;
129
130 /**
131 * Returns the contents of the file item as a String, using the default
132 * character encoding.
133 *
134 * @return the contents of the file item as a String, using the default
135 * character encoding.
136 */
137 String getString() throws IOException;
138
139 /**
140 * Returns the contents of the file item as a String, using the specified
141 * charset.
142 *
143 * @param encoding
144 * the charset to use
145 * @return the contents of the file item as a String, using the specified
146 * charset.
147 * @exception IOException
148 */
149 String getString(Charset encoding) throws IOException;
150
151 /**
152 * Set the Charset passed by the browser if defined
153 *
154 * @param charset
155 * Charset to set - must be not null
156 */
157 void setCharset(Charset charset);
158
159 /**
160 * Returns the Charset passed by the browser or null if not defined.
161 *
162 * @return the Charset passed by the browser or null if not defined.
163 */
164 Charset getCharset();
165
166 /**
167 * A convenience method to write an uploaded item to disk. If a previous one
168 * exists, it will be deleted. Once this method is called, if successful,
169 * the new file will be out of the cleaner of the factory that creates the
170 * original InterfaceHttpData object.
171 *
172 * @param dest
173 * destination file - must be not null
174 * @return True if the write is successful
175 * @exception IOException
176 */
177 boolean renameTo(File dest) throws IOException;
178
179 /**
180 * Provides a hint as to whether or not the file contents will be read from
181 * memory.
182 *
183 * @return True if the file contents is in memory.
184 */
185 boolean isInMemory();
186
187 /**
188 *
189 * @return the associated File if this data is represented in a file
190 * @exception IOException
191 * if this data is not represented by a file
192 */
193 File getFile() throws IOException;
194
195 }