Package org.pentaho.platform.plugin.services.connections.xquery

Source Code of org.pentaho.platform.plugin.services.connections.xquery.XQMetaData

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.platform.plugin.services.connections.xquery;

import net.sf.saxon.om.Axis;
import net.sf.saxon.om.AxisIterator;
import net.sf.saxon.tinytree.TinyNodeImpl;
import net.sf.saxon.type.Type;
import org.pentaho.commons.connection.AbstractPentahoMetaData;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* @author wseyler
*
*         TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style -
*         Code Templates
*/
public class XQMetaData extends AbstractPentahoMetaData {
  public static final String DEFAULT_COLUMN_NAME = "Default Column"; //$NON-NLS-1$

  private Object[][] columnHeaders;

  private Object[][] rowHeaders;

  private XQConnection connection;

  int rowCount = 0;

  public XQMetaData( final XQConnection xqConnection, final Iterator iter ) {
    this.connection = xqConnection;
    List headers = new ArrayList();
    while ( iter.hasNext() ) {
      rowCount++;
      Object obj = iter.next();
      if ( obj instanceof TinyNodeImpl ) {
        boolean processedChildren = false;
        AxisIterator aIter = ( (TinyNodeImpl) obj ).iterateAxis( Axis.DESCENDANT );
        Object descendent = aIter.next();
        while ( descendent != null ) {
          if ( ( descendent instanceof TinyNodeImpl ) && ( ( (TinyNodeImpl) descendent )
            .getNodeKind() == Type.ELEMENT ) ) {
            TinyNodeImpl descNode = (TinyNodeImpl) descendent;
            processedChildren = true;
            if ( !headers.contains( descNode.getDisplayName() ) ) {
              headers.add( descNode.getDisplayName() );
            }
          }
          descendent = aIter.next();
        }
        if ( !processedChildren ) {
          Object value = ( (TinyNodeImpl) obj ).getDisplayName();
          if ( !headers.contains( value ) ) {
            headers.add( value );
          }
        }
      }
    }
    if ( headers.size() > 0 ) {
      columnHeaders = new Object[1][headers.size()];
      Iterator headerIter = headers.iterator();
      int i = 0;
      while ( headerIter.hasNext() ) {
        columnHeaders[0][i] = headerIter.next();
        i++;
      }
    } else {
      columnHeaders = new Object[1][1];
      columnHeaders[0][0] = XQMetaData.DEFAULT_COLUMN_NAME;
    }

  }

  public int getRowCount() {
    return rowCount;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.pentaho.connection.IPentahoMetaData#getColumnHeaders()
   */
  @Override
  public Object[][] getColumnHeaders() {
    return columnHeaders;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.pentaho.connection.IPentahoMetaData#getRowHeaders()
   */
  @Override
  public Object[][] getRowHeaders() {
    return rowHeaders;
  }
}
TOP

Related Classes of org.pentaho.platform.plugin.services.connections.xquery.XQMetaData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.