package com.github.ompc.greys.core.textui;
import org.apache.commons.lang3.StringUtils;
import java.util.Scanner;
/**
* KV排版控件
* Created by oldmanpushcart@gmail.com on 15/5/9.
*/
public class TKv implements TComponent {
private final TTable tTable;
public TKv() {
this.tTable = new TTable(new TTable.ColumnDefine[]{
new TTable.ColumnDefine(TTable.Align.RIGHT),
new TTable.ColumnDefine(TTable.Align.RIGHT),
new TTable.ColumnDefine(TTable.Align.LEFT)
})
.padding(0);
this.tTable.getBorder().set(TTable.Border.BORDER_NON);
}
public TKv(TTable.ColumnDefine keyColumnDefine, TTable.ColumnDefine valueColumnDefine) {
this.tTable = new TTable(new TTable.ColumnDefine[]{
keyColumnDefine,
new TTable.ColumnDefine(TTable.Align.RIGHT),
valueColumnDefine
})
.padding(0);
this.tTable.getBorder().set(TTable.Border.BORDER_NON);
}
public TKv add(final Object key, final Object value) {
tTable.addRow(key, " : ", value);
return this;
}
@Override
public String rendering() {
return filterEmptyLine(tTable.rendering());
}
/*
* 出现多余的空行的原因是,KVview在输出时,会补全空格到最长的长度。所以在"yyyyy”后面会多出来很多的空格。
* 再经过TableView的固定列处理,多余的空格就会在一行里放不下,输出成两行(第二行前面是空格)
*
* @see https://github.com/oldmanpushcart/greys-anatomy/issues/82
*/
private String filterEmptyLine(String content) {
final StringBuilder sb = new StringBuilder();
Scanner scanner = null;
try {
scanner = new Scanner(content);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line != null) {
//清理一行后面多余的空格
line = StringUtils.stripEnd(line, " ");
if (line.isEmpty()) {
line = " ";
}
}
sb.append(line).append('\n');
}
} finally {
if (null != scanner) {
scanner.close();
}
}
return sb.toString();
// return content;
}
public static void main(String... args) {
final TKv tKv = new TKv(new TTable.ColumnDefine(TTable.Align.RIGHT),new TTable.ColumnDefine(10,false, TTable.Align.LEFT));
tKv.add("KEY-1","ABCDEFGHIJKLMNOPQRSTUVWXYZ");
tKv.add("KEY-2","1234567890");
tKv.add("KEY-3","1234567890");
final TTable tTable = new TTable(new TTable.ColumnDefine[]{
new TTable.ColumnDefine(),
new TTable.ColumnDefine(20,false, TTable.Align.LEFT)
});
tTable.addRow("OPTIONS", tKv.rendering());
System.out.println(tTable.rendering());
}
}