1 package jp.osdl.jbento2.analyzer; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.Iterator; 6 import java.util.List; 7 import java.util.Map; 8 import org.apache.commons.lang.StringUtils; 9 10 public class TextTable { 11 12 public static final int ALIGN_LEFT = 0; 13 public static final int ALIGN_RIGHT = 1; 14 private static final String LINE_SEPARATOR = 15 System.getProperty("line.separator"); 16 17 private int columns; 18 private String delimiter; 19 private Map alignMap = new HashMap(); 20 private List contentsList = new ArrayList(); 21 22 public TextTable(int columns, int defaultAlign, String delimiter) { 23 this.columns = columns; 24 for (int i = 0; i < columns; i++) { 25 setAlign(i, defaultAlign); 26 } 27 this.delimiter = delimiter; 28 } 29 30 public void setAlign(int column, int align) { 31 alignMap.put(new Integer(column), new Integer(align)); 32 } 33 34 public int getAlign(int column) { 35 return ((Integer)alignMap.get(new Integer(column))).intValue(); 36 } 37 38 public void addSeparator(String s) { 39 contentsList.add(new Separator(s)); 40 } 41 42 public void addRow(String[] contents) { 43 contentsList.add(contents); 44 } 45 46 public String toString() { 47 Map lengthMap = new HashMap(); 48 for (int i = 0; i < columns; i++) { 49 int max = 0; 50 for (Iterator it = contentsList.iterator(); it.hasNext(); ) { 51 Object o = it.next(); 52 if (o instanceof Separator) { 53 continue; 54 } 55 String s = ((String[])o)[i]; 56 if (max < s.length()) { 57 max = s.length(); 58 } 59 } 60 lengthMap.put(new Integer(i), new Integer(max)); 61 } 62 63 int totalLength = delimiter.length() * (columns - 1); 64 for (Iterator it = lengthMap.values().iterator(); it.hasNext(); ) { 65 totalLength += ((Integer)it.next()).intValue(); 66 } 67 68 StringBuffer result = new StringBuffer(); 69 for (Iterator it = contentsList.iterator(); it.hasNext(); ) { 70 Object o = it.next(); 71 if (o instanceof Separator) { 72 result.append( 73 StringUtils.leftPad("", totalLength, ((Separator)o).s)); 74 result.append(LINE_SEPARATOR); 75 continue; 76 } 77 String[] row = (String[])o; 78 for (int i = 0; i < columns; i++) { 79 if (getAlign(i) == ALIGN_LEFT) { 80 result.append( 81 StringUtils.rightPad( 82 row[i], 83 ((Integer)lengthMap.get(new Integer(i))).intValue())); 84 result.append(delimiter); 85 } else if (getAlign(i) == ALIGN_RIGHT) { 86 result.append( 87 StringUtils.leftPad( 88 row[i], 89 ((Integer)lengthMap.get(new Integer(i))).intValue())); 90 result.append(delimiter); 91 } 92 } 93 if (result.length() != 0) { 94 result.deleteCharAt(result.length() - 1); 95 } 96 result.append(LINE_SEPARATOR); 97 } 98 return result.toString(); 99 } 100 101 private class Separator { 102 private String s; 103 public Separator(String s) { 104 this.s = s; 105 } 106 } 107 108 }