You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2007/01/19 16:35:40 UTC

svn commit: r497844 - in /jackrabbit/trunk/contrib/spi: jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/ spi/src/main/java/org/apache/jackrabbit/spi/ spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/

Author: reschke
Date: Fri Jan 19 07:35:38 2007
New Revision: 497844

URL: http://svn.apache.org/viewvc?view=rev&rev=497844
Log:
spi - QueryInfo: change to return QueryResultRowIterator
spi - QueryResultRow/QueryResultRowIterator: new
jcr2spi - Update implementation accordingly (note jcr:score now is returned with property type Double)
spi2dav - Minor changes to keep it compiling; full implementation of changed interface to be done

Added:
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRow.java   (with props)
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRowIterator.java   (with props)
Modified:
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/RowIteratorImpl.java
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/ScoreNodeIterator.java
    jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryInfo.java
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IteratorHelper.java
    jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryInfoImpl.java

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java?view=diff&rev=497844&r1=497843&r2=497844
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java Fri Jan 19 07:35:38 2007
@@ -16,22 +16,21 @@
  */
 package org.apache.jackrabbit.jcr2spi.query;
 
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import javax.jcr.Item;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
 import org.apache.jackrabbit.jcr2spi.ItemManager;
 import org.apache.jackrabbit.jcr2spi.state.ItemStateManager;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.spi.IdIterator;
 import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.spi.QueryInfo;
-import org.apache.jackrabbit.spi.ItemId;
-import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.spi.QueryResultRow;
+import org.apache.jackrabbit.spi.QueryResultRowIterator;
 import org.slf4j.Logger;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Item;
-
-import java.util.NoSuchElementException;
-import java.util.Iterator;
+import org.slf4j.LoggerFactory;
 
 /**
  * Implements a {@link javax.jcr.NodeIterator} returned by
@@ -48,14 +47,8 @@
     /** ItemManager to turn Ids into Node instances */
     private final ItemStateManager itemStateMgr;
 
-    /** The query result info */
-    private final QueryInfo queryInfo;
-
-    /** The ItemId's of the result nodes */
-    private final IdIterator ids;
-
-    /** Index of the jcr:score column. */
-    private final int scoreIndex;
+    /** The QueryResultRows */
+    private final QueryResultRowIterator rows;
 
     /** Current position of this node iterator */
     private int pos = -1;
@@ -69,6 +62,9 @@
     /** Reference to the next node instance */
     private Node next;
 
+    /** Score for the next node */
+    private double nextScore;
+
     /**
      * Creates a new <code>NodeIteratorImpl</code> instance.
      *
@@ -82,22 +78,8 @@
                             QueryInfo queryInfo) throws RepositoryException {
         this.itemMgr = itemMgr;
         this.itemStateMgr = itemStateMgr;
-        this.queryInfo = queryInfo;
-        this.ids = queryInfo.getNodeIds();
+        this.rows = queryInfo.getRows();
         
-        QName[] columnNames = queryInfo.getColumnNames();
-        int idx = -1;
-        for (int i = 0; i < columnNames.length; i++) {
-            if (columnNames[i].getNamespaceURI().equals(QName.NS_JCR_URI)
-                && columnNames[i].getLocalName().startsWith(QName.JCR_SCORE.getLocalName())) {
-                idx = i;
-                break;
-            }
-        }
-        if (idx == -1) {
-            throw new RepositoryException("no jcr:score column in query result");
-        }
-        this.scoreIndex = idx;
         fetchNext();
     }
 
@@ -110,16 +92,11 @@
      * @throws NoSuchElementException if there is no next node.
      * @see ScoreNodeIterator#getScore()
      */
-    public float getScore() throws NoSuchElementException {
+    public double getScore() throws NoSuchElementException {
         if (!hasNext()) {
             throw new NoSuchElementException();
         }
-        String scoreString = queryInfo.getValues(nextId)[scoreIndex];
-        try {
-            return Float.parseFloat(scoreString);
-        } catch (NumberFormatException e) {
-            throw new NoSuchElementException();
-        }
+        return nextScore;
     }
 
     //-------------------------------------------------------< NodeIterator >---
@@ -155,7 +132,7 @@
         if (skipNum == 0) {
             // do nothing
         } else {
-            ids.skip(skipNum - 1);
+            rows.skip(skipNum - 1);
             pos += skipNum - 1;
             fetchNext();
         }
@@ -175,8 +152,8 @@
      * @see javax.jcr.RangeIterator#getSize()
      */
     public long getSize() {
-        if (ids.getSize() != -1) {
-            return ids.getSize() - invalid;
+        if (rows.getSize() != -1) {
+            return rows.getSize() - invalid;
         } else {
             return -1;
         }
@@ -233,18 +210,17 @@
     private void fetchNext() {
         // reset
         next = null;
-        while (next == null && ids.hasNext()) {
+        nextScore = 0;
+        
+        while (next == null && rows.hasNext()) {
             try {
-                ItemId id = ids.nextId();
-                if (!id.denotesNode()) {
-                    log.error("NodeId expected. Found PropertyId: " + id);
-                    continue;
-                }
-                nextId = (NodeId)id;
+                QueryResultRow row = rows.nextQueryResultRow();
+                nextId = row.getNodeId();
                 Item tmp = itemMgr.getItem(itemStateMgr.getItemState(nextId));
 
                 if (tmp.isNode()) {
                     next = (Node) tmp;
+                    nextScore = row.getScore();
                 } else {
                     log.warn("Item with Id is not a Node: " + nextId);
                     // try next

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/RowIteratorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/RowIteratorImpl.java?view=diff&rev=497844&r1=497843&r2=497844
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/RowIteratorImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/RowIteratorImpl.java Fri Jan 19 07:35:38 2007
@@ -16,30 +16,32 @@
  */
 package org.apache.jackrabbit.jcr2spi.query;
 
-import org.apache.jackrabbit.name.IllegalNameException;
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.jackrabbit.name.UnknownPrefixException;
-import org.apache.jackrabbit.name.NoPrefixDeclaredException;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.NameFormat;
-import org.apache.jackrabbit.value.LongValue;
-import org.apache.jackrabbit.value.PathValue;
-import org.apache.jackrabbit.value.StringValue;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
 
 import javax.jcr.ItemNotFoundException;
+import javax.jcr.Node;
 import javax.jcr.Property;
 import javax.jcr.PropertyType;
+import javax.jcr.RangeIterator;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
-import javax.jcr.Node;
-import javax.jcr.RangeIterator;
 import javax.jcr.query.Row;
 import javax.jcr.query.RowIterator;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import java.util.Iterator;
+
+import org.apache.jackrabbit.name.IllegalNameException;
+import org.apache.jackrabbit.name.NameFormat;
+import org.apache.jackrabbit.name.NamespaceResolver;
+import org.apache.jackrabbit.name.NoPrefixDeclaredException;
+import org.apache.jackrabbit.name.QName;
+import org.apache.jackrabbit.name.UnknownPrefixException;
+import org.apache.jackrabbit.value.DoubleValue;
+import org.apache.jackrabbit.value.LongValue;
+import org.apache.jackrabbit.value.PathValue;
+import org.apache.jackrabbit.value.StringValue;
 
 /**
  * Implements the {@link javax.jcr.query.RowIterator} interface returned by
@@ -169,7 +171,7 @@
         /**
          * The score for this result row
          */
-        private final float score;
+        private final double score;
 
         /**
          * The underlying <code>Node</code> of this result row.
@@ -192,7 +194,7 @@
          * @param score the score value for this result row
          * @param node  the underlying <code>Node</code> for this <code>Row</code>.
          */
-        private RowImpl(float score, Node node) {
+        private RowImpl(double score, Node node) {
             this.score = score;
             this.node = node;
         }
@@ -235,7 +237,7 @@
                         if (QName.JCR_PATH.equals(properties[i])) {
                             tmp[i] = PathValue.valueOf(node.getPath());
                         } else if (QName.JCR_SCORE.equals(properties[i])) {
-                            tmp[i] = new LongValue((int) (score * 1000f));
+                            tmp[i] = new DoubleValue(score);
                         } else {
                             tmp[i] = null;
                         }

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/ScoreNodeIterator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/ScoreNodeIterator.java?view=diff&rev=497844&r1=497843&r2=497844
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/ScoreNodeIterator.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/ScoreNodeIterator.java Fri Jan 19 07:35:38 2007
@@ -33,5 +33,5 @@
      * @return the score of the node returned by {@link #nextNode()}.
      * @throws java.util.NoSuchElementException if there is no next node.
      */
-    public float getScore();
+    public double getScore();
 }

Modified: jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryInfo.java?view=diff&rev=497844&r1=497843&r2=497844
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryInfo.java (original)
+++ jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryInfo.java Fri Jan 19 07:35:38 2007
@@ -18,19 +18,16 @@
 
 import org.apache.jackrabbit.name.QName;
 
-import java.io.InputStream;
-
 /**
  * QueryInfo...
  */
 public interface QueryInfo {
 
     /**
-     * @return an array of String representing the node ids present in the
-     * query result
-     * @see javax.jcr.query.QueryResult#getNodes()
+     * @return an iterator over the {@link QueryResultRow}s
+     * @see javax.jcr.query.QueryResult#getRows()
      */
-    public IdIterator getNodeIds();
+    public QueryResultRowIterator getRows();
 
     /**
      * @return an array of QName representing the column names of the query
@@ -38,21 +35,4 @@
      * @see javax.jcr.query.QueryResult#getColumnNames()
      */
     public QName[] getColumnNames();
-
-    /**
-     * @return an array of String representing the values present in a single
-     * row of the query result
-     * @see javax.jcr.query.Row#getValue(String)
-     * @see javax.jcr.query.Row#getValues()
-     */
-    public String[] getValues(NodeId nodeId);
-
-    /**
-     * todo really needed? rather use RepositoryService.getPropertyInfo(id).getValuesAsStream()
-     * @return an array of InputStream representing the values present in a single
-     * row of the query result
-     * @see javax.jcr.query.Row#getValue(String)
-     * @see javax.jcr.query.Row#getValues()
-     */
-    public InputStream[] getValuesAsStream(NodeId nodeId);
 }

Added: jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRow.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRow.java?view=auto&rev=497844
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRow.java (added)
+++ jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRow.java Fri Jan 19 07:35:38 2007
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.spi;
+
+/**
+ * <code>QueryResultRow</code>...
+ */
+public interface QueryResultRow {
+  
+    /**
+     * Returns {@link NodeId} of node this result row represents.
+     * 
+     * @return node id 
+     */
+    public NodeId getNodeId();
+    
+    /**
+     * Returns score of this result row.
+     * 
+     * @return score
+     */
+    public double getScore();
+    
+    /**
+     * @return an array of String representing the values present in this result row
+     * @see javax.jcr.query.Row#getValue(String)
+     * @see javax.jcr.query.Row#getValues()
+     * TODO: switch type to QValue[] when available
+     */
+    public String[] getValues(); 
+}

Propchange: jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRow.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRow.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Added: jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRowIterator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRowIterator.java?view=auto&rev=497844
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRowIterator.java (added)
+++ jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRowIterator.java Fri Jan 19 07:35:38 2007
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.spi;
+
+import javax.jcr.RangeIterator;
+
+/**
+ * <code>QueryResultRowIterator</code>...
+ */
+public interface QueryResultRowIterator extends RangeIterator {
+    /**
+     * Returns the next query result row in the iteration.
+     *
+     * @return the next query result row in the iteration.
+     * @throws java.util.NoSuchElementException if no more rows are left.
+     */
+    public QueryResultRow nextQueryResultRow();
+}

Propchange: jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRowIterator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/contrib/spi/spi/src/main/java/org/apache/jackrabbit/spi/QueryResultRowIterator.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IteratorHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IteratorHelper.java?view=diff&rev=497844&r1=497843&r2=497844
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IteratorHelper.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IteratorHelper.java Fri Jan 19 07:35:38 2007
@@ -24,6 +24,8 @@
 import org.apache.jackrabbit.spi.QNodeTypeDefinition;
 import org.apache.jackrabbit.spi.Event;
 import org.apache.jackrabbit.spi.EventIterator;
+import org.apache.jackrabbit.spi.QueryResultRow;
+import org.apache.jackrabbit.spi.QueryResultRowIterator;
 
 import java.util.Collection;
 import java.util.Iterator;
@@ -33,7 +35,7 @@
  * <code>org.apache.jackrabbit.spi2dav.IteratorHelper</code>...
  */
 public class IteratorHelper extends org.apache.jackrabbit.util.IteratorHelper
-    implements IdIterator, QNodeTypeDefinitionIterator, EventIterator {
+    implements IdIterator, QueryResultRowIterator, QNodeTypeDefinitionIterator, EventIterator {
 
     private static Logger log = LoggerFactory.getLogger(IteratorHelper.class);
 
@@ -59,6 +61,13 @@
      */
     public QNodeTypeDefinition nextDefinition() {
         return (QNodeTypeDefinition) next();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public QueryResultRow nextQueryResultRow() {
+        return (QueryResultRow)super.next();
     }
 
     /**

Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryInfoImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryInfoImpl.java?view=diff&rev=497844&r1=497843&r2=497844
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryInfoImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryInfoImpl.java Fri Jan 19 07:35:38 2007
@@ -16,36 +16,31 @@
  */
 package org.apache.jackrabbit.spi2dav;
 
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.jcr.search.SearchResultProperty;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.util.ISO9075;
-import org.apache.jackrabbit.name.NamespaceResolver;
+import java.util.AbstractCollection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.ValueFactory;
+
+import org.apache.jackrabbit.name.NameException;
 import org.apache.jackrabbit.name.NameFormat;
+import org.apache.jackrabbit.name.NamespaceResolver;
 import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.NameException;
-import org.apache.jackrabbit.spi.QueryInfo;
-import org.apache.jackrabbit.spi.IdIterator;
 import org.apache.jackrabbit.spi.NodeId;
+import org.apache.jackrabbit.spi.QueryInfo;
+import org.apache.jackrabbit.spi.QueryResultRowIterator;
 import org.apache.jackrabbit.spi.SessionInfo;
-import org.apache.jackrabbit.value.ValueFormat;
-import org.apache.jackrabbit.value.QValue;
-import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.util.ISO9075;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.MultiStatus;
+import org.apache.jackrabbit.webdav.MultiStatusResponse;
+import org.apache.jackrabbit.webdav.jcr.search.SearchResultProperty;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertySet;
 import org.slf4j.Logger;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-import javax.jcr.PropertyType;
-import javax.jcr.ValueFactory;
-import java.io.InputStream;
-import java.util.Iterator;
-import java.util.AbstractCollection;
-import java.util.NoSuchElementException;
-import java.util.Map;
-import java.util.LinkedHashMap;
+import org.slf4j.LoggerFactory;
 
 /**
  * <code>QueryInfoImpl</code>...
@@ -97,8 +92,10 @@
         }
     }
 
-    public IdIterator getNodeIds() {
-        return new IteratorHelper(new AbstractCollection() {
+    public QueryResultRowIterator getRows() {
+      // TODO: objects need to implement QueryResultRow
+      
+      return new IteratorHelper(new AbstractCollection() {
             public int size() {
                 return results.size();
             }
@@ -113,49 +110,49 @@
         return columnNames;
     }
 
-    public String[] getValues(NodeId nodeId) {
-        SearchResultProperty prop = (SearchResultProperty) results.get(nodeId);
-        if (prop == null) {
-            throw new NoSuchElementException();
-        } else {
-            Value[] values = prop.getValues();
-            String[] ret = new String[values.length];
-            for (int i = 0; i < values.length; i++) {
-                try {
-                    QValue qValue = (values[i] == null) ?  null : ValueFormat.getQValue(values[i], nsResolver);
-                    ret[i] = qValue.getString();
-                } catch (RepositoryException e) {
-                    // should not occur
-                    log.error("malformed value: " + values[i].toString());
-                }
-            }
-            return ret;
-        }
-    }
-
-    public InputStream[] getValuesAsStream(NodeId nodeId) {
-        SearchResultProperty prop = (SearchResultProperty) results.get(nodeId);
-        if (prop == null) {
-            throw new NoSuchElementException();
-        } else {
-            Value[] values = prop.getValues();
-            InputStream[] ret = new InputStream[values.length];
-            for (int i = 0; i < ret.length; i++) {
-                try {
-                    // make sure we return the qualified value if the type is
-                    // name or path.
-                    if (values[i].getType() == PropertyType.NAME || values[i].getType() == PropertyType.PATH) {
-                        ret[i] = ValueFormat.getQValue(values[i], nsResolver).getStream();
-                    } else {
-                        ret[i] = values[i].getStream();
-                    }
-                } catch (RepositoryException e) {
-                    // ignore this value
-                    log.warn("unable to get stream value: " + values[i].toString());
-                }
-            }
-            return ret;
-        }
-    }
+//    public String[] getValues(NodeId nodeId) {
+//        SearchResultProperty prop = (SearchResultProperty) results.get(nodeId);
+//        if (prop == null) {
+//            throw new NoSuchElementException();
+//        } else {
+//            Value[] values = prop.getValues();
+//            String[] ret = new String[values.length];
+//            for (int i = 0; i < values.length; i++) {
+//                try {
+//                    QValue qValue = (values[i] == null) ?  null : ValueFormat.getQValue(values[i], nsResolver);
+//                    ret[i] = qValue.getString();
+//                } catch (RepositoryException e) {
+//                    // should not occur
+//                    log.error("malformed value: " + values[i].toString());
+//                }
+//            }
+//            return ret;
+//        }
+//    }
+//
+//    public InputStream[] getValuesAsStream(NodeId nodeId) {
+//        SearchResultProperty prop = (SearchResultProperty) results.get(nodeId);
+//        if (prop == null) {
+//            throw new NoSuchElementException();
+//        } else {
+//            Value[] values = prop.getValues();
+//            InputStream[] ret = new InputStream[values.length];
+//            for (int i = 0; i < ret.length; i++) {
+//                try {
+//                    // make sure we return the qualified value if the type is
+//                    // name or path.
+//                    if (values[i].getType() == PropertyType.NAME || values[i].getType() == PropertyType.PATH) {
+//                        ret[i] = ValueFormat.getQValue(values[i], nsResolver).getStream();
+//                    } else {
+//                        ret[i] = values[i].getStream();
+//                    }
+//                } catch (RepositoryException e) {
+//                    // ignore this value
+//                    log.warn("unable to get stream value: " + values[i].toString());
+//                }
+//            }
+//            return ret;
+//        }
+//    }
 
 }