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 41 private final TextLineDecoder decoder; 42 43 /** 44 * Creates a new instance with the current default {@link Charset}. 45 */ 46 public TextLineCodecFactory() { 47 this(Charset.defaultCharset()); 48 } 49 50 /** 51 * Creates a new instance with the specified {@link Charset}. The 52 * encoder uses a UNIX {@link LineDelimiter} and the decoder uses 53 * the AUTO {@link LineDelimiter}. 54 * 55 * @param charset 56 * The charset to use in the encoding and decoding 57 */ 58 public TextLineCodecFactory(Charset charset) { 59 encoder = new TextLineEncoder(charset, LineDelimiter.UNIX); 60 decoder = new TextLineDecoder(charset, LineDelimiter.AUTO); 61 } 62 63 /** 64 * Creates a new instance of TextLineCodecFactory. This constructor 65 * provides more flexibility for the developer. 66 * 67 * @param charset 68 * The charset to use in the encoding and decoding 69 * @param encodingDelimiter 70 * The line delimeter for the encoder 71 * @param decodingDelimiter 72 * The line delimeter for the decoder 73 */ 74 public TextLineCodecFactory(Charset charset, 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, LineDelimiter encodingDelimiter, LineDelimiter decodingDelimiter) { 91 encoder = new TextLineEncoder(charset, encodingDelimiter); 92 decoder = new TextLineDecoder(charset, decodingDelimiter); 93 } 94 95 public ProtocolEncoder getEncoder(IoSession session) { 96 return encoder; 97 } 98 99 public ProtocolDecoder getDecoder(IoSession session) { 100 return decoder; 101 } 102 103 /** 104 * Returns the allowed maximum size of the encoded line. 105 * If the size of the encoded line exceeds this value, the encoder 106 * will throw a {@link IllegalArgumentException}. The default value 107 * is {@link Integer#MAX_VALUE}. 108 * <p> 109 * This method does the same job with {@link TextLineEncoder#getMaxLineLength()}. 110 */ 111 public int getEncoderMaxLineLength() { 112 return encoder.getMaxLineLength(); 113 } 114 115 /** 116 * Sets the allowed maximum size of the encoded line. 117 * If the size of the encoded line exceeds this value, the encoder 118 * will throw a {@link IllegalArgumentException}. The default value 119 * is {@link Integer#MAX_VALUE}. 120 * <p> 121 * This method does the same job with {@link TextLineEncoder#setMaxLineLength(int)}. 122 */ 123 public void setEncoderMaxLineLength(int maxLineLength) { 124 encoder.setMaxLineLength(maxLineLength); 125 } 126 127 /** 128 * Returns the allowed maximum size of the line to be decoded. 129 * If the size of the line to be decoded exceeds this value, the 130 * decoder will throw a {@link BufferDataException}. The default 131 * value is <tt>1024</tt> (1KB). 132 * <p> 133 * This method does the same job with {@link TextLineDecoder#getMaxLineLength()}. 134 */ 135 public int getDecoderMaxLineLength() { 136 return decoder.getMaxLineLength(); 137 } 138 139 /** 140 * Sets the allowed maximum size of the line to be decoded. 141 * If the size of the line to be decoded exceeds this value, the 142 * decoder will throw a {@link BufferDataException}. The default 143 * value is <tt>1024</tt> (1KB). 144 * <p> 145 * This method does the same job with {@link TextLineDecoder#setMaxLineLength(int)}. 146 */ 147 public void setDecoderMaxLineLength(int maxLineLength) { 148 decoder.setMaxLineLength(maxLineLength); 149 } 150 }