All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sangupta.jerry.print.ConsoleTableWriter Maven / Gradle / Ivy

There is a newer version: 3.0.1
Show newest version
/**
 *
 * jerry - Common Java Functionality
 * Copyright (c) 2012-2015, Sandeep Gupta
 * 
 * http://sangupta.com/projects/jerry
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * 		http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */
 
package com.sangupta.jerry.print;

import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.output.WriterOutputStream;

import com.sangupta.jerry.util.StringUtils;

/**
 * A simple writer that converts {@link ConsoleTable} into various
 * other data formats.
 * 
 * @author sangupta
 *
 */
public class ConsoleTableWriter {

	/**
	 * Output the data of the table as a JSON
	 * 
	 * @param table
	 *            the {@link ConsoleTable} to output
	 * 
	 * @param writer
	 *            the {@link PrintWriter} to write to
	 */
	public void writeJson(ConsoleTable table, PrintWriter writer) {
		OutputStream os = new WriterOutputStream(writer);
		PrintStream ps = new PrintStream(os);
		try {
			writeJson(table, ps);
		} finally {
			ps.close();
		}
	}

	/**
	 * Output the data of the table as a JSON
	 * 
	 * @param table
	 *            the {@link ConsoleTable} to output
	 * 
	 * @param out
	 *            the {@link PrintStream} to write to
	 */
	public static void writeJson(ConsoleTable table, PrintStream out) {
		if(table == null) {
			throw new IllegalArgumentException("ConsoleTable cannot be null");
		}
		
		if(out == null) {
			throw new IllegalArgumentException("PrintStream to write to cannot be null");
		}
		
		if(table.headerRow == null) {
			throw new IllegalStateException("Header row must be present for conversion to JSON");
		}
		
		List names = new ArrayList();
		for(int index = 0; index < table.headerRow.numColumns(); index++) {
			String name = table.headerRow.column(index);
			
			name = StringUtils.convertToJsonPropertyName(name);
			names.add(name);
		}
		
		// now start iterating over each row
		out.print("[\n");
		for(int rowIndex = 0; rowIndex < table.rows.size(); rowIndex++) {
			ConsoleTableRow row = table.rows.get(rowIndex);
			
			if(rowIndex > 0) {
				out.print(", ");
			}
			out.print("{\n");
			for(int index = 0; index < table.headerRow.numColumns(); index++) {
				if(index > 0) {
					out.print(", ");
				}
				out.print("\"");
				out.print(names.get(index));
				out.print("\" : \"");
				out.print(row.column(index));
				out.print("\"\n");
			}
			out.print("}\n");
		}
		out.print("]");
	}
	
	/**
	 * Output the data as an XML.
	 * 
	 * @param table
	 *            the {@link ConsoleTable} to output
	 * 
	 * @param writer
	 *            the {@link PrintStream} to write to
	 * 
	 * @param parentXmlTag
	 *            the uber XML tag to wrap items into
	 * 
	 * @param rowTag
	 *            the tag to use for wrapping each row of data
	 */
	public void writeXml(ConsoleTable table, PrintWriter writer, String parentXmlTag, String rowTag) {
		OutputStream os = new WriterOutputStream(writer);
		PrintStream ps = new PrintStream(os);
		try {
			writeJson(table, ps);
		} finally {
			ps.close();
		}
	}
	
	/**
	 * Output the data as an XML.
	 * 
	 * @param table
	 *            the {@link ConsoleTable} to output
	 * 
	 * @param out
	 *            the {@link PrintWriter} to write to
	 * 
	 * @param parentXmlTag
	 *            the uber XML tag to wrap items into
	 * 
	 * @param rowTag
	 *            the tag to use for wrapping each row of data
	 */
	public static void writeXml(ConsoleTable table, PrintStream out, String parentXmlTag, String rowTag) {
		if(table == null) {
			throw new IllegalArgumentException("ConsoleTable cannot be null");
		}
		
		if(out == null) {
			throw new IllegalArgumentException("PrintStream to write to cannot be null");
		}
		
		if(table.headerRow == null) {
			throw new IllegalStateException("Header row must be present for conversion to XML");
		}
		
		List names = new ArrayList();
		for(int index = 0; index < table.headerRow.numColumns(); index++) {
			String name = table.headerRow.column(index);
			
			name = StringUtils.convertToJsonPropertyName(name);
			names.add(name);
		}
		
		// now start itearting over each row
		out.print("<" + parentXmlTag + ">\n");
		for(int rowIndex = 0; rowIndex < table.rows.size(); rowIndex++) {
			ConsoleTableRow row = table.rows.get(rowIndex);
			out.print("<" + rowTag + ">\n");
			for(int index = 0; index < table.headerRow.numColumns(); index++) {
				out.print("<");
				out.print(names.get(index));
				out.print(">");

				out.print(row.column(index));
				
				out.print("\n");

			}
			out.print("\n");
		}
		out.print("\n");
	}
	
	/**
	 * Output the data of the table as a CSV
	 * 
	 * @param table
	 *            the {@link ConsoleTable} to output
	 * 
	 * @param writer
	 *            the {@link PrintWriter} to write to
	 */
	public void writeCsv(ConsoleTable table, PrintWriter writer) {
		OutputStream os = new WriterOutputStream(writer);
		PrintStream ps = new PrintStream(os);
		try {
			writeCsv(table, ps);
		} finally {
			ps.close();
		}
	}

	/**
	 * Output the data of the table as a CSV
	 * 
	 * @param table
	 *            the {@link ConsoleTable} to output
	 * 
	 * @param out
	 *            the {@link PrintStream} to write to
	 */
	public static void writeCsv(ConsoleTable table, PrintStream out) {
		if(table == null) {
			throw new IllegalArgumentException("ConsoleTable cannot be null");
		}
		
		if(out == null) {
			throw new IllegalArgumentException("PrintStream to write to cannot be null");
		}
		
		final int columns = table.headerRow.numColumns();
		if(table.headerRow != null) {
			for(int index = 0; index < columns; index++) {
				if(index > 0) {
					out.print(",");
				}
				out.print(table.headerRow.column(index));
			}
			out.print("\n");
		}
		
		// each row
		for(ConsoleTableRow row : table.rows) {
			for(int index = 0; index < columns; index++) {
				if(index > 0) {
					out.print(",");
				}
				out.print(row.column(index));
			}
			out.print("\n");
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy