KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pentaho > data > connection > xquery > XQMetaData


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 15, 2005
14  * @author wseyler
15  */

16
17 package org.pentaho.data.connection.xquery;
18
19 import java.util.ArrayList JavaDoc;
20 import java.util.Iterator JavaDoc;
21 import java.util.List JavaDoc;
22 import net.sf.saxon.om.Axis;
23 import net.sf.saxon.om.AxisIterator;
24 import net.sf.saxon.tinytree.TinyNodeImpl;
25 import net.sf.saxon.type.Type;
26
27 import org.pentaho.core.connection.AbstractPentahoMetaData;
28
29 /**
30  * @author wseyler
31  *
32  * TODO To change the template for this generated type comment go to Window -
33  * Preferences - Java - Code Style - Code Templates
34  */

35 public class XQMetaData extends AbstractPentahoMetaData {
36     public static final String JavaDoc DEFAULT_COLUMN_NAME = "Default Column"; //$NON-NLS-1$
37
private Object JavaDoc[][] columnHeaders;
38     private Object JavaDoc[][] rowHeaders;
39
40     int rowCount = 0;
41
42     public XQMetaData(Iterator JavaDoc iter) {
43         List JavaDoc headers = new ArrayList JavaDoc();
44         while (iter.hasNext()) {
45             rowCount++;
46             Object JavaDoc obj = iter.next();
47             if (obj instanceof TinyNodeImpl) {
48                 boolean processedChildren = false;
49                 AxisIterator aIter = ((TinyNodeImpl) obj).iterateAxis(Axis.DESCENDANT);
50                 Object JavaDoc descendent = aIter.next();
51                 while (descendent != null) {
52                     if (descendent instanceof TinyNodeImpl && ((TinyNodeImpl) descendent).getNodeKind() == Type.ELEMENT) {
53                         TinyNodeImpl descNode = (TinyNodeImpl) descendent;
54                         processedChildren = true;
55                         if (!headers.contains(descNode.getDisplayName())) {
56                             headers.add(descNode.getDisplayName());
57                         }
58                     }
59                     descendent = aIter.next();
60                 }
61                 if (!processedChildren) {
62                     Object JavaDoc value = ((TinyNodeImpl) obj).getDisplayName();
63                     if (!headers.contains(value)) {
64                         headers.add(value);
65                     }
66                 }
67             }
68         }
69         if (headers.size() > 0) {
70             columnHeaders = new Object JavaDoc[1][headers.size()];
71             Iterator JavaDoc headerIter = headers.iterator();
72             int i = 0;
73             while (headerIter.hasNext()) {
74                 columnHeaders[0][i] = headerIter.next();
75                 i++;
76             }
77         } else {
78             columnHeaders = new Object JavaDoc[1][1];
79             columnHeaders[0][0] = DEFAULT_COLUMN_NAME;
80         }
81
82     }
83
84     public int getRowCount() {
85         return rowCount;
86     }
87     
88     /*
89      * (non-Javadoc)
90      *
91      * @see org.pentaho.connection.IPentahoMetaData#getColumnHeaders()
92      */

93     public Object JavaDoc[][] getColumnHeaders() {
94       return columnHeaders;
95     }
96
97     /*
98      * (non-Javadoc)
99      *
100      * @see org.pentaho.connection.IPentahoMetaData#getRowHeaders()
101      */

102     public Object JavaDoc[][] getRowHeaders() {
103       return rowHeaders;
104     }
105 }
106
Popular Tags