SimpleCSVOutput.java

package eu.javaexperience.csv;

import java.io.IOException;

public class SimpleCSVOutput
{
	protected final Appendable sb;
	
	protected char separator = ',';
	
	protected boolean escape_linebreaks = true;
	
	public boolean isEscapeLinebreaks()
	{
		return escape_linebreaks;
	}

	public void setEscapeLinebreaks(boolean escape_linebreaks)
	{
		this.escape_linebreaks = escape_linebreaks;
	}
	
	public SimpleCSVOutput(Appendable out)
	{
		this.sb = out;
	}
	
	protected int ep = 0;
	
	public void putRow(String... arguments) throws IOException
	{
		if(ep++ > 0)
			sb.append("\r\n");
		
		for(int i=0;i<arguments.length;i++)
		{
			if(i != 0)
				sb.append(separator);
			
			escapeCsv(arguments[i]);
		}
	}
	
	/**
	 * http://grepcode.com/file/repo1.maven.org/maven2/commons-lang/commons-lang/2.5/org/apache/commons/lang/StringEscapeUtils.java#StringEscapeUtils.escapeCsv%28java.io.Writer%2Cjava.lang.String%29
	 * tudod ki fogja az egész libet behúzni...
	 * @param str
	 * @throws IOException
	 */
	protected void escapeCsv(String str) throws IOException
	{
		if(null == str)
		{
			str = "";
		}
		
		sb.append("\"");
		for (int i = 0; i < str.length(); i++)
		{
			char c = str.charAt(i);
			if(escape_linebreaks)
			{
				if(c == '\n')
				{
					sb.append("\\n");
					continue;
				}
				
				else if(c == '\r')
				{
					sb.append("\\r");
					continue;
				}
			}
			
			if (c == '"')
			{
				sb.append("\"\"");
				continue;
			}
			
			sb.append(c);
		}
		sb.append("\"");
	}
	
	@Override
	public String toString()
	{
		return "SimpleCsvOutput: "+sb.toString();
	}
	
	public Appendable getBackendAppendable()
	{
		return sb;
	}

	public char getSeparator()
	{
		return separator;
	}

	public void setSeparator(char separator)
	{
		this.separator = separator;
	}
}