001    /******************************************************************************
002     * Copyright (C) MActor Developers. All rights reserved.                        *
003     * ---------------------------------------------------------------------------*
004     * This file is part of MActor.                                               *
005     *                                                                            *
006     * MActor is free software; you can redistribute it and/or modify             *
007     * it under the terms of the GNU General Public License as published by       *
008     * the Free Software Foundation; either version 2 of the License, or          *
009     * (at your option) any later version.                                        *
010     *                                                                            *
011     * MActor is distributed in the hope that it will be useful,                  *
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
014     * GNU General Public License for more details.                               *
015     *                                                                            *
016     * You should have received a copy of the GNU General Public License          *
017     * along with MActor; if not, write to the Free Software                      *
018     * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA *
019     ******************************************************************************/
020    package org.mactor.framework.data;
021    
022    import java.io.IOException;
023    import java.io.StringWriter;
024    import java.io.Writer;
025    import java.util.ArrayList;
026    import java.util.Arrays;
027    import java.util.HashMap;
028    import java.util.List;
029    import java.util.Map;
030    
031    public class DataTable {
032            private List<String> columns = new ArrayList<String>();
033            private List<DataRow> rows = new ArrayList<DataRow>();
034            private Map<String, Integer> columnIndexMap = new HashMap<String, Integer>();
035            public void setColumns(List<String> columns) {
036                    this.columns = new ArrayList<String>();
037                    columnIndexMap.clear();
038                    for (String col : columns) {
039                            addColumn(col);
040                    }
041            }
042            public void addColumn(String column) {
043                    columnIndexMap.put(column, new Integer(columns.size()));
044                    columns.add(column);
045            }
046            public int getColumnCount() {
047                    return columns.size();
048            }
049            public String getColumn(int index) {
050                    return columns.get(index);
051            }
052            public Map<String, String> getRowData(int rowIndex) {
053                    Map<String, String> map = new HashMap<String, String>();
054                    int colCount = getColumnCount();
055                    for (int j = 0; j < colCount; j++) {
056                            String col = getColumn(j);
057                            map.put(col, getValue(rowIndex, col));
058                    }
059                    return map;
060            }
061            public void addRow(List<String> cellValues) {
062                    rows.add(new DataRow(cellValues));
063            }
064            public void addRow(String[] cellValues) {
065                    rows.add(new DataRow(Arrays.asList(cellValues)));
066            }
067            public int getRowCount() {
068                    return rows.size();
069            }
070            public String getValue(int row, String columnName) {
071                    Integer index = columnIndexMap.get(columnName);
072                    if (index == null)
073                            return null;
074                    return getValue(row, index.intValue());
075            }
076            public String getValue(int row, int column) {
077                    if (row >= rows.size())
078                            return null;
079                    return rows.get(row).getValue(column);
080            }
081            public static class DataRow {
082                    private List<String> values = new ArrayList<String>();
083                    public DataRow() {
084                    }
085                    public DataRow(List<String> values) {
086                            this.values = new ArrayList<String>(values);
087                    }
088                    public String getValue(int colIndex) {
089                            if (colIndex >= values.size())
090                                    return null;
091                            return values.get(colIndex);
092                    }
093            }
094            public String toString() {
095                    StringWriter sw = new StringWriter();
096                    try {
097                            writeAsCsv(sw);
098                    } catch (IOException e) {
099                            e.printStackTrace();
100                    }
101                    return sw.toString();
102            }
103            public void writeAsHtml(Writer out) throws IOException {
104                    out.write("\n<table>\n");
105                    out.write("<tr>");
106                    for (String col : columns) {
107                            out.write("<td>");
108                            out.write(col);
109                            out.write("</td>");
110                    }
111                    out.write("</tr>\n");
112                    for (DataRow row : rows) {
113                            out.write("<tr>");
114                            for (String val : row.values) {
115                                    out.write("<td>");
116                                    out.write(val);
117                                    out.write("</td>");
118                            }
119                            out.write("</tr>\n");
120                    }
121                    out.write("</table>\n<br/><br/>");
122            }
123            public void writeAsCsv(Writer out) throws IOException {
124                    for (int i = 0; i < columns.size(); i++) {
125                            out.write(columns.get(i));
126                            if (i < columns.size() - 1)
127                                    out.write(";");
128                    }
129                    for (DataRow row : rows) {
130                            out.write("\n");
131                            for (int i = 0; i < row.values.size(); i++) {
132                                    out.write(row.values.get(i));
133                                    if (i < row.values.size() - 1)
134                                            out.write(";");
135                            }
136                    }
137                    out.write("\n");
138            }
139    }