/* * 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(); } }