You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2011/10/20 18:31:54 UTC
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/...
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<Activity> isTo(ASObject obj) {
+ return Extra.audienceHas(Audience.TO, sameIdentity(obj));
+ }
+
+ public static Selector<Activity> isBcc(ASObject obj) {
+ return Extra.audienceHas(Audience.BCC, sameIdentity(obj));
+ }
+
+ public static Selector<Activity> isCc(ASObject obj) {
+ return Extra.audienceHas(Audience.CC, sameIdentity(obj));
+ }
+
+ public static Selector<Activity> isBTo(ASObject obj) {
+ return Extra.audienceHas(Audience.BTO, sameIdentity(obj));
+ }
+
+ public static Selector<Activity> isBccMe() {
+ return audienceHasMe(Audience.BCC);
+ }
+
+ public static Selector<Activity> isBccMeOr(ASObject obj) {
+ return audienceHasMeOr(Audience.BCC, obj);
+ }
+
+ public static Selector<Activity> isBccSelf() {
+ return audienceHasSelf(Audience.BCC);
+ }
+
+ public static Selector<Activity> isBccSelfOr(ASObject obj) {
+ return audienceHasSelfOr(Audience.BCC, obj);
+ }
+
+ public static Selector<Activity> isBccFriends() {
+ return audienceHasFriends(Audience.BCC);
+ }
+
+ public static Selector<Activity> isBccFriendsOr( ASObject obj) {
+ return audienceHasFriendsOr(Audience.BCC, obj);
+ }
+
+ public static Selector<Activity> isBccFriends( String id) {
+ return audienceHasFriends(Audience.BCC, id);
+ }
+
+ public static Selector<Activity> isBccFriendsOr( String id, ASObject obj) {
+ return audienceHasFriendsOr(Audience.BCC, id, obj);
+ }
+
+ public static Selector<Activity> isBccNetwork() {
+ return audienceHasNetwork(Audience.BCC);
+ }
+
+ public static Selector<Activity> isBccNetworkOr( ASObject obj) {
+ return audienceHasNetworkOr(Audience.BCC, obj);
+ }
+
+ public static Selector<Activity> isBccAll() {
+ return audienceHasAll(Audience.BCC);
+ }
+
+ public static Selector<Activity> isBccAllOr( ASObject obj) {
+ return audienceHasAllOr(Audience.BCC, obj);
+ }
+
+ public static Selector<Activity> isBccPublic() {
+ return audienceHasPublic(Audience.BCC);
+ }
+
+ public static Selector<Activity> isBccPublicOr( ASObject obj) {
+ return audienceHasPublicOr(Audience.BCC, obj);
+ }
+
+ public static Selector<Activity> isCcMe() {
+ return audienceHasMe(Audience.CC);
+ }
+
+ public static Selector<Activity> isCcMeOr( ASObject obj) {
+ return audienceHasMeOr(Audience.CC, obj);
+ }
+
+ public static Selector<Activity> isCcSelf() {
+ return audienceHasSelf(Audience.CC);
+ }
+
+ public static Selector<Activity> isCcSelfOr( ASObject obj) {
+ return audienceHasSelfOr(Audience.CC, obj);
+ }
+
+ public static Selector<Activity> isCcFriends() {
+ return audienceHasFriends(Audience.CC);
+ }
+
+ public static Selector<Activity> isCcFriendsOr( ASObject obj) {
+ return audienceHasFriendsOr(Audience.CC, obj);
+ }
+
+ public static Selector<Activity> isCcFriends( String id) {
+ return audienceHasFriends(Audience.CC, id);
+ }
+
+ public static Selector<Activity> isCcFriendsOr( String id, ASObject obj) {
+ return audienceHasFriendsOr(Audience.CC, id, obj);
+ }
+
+ public static Selector<Activity> isCcNetwork() {
+ return audienceHasNetwork(Audience.CC);
+ }
+
+ public static Selector<Activity> isCcNetworkOr( ASObject obj) {
+ return audienceHasNetworkOr(Audience.CC, obj);
+ }
+
+ public static Selector<Activity> isCcAll() {
+ return audienceHasAll(Audience.CC);
+ }
+
+ public static Selector<Activity> isCcAllOr( ASObject obj) {
+ return audienceHasAllOr(Audience.CC, obj);
+ }
+
+ public static Selector<Activity> isCcPublic() {
+ return audienceHasPublic(Audience.CC);
+ }
+
+ public static Selector<Activity> isCcPublicOr( ASObject obj) {
+ return audienceHasPublicOr(Audience.CC, obj);
+ }
+
+ public static Selector<Activity> isBtoMe() {
+ return audienceHasMe(Audience.BTO);
+ }
+
+ public static Selector<Activity> isBtoMeOr( ASObject obj) {
+ return audienceHasMeOr(Audience.BTO, obj);
+ }
+
+ public static Selector<Activity> isBtoSelf() {
+ return audienceHasSelf(Audience.BTO);
+ }
+
+ public static Selector<Activity> isBtoSelfOr( ASObject obj) {
+ return audienceHasSelfOr(Audience.BTO, obj);
+ }
+
+ public static Selector<Activity> isBtoFriends() {
+ return audienceHasFriends(Audience.BTO);
+ }
+
+ public static Selector<Activity> isBtoFriendsOr( ASObject obj) {
+ return audienceHasFriendsOr(Audience.BTO, obj);
+ }
+
+ public static Selector<Activity> isBtoFriends( String id) {
+ return audienceHasFriends(Audience.BTO, id);
+ }
+
+ public static Selector<Activity> isBtoFriendsOr( String id, ASObject obj) {
+ return audienceHasFriendsOr(Audience.BTO, id, obj);
+ }
+
+ public static Selector<Activity> isBtoNetwork() {
+ return audienceHasNetwork(Audience.BTO);
+ }
+
+ public static Selector<Activity> isBtoNetworkOr( ASObject obj) {
+ return audienceHasNetworkOr(Audience.BTO, obj);
+ }
+
+ public static Selector<Activity> isBtoAll() {
+ return audienceHasAll(Audience.BTO);
+ }
+
+ public static Selector<Activity> isBtoAllOr( ASObject obj) {
+ return audienceHasAllOr(Audience.BTO, obj);
+ }
+
+ public static Selector<Activity> isBtoPublic() {
+ return audienceHasPublic(Audience.BTO);
+ }
+
+ public static Selector<Activity> isBtoPublicOr( ASObject obj) {
+ return audienceHasPublicOr(Audience.BTO, obj);
+ }
+
+ public static Selector<Activity> isToMe() {
+ return audienceHasMe(Audience.TO);
+ }
+
+ public static Selector<Activity> isToMeOr( ASObject obj) {
+ return audienceHasMeOr(Audience.TO, obj);
+ }
+
+ public static Selector<Activity> isToSelf() {
+ return audienceHasSelf(Audience.TO);
+ }
+
+ public static Selector<Activity> isToSelfOr( ASObject obj) {
+ return audienceHasSelfOr(Audience.TO, obj);
+ }
+
+ public static Selector<Activity> isToFriends() {
+ return audienceHasFriends(Audience.TO);
+ }
+
+ public static Selector<Activity> isToFriendsOr( ASObject obj) {
+ return audienceHasFriendsOr(Audience.TO, obj);
+ }
+
+ public static Selector<Activity> isToFriends( String id) {
+ return audienceHasFriends(Audience.TO, id);
+ }
+
+ public static Selector<Activity> isToFriendsOr( String id, ASObject obj) {
+ return audienceHasFriendsOr(Audience.TO, id, obj);
+ }
+
+ public static Selector<Activity> isToNetwork() {
+ return audienceHasNetwork(Audience.TO);
+ }
+
+ public static Selector<Activity> isToNetworkOr( ASObject obj) {
+ return audienceHasNetworkOr(Audience.TO, obj);
+ }
+
+ public static Selector<Activity> isToAll() {
+ return audienceHasAll(Audience.TO);
+ }
+
+ public static Selector<Activity> isToAllOr( ASObject obj) {
+ return audienceHasAllOr(Audience.TO, obj);
+ }
+
+ public static Selector<Activity> isToPublic() {
+ return audienceHasPublic(Audience.TO);
+ }
+
+ public static Selector<Activity> isToPublicOr( ASObject obj) {
+ return audienceHasPublicOr(Audience.TO, obj);
+ }
+
+ public static Selector<Activity> actorIsMe() {
+ return actorIs(Extra.<Activity>isMe());
+ }
+
+ public static Selector<Activity> actorIsMeOr(ASObject object) {
+ return actorIs(Extra.<Activity>isMeOr(object));
+ }
+
+ public static Selector<Activity> actorIsSelf() {
+ return actorIs(Extra.<Activity>isSelf());
+ }
+
+ public static Selector<Activity> actorIsSelfOr(ASObject object) {
+ return actorIs(Extra.<Activity>isSelfOr(object));
+ }
+
+ public static Selector<Activity> actorIsFriends() {
+ return actorIs(Extra.<Activity>isFriends());
+ }
+
+ public static Selector<Activity> actorIsFriendsOr(ASObject object) {
+ return actorIs(Extra.<Activity>isFriendsOr(object));
+ }
+
+ public static Selector<Activity> actorIsFriends(String id) {
+ return actorIs(Extra.<Activity>isFriends(id));
+ }
+
+ public static Selector<Activity> actorIsFriendsOr(String id, ASObject object) {
+ return actorIs(Extra.<Activity>isFriendsOr(id, object));
+ }
+
+ public static Selector<Activity> actorIsNetwork() {
+ return actorIs(Extra.<Activity>isNetwork());
+ }
+
+ public static Selector<Activity> actorIsNetworkOr(ASObject object) {
+ return actorIs(Extra.<Activity>isNetworkOr(object));
+ }
+
+ public static Selector<Activity> actorIsAll() {
+ return actorIs(Extra.<Activity>isAll());
+ }
+
+ public static Selector<Activity> actorIsAllOr(ASObject object) {
+ return actorIs(Extra.<Activity>isAllOr(object));
+ }
+
+ public static Selector<Activity> actorIsPublic() {
+ return actorIs(Extra.<Activity>isPublic());
+ }
+
+ public static Selector<Activity> actorIsPublicOr(ASObject object) {
+ return actorIs(Extra.<Activity>isPublicOr(object));
+ }
+
+ private static Selector<Activity> actorIs(Predicate<Activity> pred) {
+ return
+ PropertySelector
+ .<Activity>create(
+ Activity.class,
+ "getActor",
+ pred);
+ }
+
+ public static Selector<Activity> audienceHasMe(Audience audience) {
+ return audienceHas(audience,isMe());
+ }
+
+ public static Selector<Activity> audienceHasMeOr(Audience audience, ASObject obj) {
+ return audienceHas(audience,isMeOr(obj));
+ }
+
+ public static Selector<Activity> audienceHasSelf(Audience audience) {
+ return audienceHas(audience,isSelf());
+ }
+
+ public static Selector<Activity> audienceHasSelfOr(Audience audience, ASObject obj) {
+ return audienceHas(audience,isSelfOr(obj));
+ }
+
+ public static Selector<Activity> audienceHasFriends(Audience audience) {
+ return audienceHas(audience,isFriends());
+ }
+
+ public static Selector<Activity> audienceHasFriendsOr(Audience audience, ASObject obj) {
+ return audienceHas(audience,isFriendsOr(obj));
+ }
+
+ public static Selector<Activity> audienceHasFriends(Audience audience, String id) {
+ return audienceHas(audience,isFriends(id));
+ }
+
+ public static Selector<Activity> audienceHasFriendsOr(Audience audience, String id, ASObject obj) {
+ return audienceHas(audience,isFriendsOr(id,obj));
+ }
+
+ public static Selector<Activity> audienceHasNetwork(Audience audience) {
+ return audienceHas(audience,isNetwork());
+ }
+
+ public static Selector<Activity> audienceHasNetworkOr(Audience audience, ASObject obj) {
+ return audienceHas(audience,isNetworkOr(obj));
+ }
+
+ public static Selector<Activity> audienceHasAll(Audience audience) {
+ return audienceHas(audience,isMe());
+ }
+
+ public static Selector<Activity> audienceHasAllOr(Audience audience, ASObject obj) {
+ return audienceHas(audience,isAllOr(obj));
+ }
+
+ public static Selector<Activity> audienceHasPublic(Audience audience) {
+ return audienceHas(audience,isPublic());
+ }
+
+ public static Selector<Activity> audienceHasPublicOr(Audience audience, ASObject obj) {
+ return audienceHas(audience,isPublicOr(obj));
+ }
+
+ private static Selector<Activity> audienceHas(
+ final Audience audience,
+ final Selector<ASObject> pred) {
+ return new AbstractSelector<Activity>() {
+ public boolean select(Object item) {
+ checkArgument(item instanceof Activity);
+ Activity activity = (Activity) item;
+ Iterable<ASObject> aud =
+ activity.getAudience(audience, pred);
+ return !Iterables.isEmpty(aud);
+ }
+ };
+ }
+
+
+ public static <X extends ASObject>Selector<X> isMe() {
+ return (Selector<X>)sameIdentity(ME());
+ }
+
+ public static <X extends ASObject>Selector<X> isSelf() {
+ return (Selector<X>)sameIdentity(SELF());
+ }
+
+ public static <X extends ASObject>Selector<X> isFriends() {
+ return (Selector<X>)sameIdentity(FRIENDS());
+ }
+
+ public static <X extends ASObject>Selector<X> isFriends(String id) {
+ return (Selector<X>)sameIdentity(FRIENDS(id));
+ }
+
+ public static <X extends ASObject>Selector<X> isNetwork() {
+ return (Selector<X>)sameIdentity(NETWORK());
+ }
+
+ public static <X extends ASObject>Selector<X> isAll() {
+ return (Selector<X>)sameIdentity(ALL());
+ }
+
+ public static <X extends ASObject>Selector<X> isPublic() {
+ return (Selector<X>)sameIdentity(PUBLIC());
+ }
+
+ public static <X extends ASObject>Selector<X> isMeOr(ASObject object) {
+ Selector<X> s1 = sameIdentity(object);
+ Selector<X> s2 = sameIdentity(ME());
+ return MultiSelector.<X>or(s1,s2);
+ }
+
+ public static <X extends ASObject>Selector<X> isSelfOr(ASObject object) {
+ Selector<X> s1 = sameIdentity(object);
+ Selector<X> s2 = sameIdentity(SELF());
+ return MultiSelector.<X>or(s1,s2);
+ }
+
+ public static <X extends ASObject>Selector<X> isFriendsOr(ASObject object) {
+ Selector<X> s1 = sameIdentity(object);
+ Selector<X> s2 = sameIdentity(FRIENDS());
+ return MultiSelector.<X>or(s1,s2);
+ }
+
+ public static <X extends ASObject>Selector<X> isFriendsOr(String id, ASObject object) {
+ Selector<X> s1 = sameIdentity(object);
+ Selector<X> s2 = sameIdentity(FRIENDS(id));
+ return MultiSelector.<X>or(s1,s2);
+ }
+
+ public static <X extends ASObject>Selector<X> isNetworkOr(ASObject object) {
+ Selector<X> s1 = sameIdentity(object);
+ Selector<X> s2 = sameIdentity(NETWORK());
+ return MultiSelector.<X>or(s1,s2);
+ }
+
+ public static <X extends ASObject>Selector<X> isAllOr(ASObject object) {
+ Selector<X> s1 = sameIdentity(object);
+ Selector<X> s2 = sameIdentity(ALL());
+ return MultiSelector.<X>or(s1,s2);
+ }
+
+ public static <X extends ASObject>Selector<X> isPublicOr(ASObject object) {
+ Selector<X> s1 = sameIdentity(object);
+ Selector<X> s2 = sameIdentity(PUBLIC());
+ return MultiSelector.<X>or(s1,s2);
+ }
/**
* Special AS Object that represents the authenticated user
@@ -237,8 +684,13 @@ public class Extra {
return anonymousObject("used");
}
- public static Selector<ASObject> sameIdentity(final ASObject obj) {
- return new AbstractSelector<ASObject>() {
+ /**
+ * 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 <X extends ASObject>Selector<X> sameIdentity(final ASObject obj) {
+ return new AbstractSelector<X>() {
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<ASObject> 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<DateTime> selectorForRange(Range<DateTime> 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<X>
implements Selector<X> {
@@ -27,8 +28,29 @@ public abstract class AbstractSelector<X
public Constraint<X> asConstraint() {
return this;
}
+
+ public Selector<X> limit(int limit) {
+ return (Selector<X>)and(Utils.<X>counting(limit));
+ }
+
public <Y>Selector<Y> compose(Function<Y,X> transform) {
return Utils.compose(this, transform);
}
+ public Selector<X> negate() {
+ return Utils.negate(this);
+ }
+
+ public Selector<X> and(Selector<X> selector) {
+ return MultiSelector.<X>and(this,selector);
+ }
+ public Selector<X> or(Selector<X> selector) {
+ return MultiSelector.<X>or(this,selector);
+ }
+ public Selector<X> andNot(Selector<X> selector) {
+ return MultiSelector.<X>and(this, selector.negate());
+ }
+ public Selector<X> orNot(Selector<X> selector) {
+ return MultiSelector.<X>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<X>
+public abstract class MultiSelector<X>
extends AbstractSelector<X>
implements Selector<X> {
private static final long serialVersionUID = 5257601171344714824L;
- private final Selector<X>[] selectors;
+ protected final Selector<X>[] selectors;
public MultiSelector(Selector<X>... selectors) {
this.selectors = selectors;
}
-
- public boolean select(Object item) {
- for (Selector<X> selector : selectors)
- if (!selector.select(item))
- return false;
- return true;
+
+ public static <X>Selector<X> not(Selector<X>...selectors) {
+ return Selector.Utils.negate(and(selectors));
}
- public static <X>Selector<X> with(Selector<X>... selectors) {
- return new MultiSelector<X>(selectors);
+ public static <X>Selector<X> or(Selector<X>...selectors) {
+ return new MultiSelector<X>(selectors) {
+ public boolean select(Object item) {
+ for (Selector<X> selector : selectors)
+ if (selector.select(item))
+ return true;
+ return false;
+ }
+ };
+ }
+
+ public static <X>Selector<X> and(Selector<X>...selectors) {
+ return new MultiSelector<X>(selectors) {
+ public boolean select(Object item) {
+ for (Selector<X> 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<X>
public Function<X,Boolean> asFunction();
public Predicate<X> asPredicate();
public Constraint<X> asConstraint();
+
+ /**
+ * Returns a Selector that matches this selector up to a specific number of times
+ */
+ public Selector<X> limit(int limit);
+
+ /**
+ * Returns a Selector<Y> A using this Selector B and Funtion<Y,X> C such that
+ * X = C(Y),
+ * B(X),
+ * A(Y) = B(C(Y))
+ */
public <Y>Selector<Y> compose(Function<Y,X> transform);
+ /**
+ * Returns a Selector that selects the opposite of this selector
+ */
+ public Selector<X> negate();
+ /**
+ * Returns a Selector that is the union of this and the specified selector
+ */
+ public Selector<X> and(Selector<X> selector);
+ /**
+ * Returns a Selector that matches either this or the specified selector
+ */
+ public Selector<X> or(Selector<X> selector);
+ /**
+ * Returns a Selector that matches this, but not the specified selector
+ */
+ public Selector<X> andNot(Selector<X> selector);
+ /**
+ * Returns a Selector that matches this or the inverse of the specified selector
+ */
+ public Selector<X> orNot(Selector<X> selector);
public static class Utils {
- public static <X,Y>Selector<Y> compose(Selector<X> selector, Function<Y,X> transform) {
- TransformSelector<Y,X> tsel =
- new TransformSelector<Y,X>(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 <X>Selector<X> counting(int limit) {
+ return new CountingSelector<X>(limit);
+ }
+
+ private static class CountingSelector<X>
+ extends AbstractSelector<X> {
+ 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<Long> B and Function<String,Long> C, this creates a
+ * Selector<String> that will first pass the input string to the
+ * Function, which returns a Long, and in turn passes that to selector
+ * B.
+ */
+ public static <X,Y>Selector<Y> compose(Selector<X> b, Function<Y,X> c) {
+ return new TransformSelector<Y,X>(b,c);
+ }
+
+ /**
+ * Returns the Selector<X> as a Function<X,Boolean>
+ */
public static <X>Function<X,Boolean> asFunction(final Selector<X> selector) {
return new Function<X,Boolean>() {
public Boolean apply(X input) {
@@ -52,15 +124,25 @@ public interface Selector<X>
};
}
+ /**
+ * Returns a Selector<X> that selects the inverse of the provided
+ * Selector<X>
+ */
public static <X>Selector<X> negate(Selector<X> selector) {
return new InvertedSelector<X>(selector);
}
+ /**
+ * Returns a Selector<X> that wraps the specified Predicate<X>
+ */
public static <X>Selector<X> forPredicate(
Predicate<X> predicate) {
return new PredicateSelector<X>(predicate);
}
+ /**
+ * Returns a Selector<X> that wraps a Constraint<X>
+ */
public static <X>Selector<X> forConstraint(
Constraint<X> constraint) {
return new ConstraintSelector<X>(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<Collection> select(Workspace workspace, Selector... selectors) {
- MultiSelector selector = new MultiSelector(selectors);
+ Selector<Collection> selector = MultiSelector.and(selectors);
return workspace.getCollections(selector);
}