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 7624F9EEB for ; Sat, 12 Nov 2011 20:16:42 +0000 (UTC) Received: (qmail 78514 invoked by uid 500); 12 Nov 2011 20:16:42 -0000 Delivered-To: apmail-abdera-commits-archive@abdera.apache.org Received: (qmail 78491 invoked by uid 500); 12 Nov 2011 20:16:42 -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 78484 invoked by uid 99); 12 Nov 2011 20:16:42 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 12 Nov 2011 20:16:42 +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; Sat, 12 Nov 2011 20:16:36 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 03F5723888EA for ; Sat, 12 Nov 2011 20:16:15 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1201318 - in /abdera/abdera2: activities/src/main/java/org/apache/abdera2/activities/client/ activities/src/main/java/org/apache/abdera2/activities/extra/ activities/src/main/java/org/apache/abdera2/activities/model/ common/src/main/java/o... Date: Sat, 12 Nov 2011 20:16:14 -0000 To: commits@abdera.apache.org From: jmsnell@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111112201615.03F5723888EA@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jmsnell Date: Sat Nov 12 20:16:13 2011 New Revision: 1201318 URL: http://svn.apache.org/viewvc?rev=1201318&view=rev Log: (empty) Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClient.java abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientBatchPusher.java abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientPusher.java abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesSession.java abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivityEntity.java abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/ASContext.java abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/Extra.java abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/PusherCollectionWriter.java abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Verb.java abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MorePredicates.java abdera/abdera2/test/pom.xml Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClient.java URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClient.java?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClient.java (original) +++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClient.java Sat Nov 12 20:16:13 2011 @@ -21,6 +21,8 @@ import org.apache.abdera2.activities.mod import org.apache.abdera2.activities.model.ASObject; import org.apache.abdera2.activities.model.Activity; import org.apache.abdera2.activities.model.Collection; +import org.apache.abdera2.activities.model.IO; +import org.apache.abdera2.protocol.client.BasicCachingClient; import org.apache.abdera2.protocol.client.BasicClient; import org.apache.abdera2.protocol.client.Client; import org.apache.abdera2.protocol.client.ClientWrapper; @@ -28,7 +30,7 @@ import org.apache.abdera2.protocol.clien import org.apache.abdera2.protocol.client.Session; /** - * Extension of the base Abdera Client that provides utility methods + * Extension of the base Abdera Client that provides methods * for working with Activity Stream objects. The ActivityClient acts * as a decorator for the base Abdera Client. */ @@ -36,44 +38,97 @@ import org.apache.abdera2.protocol.clien public class ActivitiesClient extends ClientWrapper { + /** + * Creates a new Activity Client that wraps a new BasicClient + */ + public static ActivitiesClient create() { + return new ActivitiesClient(); + } + + /** + * Creates a new Activity Client that wraps the given client + */ + public static ActivitiesClient create(Client client) { + return new ActivitiesClient(client); + } + + /** + * Creates a new Activity Client that wraps a new BasicCachingClient + */ + public static ActivitiesClient createCaching() { + return new ActivitiesClient(new BasicCachingClient()); + } + + /** + * Creates a new Activity Client that wraps a new BasicClient + */ public ActivitiesClient() { super(new BasicClient()); } + /** + * Creates a new Activity Client that wraps the given Client + */ public ActivitiesClient(Client client) { super(client); } - @Override + /** + * Creates a new Session for this Client. Session objects provide + * the interface for all HTTP methods and track the state of + * individual sessions + */ public T newSession() { return (T)new ActivitiesSession(this); } + + public T newSession(IO io) { + return (T)new ActivitiesSession(this,io); + } + /** + * Shortcut utility method that retrieves and parses an Activity Streams document + */ public >ASDocument getCollection(String uri) { ActivitiesSession session = newSession(); return session.getCollection(uri); } + /** + * Shortcut utility method that retrieves and parses an Activity Streams document + */ public >ASDocument getCollection(String uri, RequestOptions options) { ActivitiesSession session = newSession(); return session.getCollection(uri,options); } + /** + * Shortcut utility method that retrieves and parses an Activity Streams document + */ public ASDocument getActivity(String uri) { ActivitiesSession session = newSession(); return session.getActivity(uri); } + /** + * Shortcut utility method that retrieves and parses an Activity Streams document + */ public ASDocument getActivity(String uri, RequestOptions options) { ActivitiesSession session = newSession(); return session.getActivity(uri,options); } + /** + * Shortcut utility method that retrieves and parses an Activity Streams document + */ public ASDocument getObject(String uri) { ActivitiesSession session = newSession(); return session.getObject(uri); } + /** + * Shortcut utility method that retrieves and parses an Activity Streams document + */ public ASDocument getObject(String uri, RequestOptions options) { ActivitiesSession session = newSession(); return session.getObject(uri,options); Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientBatchPusher.java URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientBatchPusher.java?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientBatchPusher.java (original) +++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientBatchPusher.java Sat Nov 12 20:16:13 2011 @@ -19,6 +19,7 @@ package org.apache.abdera2.activities.cl import org.apache.abdera2.activities.model.ASObject; import org.apache.abdera2.activities.model.Collection; +import org.apache.abdera2.common.pusher.Pusher; import org.apache.abdera2.protocol.client.RequestOptions; /** @@ -30,40 +31,65 @@ import org.apache.abdera2.protocol.clien public class ActivitiesClientBatchPusher extends ActivitiesClientPusher { - public ActivitiesClientBatchPusher(String iri, ActivitiesSession session, - RequestOptions options) { + public static Pusher create(String iri) { + return new ActivitiesClientBatchPusher(iri); + } + + public static Pusher create( + String iri, + RequestOptions options) { + return new ActivitiesClientBatchPusher(iri,options); + } + + public static Pusher create( + String iri, + ActivitiesSession session) { + return new ActivitiesClientBatchPusher(iri,session); + } + + public static Pusher create( + String iri, + ActivitiesSession session, + RequestOptions options) { + return new ActivitiesClientBatchPusher(iri,session,options); + } + + public ActivitiesClientBatchPusher( + String iri, + ActivitiesSession session, + RequestOptions options) { super(iri, session, options); } - public ActivitiesClientBatchPusher(String iri, ActivitiesSession session) { + public ActivitiesClientBatchPusher( + String iri, + ActivitiesSession session) { super(iri, session); } - public ActivitiesClientBatchPusher(String iri, RequestOptions options) { + public ActivitiesClientBatchPusher( + String iri, + RequestOptions options) { super(iri, options); } - public ActivitiesClientBatchPusher(String iri) { + public ActivitiesClientBatchPusher( + String iri) { super(iri); } @Override public void pushAll(final Iterable t) { - exec.execute( - new Runnable() { - public void run() { - try { - handle( - session.post( - iri, - Collection.makeCollection(t), - options)); - } catch (Throwable ex) { - handle(ex); - } - } - } - ); + try { + session.post( + iri, + Collection.makeCollection(t), + options, + exec, + this); + } catch (Throwable x) { + handle(x); + } } } Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientPusher.java URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientPusher.java?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientPusher.java (original) +++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesClientPusher.java Sat Nov 12 20:16:13 2011 @@ -17,28 +17,57 @@ */ package org.apache.abdera2.activities.client; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; import org.apache.abdera2.activities.model.ASObject; import org.apache.abdera2.common.pusher.Pusher; +import org.apache.abdera2.protocol.client.Session.Listener; import org.apache.abdera2.protocol.client.ClientResponse; import org.apache.abdera2.protocol.client.RequestOptions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import static org.apache.abdera2.common.misc.MoreExecutors2.getExitingExecutor; /** * Utility that wraps an ActivitiesClient and uses the pusher * interface to asynchronously send those off to somewhere else - * using POST requests. + * using POST requests. The default behavior is to attempt to + * push the item once and forget about it, the status of the + * request will not be checked. Subclasses can customize that + * behavior as necessary */ public class ActivitiesClientPusher - implements Pusher { - private final static Log log = LogFactory.getLog(ActivitiesClientPusher.class); + implements Pusher, Listener { + private final static Log log = + LogFactory.getLog( + ActivitiesClientPusher.class); + + public static Pusher create(String iri) { + return new ActivitiesClientPusher(iri); + } + + public static Pusher create( + String iri, + RequestOptions options) { + return new ActivitiesClientPusher(iri,options); + } + + public static Pusher create( + String iri, + ActivitiesSession session) { + return new ActivitiesClientPusher(iri,session); + } + + public static Pusher create( + String iri, + ActivitiesSession session, + RequestOptions options) { + return new ActivitiesClientPusher(iri,session,options); + } protected final ActivitiesSession session; protected final String iri; - protected final Executor exec; + protected final ExecutorService exec; protected final RequestOptions options; public ActivitiesClientPusher(String iri) { @@ -69,27 +98,16 @@ public class ActivitiesClientPusher>ASDocument getCollection(String uri, RequestOptions options) { - return ActivitiesSession.getCollectionFromResp(get(uri, options)); + return ActivitiesSession.getCollectionFromResp(io,get(uri, options)); } - static >ASDocument getCollectionFromResp(ClientResponse cr) { + static >ASDocument getCollectionFromResp(IO io, ClientResponse cr) { try { if (cr != null) { switch(cr.getType()) { @@ -193,10 +199,10 @@ public class ActivitiesSession } public ASDocument getActivity(String uri, RequestOptions options) { - return getActivityFromResponse(get(uri, options)); + return getActivityFromResponse(io,get(uri, options)); } - static ASDocument getActivityFromResponse(ClientResponse cr) { + static ASDocument getActivityFromResponse(IO io,ClientResponse cr) { try { if (cr != null) { switch(cr.getType()) { @@ -241,10 +247,10 @@ public class ActivitiesSession } public ASDocument getObject(String uri, RequestOptions options) { - return getObjectFromResponse(get(uri, options)); + return getObjectFromResponse(io,get(uri, options)); } - static ASDocument getObjectFromResponse(ClientResponse cr) { + static ASDocument getObjectFromResponse(IO io,ClientResponse cr) { try { if (cr != null) { switch(cr.getType()) { @@ -357,39 +363,68 @@ public class ActivitiesSession static abstract class ASListener implements Listener { + protected final IO io; + protected ASListener(IO io) { + this.io = io; + } protected abstract void onResponse(ASDocument doc); } public static abstract class CollectionListener extends ASListener> { + protected CollectionListener(IO io) { + super(io); + } public void onResponse(T resp) { - onResponse(ActivitiesSession.>getCollectionFromResp(resp)); + onResponse(ActivitiesSession.>getCollectionFromResp(io,resp)); } } public static abstract class SimpleActivityCollectionListener - extends CollectionListener{} + extends CollectionListener{ + protected SimpleActivityCollectionListener(IO io) { + super(io); + } + } public static abstract class SimpleObjectCollectionListener - extends CollectionListener{} + extends CollectionListener{ + protected SimpleObjectCollectionListener(IO io) { + super(io); + } + } public static abstract class SimpleActivityListener - extends ActivityListener{} + extends ActivityListener{ + protected SimpleActivityListener(IO io) { + super(io); + } + } public static abstract class SimpleObjectListener - extends ObjectListener{} + extends ObjectListener{ + protected SimpleObjectListener(IO io) { + super(io); + } + } public static abstract class ActivityListener extends ASListener { + protected ActivityListener(IO io) { + super(io); + } public void onResponse(T resp) { - onResponse(ActivitiesSession.getActivityFromResponse(resp)); + onResponse(ActivitiesSession.getActivityFromResponse(io,resp)); } } public static abstract class ObjectListener extends ASListener { + protected ObjectListener(IO io) { + super(io); + } public void onResponse(T resp) { - onResponse(ActivitiesSession.getObjectFromResponse(resp)); + onResponse(ActivitiesSession.getObjectFromResponse(io,resp)); } } } Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivityEntity.java URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivityEntity.java?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivityEntity.java (original) +++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivityEntity.java Sat Nov 12 20:16:13 2011 @@ -29,9 +29,6 @@ import org.apache.http.HttpEntity; import org.apache.http.entity.BasicHttpEntity; import org.apache.http.message.BasicHeader; -/** - * Required for the Apache Commons HTTP AbderaClient. - */ public class ActivityEntity extends BasicHttpEntity implements HttpEntity { @@ -98,7 +95,9 @@ public class ActivityEntity } public void writeTo(OutputStream out) throws IOException { - base.writeTo(out); + if (buf == null) + base.writeTo(out); + else out.write(buf); } public InputStream getContent() { Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/ASContext.java URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/ASContext.java?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/ASContext.java (original) +++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/ASContext.java Sat Nov 12 20:16:13 2011 @@ -63,10 +63,6 @@ public final class ASContext (T)base.getProperty(var); } - public void clear() { - throw new UnsupportedOperationException(); - } - public boolean contains(String var) { return base.has(var); } @@ -76,7 +72,7 @@ public final class ASContext } @SuppressWarnings("rawtypes") - public static class IterableWrapper + static class IterableWrapper implements Iterable { private final Iterable i; @@ -91,8 +87,13 @@ public final class ASContext } + /** + * This and IterableWrapper ensure that all ASBase values + * within an ASBase are wrapped as ASContext instances + * for purposes of URI Template expansion + */ @SuppressWarnings("rawtypes") - public static class IteratorWrapper + static class IteratorWrapper implements Iterator { private final Iterator i; @@ -108,7 +109,7 @@ public final class ASContext public Object next() { Object obj = i.next(); if (obj instanceof ASBase) - return new ASContext((ASBase)obj); + return ASContext.create((ASBase)obj); if (obj instanceof Iterable) return new IterableWrapper((Iterable)obj); return obj; 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=1201318&r1=1201317&r2=1201318&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 Sat Nov 12 20:16:13 2011 @@ -41,18 +41,14 @@ import org.joda.time.DateTime; import com.google.common.base.CaseFormat; 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.Predicates.*; import static org.apache.abdera2.activities.model.objects.Objects.*; import static org.apache.abdera2.common.misc.Comparisons.*; +import static org.apache.abdera2.common.misc.MorePredicates.*; import static com.google.common.base.Preconditions.*; - -/** - * Miscellaneous extensions - */ @SuppressWarnings({"unchecked","rawtypes"}) public final class Extra { @@ -66,7 +62,18 @@ public final class Extra { return PropertySelector.create( Activity.class, "getVerb", - Predicates.equalTo(verb)); + equalTo(verb)); + } + + /** + * Returns a Selector that tests whether the provided + * activity uses the given ObjectType + */ + public static Selector isObjectType(String name) { + return PropertySelector.create( + ASObject.class, + "getObjectType", + equalsIgnoreCase(name)); } /** @@ -649,7 +656,7 @@ public final class Extra { Iterable bids = b.getKnownIds(); Iterable cids = Iterables.filter( - aids, Predicates.in((Set)bids)); + aids, in((Set)bids)); // if cids is empty, it's not a duplicate, so return false // if cids isn't empty, they are likely duplicates, return true return !Iterables.isEmpty(cids); Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/PusherCollectionWriter.java URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/PusherCollectionWriter.java?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/PusherCollectionWriter.java (original) +++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/extra/PusherCollectionWriter.java Sat Nov 12 20:16:13 2011 @@ -75,7 +75,7 @@ public final class PusherCollectionWrite } public X writeObject( - org.apache.abdera2.activities.model.ASObject.Builder object) { + ASObject.Builder object) { return writeObject(object.get()); } Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Verb.java URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Verb.java?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Verb.java (original) +++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Verb.java Sat Nov 12 20:16:13 2011 @@ -99,12 +99,10 @@ public abstract class Verb { return name; } - @Override public int hashCode() { - return MoreFunctions.genHashCode(1,name); + return MoreFunctions.genHashCode(1,name.toLowerCase()); } - @Override public boolean equals(Object obj) { if (this == obj) return true; @@ -116,7 +114,7 @@ public abstract class Verb { if (name == null) { if (other.name != null) return false; - } else if (!name.equals(other.name)) + } else if (!name.equalsIgnoreCase(other.name)) return false; return true; } Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MorePredicates.java URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MorePredicates.java?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MorePredicates.java (original) +++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MorePredicates.java Sat Nov 12 20:16:13 2011 @@ -28,6 +28,7 @@ import org.apache.abdera2.common.text.Co import com.google.common.base.Predicates; +import static org.apache.abdera2.common.misc.Comparisons.*; import static com.google.common.base.Preconditions.*; public final class MorePredicates { @@ -37,8 +38,8 @@ public final class MorePredicates { public static Selector equalsIgnoreCase(final String val) { return new AbstractSelector() { public boolean select(Object input) { - checkNotNull(input); - checkNotNull(val); + if (bothAreNull(val, input)) return true; + if (onlyOneIsNull(val, input)) return false; return input.toString().equalsIgnoreCase(val); } }; Modified: abdera/abdera2/test/pom.xml URL: http://svn.apache.org/viewvc/abdera/abdera2/test/pom.xml?rev=1201318&r1=1201317&r2=1201318&view=diff ============================================================================== --- abdera/abdera2/test/pom.xml (original) +++ abdera/abdera2/test/pom.xml Sat Nov 12 20:16:13 2011 @@ -27,11 +27,15 @@ abdera2-test - jar + bundle Abdera2 Tests 2.0-SNAPSHOT Abdera Tests + + ${basedir}/.. + + src/main/java