KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pentaho > plugin > jfreereport > helper > PentahoTableModel


1 /*
2  * Copyright 2006 Pentaho Corporation. All rights reserved.
3  * This software was developed by Pentaho Corporation and is provided under the terms
4  * of the Mozilla Public License, Version 1.1, or any later version. You may not use
5  * this file except in compliance with the license. If you need a copy of the license,
6  * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
7  * BI Platform. The Initial Developer is Pentaho Corporation.
8  *
9  * Software distributed under the Mozilla Public License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
11  * the license for the specific language governing your rights and limitations.
12  *
13  * This TableModel is used to wrap a PentahoResultSet object into a TableModel that
14  * can be used as input to a JFreeReport. It could also be used as input to a
15  * swing JTable.
16  *
17  * Created Sep 8, 2005
18  * @author mbatchel
19  */

20 package org.pentaho.plugin.jfreereport.helper;
21
22 import javax.swing.table.AbstractTableModel JavaDoc;
23
24 import org.jfree.report.util.CloseableTableModel;
25 import org.pentaho.core.connection.IPentahoResultSet;
26 import org.pentaho.data.connection.mdx.MDXMetaData;
27 import org.pentaho.data.connection.mdx.MDXResultSet;
28
29 // import org.jfree.report.modules.misc.tablemodel.TypeMapper;
30

31 public class PentahoTableModel extends AbstractTableModel JavaDoc implements
32     CloseableTableModel {
33   private static final long serialVersionUID = 696878055074045444L;
34
35   private IPentahoResultSet resultSet;
36
37   private transient Object JavaDoc[][] rowHeaders;
38
39   public PentahoTableModel(IPentahoResultSet rs) {
40     super();
41     resultSet = rs;
42   }
43
44   public int getColumnCount() {
45     if (resultSet == null) {
46       return 0;
47     }
48
49     if (rowHeaders == null) {
50       rowHeaders = resultSet.getMetaData().getRowHeaders();
51     }
52
53     if (rowHeaders != null && rowHeaders.length > 0) {
54       return rowHeaders[0].length + resultSet.getColumnCount();
55     } else {
56       return resultSet.getColumnCount();
57     }
58   }
59
60   public Object JavaDoc getValueAt(int rowIndex, int columnIndex) {
61     if (resultSet == null) {
62       return null;
63     }
64
65     if (rowHeaders == null) {
66       rowHeaders = resultSet.getMetaData().getRowHeaders();
67     }
68
69     if (rowHeaders != null) {
70       if (columnIndex < rowHeaders[0].length) {
71         return rowHeaders[rowIndex][columnIndex];
72       } else {
73         columnIndex -= rowHeaders[0].length;
74       }
75     }
76     return resultSet.getValueAt(rowIndex, columnIndex);
77   }
78
79   public int getRowCount() {
80     if (resultSet != null) {
81       return resultSet.getRowCount();
82     }
83     return 0;
84   }
85
86   public String JavaDoc getColumnName(int columnNumber) {
87     if (resultSet == null) {
88       return null;
89     }
90
91     // Flatten out the column headers into one column-name
92
Object JavaDoc[][] columnHeaders = resultSet.getMetaData().getColumnHeaders();
93     if (rowHeaders == null) {
94       rowHeaders = resultSet.getMetaData().getRowHeaders();
95     }
96
97     if (rowHeaders != null) {
98       if (columnNumber < rowHeaders[0].length) {
99         if (resultSet instanceof MDXResultSet) {
100           return ((MDXMetaData) resultSet.getMetaData())
101               .getColumnName(columnNumber);
102         }
103       } else {
104         columnNumber -= rowHeaders[0].length;
105       }
106     }
107     StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
108     for (int i = 0; i < columnHeaders.length; i++) {
109       if (i > 0) {
110         buf.append("/"); //$NON-NLS-1$
111
}
112       buf.append(columnHeaders[i][columnNumber].toString());
113     }
114     return buf.toString();
115   }
116
117   public void close() {
118     // Close the old result set if needed.
119
if (resultSet != null) {
120       resultSet.close();
121     }
122     resultSet = null;
123     // JFreeReport wont listen, but it is always good style to comply to
124
// the contract ..
125
fireTableStructureChanged();
126   }
127 }
128
Popular Tags