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 The Apache MINA Project (dev@mina.apache.org) 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 }