de.vandermeer.asciitable.v2.V2_AsciiTable Maven / Gradle / Ivy
/* Copyright 2014 Sven van der Meer
*
* 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 de.vandermeer.asciitable.v2;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import de.vandermeer.asciitable.commons.ObjectToStringStyle;
import de.vandermeer.asciitable.commons.TableException;
import de.vandermeer.asciitable.v2.row.ContentRow;
import de.vandermeer.asciitable.v2.row.RuleRow;
import de.vandermeer.asciitable.v2.row.RuleRowStyle;
import de.vandermeer.asciitable.v2.row.RuleRowType;
import de.vandermeer.asciitable.v2.row.V2_Row;
/**
* 2nd generation ASCII table with flexible column number, column width, wrapping, spanning and renderer with themes.
*
* @author Sven van der Meer <[email protected]>
* @version v1.0.0 build 160319 (19-Mar-16) for Java 1.7
* @since v0.0.5
*/
public class V2_AsciiTable {
/** List of rows of the table. */
List table;
/** Number of columns for the table. */
int colNumber;
/** Default padding for content rows. */
int defaultPadding = 1;
/**
* Creates a new table.
* The number of columns used in the first content row determines the number of columns for the table.
*/
public V2_AsciiTable(){
this(-1);
}
/**
* Creates a new table with default padding to be used for columns in content rows.
* The standard value (if not set) is 1, meaning 1 character left and one character right.
* @param padding default padding
*/
public V2_AsciiTable (int padding){
this.defaultPadding = (padding==-1)?1:padding;
this.table = new LinkedList();
}
/**
* Returns the table's default padding.
* @return default padding
*/
public int getDefaultPadding(){
return this.defaultPadding;
}
/**
* Adds a rule row to the table.
* If the table has no rows specified, the rule will be a top rule. Otherwise it will be a mid rule.
* The renderer will automatically convert a final mid rule (last row of a table) into a bottom rule.
*/
public final void addRule(){
if(this.table.size()==0){
this.table.add(new RuleRow(RuleRowType.TOP));
}
else{
this.table.add(new RuleRow(RuleRowType.MID));
}
}
/**
* Adds a rule with strong (emphasized) style row to the table.
* If the table has no rows specified, the rule will be a top rule. Otherwise it will be a mid rule.
* The renderer will automatically convert a final mid rule (last row of a table) into a bottom rule.
*/
public final void addStrongRule(){
if(this.table.size()==0){
this.table.add(new RuleRow(RuleRowType.TOP, RuleRowStyle.STRONG));
}
else{
this.table.add(new RuleRow(RuleRowType.MID, RuleRowStyle.STRONG));
}
}
/**
* Returns the table.
* @return table
*/
public final List getTable(){
return this.table;
}
/**
* Adds a content row to the table.
* For the first content row added, the number of objects given here determines the number of columns in the table.
* For every subsequent content row, the array must have an entry for each column,
* i.e. the size of the array must be the same as the result of {@link #getColumnCount()}.
* @param columns content of the columns for the row
* @return the created row for further customization
* @throws TableException if parameter is null or does not have the correct size (more or less entries than columns defined for the table)
*/
public final ContentRow addRow(Object ...columns) throws TableException {
ContentRow ret = new ContentRow(columns, this.defaultPadding);
if(this.colNumber==0){
this.colNumber=columns.length;
}
else{
if(columns.length!=this.colNumber){
throw new TableException("wrong columns argument", "wrong number of columns, expected " + this.colNumber + " received " + columns.length);
}
}
this.table.add(ret);
return ret;
}
/**
* Returns the number of columns set for the table.
* @return number of columns
*/
public final int getColumnCount(){
return this.colNumber;
}
/**
* Returns a string with debug information.
* @return string with debug information about the table
*/
public String toString(){
ToStringBuilder ret = new ToStringBuilder(this, ObjectToStringStyle.getStyle())
.append("column count ", this.colNumber)
.append("table ", this.table, false)
.append("")
.append("------------------------------------")
.append("")
;
if(this.table!=null && this.table.size()>0){
for(V2_Row row : this.table){
ret.append(row.toString(4));
ret.append("");
}
}
ret.append("------------------------------------");
return ret.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy