You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by Julian Reschke <ju...@gmx.de> on 2009/05/20 14:22:27 UTC

Re: svn commit: r776654 - /jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java

jukka@apache.org wrote:
> +    /**
> +     * Returns the nodes in the given query result as an {@link Iterable}
> +     * for use in a Java 5 for-each loop. The return value encapsulates
> +     * the {@link QueryResult#getNodes()} method call. Potential
> +     * {@link RepositoryException}s are converted to {@link RuntimeException}s.
> +     *
> +     * @param result query result
> +     * @return nodes in the query result
> +     */
> +    public static Iterable<Node> getNodes(final QueryResult result) {
> +        return new Iterable<Node>() {
> +            @SuppressWarnings("unchecked")
> +            public Iterator<Node> iterator() {
> +                try {
> +                    return result.getNodes();
> +                } catch (RepositoryException e) {
> +                    throw new RuntimeException(
> +                            "Unable to access nodes in " + result, e);
> +                }
> +            }
> +        };
> +    }

Jukka, is it really a good idea to catch the RepositoryException here, 
mapping it to an unchecked exception?

BR, Julian

Re: svn commit: r776654 - /jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java

Posted by Jukka Zitting <ju...@gmail.com>.
Hi,

On Wed, May 20, 2009 at 2:22 PM, Julian Reschke <ju...@gmx.de> wrote:
> Jukka, is it really a good idea to catch the RepositoryException here,
> mapping it to an unchecked exception?

Good point. The alternative I was thinking about doing is:

    @SuppressWarnings("unchecked")
    public static Iterable<Node> getNodes(Node node)
            throws RepositoryException {
        final Iterator<Node> iterator = node.getNodes();
        return new Iterable<Node>() {
            public Iterator<Node> iterator() {
                return iterator;
            }
        };
    }

The only problem with this one is that it only ever returns the same
iterator, but I guess we could simply document that in the javadoc.

BR,

Jukka Zitting

Re: svn commit: r776654 - /jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java

Posted by Jukka Zitting <ju...@gmail.com>.
Hi,

On Wed, May 20, 2009 at 2:28 PM, Tobias Bocanegra <tr...@day.com> wrote:
> i don't now about the exact semantics of the Iterable interface - i.e.
> if a new iterator needs to be fetched for each call. but for the sake
> of the "foreach" loop, this should work.

Yep, I'll change it as suggested.

BR,

Jukka Zitting

Re: svn commit: r776654 - /jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java

Posted by Tobias Bocanegra <tr...@day.com>.
On Wed, May 20, 2009 at 2:22 PM, Julian Reschke <ju...@gmx.de> wrote:
> jukka@apache.org wrote:
>>
>> +    /**
>> +     * Returns the nodes in the given query result as an {@link Iterable}
>> +     * for use in a Java 5 for-each loop. The return value encapsulates
>> +     * the {@link QueryResult#getNodes()} method call. Potential
>> +     * {@link RepositoryException}s are converted to {@link
>> RuntimeException}s.
>> +     *
>> +     * @param result query result
>> +     * @return nodes in the query result
>> +     */
>> +    public static Iterable<Node> getNodes(final QueryResult result) {
>> +        return new Iterable<Node>() {
>> +            @SuppressWarnings("unchecked")
>> +            public Iterator<Node> iterator() {
>> +                try {
>> +                    return result.getNodes();
>> +                } catch (RepositoryException e) {
>> +                    throw new RuntimeException(
>> +                            "Unable to access nodes in " + result, e);
>> +                }
>> +            }
>> +        };
>> +    }
>
> Jukka, is it really a good idea to catch the RepositoryException here,
> mapping it to an unchecked exception?

i don't like this either. how about:

public static Iterable<Node> getNodes(final QueryResult result) throws
RepositoryException {
     final Iterator iter = result.getNodes();
     return new Iterable<Node>() {
           @SuppressWarnings("unchecked")
           public Iterator<Node> iterator() {
               return iter;
           }
      };

i don't now about the exact semantics of the Iterable interface - i.e.
if a new iterator needs to be fetched for each call. but for the sake
of the "foreach" loop, this should work.

regards, toby