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;
23
24 import org.apache.mina.core.buffer.BufferDataException;
25 import org.apache.mina.core.session.IoSession;
26 import org.apache.mina.filter.codec.ProtocolCodecFactory;
27 import org.apache.mina.filter.codec.ProtocolDecoder;
28 import org.apache.mina.filter.codec.ProtocolEncoder;
29
30 /**
31 * A {@link ProtocolCodecFactory} that performs encoding and decoding between
32 * a text line data and a Java string object. This codec is useful especially
33 * when you work with a text-based protocols such as SMTP and IMAP.
34 *
35 * @author <a href="http://mina.apache.org">Apache MINA Project</a>
36 */
37 public class TextLineCodecFactory implements ProtocolCodecFactory {
38
39 private final TextLineEncoder encoder;
40 private final TextLineDecoder decoder;
41
42 /**
43 * Creates a new instance with the current default {@link Charset}.
44 */
45 public TextLineCodecFactory() {
46 this(Charset.defaultCharset());
47 }
48
49 /**
50 * Creates a new instance with the specified {@link Charset}. The
51 * encoder uses a UNIX {@link LineDelimiter} and the decoder uses
52 * the AUTO {@link LineDelimiter}.
53 *
54 * @param charset
55 * The charset to use in the encoding and decoding
56 */
57 public TextLineCodecFactory(Charset charset) {
58 encoder = new TextLineEncoder(charset, LineDelimiter.UNIX);
59 decoder = new TextLineDecoder(charset, LineDelimiter.AUTO);
60 }
61
62 /**
63 * Creates a new instance of TextLineCodecFactory. This constructor
64 * provides more flexibility for the developer.
65 *
66 * @param charset
67 * The charset to use in the encoding and decoding
68 * @param encodingDelimiter
69 * The line delimeter for the encoder
70 * @param decodingDelimiter
71 * The line delimeter for the decoder
72 */
73 public TextLineCodecFactory(Charset charset,
74 String encodingDelimiter, String decodingDelimiter) {
75 encoder = new TextLineEncoder(charset, encodingDelimiter);
76 decoder = new TextLineDecoder(charset, decodingDelimiter);
77 }
78
79 /**
80 * Creates a new instance of TextLineCodecFactory. This constructor
81 * provides more flexibility for the developer.
82 *
83 * @param charset
84 * The charset to use in the encoding and decoding
85 * @param encodingDelimiter
86 * The line delimeter for the encoder
87 * @param decodingDelimiter
88 * The line delimeter for the decoder
89 */
90 public TextLineCodecFactory(Charset charset,
91 LineDelimiter encodingDelimiter, LineDelimiter decodingDelimiter) {
92 encoder = new TextLineEncoder(charset, encodingDelimiter);
93 decoder = new TextLineDecoder(charset, decodingDelimiter);
94 }
95
96 public ProtocolEncoder getEncoder(IoSession session) {
97 return encoder;
98 }
99
100 public ProtocolDecoder getDecoder(IoSession session) {
101 return decoder;
102 }
103
104 /**
105 * Returns the allowed maximum size of the encoded line.
106 * If the size of the encoded line exceeds this value, the encoder
107 * will throw a {@link IllegalArgumentException}. The default value
108 * is {@link Integer#MAX_VALUE}.
109 * <p>
110 * This method does the same job with {@link TextLineEncoder#getMaxLineLength()}.
111 */
112 public int getEncoderMaxLineLength() {
113 return encoder.getMaxLineLength();
114 }
115
116 /**
117 * Sets the allowed maximum size of the encoded line.
118 * If the size of the encoded line exceeds this value, the encoder
119 * will throw a {@link IllegalArgumentException}. The default value
120 * is {@link Integer#MAX_VALUE}.
121 * <p>
122 * This method does the same job with {@link TextLineEncoder#setMaxLineLength(int)}.
123 */
124 public void setEncoderMaxLineLength(int maxLineLength) {
125 encoder.setMaxLineLength(maxLineLength);
126 }
127
128 /**
129 * Returns the allowed maximum size of the line to be decoded.
130 * If the size of the line to be decoded exceeds this value, the
131 * decoder will throw a {@link BufferDataException}. The default
132 * value is <tt>1024</tt> (1KB).
133 * <p>
134 * This method does the same job with {@link TextLineDecoder#getMaxLineLength()}.
135 */
136 public int getDecoderMaxLineLength() {
137 return decoder.getMaxLineLength();
138 }
139
140 /**
141 * Sets the allowed maximum size of the line to be decoded.
142 * If the size of the line to be decoded exceeds this value, the
143 * decoder will throw a {@link BufferDataException}. The default
144 * value is <tt>1024</tt> (1KB).
145 * <p>
146 * This method does the same job with {@link TextLineDecoder#setMaxLineLength(int)}.
147 */
148 public void setDecoderMaxLineLength(int maxLineLength) {
149 decoder.setMaxLineLength(maxLineLength);
150 }
151 }