1 20 package org.pentaho.plugin.jfreereport.helper; 21 22 import javax.swing.table.AbstractTableModel ; 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 31 public class PentahoTableModel extends AbstractTableModel implements 32 CloseableTableModel { 33 private static final long serialVersionUID = 696878055074045444L; 34 35 private IPentahoResultSet resultSet; 36 37 private transient Object [][] 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 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 getColumnName(int columnNumber) { 87 if (resultSet == null) { 88 return null; 89 } 90 91 Object [][] 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 buf = new StringBuffer (); 108 for (int i = 0; i < columnHeaders.length; i++) { 109 if (i > 0) { 110 buf.append("/"); } 112 buf.append(columnHeaders[i][columnNumber].toString()); 113 } 114 return buf.toString(); 115 } 116 117 public void close() { 118 if (resultSet != null) { 120 resultSet.close(); 121 } 122 resultSet = null; 123 fireTableStructureChanged(); 126 } 127 } 128 | Popular Tags |