Return-Path: X-Original-To: apmail-abdera-commits-archive@www.apache.org Delivered-To: apmail-abdera-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4A24B7DD5 for ; Thu, 20 Oct 2011 16:32:17 +0000 (UTC) Received: (qmail 23095 invoked by uid 500); 20 Oct 2011 16:32:17 -0000 Delivered-To: apmail-abdera-commits-archive@abdera.apache.org Received: (qmail 23053 invoked by uid 500); 20 Oct 2011 16:32:16 -0000 Mailing-List: contact commits-help@abdera.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@abdera.apache.org Delivered-To: mailing list commits@abdera.apache.org Received: (qmail 23046 invoked by uid 99); 20 Oct 2011 16:32:16 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Oct 2011 16:32:16 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Oct 2011 16:32:14 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 5836B23889FA for ; Thu, 20 Oct 2011 16:31:54 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1186895 - in /abdera/abdera2: activities/src/main/java/org/apache/abdera2/activities/extra/ common/src/main/java/org/apache/abdera2/common/date/ common/src/main/java/org/apache/abdera2/common/selector/ ext/src/main/java/org/apache/abdera2/... Date: Thu, 20 Oct 2011 16:31:54 -0000 To: commits@abdera.apache.org From: jmsnell@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111020163154.5836B23889FA@eris.apache.org> Author: jmsnell Date: Thu Oct 20 16:31:53 2011 New Revision: 1186895 URL: http://svn.apache.org/viewvc?rev=1186895&view=rev Log: (empty) Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/Extra.java abdera/abdera2/common/src/main/java/org/apache/abdera2/common/date/DateTimes.java abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/AbstractSelector.java abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/MultiSelector.java abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/Selector.java abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/features/FeaturesHelper.java Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/Extra.java URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/Extra.java?rev=1186895&r1=1186894&r2=1186895&view=diff ============================================================================== --- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/Extra.java (original) +++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/Extra.java Thu Oct 20 16:31:53 2011 @@ -1,22 +1,23 @@ package org.apache.abdera2.activities.extra; - - import java.util.Comparator; import org.apache.abdera2.activities.model.ASObject; import org.apache.abdera2.activities.model.Activity; +import org.apache.abdera2.activities.model.Activity.Audience; import org.apache.abdera2.activities.model.IO; import org.apache.abdera2.activities.model.Verb; import org.apache.abdera2.common.date.DateTimes; import org.apache.abdera2.common.selector.AbstractSelector; import org.apache.abdera2.common.selector.PropertySelector; import org.apache.abdera2.common.selector.Selector; +import org.apache.abdera2.common.selector.MultiSelector; import org.joda.time.DateTime; import com.google.common.base.Equivalence; import com.google.common.base.Predicate; import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; import static com.google.common.base.Preconditions.*; @@ -119,6 +120,452 @@ public class Extra { VersionObject.class, BinaryObject.class); } + + public static Selector isTo(ASObject obj) { + return Extra.audienceHas(Audience.TO, sameIdentity(obj)); + } + + public static Selector isBcc(ASObject obj) { + return Extra.audienceHas(Audience.BCC, sameIdentity(obj)); + } + + public static Selector isCc(ASObject obj) { + return Extra.audienceHas(Audience.CC, sameIdentity(obj)); + } + + public static Selector isBTo(ASObject obj) { + return Extra.audienceHas(Audience.BTO, sameIdentity(obj)); + } + + public static Selector isBccMe() { + return audienceHasMe(Audience.BCC); + } + + public static Selector isBccMeOr(ASObject obj) { + return audienceHasMeOr(Audience.BCC, obj); + } + + public static Selector isBccSelf() { + return audienceHasSelf(Audience.BCC); + } + + public static Selector isBccSelfOr(ASObject obj) { + return audienceHasSelfOr(Audience.BCC, obj); + } + + public static Selector isBccFriends() { + return audienceHasFriends(Audience.BCC); + } + + public static Selector isBccFriendsOr( ASObject obj) { + return audienceHasFriendsOr(Audience.BCC, obj); + } + + public static Selector isBccFriends( String id) { + return audienceHasFriends(Audience.BCC, id); + } + + public static Selector isBccFriendsOr( String id, ASObject obj) { + return audienceHasFriendsOr(Audience.BCC, id, obj); + } + + public static Selector isBccNetwork() { + return audienceHasNetwork(Audience.BCC); + } + + public static Selector isBccNetworkOr( ASObject obj) { + return audienceHasNetworkOr(Audience.BCC, obj); + } + + public static Selector isBccAll() { + return audienceHasAll(Audience.BCC); + } + + public static Selector isBccAllOr( ASObject obj) { + return audienceHasAllOr(Audience.BCC, obj); + } + + public static Selector isBccPublic() { + return audienceHasPublic(Audience.BCC); + } + + public static Selector isBccPublicOr( ASObject obj) { + return audienceHasPublicOr(Audience.BCC, obj); + } + + public static Selector isCcMe() { + return audienceHasMe(Audience.CC); + } + + public static Selector isCcMeOr( ASObject obj) { + return audienceHasMeOr(Audience.CC, obj); + } + + public static Selector isCcSelf() { + return audienceHasSelf(Audience.CC); + } + + public static Selector isCcSelfOr( ASObject obj) { + return audienceHasSelfOr(Audience.CC, obj); + } + + public static Selector isCcFriends() { + return audienceHasFriends(Audience.CC); + } + + public static Selector isCcFriendsOr( ASObject obj) { + return audienceHasFriendsOr(Audience.CC, obj); + } + + public static Selector isCcFriends( String id) { + return audienceHasFriends(Audience.CC, id); + } + + public static Selector isCcFriendsOr( String id, ASObject obj) { + return audienceHasFriendsOr(Audience.CC, id, obj); + } + + public static Selector isCcNetwork() { + return audienceHasNetwork(Audience.CC); + } + + public static Selector isCcNetworkOr( ASObject obj) { + return audienceHasNetworkOr(Audience.CC, obj); + } + + public static Selector isCcAll() { + return audienceHasAll(Audience.CC); + } + + public static Selector isCcAllOr( ASObject obj) { + return audienceHasAllOr(Audience.CC, obj); + } + + public static Selector isCcPublic() { + return audienceHasPublic(Audience.CC); + } + + public static Selector isCcPublicOr( ASObject obj) { + return audienceHasPublicOr(Audience.CC, obj); + } + + public static Selector isBtoMe() { + return audienceHasMe(Audience.BTO); + } + + public static Selector isBtoMeOr( ASObject obj) { + return audienceHasMeOr(Audience.BTO, obj); + } + + public static Selector isBtoSelf() { + return audienceHasSelf(Audience.BTO); + } + + public static Selector isBtoSelfOr( ASObject obj) { + return audienceHasSelfOr(Audience.BTO, obj); + } + + public static Selector isBtoFriends() { + return audienceHasFriends(Audience.BTO); + } + + public static Selector isBtoFriendsOr( ASObject obj) { + return audienceHasFriendsOr(Audience.BTO, obj); + } + + public static Selector isBtoFriends( String id) { + return audienceHasFriends(Audience.BTO, id); + } + + public static Selector isBtoFriendsOr( String id, ASObject obj) { + return audienceHasFriendsOr(Audience.BTO, id, obj); + } + + public static Selector isBtoNetwork() { + return audienceHasNetwork(Audience.BTO); + } + + public static Selector isBtoNetworkOr( ASObject obj) { + return audienceHasNetworkOr(Audience.BTO, obj); + } + + public static Selector isBtoAll() { + return audienceHasAll(Audience.BTO); + } + + public static Selector isBtoAllOr( ASObject obj) { + return audienceHasAllOr(Audience.BTO, obj); + } + + public static Selector isBtoPublic() { + return audienceHasPublic(Audience.BTO); + } + + public static Selector isBtoPublicOr( ASObject obj) { + return audienceHasPublicOr(Audience.BTO, obj); + } + + public static Selector isToMe() { + return audienceHasMe(Audience.TO); + } + + public static Selector isToMeOr( ASObject obj) { + return audienceHasMeOr(Audience.TO, obj); + } + + public static Selector isToSelf() { + return audienceHasSelf(Audience.TO); + } + + public static Selector isToSelfOr( ASObject obj) { + return audienceHasSelfOr(Audience.TO, obj); + } + + public static Selector isToFriends() { + return audienceHasFriends(Audience.TO); + } + + public static Selector isToFriendsOr( ASObject obj) { + return audienceHasFriendsOr(Audience.TO, obj); + } + + public static Selector isToFriends( String id) { + return audienceHasFriends(Audience.TO, id); + } + + public static Selector isToFriendsOr( String id, ASObject obj) { + return audienceHasFriendsOr(Audience.TO, id, obj); + } + + public static Selector isToNetwork() { + return audienceHasNetwork(Audience.TO); + } + + public static Selector isToNetworkOr( ASObject obj) { + return audienceHasNetworkOr(Audience.TO, obj); + } + + public static Selector isToAll() { + return audienceHasAll(Audience.TO); + } + + public static Selector isToAllOr( ASObject obj) { + return audienceHasAllOr(Audience.TO, obj); + } + + public static Selector isToPublic() { + return audienceHasPublic(Audience.TO); + } + + public static Selector isToPublicOr( ASObject obj) { + return audienceHasPublicOr(Audience.TO, obj); + } + + public static Selector actorIsMe() { + return actorIs(Extra.isMe()); + } + + public static Selector actorIsMeOr(ASObject object) { + return actorIs(Extra.isMeOr(object)); + } + + public static Selector actorIsSelf() { + return actorIs(Extra.isSelf()); + } + + public static Selector actorIsSelfOr(ASObject object) { + return actorIs(Extra.isSelfOr(object)); + } + + public static Selector actorIsFriends() { + return actorIs(Extra.isFriends()); + } + + public static Selector actorIsFriendsOr(ASObject object) { + return actorIs(Extra.isFriendsOr(object)); + } + + public static Selector actorIsFriends(String id) { + return actorIs(Extra.isFriends(id)); + } + + public static Selector actorIsFriendsOr(String id, ASObject object) { + return actorIs(Extra.isFriendsOr(id, object)); + } + + public static Selector actorIsNetwork() { + return actorIs(Extra.isNetwork()); + } + + public static Selector actorIsNetworkOr(ASObject object) { + return actorIs(Extra.isNetworkOr(object)); + } + + public static Selector actorIsAll() { + return actorIs(Extra.isAll()); + } + + public static Selector actorIsAllOr(ASObject object) { + return actorIs(Extra.isAllOr(object)); + } + + public static Selector actorIsPublic() { + return actorIs(Extra.isPublic()); + } + + public static Selector actorIsPublicOr(ASObject object) { + return actorIs(Extra.isPublicOr(object)); + } + + private static Selector actorIs(Predicate pred) { + return + PropertySelector + .create( + Activity.class, + "getActor", + pred); + } + + public static Selector audienceHasMe(Audience audience) { + return audienceHas(audience,isMe()); + } + + public static Selector audienceHasMeOr(Audience audience, ASObject obj) { + return audienceHas(audience,isMeOr(obj)); + } + + public static Selector audienceHasSelf(Audience audience) { + return audienceHas(audience,isSelf()); + } + + public static Selector audienceHasSelfOr(Audience audience, ASObject obj) { + return audienceHas(audience,isSelfOr(obj)); + } + + public static Selector audienceHasFriends(Audience audience) { + return audienceHas(audience,isFriends()); + } + + public static Selector audienceHasFriendsOr(Audience audience, ASObject obj) { + return audienceHas(audience,isFriendsOr(obj)); + } + + public static Selector audienceHasFriends(Audience audience, String id) { + return audienceHas(audience,isFriends(id)); + } + + public static Selector audienceHasFriendsOr(Audience audience, String id, ASObject obj) { + return audienceHas(audience,isFriendsOr(id,obj)); + } + + public static Selector audienceHasNetwork(Audience audience) { + return audienceHas(audience,isNetwork()); + } + + public static Selector audienceHasNetworkOr(Audience audience, ASObject obj) { + return audienceHas(audience,isNetworkOr(obj)); + } + + public static Selector audienceHasAll(Audience audience) { + return audienceHas(audience,isMe()); + } + + public static Selector audienceHasAllOr(Audience audience, ASObject obj) { + return audienceHas(audience,isAllOr(obj)); + } + + public static Selector audienceHasPublic(Audience audience) { + return audienceHas(audience,isPublic()); + } + + public static Selector audienceHasPublicOr(Audience audience, ASObject obj) { + return audienceHas(audience,isPublicOr(obj)); + } + + private static Selector audienceHas( + final Audience audience, + final Selector pred) { + return new AbstractSelector() { + public boolean select(Object item) { + checkArgument(item instanceof Activity); + Activity activity = (Activity) item; + Iterable aud = + activity.getAudience(audience, pred); + return !Iterables.isEmpty(aud); + } + }; + } + + + public static Selector isMe() { + return (Selector)sameIdentity(ME()); + } + + public static Selector isSelf() { + return (Selector)sameIdentity(SELF()); + } + + public static Selector isFriends() { + return (Selector)sameIdentity(FRIENDS()); + } + + public static Selector isFriends(String id) { + return (Selector)sameIdentity(FRIENDS(id)); + } + + public static Selector isNetwork() { + return (Selector)sameIdentity(NETWORK()); + } + + public static Selector isAll() { + return (Selector)sameIdentity(ALL()); + } + + public static Selector isPublic() { + return (Selector)sameIdentity(PUBLIC()); + } + + public static Selector isMeOr(ASObject object) { + Selector s1 = sameIdentity(object); + Selector s2 = sameIdentity(ME()); + return MultiSelector.or(s1,s2); + } + + public static Selector isSelfOr(ASObject object) { + Selector s1 = sameIdentity(object); + Selector s2 = sameIdentity(SELF()); + return MultiSelector.or(s1,s2); + } + + public static Selector isFriendsOr(ASObject object) { + Selector s1 = sameIdentity(object); + Selector s2 = sameIdentity(FRIENDS()); + return MultiSelector.or(s1,s2); + } + + public static Selector isFriendsOr(String id, ASObject object) { + Selector s1 = sameIdentity(object); + Selector s2 = sameIdentity(FRIENDS(id)); + return MultiSelector.or(s1,s2); + } + + public static Selector isNetworkOr(ASObject object) { + Selector s1 = sameIdentity(object); + Selector s2 = sameIdentity(NETWORK()); + return MultiSelector.or(s1,s2); + } + + public static Selector isAllOr(ASObject object) { + Selector s1 = sameIdentity(object); + Selector s2 = sameIdentity(ALL()); + return MultiSelector.or(s1,s2); + } + + public static Selector isPublicOr(ASObject object) { + Selector s1 = sameIdentity(object); + Selector s2 = sameIdentity(PUBLIC()); + return MultiSelector.or(s1,s2); + } /** * Special AS Object that represents the authenticated user @@ -237,8 +684,13 @@ public class Extra { return anonymousObject("used"); } - public static Selector sameIdentity(final ASObject obj) { - return new AbstractSelector() { + /** + * Returns a Selector that tests if two objects are identity equivalent. + * ASObjets are identity equivalent if they have the same objectType + * and id property values. + */ + public static Selector sameIdentity(final ASObject obj) { + return new AbstractSelector() { public boolean select(Object item) { checkArgument(item instanceof ASObject); ASObject other = (ASObject) item; @@ -247,6 +699,10 @@ public class Extra { }; } + /** + * Equivalence instance that can be used to check the equivalence of two + * ASObjects + */ public static final Equivalence IDENTITY_EQUIVALENCE = identity(); /** Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/date/DateTimes.java URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/date/DateTimes.java?rev=1186895&r1=1186894&r2=1186895&view=diff ============================================================================== --- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/date/DateTimes.java (original) +++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/date/DateTimes.java Thu Oct 20 16:31:53 2011 @@ -132,6 +132,38 @@ public final class DateTimes { } } + public static DateTime dt(String dt) { + return new DateTime(dt); + } + + public static DateTime dt(Date date) { + return new DateTime(date); + } + + public static DateTime dt(Calendar cal) { + return new DateTime(cal); + } + + public static DateTime dt(long millis) { + return new DateTime(millis); + } + + public static DateTime now() { + return DateTime.now(); + } + + public static DateTime now(String tz) { + return DateTime.now(DateTimeZone.forID(tz)); + } + + public static DateTime now(TimeZone tz) { + return DateTime.now(DateTimeZone.forTimeZone(tz)); + } + + public static DateTime utcNow() { + return DateTime.now(DateTimeZone.UTC); + } + public static Selector selectorForRange(Range range) { return Selector.Utils.forPredicate(range); } Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/AbstractSelector.java URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/AbstractSelector.java?rev=1186895&r1=1186894&r2=1186895&view=diff ============================================================================== --- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/AbstractSelector.java (original) +++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/AbstractSelector.java Thu Oct 20 16:31:53 2011 @@ -4,6 +4,7 @@ import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.Constraint; +@SuppressWarnings("unchecked") public abstract class AbstractSelector implements Selector { @@ -27,8 +28,29 @@ public abstract class AbstractSelector asConstraint() { return this; } + + public Selector limit(int limit) { + return (Selector)and(Utils.counting(limit)); + } + public Selector compose(Function transform) { return Utils.compose(this, transform); } + public Selector negate() { + return Utils.negate(this); + } + + public Selector and(Selector selector) { + return MultiSelector.and(this,selector); + } + public Selector or(Selector selector) { + return MultiSelector.or(this,selector); + } + public Selector andNot(Selector selector) { + return MultiSelector.and(this, selector.negate()); + } + public Selector orNot(Selector selector) { + return MultiSelector.or(this, selector.negate()); + } } Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/MultiSelector.java URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/MultiSelector.java?rev=1186895&r1=1186894&r2=1186895&view=diff ============================================================================== --- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/MultiSelector.java (original) +++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/MultiSelector.java Thu Oct 20 16:31:53 2011 @@ -22,25 +22,40 @@ package org.apache.abdera2.common.select * invoked in order. By default, the selector will accept the item unless one * of the selectors rejects it. */ -public final class MultiSelector +public abstract class MultiSelector extends AbstractSelector implements Selector { private static final long serialVersionUID = 5257601171344714824L; - private final Selector[] selectors; + protected final Selector[] selectors; public MultiSelector(Selector... selectors) { this.selectors = selectors; } - - public boolean select(Object item) { - for (Selector selector : selectors) - if (!selector.select(item)) - return false; - return true; + + public static Selector not(Selector...selectors) { + return Selector.Utils.negate(and(selectors)); } - public static Selector with(Selector... selectors) { - return new MultiSelector(selectors); + public static Selector or(Selector...selectors) { + return new MultiSelector(selectors) { + public boolean select(Object item) { + for (Selector selector : selectors) + if (selector.select(item)) + return true; + return false; + } + }; + } + + public static Selector and(Selector...selectors) { + return new MultiSelector(selectors) { + public boolean select(Object item) { + for (Selector selector : selectors) + if (!selector.select(item)) + return false; + return true; + } + }; } } Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/Selector.java URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/Selector.java?rev=1186895&r1=1186894&r2=1186895&view=diff ============================================================================== --- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/Selector.java (original) +++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/selector/Selector.java Thu Oct 20 16:31:53 2011 @@ -17,6 +17,8 @@ */ package org.apache.abdera2.common.selector; +import java.util.concurrent.atomic.AtomicInteger; + import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.Constraint; @@ -34,16 +36,86 @@ public interface Selector public Function asFunction(); public Predicate asPredicate(); public Constraint asConstraint(); + + /** + * Returns a Selector that matches this selector up to a specific number of times + */ + public Selector limit(int limit); + + /** + * Returns a Selector A using this Selector B and Funtion C such that + * X = C(Y), + * B(X), + * A(Y) = B(C(Y)) + */ public Selector compose(Function transform); + /** + * Returns a Selector that selects the opposite of this selector + */ + public Selector negate(); + /** + * Returns a Selector that is the union of this and the specified selector + */ + public Selector and(Selector selector); + /** + * Returns a Selector that matches either this or the specified selector + */ + public Selector or(Selector selector); + /** + * Returns a Selector that matches this, but not the specified selector + */ + public Selector andNot(Selector selector); + /** + * Returns a Selector that matches this or the inverse of the specified selector + */ + public Selector orNot(Selector selector); public static class Utils { - public static Selector compose(Selector selector, Function transform) { - TransformSelector tsel = - new TransformSelector(selector,transform); - return tsel; + /** + * Creates a selector that will select at most the given number + * of items. Once the threshold has been met, the selector will + * return false; + */ + public static Selector counting(int limit) { + return new CountingSelector(limit); + } + + private static class CountingSelector + extends AbstractSelector { + private final AtomicInteger counter = new AtomicInteger(); + private final int limit; + private boolean done = false; + public CountingSelector(int limit) { + this.limit = limit; + } + public boolean select(Object object) { + if (done) return false; + if (counter.incrementAndGet() <= limit) + return true; + else done = true; + return false; + } } + /** + * Creates a new Selector A using Selector B and Function C such that + * X = C(Y), + * B(X), + * A(Y) = B(C(Y)). + * That is, for instance, supposing we have a + * Selector B and Function C, this creates a + * Selector that will first pass the input string to the + * Function, which returns a Long, and in turn passes that to selector + * B. + */ + public static Selector compose(Selector b, Function c) { + return new TransformSelector(b,c); + } + + /** + * Returns the Selector as a Function + */ public static Function asFunction(final Selector selector) { return new Function() { public Boolean apply(X input) { @@ -52,15 +124,25 @@ public interface Selector }; } + /** + * Returns a Selector that selects the inverse of the provided + * Selector + */ public static Selector negate(Selector selector) { return new InvertedSelector(selector); } + /** + * Returns a Selector that wraps the specified Predicate + */ public static Selector forPredicate( Predicate predicate) { return new PredicateSelector(predicate); } + /** + * Returns a Selector that wraps a Constraint + */ public static Selector forConstraint( Constraint constraint) { return new ConstraintSelector(constraint); Modified: abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/features/FeaturesHelper.java URL: http://svn.apache.org/viewvc/abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/features/FeaturesHelper.java?rev=1186895&r1=1186894&r2=1186895&view=diff ============================================================================== --- abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/features/FeaturesHelper.java (original) +++ abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/features/FeaturesHelper.java Thu Oct 20 16:31:53 2011 @@ -321,7 +321,7 @@ public final class FeaturesHelper { * Select a Collection from the Workspace */ public static Iterable select(Workspace workspace, Selector... selectors) { - MultiSelector selector = new MultiSelector(selectors); + Selector selector = MultiSelector.and(selectors); return workspace.getCollections(selector); }