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>. This class defines default delimiters for various 28 * OS : 29 * <ul> 30 * <li><b>Unix/Linux</b> : LineDelimiter.UNIX ("\n")</li> 31 * <li><b>Windows</b> : LineDelimiter.WINDOWS ("\r\n")</li> 32 * <li><b>MAC</b> : LineDelimiter.MAC ("\r")</li> 33 * </ul> 34 * 35 * @author <a href="http://mina.apache.org">Apache MINA Project</a> 36 */ 37 public class LineDelimiter { 38 /** the line delimiter constant of the current O/S. */ 39 public static final LineDelimiter DEFAULT; 40 41 /** Compute the default delimiter on he current OS */ 42 static { 43 ByteArrayOutputStream bout = new ByteArrayOutputStream(); 44 PrintWriter out = new PrintWriter(bout, true); 45 out.println(); 46 DEFAULT = new LineDelimiter(new String(bout.toByteArray())); 47 } 48 49 /** 50 * A special line delimiter which is used for auto-detection of 51 * EOL in {@link TextLineDecoder}. If this delimiter is used, 52 * {@link TextLineDecoder} will consider both <tt>'\r'</tt> and 53 * <tt>'\n'</tt> as a delimiter. 54 */ 55 public static final LineDelimiter AUTO = new LineDelimiter(""); 56 57 /** 58 * The CRLF line delimiter constant (<tt>"\r\n"</tt>) 59 */ 60 public static final LineDelimiter CRLF = new LineDelimiter("\r\n"); 61 62 /** 63 * The line delimiter constant of UNIX (<tt>"\n"</tt>) 64 */ 65 public static final LineDelimiter UNIX = new LineDelimiter("\n"); 66 67 /** 68 * The line delimiter constant of MS Windows/DOS (<tt>"\r\n"</tt>) 69 */ 70 public static final LineDelimiter WINDOWS = CRLF; 71 72 /** 73 * The line delimiter constant of Mac OS (<tt>"\r"</tt>) 74 */ 75 public static final LineDelimiter MAC = new LineDelimiter("\r"); 76 77 /** 78 * The line delimiter constant for NUL-terminated text protocols 79 * such as Flash XML socket (<tt>"\0"</tt>) 80 */ 81 public static final LineDelimiter NUL = new LineDelimiter("\0"); 82 83 /** Stores the selected Line delimiter */ 84 private final String value; 85 86 /** 87 * Creates a new line delimiter with the specified <tt>value</tt>. 88 */ 89 public LineDelimiter(String value) { 90 if (value == null) { 91 throw new IllegalArgumentException("delimiter"); 92 } 93 94 this.value = value; 95 } 96 97 /** 98 * Return the delimiter string. 99 */ 100 public String getValue() { 101 return value; 102 } 103 104 /** 105 * {@inheritDoc} 106 */ 107 @Override 108 public int hashCode() { 109 return value.hashCode(); 110 } 111 112 /** 113 * {@inheritDoc} 114 */ 115 @Override 116 public boolean equals(Object o) { 117 if (this == o) { 118 return true; 119 } 120 121 if (!(o instanceof LineDelimiter)) { 122 return false; 123 } 124 125 LineDelimiter that = (LineDelimiter) o; 126 127 return this.value.equals(that.value); 128 } 129 130 /** 131 * {@inheritDoc} 132 */ 133 @Override 134 public String toString() { 135 if (value.length() == 0) { 136 return "delimiter: auto"; 137 } else { 138 StringBuilder buf = new StringBuilder(); 139 buf.append("delimiter:"); 140 141 for (int i = 0; i < value.length(); i++) { 142 buf.append(" 0x"); 143 buf.append(Integer.toHexString(value.charAt(i))); 144 } 145 146 return buf.toString(); 147 } 148 } 149 }