blob: 02aaa63812675b2b9b886a142142c377d5445f4c [file] [log] [blame]
/*
* Copyright 1999-2011 Alibaba Group.
*
* 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.alibaba.dubbo.remoting.telnet.support;
import java.util.Arrays;
import java.util.List;
/**
* TelnetUtils
*
* @author william.liangf
*/
public class TelnetUtils {
public static String toList(List<List<String>> table) {
int[] widths = new int[table.get(0).size()];
for (int j = 0; j < widths.length; j ++) {
for (List<String> row : table) {
widths[j] = Math.max(widths[j], row.get(j).length());
}
}
StringBuilder buf = new StringBuilder();
for (List<String> row : table) {
if (buf.length() > 0) {
buf.append("\r\n");
}
for (int j = 0; j < widths.length; j ++) {
if (j > 0) {
buf.append(" - ");
}
String value = row.get(j);
buf.append(value);
if (j < widths.length - 1) {
int pad = widths[j] - value.length();
if (pad > 0) {
for (int k = 0; k < pad; k ++) {
buf.append(" ");
}
}
}
}
}
return buf.toString();
}
public static String toTable(String[] header, List<List<String>> table) {
return toTable(Arrays.asList(header), table);
}
public static String toTable(List<String> header, List<List<String>> table) {
int totalWidth = 0 ;
int[] widths = new int[header.size()];
int maxwidth = 70;
int maxcountbefore = 0;
for (int j = 0; j < widths.length; j ++) {
widths[j] = Math.max(widths[j], header.get(j).length());
}
for (List<String> row : table) {
int countbefore = 0;
for (int j = 0; j < widths.length; j ++) {
widths[j] = Math.max(widths[j], row.get(j).length() );
totalWidth = (totalWidth + widths[j])> maxwidth ? maxwidth : (totalWidth + widths[j]);
if (j<widths.length -1){
countbefore = countbefore + widths[j];
}
}
maxcountbefore = Math.max(countbefore, maxcountbefore);
}
widths[widths.length-1] = Math.min(widths[widths.length-1], maxwidth-maxcountbefore);
StringBuilder buf = new StringBuilder();
//line
buf.append("+");
for (int j = 0; j < widths.length; j ++) {
for (int k = 0; k < widths[j] + 2; k ++) {
buf.append("-");
}
buf.append("+");
}
buf.append("\r\n");
//header
buf.append("|");
for (int j = 0; j < widths.length; j ++) {
String cell = header.get(j);
buf.append(" ");
buf.append(cell);
int pad = widths[j] - cell.length();
if (pad > 0) {
for (int k = 0; k < pad; k ++) {
buf.append(" ");
}
}
buf.append(" |");
}
buf.append("\r\n");
//line
buf.append("+");
for (int j = 0; j < widths.length; j ++) {
for (int k = 0; k < widths[j] + 2; k ++) {
buf.append("-");
}
buf.append("+");
}
buf.append("\r\n");
//content
for (List<String> row : table) {
StringBuffer rowbuf = new StringBuffer();
rowbuf.append("|");
for (int j = 0; j < widths.length; j ++) {
String cell = row.get(j);
rowbuf.append(" ");
int remaing = cell.length();
while (remaing > 0){
if (rowbuf.length() >= totalWidth ){
buf.append(rowbuf.toString());
rowbuf = new StringBuffer();
// for(int m = 0;m < maxcountbefore && maxcountbefore < totalWidth ; m++){
// rowbuf.append(" ");
// }
}
rowbuf.append(cell.substring(cell.length()-remaing, cell.length()-remaing +1));
remaing -- ;
}
int pad = widths[j] - cell.length();
if (pad > 0) {
for (int k = 0; k < pad; k ++) {
rowbuf.append(" ");
}
}
rowbuf.append(" |");
}
buf.append(rowbuf).append("\r\n");
}
//line
buf.append("+");
for (int j = 0; j < widths.length; j ++) {
for (int k = 0; k < widths[j] + 2; k ++) {
buf.append("-");
}
buf.append("+");
}
buf.append("\r\n");
return buf.toString();
}
}