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/11/12 21:16:14 UTC

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...

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 extends Session> T newSession() {
     return (T)new ActivitiesSession(this);
   }
+  
+  public <T extends Session> T newSession(IO io) {
+    return (T)new ActivitiesSession(this,io);
+  }
 
+  /**
+   * Shortcut utility method that retrieves and parses an Activity Streams document
+   */
   public <M extends ASObject,T extends Collection<M>>ASDocument<T> getCollection(String uri) {
     ActivitiesSession session = newSession();
     return session.<M,T>getCollection(uri);
   }
   
+  /**
+   * Shortcut utility method that retrieves and parses an Activity Streams document
+   */
   public <M extends ASObject,T extends Collection<M>>ASDocument<T> getCollection(String uri, RequestOptions options) {
     ActivitiesSession session = newSession();
     return session.<M,T>getCollection(uri,options);
   }
   
+  /**
+   * Shortcut utility method that retrieves and parses an Activity Streams document
+   */
   public <T extends Activity>ASDocument<T> getActivity(String uri) {
     ActivitiesSession session = newSession();
     return session.<T>getActivity(uri);
   }
   
+  /**
+   * Shortcut utility method that retrieves and parses an Activity Streams document
+   */
   public <T extends Activity>ASDocument<T> getActivity(String uri, RequestOptions options) {
     ActivitiesSession session = newSession();
     return session.<T>getActivity(uri,options);
   }
   
+  /**
+   * Shortcut utility method that retrieves and parses an Activity Streams document
+   */
   public <T extends ASObject>ASDocument<T> getObject(String uri) {
     ActivitiesSession session = newSession();
     return session.<T>getObject(uri);
   }
   
+  /**
+   * Shortcut utility method that retrieves and parses an Activity Streams document
+   */
   public <T extends ASObject>ASDocument<T> getObject(String uri, RequestOptions options) {
     ActivitiesSession session = newSession();
     return session.<T>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<T extends ASObject> 
   extends ActivitiesClientPusher<T> {
 
-  public ActivitiesClientBatchPusher(String iri, ActivitiesSession session,
-      RequestOptions options) {
+  public static <T extends ASObject>Pusher<T> create(String iri) {
+    return new ActivitiesClientBatchPusher<T>(iri);
+  }
+  
+  public static <T extends ASObject>Pusher<T> create(
+    String iri,
+    RequestOptions options) {
+    return new ActivitiesClientBatchPusher<T>(iri,options);
+  }
+  
+  public static <T extends ASObject>Pusher<T> create(
+    String iri,
+    ActivitiesSession session) {
+    return new ActivitiesClientBatchPusher<T>(iri,session);
+  }
+  
+  public static <T extends ASObject>Pusher<T> create(
+    String iri,
+    ActivitiesSession session,
+    RequestOptions options) {
+    return new ActivitiesClientBatchPusher<T>(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> t) {
-    exec.execute(
-        new Runnable() {
-          public void run() {
-            try {
-              handle(
-                session.post(
-                  iri, 
-                  Collection.<T>makeCollection(t), 
-                  options));
-            } catch (Throwable ex) {
-              handle(ex);
-            }
-          }
-        }
-      );
+    try {
+      session.post(
+        iri, 
+        Collection.<T>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<T extends ASObject> 
-  implements Pusher<T> {
-  private final static Log log = LogFactory.getLog(ActivitiesClientPusher.class);
+  implements Pusher<T>, Listener<ClientResponse> {
+  private final static Log log = 
+    LogFactory.getLog(
+      ActivitiesClientPusher.class);
+  
+  public static <T extends ASObject>Pusher<T> create(String iri) {
+    return new ActivitiesClientPusher<T>(iri);
+  }
+  
+  public static <T extends ASObject>Pusher<T> create(
+    String iri,
+    RequestOptions options) {
+    return new ActivitiesClientPusher<T>(iri,options);
+  }
+  
+  public static <T extends ASObject>Pusher<T> create(
+    String iri,
+    ActivitiesSession session) {
+    return new ActivitiesClientPusher<T>(iri,session);
+  }
+  
+  public static <T extends ASObject>Pusher<T> create(
+    String iri,
+    ActivitiesSession session,
+    RequestOptions options) {
+    return new ActivitiesClientPusher<T>(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<T ex
     this.exec = initExecutor();
   }
   
-  protected Executor initExecutor() {
-    return Executors.newSingleThreadExecutor();
+  protected ExecutorService initExecutor() {
+    return getExitingExecutor();
   }
   
   public void push(final T t) {
-    exec.execute(
-      new Runnable() {
-        public void run() {
-          try {
-            handle(session.post(iri, t, options));
-          } catch (Throwable ex) {
-            handle(ex);
-          }
-        }
-      }
-    );
-  }
-  
-  protected void handle(ClientResponse resp) {
-    // by default, do nothing, fire'n'forget
-    resp.release();
+    try {
+      session.post(iri,t,options,exec,this);
+    } catch (Throwable x) {
+      handle(x);
+    }
   }
   
   protected void handle(Throwable t) {
@@ -101,4 +119,8 @@ public class ActivitiesClientPusher<T ex
     for (T i : t) push(i);
   }
 
+  public void onResponse(ClientResponse resp) {
+    resp.release();
+  }
+
 }

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesSession.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesSession.java?rev=1201318&r1=1201317&r2=1201318&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesSession.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/client/ActivitiesSession.java Sat Nov 12 20:16:13 2011
@@ -46,10 +46,16 @@ import org.joda.time.DateTime;
 public class ActivitiesSession 
   extends Session {
 
-  private static final IO io = IO.get();
+  private final IO io;
+  
+  protected ActivitiesSession(Client client, IO io) {
+    super(client);
+    this.io = io;
+  }
   
   protected ActivitiesSession(Client client) {
     super(client);
+    this.io = IO.get();
   }
 
   public IO getIO() {
@@ -145,10 +151,10 @@ public class ActivitiesSession 
   }
   
   public <M extends ASObject, T extends Collection<M>>ASDocument<T> getCollection(String uri, RequestOptions options) {
-    return ActivitiesSession.<M,T>getCollectionFromResp(get(uri, options));
+    return ActivitiesSession.<M,T>getCollectionFromResp(io,get(uri, options));
   }
   
-  static <M extends ASObject, T extends Collection<M>>ASDocument<T> getCollectionFromResp(ClientResponse cr) {
+  static <M extends ASObject, T extends Collection<M>>ASDocument<T> getCollectionFromResp(IO io, ClientResponse cr) {
     try {
       if (cr != null) {
         switch(cr.getType()) {
@@ -193,10 +199,10 @@ public class ActivitiesSession 
   }
   
   public <T extends Activity>ASDocument<T> getActivity(String uri, RequestOptions options) {
-    return getActivityFromResponse(get(uri, options));
+    return getActivityFromResponse(io,get(uri, options));
   }
   
-  static <T extends Activity>ASDocument<T> getActivityFromResponse(ClientResponse cr) {
+  static <T extends Activity>ASDocument<T> getActivityFromResponse(IO io,ClientResponse cr) {
     try {
       if (cr != null) {
         switch(cr.getType()) {
@@ -241,10 +247,10 @@ public class ActivitiesSession 
   }
 
   public <T extends ASObject>ASDocument<T> getObject(String uri, RequestOptions options) {
-    return getObjectFromResponse(get(uri, options));
+    return getObjectFromResponse(io,get(uri, options));
   }
   
-  static <T extends ASObject>ASDocument<T> getObjectFromResponse(ClientResponse cr) {
+  static <T extends ASObject>ASDocument<T> getObjectFromResponse(IO io,ClientResponse cr) {
     try {
       if (cr != null) {
         switch(cr.getType()) {
@@ -357,39 +363,68 @@ public class ActivitiesSession 
 
   static abstract class ASListener<T extends ClientResponse, X extends ASBase> 
     implements Listener<T> {
+      protected final IO io;
+      protected ASListener(IO io) {
+        this.io = io;
+      }
       protected abstract void onResponse(ASDocument<X> doc);
   }
   
   public static abstract class CollectionListener<T extends ClientResponse,X extends ASObject> 
     extends ASListener<T,Collection<X>> {
+    protected CollectionListener(IO io) {
+     super(io);
+    }
     public void onResponse(T resp) {
-      onResponse(ActivitiesSession.<X,Collection<X>>getCollectionFromResp(resp));
+      onResponse(ActivitiesSession.<X,Collection<X>>getCollectionFromResp(io,resp));
     }
   }
   
   public static abstract class SimpleActivityCollectionListener 
-    extends CollectionListener<ClientResponse,Activity>{}
+    extends CollectionListener<ClientResponse,Activity>{
+    protected SimpleActivityCollectionListener(IO io) {
+      super(io);
+     }
+  }
   
   public static abstract class SimpleObjectCollectionListener 
-    extends CollectionListener<ClientResponse,ASObject>{}
+    extends CollectionListener<ClientResponse,ASObject>{
+    protected SimpleObjectCollectionListener(IO io) {
+      super(io);
+     }
+  }
   
   public static abstract class SimpleActivityListener 
-    extends ActivityListener<ClientResponse,Activity>{}
+    extends ActivityListener<ClientResponse,Activity>{
+    protected SimpleActivityListener(IO io) {
+      super(io);
+     }
+  }
   
   public static abstract class SimpleObjectListener 
-    extends ObjectListener<ClientResponse,ASObject>{}
+    extends ObjectListener<ClientResponse,ASObject>{
+    protected SimpleObjectListener(IO io) {
+      super(io);
+     }
+  }
   
   public static abstract class ActivityListener<T extends ClientResponse,X extends Activity> 
     extends ASListener<T,X> {
+    protected ActivityListener(IO io) {
+      super(io);
+     }
     public void onResponse(T resp) {
-      onResponse(ActivitiesSession.<X>getActivityFromResponse(resp));
+      onResponse(ActivitiesSession.<X>getActivityFromResponse(io,resp));
     }
   }
   
   public static abstract class ObjectListener<T extends ClientResponse,X extends ASObject> 
     extends ASListener<T,X> {
+    protected ObjectListener(IO io) {
+      super(io);
+     }
     public void onResponse(T resp) {
-      onResponse(ActivitiesSession.<X>getObjectFromResponse(resp));
+      onResponse(ActivitiesSession.<X>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.<Activity>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<ASObject> isObjectType(String name) {
+    return PropertySelector.<ASObject>create(
+      ASObject.class,
+      "getObjectType",
+      equalsIgnoreCase(name));
   }
   
   /**
@@ -649,7 +656,7 @@ public final class Extra {
         Iterable<String> bids = b.getKnownIds();
         Iterable<String> cids = 
           Iterables.filter(
-            aids, Predicates.in((Set<String>)bids));
+            aids, in((Set<String>)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 extends CollectionWriter> 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<String> equalsIgnoreCase(final String val) {
     return new AbstractSelector<String>() {
       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 @@
   </parent>  
 
   <artifactId>abdera2-test</artifactId>
-  <packaging>jar</packaging>
+  <packaging>bundle</packaging>
   <name>Abdera2 Tests</name>
   <version>2.0-SNAPSHOT</version>  
   <description>Abdera Tests</description>
 
+  <properties>
+    <topDir>${basedir}/..</topDir> 
+  </properties>
+
   <build>
   <testSourceDirectory>src/main/java</testSourceDirectory>
   </build>