KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pentaho > core > connection > memory > MemoryResultSet


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  * @created Sep 7, 2005
14  * @author James Dixon
15  */

16
17 package org.pentaho.core.connection.memory;
18
19 import java.util.ArrayList JavaDoc;
20 import java.util.Iterator JavaDoc;
21 import java.util.List JavaDoc;
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 JavaDoc rows;
33
34     protected Iterator JavaDoc iterator = null;
35
36     public MemoryResultSet() {
37         rows = new ArrayList JavaDoc();
38     }
39
40     public MemoryResultSet(IPentahoMetaData metaData) {
41         this.metaData = metaData;
42         rows = new ArrayList JavaDoc();
43     }
44
45     public void setMetaData(IPentahoMetaData metaData) {
46         this.metaData = metaData;
47         rows = new ArrayList JavaDoc();
48     }
49
50     public void setRows(List JavaDoc rows) {
51         this.rows = rows;
52     }
53
54     public int addRow(Object JavaDoc[] row) {
55         rows.add(row);
56         return rows.size()-1;
57     }
58
59     public IPentahoMetaData getMetaData() {
60         return metaData;
61     }
62
63     public Object JavaDoc[] next() {
64         if (iterator == null) {
65             iterator = rows.iterator();
66         }
67         if (iterator.hasNext()) {
68             return (Object JavaDoc[]) iterator.next();
69         } else {
70             return null;
71         }
72     }
73
74     public void close() {
75         // dispose of the iterator so the rows can be iterated again
76
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 JavaDoc[][] colHeads, Object JavaDoc[][] 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 JavaDoc colHeaders, List JavaDoc data) {
97         Object JavaDoc columnHeaders[][] = new String JavaDoc[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 JavaDoc) data.get(i)).toArray());
105         }
106         return result;
107     }
108
109     public static MemoryResultSet createList(String JavaDoc name, List JavaDoc items) {
110         Object JavaDoc columnHeaders[][] = new String JavaDoc[][] { { name } };
111         IPentahoMetaData metaData = new MemoryMetaData(columnHeaders, null);
112         MemoryResultSet result = new MemoryResultSet(metaData);
113         Iterator JavaDoc listIterator = items.iterator();
114         while (listIterator.hasNext()) {
115             Object JavaDoc item = listIterator.next();
116             Object JavaDoc row[] = new Object JavaDoc[] { item };
117             result.addRow(row);
118         }
119         return result;
120     }
121
122     public static MemoryResultSet createFromActionSequenceInputsNode(Node rootNode) {
123         List JavaDoc colHeaders = rootNode.selectNodes("columns/*"); //$NON-NLS-1$
124
Object JavaDoc columnHeaders[][] = new String JavaDoc[1][colHeaders.size()];
125         String JavaDoc columnTypes[] = new String JavaDoc[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); //$NON-NLS-1$
130
}
131         MemoryMetaData metaData = new MemoryMetaData(columnHeaders, null);
132         metaData.setColumnTypes(columnTypes);
133         MemoryResultSet result = new MemoryResultSet(metaData);
134
135         List JavaDoc rowNodes = rootNode.selectNodes("default-value/row"); //$NON-NLS-1$
136
for (int r = 0; r < rowNodes.size(); r++) {
137             Node theNode = (Node) rowNodes.get(r);
138             Object JavaDoc[] theRow = new Object JavaDoc[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     /**
156      * Returns the value of the specified row and the specified column from
157      * within the resultset.
158      *
159      * @param row
160      * the row index.
161      * @param column
162      * the column index.
163      * @return the value.
164      */

165     public Object JavaDoc getValueAt(int row, int column) {
166         Object JavaDoc[] theRow = (Object JavaDoc[]) 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 JavaDoc columnHeaders[][] = metadata.getColumnHeaders();
178
179             MemoryMetaData cachedMetaData = new MemoryMetaData(columnHeaders, null);
180             MemoryResultSet cachedResultSet = new MemoryResultSet(cachedMetaData);
181
182             Object JavaDoc[] 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 JavaDoc[] getDataColumn(int column) {
198         Object JavaDoc[] result = new Object JavaDoc[getRowCount()];
199         int rowIndex = 0;
200         Iterator JavaDoc iter = rows.iterator();
201         while (iter.hasNext()) {
202             result[rowIndex] = ((Object JavaDoc[]) iter.next())[column];
203             rowIndex++;
204         }
205         return result;
206     }
207
208     public Object JavaDoc[] getDataRow(int row) {
209         if (row >= rows.size()) {
210             return null;
211         }
212         return (Object JavaDoc[]) rows.get(row);
213     }
214 }
215
Popular Tags