View Javadoc

    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 }