View Javadoc

1   /*
2    *  Copyright 2006 Simon Raess
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    *
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,
12   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *  See the License for the specific language governing permissions and
14   *  limitations under the License.
15   */
16  package net.sf.beep4j;
17  
18  import java.io.InputStream;
19  import java.io.Reader;
20  import java.nio.ByteBuffer;
21  import java.util.Iterator;
22  
23  /**
24   * Interface exposing all necessary methods a Message must have.
25   * 
26   * @author Simon Raess
27   */
28  public interface Message {
29  	
30  	/**
31  	 * Canonical name of the Content-Type header.
32  	 */
33  	String CONTENT_TYPE = "content-type";
34  	
35  	/**
36  	 * Canonical name of the Content-Transfer-Encoding header.
37  	 */
38  	String CONTENT_TRANSFER_ENCODING = "content-transfer-encoding";
39  	
40  	/**
41  	 * Value for binary transfer encoding.
42  	 */
43  	String BINARY_TRANSFER_ENCODING = "binary";
44  	
45  	/**
46  	 * Value for base64 transfer encoding.
47  	 */
48  	String BASE64_TRANSFER_ENCODING = "base64";
49  	
50  	/**
51  	 * Gets the content type of the message. The format of the
52  	 * content type is defined in RFC 2045. The returned
53  	 * value does not contain parameters.
54  	 * 
55  	 * @return the content type of the message
56  	 */
57  	String getContentType();
58  	
59  	/**
60  	 * Gets the list of all defined header names. The content type
61  	 * header is not returned from this method.
62  	 * 
63  	 * @return the list of header names
64  	 */
65  	Iterator<String> getHeaderNames();
66  	
67  	/**
68  	 * Gets the value of the header with the given name.
69  	 * If no such header exists, null is returned. The content type
70  	 * header is not returned from this method.
71  	 * 
72  	 * @param name the name of the header
73  	 * @return the value of the header
74  	 */
75  	String getHeader(String name);
76  	
77  	/**
78  	 * Gets an InputStream to read the content of the message.
79  	 * Use this method if you receive binary messages. Otherwise
80  	 * we recommend using the {@link #getReader()} method, which
81  	 * returns a fully configured Reader.
82  	 * 
83  	 * @return the raw InputStream
84  	 */
85  	InputStream getInputStream();
86  	
87  	/**
88  	 * Gets a Reader to read the content of the message.
89  	 * Use this method to process textual messages. The
90  	 * reader is fully configured, e.g. the correct charset is
91  	 * used to decode the binary content.
92  	 * 
93  	 * @return a fully configured Reader
94  	 */
95  	Reader getReader();
96  	
97  	/**
98  	 * Gets a Reader to read the content of the message.
99  	 * Use this method if the charset has not been specified as
100 	 * part of the content-type and there is no default charset
101 	 * for the content type.
102 	 * 
103 	 * @param charset the name of the charset
104 	 * @return the fully configured Reader
105 	 */
106 	Reader getReader(String charset);
107 	
108 	/**
109 	 * Gets the content as a ByteBuffer.
110 	 * 
111 	 * @return the ByteBuffer of the content
112 	 */
113 	ByteBuffer getContentBuffer();
114 	
115 	/**
116 	 * Writes the complete message (headers and content) into a
117 	 * ByteBuffer, which can then be used to send the message over
118 	 * the network.
119 	 * 
120 	 * @return the Message written into a ByteBuffer
121 	 */
122 	ByteBuffer asByteBuffer();
123 			
124 }