KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > mina > filter > codec > textline > TextLineEncoder


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  *
19  */

20 package org.apache.mina.filter.codec.textline;
21
22 import java.nio.charset.Charset JavaDoc;
23 import java.nio.charset.CharsetEncoder JavaDoc;
24
25 import org.apache.mina.common.ByteBuffer;
26 import org.apache.mina.common.IoSession;
27 import org.apache.mina.filter.codec.ProtocolEncoder;
28 import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
29 import org.apache.mina.filter.codec.ProtocolEncoderOutput;
30
31 /**
32  * A {@link ProtocolEncoder} which encodes a string into a text line
33  * which ends with the delimiter.
34  *
35  * @author The Apache Directory Project (mina-dev@directory.apache.org)
36  * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (금, 13 7월 2007) $,
37  */

38 public class TextLineEncoder extends ProtocolEncoderAdapter {
39     private static final String JavaDoc ENCODER = TextLineEncoder.class.getName()
40             + ".encoder";
41
42     private final Charset JavaDoc charset;
43
44     private final LineDelimiter delimiter;
45
46     private int maxLineLength = Integer.MAX_VALUE;
47
48     public TextLineEncoder() {
49         this(Charset.defaultCharset(), LineDelimiter.UNIX);
50     }
51
52     public TextLineEncoder(LineDelimiter delimiter) {
53         this(Charset.defaultCharset(), delimiter);
54     }
55
56     public TextLineEncoder(Charset JavaDoc charset) {
57         this(charset, LineDelimiter.UNIX);
58     }
59
60     public TextLineEncoder(Charset JavaDoc charset, LineDelimiter delimiter) {
61         if (charset == null) {
62             throw new NullPointerException JavaDoc("charset");
63         }
64         if (delimiter == null) {
65             throw new NullPointerException JavaDoc("delimiter");
66         }
67         if (LineDelimiter.AUTO.equals(delimiter)) {
68             throw new IllegalArgumentException JavaDoc(
69                     "AUTO delimiter is not allowed for encoder.");
70         }
71
72         this.charset = charset;
73         this.delimiter = delimiter;
74     }
75
76     /**
77      * Returns the allowed maximum size of the encoded line.
78      * If the size of the encoded line exceeds this value, the encoder
79      * will throw a {@link IllegalArgumentException}. The default value
80      * is {@link Integer#MAX_VALUE}.
81      */

82     public int getMaxLineLength() {
83         return maxLineLength;
84     }
85
86     /**
87      * Sets the allowed maximum size of the encoded line.
88      * If the size of the encoded line exceeds this value, the encoder
89      * will throw a {@link IllegalArgumentException}. The default value
90      * is {@link Integer#MAX_VALUE}.
91      */

92     public void setMaxLineLength(int maxLineLength) {
93         if (maxLineLength <= 0) {
94             throw new IllegalArgumentException JavaDoc("maxLineLength: "
95                     + maxLineLength);
96         }
97
98         this.maxLineLength = maxLineLength;
99     }
100
101     public void encode(IoSession session, Object JavaDoc message,
102             ProtocolEncoderOutput out) throws Exception JavaDoc {
103         CharsetEncoder JavaDoc encoder = (CharsetEncoder JavaDoc) session.getAttribute(ENCODER);
104         if (encoder == null) {
105             encoder = charset.newEncoder();
106             session.setAttribute(ENCODER, encoder);
107         }
108
109         String JavaDoc value = message.toString();
110         ByteBuffer buf = ByteBuffer.allocate(value.length())
111                 .setAutoExpand(true);
112         buf.putString(value, encoder);
113         if (buf.position() > maxLineLength) {
114             throw new IllegalArgumentException JavaDoc("Line length: " + buf.position());
115         }
116         buf.putString(delimiter.getValue(), encoder);
117         buf.flip();
118         out.write(buf);
119     }
120
121     public void dispose() throws Exception JavaDoc {
122     }
123 }
Popular Tags