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.io.ByteArrayOutputStream;
    23  import java.io.PrintWriter;
    24
    25  /**
    26   * A delimiter which is appended to the end of a text line, such as
    27   * <tt>CR/LF</tt>.
    28   *
    29   * @author The Apache Directory Project (mina-dev@directory.apache.org)
    30   * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (Fri, 13 Jul 2007) $
    31   */
    32  public class LineDelimiter {
    33      /**
    34       * the line delimiter constant of the current O/S.
    35       */
    36      public static final LineDelimiter DEFAULT;
    37
    38      static {
    39          ByteArrayOutputStream bout = new ByteArrayOutputStream();
    40          PrintWriter out = new PrintWriter(bout);
    41          out.println();
    42          DEFAULT = new LineDelimiter(new String(bout.toByteArray()));
    43      }
    44
    45      /**
    46       * A special line delimiter which is used for auto-detection of
    47       * EOL in {@link TextLineDecoder}.  If this delimiter is used,
    48       * {@link TextLineDecoder} will consider both  <tt>'\r'</tt> and
    49       * <tt>'\n'</tt> as a delimiter.
    50       */
    51      public static final LineDelimiter AUTO = new LineDelimiter("");
    52
    53      /**
    54       * The line delimiter constant of UNIX (<tt>"\n"</tt>)
    55       */
    56      public static final LineDelimiter UNIX = new LineDelimiter("\n");
    57
    58      /**
    59       * The line delimiter constant of MS Windows/DOS (<tt>"\r\n"</tt>)
    60       */
    61      public static final LineDelimiter WINDOWS = new LineDelimiter("\r\n");
    62
    63      /**
    64       * The line delimiter constant of Mac OS (<tt>"\r"</tt>)
    65       */
    66      public static final LineDelimiter MAC = new LineDelimiter("\r");
    67
    68      private final String value;
    69
    70      /**
    71       * Creates a new line delimiter with the specified <tt>value</tt>.
    72       */
    73      public LineDelimiter(String value) {
    74          if (value == null) {
    75              throw new NullPointerException("delimiter");
    76          }
    77          this.value = value;
    78      }
    79
    80      /**
    81       * Return the delimiter string.
    82       */
    83      public String getValue() {
    84          return value;
    85      }
    86
    87      public int hashCode() {
    88          return value.hashCode();
    89      }
    90
    91      public boolean equals(Object o) {
    92          if (!(o instanceof LineDelimiter)) {
    93              return false;
    94          }
    95
    96          LineDelimiter that = (LineDelimiter) o;
    97          return this.value.equals(that.value);
    98      }
    99
    100     public String toString() {
    101         StringBuffer buf = new StringBuffer();
    102         buf.append("delimiter:");
    103         if (value.length() == 0) {
    104             buf.append(" auto");
    105         } else {
    106             for (int i = 0; i < value.length(); i++) {
    107                 buf.append(" 0x");
    108                 buf.append(Integer.toHexString(value.charAt(i)));
    109             }
    110         }
    111         return buf.toString();
    112     }
    113 }