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 }