Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2005 - 2008 Pentaho Corporation.  All rights reserved. 
   * This software was developed by Pentaho Corporation and is provided under the terms 
   * of the Mozilla Public License, Version 1.1, or any later version. You may not use 
   * this file except in compliance with the license. If you need a copy of the license, 
   * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho 
   * BI Platform.  The Initial Developer is Pentaho Corporation.
   *
   * Software distributed under the Mozilla Public License is distributed on an "AS IS" 
  * basis, WITHOUT WARRANTY OF ANY KIND, either express or  implied. Please refer to 
  * the license for the specific language governing your rights and limitations.
  *
  * Created Sep 15, 2005 
  * @author wseyler
  */
 package org.pentaho.platform.plugin.services.connections.xquery;
 
 import java.sql.Date;
 import java.util.Map;
 
 import  net.sf.saxon.om.Axis;
 import  net.sf.saxon.om.AxisIterator;
 import  net.sf.saxon.query.DynamicQueryContext;
 import  net.sf.saxon.query.XQueryExpression;
 import  net.sf.saxon.tinytree.TinyNodeImpl;
 import  net.sf.saxon.trans.XPathException;
 import  net.sf.saxon.type.Type;
 
 import  org.pentaho.commons.connection.IPentahoMetaData;
 import  org.pentaho.commons.connection.IPentahoResultSet;
 import  org.pentaho.commons.connection.memory.MemoryMetaData;
 import  org.pentaho.commons.connection.memory.MemoryResultSet;

Author(s):
wseyler TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
 
 public class XQResultSet implements IPentahoResultSet {
 
   protected static final Log logger = LogFactory.getLog(XQResultSet.class);
 
   protected XQueryExpression exp = null;
 
   protected DynamicQueryContext dynamicContext = null;
 
   protected XQMetaData metaData = null;
 
   protected static final String DELIM = ", "//$NON-NLS-1$
 
   protected static final String EMPTY_STR = ""//$NON-NLS-1$
 
   protected Object currentRow[];
 
   protected boolean keepCurrent = false;
 
   Iterator iter = null;
 
   protected String columnTypes[] = null;

  

Parameters:
exp
dynamicContext
columnTypes
Throws:
XPathException
 
   public XQResultSet(final XQueryExpression expfinal DynamicQueryContext dynamicContextfinal String columnTypes[])
       throws XPathException {
     super();
     this. = columnTypes;
     this. = exp;
     this. = dynamicContext;
     init();
   }
 
   protected void init() throws XPathException {
      = this..evaluate(this.).iterator();
      = new XQMetaData();
     // reset the iterator for the data
      = this..evaluate(this.).iterator();
   }
 
   /*
    * (non-Javadoc)
    * 
    * @see org.pentaho.connection.IPentahoResultSet#getMetaData()
    */
   public IPentahoMetaData getMetaData() {
     return ;
   }
 
  public void rewindNext() {
     = true;
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.connection.IPentahoResultSet#next()
   */
  public Object[] next() {
    if ( && ( != null)) {
       = false;
      return ;
    }
    // Create a map of the headers and assign empty string to them
    OrderedMap resultList = new ListOrderedMap();
    for (int i = 0; i < .getColumnCount(); i++) {
      resultList.put(.getColumnHeaders()[0][i], .);
    }
    // Get the next row of data
    if (.hasNext()) {
      Object o = .next();
      decodeNode(oresultList);
    }
    // get the values
     = new Object[resultList.size()];
    Iterator keyIter = resultList.keySet().iterator();
    int i = 0;
    while (keyIter.hasNext()) {
      [i] = resultList.get(keyIter.next());
      i++;
    }
    // if all the values are the empty string then we're done.
    boolean done = true;
    for (Object element : ) {
      if (!("".equals(element))) { //$NON-NLS-1$
        done = false;
      }
    }
    if (done) {
      return null;
    }
    return ;
  }
  protected void decodeNode(final Object objfinal Map retValue) {
    if (obj instanceof TinyNodeImpl) {
      AxisIterator aIter = ((TinyNodeImpl) obj).iterateAxis(Axis.DESCENDANT);
      Object descendent = aIter.next();
      boolean processedChildren = false;
      int columnIndex = 0;
      while (descendent != null) {
        if ((descendent instanceof TinyNodeImpl) && (((TinyNodeImpl) descendent).getNodeKind() == Type.ELEMENT)) {
          TinyNodeImpl descNode = (TinyNodeImpl) descendent;
          Object value = retValue.get(descNode.getDisplayName());
          if (value == null) {
            value = .;
          }
          if (!(..equals(value))) {
            value = value.toString() + .;
          }
          value = value.toString() + descNode.getStringValue();
          if ((value != null)
              && !value.equals("") && ( != null) && (columnIndex >= 0) && (columnIndex < .)) { //$NON-NLS-1$
            String columnType = [columnIndex].trim();
            if (columnType.equals("java.math.BigDecimal")) { //$NON-NLS-1$
              value = new BigDecimal(value.toString());
            } else if (columnType.equals("java.sql.Timestamp")) { //$NON-NLS-1$
              value = new Timestamp(Long.parseLong(value.toString()));
            } else if (columnType.equals("java.sql.Date")) { //$NON-NLS-1$
              value = new Date(Long.parseLong(value.toString()));
            } else if (columnType.equals("java.lang.Integer")) { //$NON-NLS-1$
              value = new Integer(Integer.parseInt(value.toString()));
            } else if (columnType.equals("java.lang.Double")) { //$NON-NLS-1$
              value = new Double(Double.parseDouble(value.toString()));
            } else if (columnType.equals("java.lang.Long")) { //$NON-NLS-1$
              value = new Long(Long.parseLong(value.toString()));
            }
          }
          retValue.put(descNode.getDisplayName(), value);
          processedChildren = true;
          columnIndex++;
        }
        descendent = aIter.next();
      }
      if (!processedChildren) {
        Object key = ((TinyNodeImpl) obj).getDisplayName();
        Object value = ((TinyNodeImpl) obj).getStringValue();
        retValue.put(keyvalue);
      }
    } else {
      retValue.put(.obj.toString());
    }
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.connection.IPentahoResultSet#close()
   */
  public void close() {
    // TODO Auto-generated method stub
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.connection.IPentahoResultSet#closeConnection()
   */
  public void closeConnection() {
    // TODO Auto-generated method stub
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.connection.IPentahoResultSet#isScrollable()
   */
  public boolean isScrollable() {
    // TODO Auto-generated method stub
    return false;
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.connection.IPentahoResultSet#getValueAt(int, int)
   */
  public Object getValueAt(final int rowfinal int column) {
    Object rowarr[] = getDataRow(row);
    if ((rowarr != null) && (column >= 0) && (column < rowarr.length)) {
      return rowarr[column];
    }
    return null;
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.connection.IPentahoResultSet#getRowCount()
   */
  public int getRowCount() {
    return .getRowCount();
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.connection.IPentahoResultSet#getColumnCount()
   */
  public int getColumnCount() {
    return .getColumnCount();
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.core.runtime.IDisposable#dispose()
   */
  public void dispose() {
    // TODO Auto-generated method stub
  }
  public IPentahoResultSet memoryCopy() {
    try {
      IPentahoMetaData metadata = getMetaData();
      Object columnHeaders[][] = metadata.getColumnHeaders();
      MemoryMetaData cachedMetaData = new MemoryMetaData(columnHeadersnull);
      //set column types of cachedMetaData
      String columnTypeClones[] = new String[.];
      System.arraycopy(, 0, columnTypeClones, 0, .);
      cachedMetaData.setColumnTypes(columnTypeClones);
      
      MemoryResultSet cachedResultSet = new MemoryResultSet(cachedMetaData);
      Object[] rowObjects = next();
      while (rowObjects != null) {
        cachedResultSet.addRow(rowObjects);
        rowObjects = next();
      }
      return cachedResultSet;
    } finally {
      close();
    }
  }
  public void beforeFirst() {
    try {
      init();
    } catch (XPathException e) {
      ..error("Cannot initialize XQResultSet"e);
    }
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.pentaho.connection.IPentahoResultSet#getDataColumn(int)
   * 
   * NOTE: calling this will move the cursor to the top of the result stack
   */
  public Object[] getDataColumn(final int column) {
    beforeFirst(); // go to top just in case we called this after some
    // next()s
    Object[] result = new Object[getRowCount()];
    int rowIndex = 0;
    Object[] rowData = next();
    while (rowData != null) {
      result[rowIndex] = rowData[column];
      rowIndex++;
      rowData = next();
    }
    beforeFirst();
    return result;
  }
  public Object[] getDataRow(final int row) {
    beforeFirst(); // go to top
    int count = 0;
    while (count++ < row) {
      next();
    }
    Object[] dataRow = next();
    beforeFirst();
    return dataRow;
  }
New to GrepCode? Check out our FAQ X