001 package jp.osdl.jbento2.analyzer;
002
003 import java.util.ArrayList;
004 import java.util.HashMap;
005 import java.util.Iterator;
006 import java.util.List;
007 import java.util.Map;
008 import org.apache.commons.lang.StringUtils;
009
010 public class TextTable {
011
012 public static final int ALIGN_LEFT = 0;
013 public static final int ALIGN_RIGHT = 1;
014 private static final String LINE_SEPARATOR =
015 System.getProperty("line.separator");
016
017 private int columns;
018 private String delimiter;
019 private Map alignMap = new HashMap();
020 private List contentsList = new ArrayList();
021
022 public TextTable(int columns, int defaultAlign, String delimiter) {
023 this.columns = columns;
024 for (int i = 0; i < columns; i++) {
025 setAlign(i, defaultAlign);
026 }
027 this.delimiter = delimiter;
028 }
029
030 public void setAlign(int column, int align) {
031 alignMap.put(new Integer(column), new Integer(align));
032 }
033
034 public int getAlign(int column) {
035 return ((Integer)alignMap.get(new Integer(column))).intValue();
036 }
037
038 public void addSeparator(String s) {
039 contentsList.add(new Separator(s));
040 }
041
042 public void addRow(String[] contents) {
043 contentsList.add(contents);
044 }
045
046 public String toString() {
047 Map lengthMap = new HashMap();
048 for (int i = 0; i < columns; i++) {
049 int max = 0;
050 for (Iterator it = contentsList.iterator(); it.hasNext(); ) {
051 Object o = it.next();
052 if (o instanceof Separator) {
053 continue;
054 }
055 String s = ((String[])o)[i];
056 if (max < s.length()) {
057 max = s.length();
058 }
059 }
060 lengthMap.put(new Integer(i), new Integer(max));
061 }
062
063 int totalLength = delimiter.length() * (columns - 1);
064 for (Iterator it = lengthMap.values().iterator(); it.hasNext(); ) {
065 totalLength += ((Integer)it.next()).intValue();
066 }
067
068 StringBuffer result = new StringBuffer();
069 for (Iterator it = contentsList.iterator(); it.hasNext(); ) {
070 Object o = it.next();
071 if (o instanceof Separator) {
072 result.append(
073 StringUtils.leftPad("", totalLength, ((Separator)o).s));
074 result.append(LINE_SEPARATOR);
075 continue;
076 }
077 String[] row = (String[])o;
078 for (int i = 0; i < columns; i++) {
079 if (getAlign(i) == ALIGN_LEFT) {
080 result.append(
081 StringUtils.rightPad(
082 row[i],
083 ((Integer)lengthMap.get(new Integer(i))).intValue()));
084 result.append(delimiter);
085 } else if (getAlign(i) == ALIGN_RIGHT) {
086 result.append(
087 StringUtils.leftPad(
088 row[i],
089 ((Integer)lengthMap.get(new Integer(i))).intValue()));
090 result.append(delimiter);
091 }
092 }
093 if (result.length() != 0) {
094 result.deleteCharAt(result.length() - 1);
095 }
096 result.append(LINE_SEPARATOR);
097 }
098 return result.toString();
099 }
100
101 private class Separator {
102 private String s;
103 public Separator(String s) {
104 this.s = s;
105 }
106 }
107
108 }