001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2009 SonarSource SA 004 * mailto:contact AT sonarsource DOT com 005 * 006 * Sonar is free software; you can redistribute it and/or 007 * modify it under the terms of the GNU Lesser General Public 008 * License as published by the Free Software Foundation; either 009 * version 3 of the License, or (at your option) any later version. 010 * 011 * Sonar is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public 017 * License along with Sonar; if not, write to the Free Software 018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 019 */ 020 package org.sonar.squid.text; 021 022 import java.io.IOException; 023 import java.io.Reader; 024 import java.io.StringReader; 025 026 public class StringArrayReader extends Reader { 027 028 private final StringReader stringReader; 029 030 enum EndOfLineDelimiter { 031 LF, CR_PLUS_LF, CR 032 } 033 034 public StringArrayReader(String[] lines) { 035 this(lines, EndOfLineDelimiter.LF); 036 } 037 038 public StringArrayReader(String[] lines, EndOfLineDelimiter endOfLineDelimiter) { 039 if (lines == null) { 040 throw new IllegalStateException("lines object can't be null."); 041 } 042 String content = convertArrayToStringAndAppendEndOfLine(lines, endOfLineDelimiter); 043 stringReader = new StringReader(content); 044 } 045 046 private String convertArrayToStringAndAppendEndOfLine(String[] lines, EndOfLineDelimiter endOfLineDelimiter) { 047 StringBuilder content = new StringBuilder(); 048 for (int i = 0; i < lines.length; i++) { 049 content.append(lines[i]); 050 if (i != (lines.length - 1)) { 051 switch (endOfLineDelimiter) { 052 case LF: 053 content.append('\n'); 054 break; 055 case CR: 056 content.append('\r'); 057 break; 058 case CR_PLUS_LF: 059 content.append("\r\n"); 060 break; 061 } 062 } 063 } 064 return content.toString(); 065 } 066 067 @Override 068 public void close() throws IOException { 069 stringReader.close(); 070 } 071 072 @Override 073 public boolean ready() throws IOException { 074 return stringReader.ready(); 075 } 076 077 @Override 078 public boolean markSupported() { 079 return stringReader.markSupported(); 080 } 081 082 @Override 083 public void mark(int readAheadLimit) throws IOException { 084 stringReader.mark(readAheadLimit); 085 } 086 087 @Override 088 public void reset() throws IOException { 089 stringReader.reset(); 090 } 091 092 @Override 093 public int read(char[] cbuf, int off, int len) throws IOException { 094 return stringReader.read(cbuf, off, len); 095 } 096 }