| 1 16 17 package org.pentaho.core.connection.memory; 18 19 import java.util.ArrayList ; 20 import java.util.Iterator ; 21 import java.util.List ; 22 23 import org.dom4j.Node; 24 import org.pentaho.core.connection.IPentahoMetaData; 25 import org.pentaho.core.connection.IPentahoResultSet; 26 import org.pentaho.core.util.XmlHelper; 27 28 public class MemoryResultSet implements IPentahoResultSet { 29 30 private IPentahoMetaData metaData; 31 32 protected List rows; 33 34 protected Iterator iterator = null; 35 36 public MemoryResultSet() { 37 rows = new ArrayList (); 38 } 39 40 public MemoryResultSet(IPentahoMetaData metaData) { 41 this.metaData = metaData; 42 rows = new ArrayList (); 43 } 44 45 public void setMetaData(IPentahoMetaData metaData) { 46 this.metaData = metaData; 47 rows = new ArrayList (); 48 } 49 50 public void setRows(List rows) { 51 this.rows = rows; 52 } 53 54 public int addRow(Object [] row) { 55 rows.add(row); 56 return rows.size()-1; 57 } 58 59 public IPentahoMetaData getMetaData() { 60 return metaData; 61 } 62 63 public Object [] next() { 64 if (iterator == null) { 65 iterator = rows.iterator(); 66 } 67 if (iterator.hasNext()) { 68 return (Object []) iterator.next(); 69 } else { 70 return null; 71 } 72 } 73 74 public void close() { 75 iterator = null; 77 } 78 79 public void closeConnection() { 80 close(); 81 } 82 83 public void dispose() { 84 close(); 85 } 86 87 public static MemoryResultSet createFromArrays(Object [][] colHeads, Object [][] theRows) { 88 IPentahoMetaData metaData = new MemoryMetaData(colHeads, null); 89 MemoryResultSet result = new MemoryResultSet(metaData); 90 for (int i = 0; i < theRows.length; i++) { 91 result.addRow(theRows[i]); 92 } 93 return result; 94 } 95 96 public static MemoryResultSet createFromLists(List colHeaders, List data) { 97 Object columnHeaders[][] = new String [1][colHeaders.size()]; 98 for (int i = 0; i < colHeaders.size(); i++) { 99 columnHeaders[0][i] = colHeaders.get(i); 100 } 101 IPentahoMetaData metaData = new MemoryMetaData(columnHeaders, null); 102 MemoryResultSet result = new MemoryResultSet(metaData); 103 for (int i = 0; i < data.size(); i++) { 104 result.addRow(((List ) data.get(i)).toArray()); 105 } 106 return result; 107 } 108 109 public static MemoryResultSet createList(String name, List items) { 110 Object columnHeaders[][] = new String [][] { { name } }; 111 IPentahoMetaData metaData = new MemoryMetaData(columnHeaders, null); 112 MemoryResultSet result = new MemoryResultSet(metaData); 113 Iterator listIterator = items.iterator(); 114 while (listIterator.hasNext()) { 115 Object item = listIterator.next(); 116 Object row[] = new Object [] { item }; 117 result.addRow(row); 118 } 119 return result; 120 } 121 122 public static MemoryResultSet createFromActionSequenceInputsNode(Node rootNode) { 123 List colHeaders = rootNode.selectNodes("columns/*"); Object columnHeaders[][] = new String [1][colHeaders.size()]; 125 String columnTypes[] = new String [colHeaders.size()]; 126 for (int i = 0; i < colHeaders.size(); i++) { 127 Node theNode = (Node) colHeaders.get(i); 128 columnHeaders[0][i] = theNode.getName(); 129 columnTypes[i] = XmlHelper.getNodeText("@type", theNode); } 131 MemoryMetaData metaData = new MemoryMetaData(columnHeaders, null); 132 metaData.setColumnTypes(columnTypes); 133 MemoryResultSet result = new MemoryResultSet(metaData); 134 135 List rowNodes = rootNode.selectNodes("default-value/row"); for (int r = 0; r < rowNodes.size(); r++) { 137 Node theNode = (Node) rowNodes.get(r); 138 Object [] theRow = new Object [columnHeaders[0].length]; 139 for (int c = 0; c < columnHeaders[0].length; c++) { 140 theRow[c] = XmlHelper.getNodeText(columnHeaders[0][c].toString(), theNode); 141 } 142 result.addRow(theRow); 143 } 144 return result; 145 } 146 147 public boolean isScrollable() { 148 return true; 149 } 150 151 public int getRowCount() { 152 return rows.size(); 153 } 154 155 165 public Object getValueAt(int row, int column) { 166 Object [] theRow = (Object []) rows.get(row); 167 return theRow[column]; 168 } 169 170 public int getColumnCount() { 171 return metaData.getColumnCount(); 172 } 173 174 public IPentahoResultSet memoryCopy() { 175 try { 176 IPentahoMetaData metadata = getMetaData(); 177 Object columnHeaders[][] = metadata.getColumnHeaders(); 178 179 MemoryMetaData cachedMetaData = new MemoryMetaData(columnHeaders, null); 180 MemoryResultSet cachedResultSet = new MemoryResultSet(cachedMetaData); 181 182 Object [] rowObjects = next(); 183 while (rowObjects != null) { 184 cachedResultSet.addRow(rowObjects); 185 rowObjects = next(); 186 } 187 return cachedResultSet; 188 } finally { 189 close(); 190 } 191 } 192 193 public void beforeFirst() { 194 iterator = rows.iterator(); 195 } 196 197 public Object [] getDataColumn(int column) { 198 Object [] result = new Object [getRowCount()]; 199 int rowIndex = 0; 200 Iterator iter = rows.iterator(); 201 while (iter.hasNext()) { 202 result[rowIndex] = ((Object []) iter.next())[column]; 203 rowIndex++; 204 } 205 return result; 206 } 207 208 public Object [] getDataRow(int row) { 209 if (row >= rows.size()) { 210 return null; 211 } 212 return (Object []) rows.get(row); 213 } 214 } 215 | Popular Tags |