sling-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Klco <dk...@apache.org>
Subject Re: [DISCUSSION][API][PROPOSAL] Adding Stream<Resource> generator to Sling API
Date Mon, 04 Jun 2018 17:58:07 GMT
It seems redundant, but I think they're somewhat different concepts. The
Predicate passed into the stream method is for evaluating the Resources
relevant for traversal, whereas (at least I'm assuming) that any subsequent
filters would filter the subsequent stream of resources. Having that sort
of redundancy would allow you to traverse a structure like the following:

- myasset.jpg (dam:Asset)
  - renditions (nt:folder)
    - original (nt:file)
    - rendition1.jpg (nt:file)

so if you wanted to get just a stream of the nt:file resources you could do:

myassetResource.stream(maxDepth(2)).filter(isResourceType("nt:file")).forEach(e
-> {DO_SOMETHING});

I like the idea of adding the predicates either in the API or as a separate
dependency as there are likely a few common patterns that would be used
quite a bit.

-Dan

On Mon, Jun 4, 2018 at 1:31 PM, Jason E Bailey <jeb@apache.org> wrote:

>
>
> - Jason
>
> On Mon, Jun 4, 2018, at 12:35 PM, Daniel Klco wrote:
>
> >
> > Rather than having another parameter, what about providing a
> > ResourceChildrenPredicate? Based on the current API it looks like you'd
> > have to provide the current resource to make this work, but it seems like
> > it would be very useful to have a predicate which would only allow for
> both
> > direct children or children up to a particular depth. I'd see it useful
> to
> > provide 2-3 different default predicates to help with common activities:
> >
> > ResourceChildrenPredicate - filter the stream of resources based on their
> > child status
> > ResourceTypePredicate - filter the stream of resource based on their
> > resource type
> > ValuePredicate - filter the stream of resources based on a value in the
> > resource's ValueMap
> >
> >
>
> Funny you should mention this. The original ResourceStream object came
> from the whiteboard streams project. Which has a whole package  dedicated
> to defining static predicates. There's even an expression languages in
> their as well. However, for filtering, there's already a filter method that
> a Stream provides. It's redundant to have a pre-filtered stream.
>
> However, as a limitation on the stream, you can do the same thing. It
> would something like
>
> - resource.stream(CHILD_RESOURCES);
>
> or
>
> - resource.stream(maxDepth(1));
>
> maxDepth being a static method that you've imported from the appropriate
> library that provides a Predicate
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message