/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.jlab.hipo.utils;
import java.util.ArrayList;
/**
*
* @author gavalian
*/
public class TextTable {
private ArrayList headerDesc = new ArrayList();
private ArrayList headerLength = new ArrayList();
private ArrayList tableData = new ArrayList();
private Integer tableIndent = 8;
public TextTable(String header){
this.setHeader(header);
}
public TextTable(String header, String len){
this.setHeader(header,len);
}
public final void setHeader(String h){
headerDesc.clear();
headerLength.clear();
String[] tokens = h.split(":");
for(String item : tokens){
headerDesc.add(item);
headerLength.add(item.length()+4);
}
}
public final void setHeader(String h, String l){
headerDesc.clear();
headerLength.clear();
String[] th = h.split(":");
String[] tl = l.split(":");
for(int loop = 0; loop < th.length; loop++){
headerDesc.add(th[loop]);
headerLength.add(Integer.parseInt(tl[loop]));
}
}
public static Integer[] positionIndex(String posString)
{
String[] tokens = posString.split(":");
Integer[] ticks = new Integer[tokens.length];
for(int loop = 0; loop < tokens.length; loop++)
{
ticks[loop] = Integer.parseInt(tokens[loop]);
}
return ticks;
}
public static String lineWithLength(int len)
{
StringBuilder str = new StringBuilder();
for(int loop = 0; loop < len; loop++) str.append("-");
return str.toString();
}
public String lineWithLengthSymbol(int len, Character sym){
StringBuilder str = new StringBuilder();
for(int loop = 0; loop < len; loop++) str.append(sym);
return str.toString();
}
public String getHeaderLineString(){
StringBuilder str = new StringBuilder();
for(int loop = 0; loop < headerLength.size();loop++){
str.append("+");
str.append(this.lineWithLengthSymbol(headerLength.get(loop), '-'));
}
str.append("+");
return str.toString();
}
public void addData(String[] data){
if(data.length!=headerLength.size()){
System.err.println("[Table data] ---> error. data size "
+ data.length + " does not match with header size = " +
headerLength.size());
return;
}
tableData.add(data);
}
public void show(){
String headerLine = this.getHeaderLineString();
String header = this.getHeaderString("*");
String indentString = this.lineWithLengthSymbol(tableIndent, ' ');
System.err.println();
System.err.println(indentString + headerLine);
System.err.println(indentString + header);
System.err.println(indentString + headerLine);
for(int loop = 0; loop < tableData.size(); loop++){
System.err.println(indentString + this.getFormattedDataString(loop));
}
System.err.println(indentString + headerLine);
System.err.println();
}
@Override
public String toString(){
StringBuilder str = new StringBuilder();
String headerLine = this.getHeaderLineString();
String header = this.getHeaderString("*");
String indentString = this.lineWithLengthSymbol(tableIndent, ' ');
str.append(indentString).append(headerLine).append("\n");
str.append(indentString).append(header).append("\n");
str.append(indentString).append(headerLine).append("\n");
for(int loop = 0; loop < tableData.size(); loop++){
str.append(indentString).append(this.getFormattedDataString(loop)).append("\n");
}
str.append(indentString).append(headerLine).append("\n");
return str.toString();
}
public String getFormattedDataString(int index){
StringBuilder str = new StringBuilder();
String[] array = tableData.get(index);
for(int loop = 0; loop < headerLength.size(); loop++){
str.append("|");
String format = "%" + headerLength.get(loop).toString() + "s";
str.append(String.format(format, array[loop]));
}
str.append("|");
return str.toString();
}
public String getHeaderString(String type)
{
StringBuilder str = new StringBuilder();
for(int loop = 0 ; loop < headerLength.size();loop++){
str.append("|");
String format = "%" + headerLength.get(loop).toString() + "s";
str.append(String.format(format, headerDesc.get(loop)));
}
str.append("|");
return str.toString();
}
public static String headerTop(String positions)
{
StringBuilder str = new StringBuilder();
//str.append("+");
Integer[] index = TextTable.positionIndex(positions);
for(int loop = 0; loop < index.length; loop++)
{
str.append("+");
str.append(TextTable.lineWithLength(index[loop]));
}
str.append("+");
return str.toString();
}
public static String tableHeader(String columnNames, String columnWidths)
{
StringBuilder str = new StringBuilder();
str.append(TextTable.headerTop(columnWidths));
str.append("\n");
Integer[] index = TextTable.positionIndex(columnWidths);
String[] column = columnNames.split(":");
str.append("|");
for(int loop = 0; loop < column.length; loop++){
String format = "%" + index[loop].toString() + "s|";
str.append(String.format(format, column[loop]));
}
str.append("\n");
str.append(TextTable.headerTop(columnWidths));
str.append("\n");
return str.toString();
}
}
Ads help maintain this website.