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/15 03:59:30 UTC

svn commit: r1202016 - in /abdera/abdera2: ./ activities/src/main/java/org/apache/abdera2/activities/io/gson/ activities/src/main/java/org/apache/abdera2/activities/model/ activities/src/main/java/org/apache/abdera2/activities/model/objects/

Author: jmsnell
Date: Tue Nov 15 02:59:29 2011
New Revision: 1202016

URL: http://svn.apache.org/viewvc?rev=1202016&view=rev
Log:
Add experimental "reactions" support in the Activity Stream impl and fix a cpl bugs

Added:
    abdera/abdera2/.classpath   (with props)
    abdera/abdera2/.project   (with props)
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/TaskObject.java   (with props)
Modified:
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/io/gson/BaseAdapter.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASObject.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Activity.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/BinaryObject.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/Mood.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/PersonObject.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/QuestionObject.java

Added: abdera/abdera2/.classpath
URL: http://svn.apache.org/viewvc/abdera/abdera2/.classpath?rev=1202016&view=auto
==============================================================================
--- abdera/abdera2/.classpath (added)
+++ abdera/abdera2/.classpath Tue Nov 15 02:59:29 2011
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry exported="true" kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="src" output="common/target/classes" path="common/src/main/resources"/>
+	<classpathentry kind="src" output="examples/target/classes" path="examples/src/main/resources"/>
+	<classpathentry kind="src" output="examples/target/classes" path="examples/src/main/java"/>
+	<classpathentry kind="src" output="test/target/test-classes" path="test/src/test/java"/>
+	<classpathentry kind="src" output="test/target/classes" path="test/src/main/java"/>
+	<classpathentry kind="src" output="test/target/classes" path="test/src/main/resources"/>
+	<classpathentry kind="src" output="server/target/classes" path="server/src/main/resources"/>
+	<classpathentry kind="src" output="server/target/classes" path="server/src/main/java"/>
+	<classpathentry kind="src" output="security/target/classes" path="security/src/main/resources"/>
+	<classpathentry kind="src" output="security/target/classes" path="security/src/main/java"/>
+	<classpathentry kind="src" output="ext/target/classes" path="ext/src/main/resources"/>
+	<classpathentry kind="src" output="ext/target/classes" path="ext/src/main/java"/>
+	<classpathentry kind="src" output="core/target/classes" path="core/src/main/resources"/>
+	<classpathentry kind="src" output="core/target/classes" path="core/src/main/java"/>
+	<classpathentry kind="src" output="common/target/classes" path="common/src/main/java"/>
+	<classpathentry kind="src" output="client/target/classes" path="client/src/main/java"/>
+	<classpathentry kind="src" output="client/target/classes" path="client/src/main/resources"/>
+	<classpathentry kind="src" output="activities/target/classes" path="activities/src/main/resources"/>
+	<classpathentry kind="src" output="activities/target/classes" path="activities/src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.5.0 (MacOS X Default)">
+		<attributes>
+			<attribute name="owner.project.facets" value="java"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Propchange: abdera/abdera2/.classpath
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: abdera/abdera2/.project
URL: http://svn.apache.org/viewvc/abdera/abdera2/.project?rev=1202016&view=auto
==============================================================================
--- abdera/abdera2/.project (added)
+++ abdera/abdera2/.project Tue Nov 15 02:59:29 2011
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>abdera2</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

Propchange: abdera/abdera2/.project
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/io/gson/BaseAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/io/gson/BaseAdapter.java?rev=1202016&r1=1202015&r2=1202016&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/io/gson/BaseAdapter.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/io/gson/BaseAdapter.java Tue Nov 15 02:59:29 2011
@@ -58,6 +58,7 @@ import org.apache.abdera2.activities.mod
 import org.apache.abdera2.activities.model.objects.QuestionObject;
 import org.apache.abdera2.activities.model.objects.ReviewObject;
 import org.apache.abdera2.activities.model.objects.ServiceObject;
+import org.apache.abdera2.activities.model.objects.TaskObject;
 import org.apache.abdera2.activities.model.objects.TvEpisodeObject;
 import org.apache.abdera2.activities.model.objects.TvSeasonObject;
 import org.apache.abdera2.activities.model.objects.TvSeriesObject;
@@ -106,6 +107,7 @@ final class BaseAdapter 
     map.put("duration", Integer.class);
     map.put("height", Integer.class);
     map.put("location", PlaceObject.class);
+    map.put("reactions", TaskObject.class);
     map.put("mood", Mood.class);
     map.put("address", Address.class);
     map.put("stream", MediaLink.class);
@@ -166,7 +168,8 @@ final class BaseAdapter 
       TvSeasonObject.TvSeasonBuilder.class,
       TvSeriesObject.TvSeriesBuilder.class,
       VersionObject.VersionBuilder.class,
-      BinaryObject.BinaryBuilder.class
+      BinaryObject.BinaryBuilder.class,
+      TaskObject.TaskBuilder.class
     );
   }
   

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASObject.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASObject.java?rev=1202016&r1=1202015&r2=1202016&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASObject.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASObject.java Tue Nov 15 02:59:29 2011
@@ -29,6 +29,7 @@ import org.apache.abdera2.activities.ext
 import org.apache.abdera2.activities.model.objects.EmbeddedExperience;
 import org.apache.abdera2.activities.model.objects.Mood;
 import org.apache.abdera2.activities.model.objects.PlaceObject;
+import org.apache.abdera2.activities.model.objects.TaskObject;
 import org.apache.abdera2.common.date.DateTimes;
 import org.apache.abdera2.common.iri.IRI;
 import org.apache.abdera2.common.selector.Selector;
@@ -55,6 +56,7 @@ public class ASObject extends ASBase {
   public static final String UPDATED = "updated";
   public static final String UPSTREAMDUPLICATES = "upstreamDuplicates";
   public static final String URL = "url";
+  public static final String REACTIONS = "reactions";
   
   public static final String INREPLYTO = "inReplyTo";
   public static final String LOCATION = "location";
@@ -93,7 +95,8 @@ public class ASObject extends ASBase {
     private ImmutableSet.Builder<ASObject> replies = ImmutableSet.builder();
     private ImmutableSet.Builder<String> downdups = ImmutableSet.builder();
     private ImmutableSet.Builder<String> updups = ImmutableSet.builder();
-    private boolean a,t,r,d,u;
+    private ImmutableSet.Builder<TaskObject> tasks = ImmutableSet.builder();
+    private boolean a,t,r,d,u,z;
     
     public Builder(String objectType, Class<X> _class, Class<M> _builder) {
       super(_class,_builder);
@@ -105,37 +108,116 @@ public class ASObject extends ASBase {
     public Builder(Map<String,Object> map,Class<X> _class, Class<M> _builder) {
       super(map,_class,_builder);
     }
+    
+    public M reaction(TaskObject object) {
+      if (object == null) return (M)this;
+      z = true;
+      tasks.add(object);
+      return (M)this;
+    }
+    
+    public M reaction(TaskObject... objects) {
+      if (objects == null) return (M)this;
+      for (TaskObject obj : objects)
+        reaction(obj);
+      return (M)this;
+    }
+    
+    public M reaction(Iterable<TaskObject> objects) {
+      if (objects == null) return (M)this;
+      for (TaskObject obj : objects)
+        reaction(obj);
+      return (M)this;
+    }
+    
+    
+    public M attachment(ASObject... objects) {
+      if (objects == null) return (M)this;
+      for (ASObject obj : objects)
+        attachment(obj);
+      return (M)this;
+    }
+    
+    public M attachment(Iterable<ASObject> objects) {
+      if (objects == null) return (M)this;
+      for (ASObject obj : objects)
+        attachment(obj);
+      return (M)this;
+    }
+    
     public M attachment(ASObject object) {
       if (object == null) return (M)this;
-      if (!a)a=true;
+      a = true;
       attachments.add(object);
       return (M)this;
     }
     
+    public M downstreamDuplicate(String... objects) {
+      if (objects == null) return (M)this;
+      for (String obj : objects)
+        downstreamDuplicate(obj);
+      return (M)this;
+    }
+    
+    public M downstreamDuplicate(Iterable<String> objects) {
+      if (objects == null) return (M)this;
+      for (String obj : objects)
+        downstreamDuplicate(obj);
+      return (M)this;
+    }
+    
     public M downstreamDuplicate(String id) {
       if (id == null) return (M)this;
-      if (!d)d=true;
+      d = true;
       downdups.add(id);
       return (M)this;
     }
     
     public M inReplyTo(ASObject object) {
       if (object == null) return (M)this;
-      if (!r)r=true;
+      r = true;
       replies.add(object);
       return (M)this;
     }
     
+    public M tag(ASObject... objects) {
+      if (objects == null) return (M)this;
+      for (ASObject obj : objects)
+        tag(obj);
+      return (M)this;
+    }
+    
+    public M tag(Iterable<ASObject> objects) {
+      if (objects == null) return (M)this;
+      for (ASObject obj : objects)
+        tag(obj);
+      return (M)this;
+    }
+    
     public M tag(ASObject object) {
       if (object == null) return (M)this;
-      if (!t)t=true;
+      t = true;
       tags.add(object);
       return (M)this;
     }
     
+    public M upstreamDuplicate(String... objects) {
+      if (objects == null) return (M)this;
+      for (String obj : objects)
+        upstreamDuplicate(obj);
+      return (M)this;
+    }
+    
+    public M upstreamDuplicate(Iterable<String> objects) {
+      if (objects == null) return (M)this;
+      for (String obj : objects)
+        upstreamDuplicate(obj);
+      return (M)this;
+    }
+    
     public M upstreamDuplicate(String id) {
       if (id == null) return (M)this;
-      if (!u)u=true;
+      u = true;
       updups.add(id);
       return (M)this;
     }
@@ -239,11 +321,13 @@ public class ASObject extends ASBase {
     }
     
     public void preGet() {
+      super.preGet();
       if (a) set(ATTACHMENTS, attachments.build());
       if (t) set(TAGS, tags.build());
       if (r) set(INREPLYTO, replies.build());
       if (d) set(DOWNSTREAMDUPLICATES, downdups.build());
       if (u) set(UPSTREAMDUPLICATES, updups.build());
+      if (z) set(REACTIONS, tasks.build());
     }
     
   }
@@ -294,7 +378,11 @@ public class ASObject extends ASBase {
    * duplication detection easier
    */
   public Iterable<String> getDownstreamDuplicates() {
-    return checkEmpty((Iterable<String>)getProperty(DOWNSTREAMDUPLICATES));
+    return checkEmpty(this.<Iterable<String>>getProperty(DOWNSTREAMDUPLICATES));
+  }
+  
+  public Iterable<TaskObject> getReactions() {
+    return checkEmpty(this.<Iterable<TaskObject>>getProperty(REACTIONS));
   }
   
   /**

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Activity.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Activity.java?rev=1202016&r1=1202015&r2=1202016&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Activity.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Activity.java Tue Nov 15 02:59:29 2011
@@ -181,6 +181,7 @@ public class Activity extends ASObject {
       return (M)this;
     }
     public void preGet() {
+      super.preGet();
       if (a) set(Audience.TO.label(),to.build());
       if (b) set(Audience.CC.label(),cc.build());
       if (c) set(Audience.BCC.label(),bcc.build());

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java?rev=1202016&r1=1202015&r2=1202016&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java Tue Nov 15 02:59:29 2011
@@ -136,6 +136,7 @@ public class Collection<T extends ASObje
       return (M)this;
     }
     public void preGet() {
+      super.preGet();
       Set<T> i = items.build();
       if(b) set(OBJECT_TYPES, types.build());
       if(a) {

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/BinaryObject.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/BinaryObject.java?rev=1202016&r1=1202015&r2=1202016&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/BinaryObject.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/BinaryObject.java Tue Nov 15 02:59:29 2011
@@ -249,6 +249,7 @@ public class BinaryObject extends FileOb
     }
     
     public void preGet() {
+      super.preGet();
       if (!a)  mimeType("application/octet-stream");
     }
   }

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/Mood.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/Mood.java?rev=1202016&r1=1202015&r2=1202016&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/Mood.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/Mood.java Tue Nov 15 02:59:29 2011
@@ -28,7 +28,7 @@ public final class Mood extends ASBase {
   public static final String IMAGE = "image";
   public static final String DISPLAYNAME = "displayName";
   
-  protected Mood(Map<String,Object> map) {
+  public Mood(Map<String,Object> map) {
     super(map,Builder.class,Mood.class);
   }
   

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/PersonObject.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/PersonObject.java?rev=1202016&r1=1202015&r2=1202016&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/PersonObject.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/PersonObject.java Tue Nov 15 02:59:29 2011
@@ -374,6 +374,7 @@ public class PersonObject 
       return (M)this;
     }
     public void preGet() {
+      super.preGet();
       if (a) set("accounts",accounts.build());
       if (b) set("addresses",addresses.build());
       if (c) set("alternateNames",altnames.build());

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/QuestionObject.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/QuestionObject.java?rev=1202016&r1=1202015&r2=1202016&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/QuestionObject.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/QuestionObject.java Tue Nov 15 02:59:29 2011
@@ -123,6 +123,7 @@ public class QuestionObject 
       return (M)this;
     }
     public void preGet() {
+      super.preGet();
       if (a) set(OPTIONS, options.build());
     }
   }

Added: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/TaskObject.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/TaskObject.java?rev=1202016&view=auto
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/TaskObject.java (added)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/TaskObject.java Tue Nov 15 02:59:29 2011
@@ -0,0 +1,148 @@
+package org.apache.abdera2.activities.model.objects;
+
+import java.util.Map;
+
+import org.apache.abdera2.activities.io.gson.Properties;
+import org.apache.abdera2.activities.io.gson.Property;
+import org.apache.abdera2.activities.model.ASObject;
+import org.apache.abdera2.activities.model.Verb;
+import org.apache.abdera2.common.anno.Name;
+import org.apache.abdera2.common.date.DateTimes;
+import org.apache.abdera2.common.iri.IRI;
+import org.joda.time.DateTime;
+import org.joda.time.Duration;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Special object type intended to describe the actions that can be 
+ * taken in response to another object.
+ * 
+ * this is purely experimental at this point and is something 
+ * that I'm kicking around with the AS community. It's included 
+ * here as a basic proof of the concept and to get some implementation
+ * experience playing around with it
+ */
+public class TaskObject extends ASObject {
+
+  public TaskObject(Map<String,Object> map) {
+    super(map,TaskBuilder.class,TaskObject.class);
+  }
+  
+  public <X extends TaskObject, M extends Builder<X,M>>TaskObject(Map<String,Object> map, Class<M> _class, Class<X> _obj) {
+    super(map,_class,_obj);
+  }
+  
+  public <X extends ASObject>X getObject() {
+    return getProperty("for");
+  }
+  
+  public <X extends ASObject>X getActor() {
+    return getProperty("actor");
+  }
+  
+  public Iterable<String> getSupersedes() {
+    return checkEmpty(this.<Iterable<String>>getProperty("supersedes"));
+  }
+  
+  public boolean isRequired() {
+    return (Boolean)getProperty("required");
+  }
+  
+  public DateTime getBy() {
+    return getProperty("by");
+  }
+
+  public Verb getVerb() {
+    return getProperty("verb");
+  }
+  
+  public IRI getResourceLink() {
+    return getProperty("resourceLink");
+  }
+  
+  public static TaskBuilder makeTask() {
+    return new TaskBuilder("task");
+  }
+ 
+  @Name("task")
+  @Properties({
+    @Property(name="by",to=DateTime.class),
+    @Property(name="supersedes",to=String.class),
+    @Property(name="resourceLink",to=IRI.class),
+    @Property(name="for",to=ASObject.class)
+  })
+  public static final class TaskBuilder extends Builder<TaskObject,TaskBuilder> {
+    public TaskBuilder() {
+      super(TaskObject.class,TaskBuilder.class);
+    }
+    public TaskBuilder(Map<String, Object> map) {
+      super(map, TaskObject.class,TaskBuilder.class);
+    }
+    public TaskBuilder(String objectType) {
+      super(objectType, TaskObject.class,TaskBuilder.class);
+    }
+  }
+  
+  @SuppressWarnings("unchecked")
+  public static abstract class Builder<X extends TaskObject,M extends Builder<X,M>> 
+    extends ASObject.Builder<X,M> {
+    
+    public Builder(Class<X>_class,Class<M>_builder) {
+      super(_class,_builder);
+    }
+    public Builder(String objectType,Class<X>_class,Class<M>_builder) {
+      super(objectType,_class,_builder);
+    }
+    public Builder(Map<String,Object> map,Class<X>_class,Class<M>_builder) {
+      super(map,_class,_builder);
+    }
+    public M object(ASObject object) {
+      set("for",object);
+      return (M)this;
+    }
+    public M actor(ASObject object) {
+      set("actor",object);
+      return (M)this;
+    }
+    public M supersedes(String... ids) {
+      if (ids == null) return (M)this;
+      set("supersedes",ImmutableSet.copyOf(ids));
+      return (M)this;
+    }
+    public M required() {
+      set("required",true);
+      return (M)this;
+    }
+    public M by(DateTime dateTime) {
+      set("by",dateTime);
+      return (M)this;
+    }
+    public M byNow() {
+      set("by",DateTimes.now());
+      return (M)this;
+    }
+    public M by(Duration duration) {
+      return by(DateTimes.now().plus(duration));
+    }
+    public M selfLink(IRI iri) {
+      set("selfLink", iri);
+      return (M)this;
+    }
+    public M selfLink(String iri) {
+      return selfLink(new IRI(iri));
+    }
+    public M verb(Verb verb) {
+      set("verb",verb);
+      return (M)this;
+    }
+    public M resourceLink(IRI iri) {
+      set("resourceLink",iri);
+      return (M)this;
+    }
+    public M resourceLink(String iri) {
+      return resourceLink(new IRI(iri));
+    }
+  }
+  
+}

Propchange: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/objects/TaskObject.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain