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/29 23:51:18 UTC

svn commit: r1195048 - in /abdera/abdera2: common/src/main/java/org/apache/abdera2/common/security/ examples/src/main/java/org/apache/abdera2/examples/activities/ examples/src/main/java/org/apache/abdera2/examples/ext/ examples/src/main/java/org/apache...

Author: jmsnell
Date: Sat Oct 29 21:51:17 2011
New Revision: 1195048

URL: http://svn.apache.org/viewvc?rev=1195048&view=rev
Log:
Few example updates

Added:
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/ApiKeyExample.java   (with props)
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/JwtExample.java   (with props)
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/OtpExample.java   (with props)
Modified:
    abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/ApiKey.java
    abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyBase.java
    abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyHelper.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/FeedToStreamConversionExample.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/GeneratorStreamingExample.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/RepliesAndTargetingExample.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Bidi.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Features.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Json.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/License.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Paging.java
    abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Thread.java

Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/ApiKey.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/ApiKey.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/ApiKey.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/ApiKey.java Sat Oct 29 21:51:17 2011
@@ -71,6 +71,10 @@ public class ApiKey extends KeyBase {
     return Hex.encodeHexString(buf);
   }
   
+  public Supplier<String> asSupplier() {
+    return supplier(this);
+  }
+  
   public static ApiKey WEAK(byte[] key) {
     return new ApiKey(key,"HmacSHA1",20);
   }

Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyBase.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyBase.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyBase.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyBase.java Sat Oct 29 21:51:17 2011
@@ -7,7 +7,10 @@ import javax.crypto.spec.SecretKeySpec;
 
 import org.apache.commons.codec.binary.Hex;
 
-public abstract class KeyBase {
+import com.google.common.base.Supplier;
+
+public abstract class KeyBase 
+  implements Supplier<String> {
 
   public static final String DEFAULT_ALG="HmacSHA256";
   public static final int DEFAULT_SIZE=256;
@@ -18,6 +21,10 @@ public abstract class KeyBase {
   
   public abstract String generateNext();
   
+  public String get() {
+    return generateNext();
+  }
+  
   public KeyBase(Key key) {
     this(key,DEFAULT_ALG,DEFAULT_SIZE);
   }

Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyHelper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyHelper.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyHelper.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/security/KeyHelper.java Sat Oct 29 21:51:17 2011
@@ -156,6 +156,7 @@ public final class KeyHelper {
         Class<?> provider = Class.forName(className);
         return prepareJceProvider(provider);
       } catch (Exception e) {
+        e.printStackTrace();
         return false;
       }
     }

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/FeedToStreamConversionExample.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/FeedToStreamConversionExample.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/FeedToStreamConversionExample.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/FeedToStreamConversionExample.java Sat Oct 29 21:51:17 2011
@@ -3,9 +3,6 @@ package org.apache.abdera2.examples.acti
 import java.net.URL;
 
 import org.apache.abdera2.Abdera;
-import org.apache.abdera2.activities.model.CollectionWriter;
-import org.apache.abdera2.activities.model.IO;
-import org.apache.abdera2.ext.activities.FeedToActivityConverter;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Feed;
 import org.apache.abdera2.parser.Parser;
@@ -21,15 +18,8 @@ public class FeedToStreamConversionExamp
     ParserOptions options = parser.getDefaultParserOptions();
     options.setCharset("UTF-8");
     Document<Feed> doc = abdera.getParser().parse(url.openStream(),url.toString(),options);
-    Feed feed = doc.getRoot();
-
-    FeedToActivityConverter c = new FeedToActivityConverter() {};
-
-    IO io = IO.get();
-
-    CollectionWriter cw = io.getCollectionWriter(System.out, "UTF-8");
-
-    c.convert(feed, cw);
+    Feed feed = doc.getRoot();    
+    feed.writeTo("activity", System.out);
     
   }
   

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/GeneratorStreamingExample.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/GeneratorStreamingExample.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/GeneratorStreamingExample.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/GeneratorStreamingExample.java Sat Oct 29 21:51:17 2011
@@ -37,13 +37,16 @@ public class GeneratorStreamingExample {
     writer.writeHeader(header);
     
     // Prepare the Activity template
-    Activity template = new Activity();
-    PersonObject person = new PersonObject();
-    person.setDisplayName("joe");
-    template.setActor(person);
-    template.setVerb(Verb.POST);
-    template.setProvider(
-      new ServiceObject("My Application"));
+    PersonObject person = 
+      new PersonObject();
+    Activity template = 
+      Activity.makeActivity()
+        .actor(person)
+        .verb(Verb.POST)
+        .provider(
+          new ServiceObject("My Application"))
+        .displayName("joe")
+        .get();
     Generator<Activity> gen = 
       template.newGenerator();
     
@@ -75,9 +78,8 @@ public class GeneratorStreamingExample {
     Collection<Activity> col = io.readCollection(in, "UTF-8");
     System.out.println(col.getProperty("title"));
     System.out.println(col.getTotalItems());
-    for (Activity a : col.getItems()) {
+    for (Activity a : col.getItems())
       System.out.println(a.getTitle() + "\t" + a.getVerb());
-    }
   }
   
 }

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/RepliesAndTargetingExample.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/RepliesAndTargetingExample.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/RepliesAndTargetingExample.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/activities/RepliesAndTargetingExample.java Sat Oct 29 21:51:17 2011
@@ -2,7 +2,6 @@ package org.apache.abdera2.examples.acti
 
 import org.apache.abdera2.activities.extra.Extra;
 import org.apache.abdera2.activities.model.Activity;
-import org.apache.abdera2.activities.model.Activity.Audience;
 import org.apache.abdera2.activities.model.objects.NoteObject;
 import org.apache.abdera2.activities.model.objects.PersonObject;
 
@@ -10,19 +9,18 @@ public class RepliesAndTargetingExample 
 
   public static void main(String... args) throws Exception {
     
-    
-    Activity activity = new Activity();
-    
-    // Specify the audience
-    activity.addAudience(Audience.TO, new PersonObject("bob"));
-    activity.addAudience(Audience.CC, Extra.FRIENDS("Colleagues"));
-    activity.addAudience(Audience.BTO, new PersonObject("sally"));
-    activity.addAudience(Audience.BCC, Extra.NETWORK());
-    
-    // Indicate that this is a reply to something else
-    NoteObject note = new NoteObject();
-    note.setId("urn:foo:note:1");
-    activity.addInReplyTo(note);
+    Activity activity = 
+      Activity.makeActivity()
+        .to(new PersonObject("bob"))
+        .cc(Extra.FRIENDS("Colleagues"))
+        .bto(new PersonObject("sally"))
+        .bcc(Extra.NETWORK())
+        .inReplyTo(
+          NoteObject
+            .makeNote()
+            .id("urn:foo:note:1")
+          .get())
+        .get();
     
     activity.writeTo(System.out);
     

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Bidi.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Bidi.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Bidi.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Bidi.java Sat Oct 29 21:51:17 2011
@@ -18,8 +18,7 @@
 package org.apache.abdera2.examples.ext;
 
 import org.apache.abdera2.Abdera;
-import org.apache.abdera2.ext.bidi.BidiHelper;
-import org.apache.abdera2.ext.bidi.BidiHelper.Direction;
+import static org.apache.abdera2.ext.bidi.BidiHelper.*;
 import org.apache.abdera2.model.Entry;
 
 /**
@@ -34,27 +33,27 @@ public class Bidi {
 
         Abdera abdera =Abdera.getInstance();
         Entry entry = abdera.newEntry();
-        BidiHelper.setDirection(Direction.RTL, entry);
-
+        setDirection(Direction.RTL, entry);
+        
         entry.setTitle(text);
 
         // non bidi, incorrectly displayed
         System.out.println(entry.getTitle());
 
         // with bidi, correctly displayed
-        System.out.println(BidiHelper.getBidiElementText(entry.getTitleElement()));
+        System.out.println(getBidiElementText(entry.getTitleElement()));
 
         // with bidi, correctly displayed
-        System.out.println(BidiHelper.getBidiText(BidiHelper.getDirection(entry), entry.getTitle()));
+        System.out.println(getBidiText(getDirection(entry), entry.getTitle()));
 
         // there are also direction guessing algorithms available
         entry = abdera.newEntry();
         entry.setTitle(text);
         entry.setLanguage("ar");
 
-        System.out.println(BidiHelper.guessDirectionFromJavaBidi(entry.getTitleElement()));
-        System.out.println(BidiHelper.guessDirectionFromTextProperties(entry.getTitleElement()));
-        System.out.println(BidiHelper.guessDirectionFromLanguage(entry.getTitleElement()));
+        System.out.println(guessDirectionFromJavaBidi(entry.getTitleElement()));
+        System.out.println(guessDirectionFromTextProperties(entry.getTitleElement()));
+        System.out.println(guessDirectionFromLanguage(entry.getTitleElement()));
     }
 
 }

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Features.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Features.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Features.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Features.java Sat Oct 29 21:51:17 2011
@@ -20,7 +20,7 @@ package org.apache.abdera2.examples.ext;
 import org.apache.abdera2.Abdera;
 import org.apache.abdera2.ext.features.Feature;
 import org.apache.abdera2.ext.features.FeatureSelector;
-import org.apache.abdera2.ext.features.FeaturesHelper;
+import static org.apache.abdera2.ext.features.FeaturesHelper.*;
 import org.apache.abdera2.model.Collection;
 import org.apache.abdera2.model.Service;
 import org.apache.abdera2.model.Workspace;
@@ -39,28 +39,28 @@ public class Features {
         Collection collection = workspace.addCollection("My collection", "foo");
 
         // Specify which features are supported by the collection
-        org.apache.abdera2.ext.features.Features features = FeaturesHelper.addFeaturesElement(collection);
-        features.addFeature(FeaturesHelper.FEATURE_SUPPORTS_DRAFTS);
-        features.addFeature(FeaturesHelper.FEATURE_REQUIRES_TEXT_TEXT);
-        features.addFeature(FeaturesHelper.FEATURE_IGNORES_SLUG);
-        features.addFeature(FeaturesHelper.FEATURE_SUPPORTS_BIDI);
+        org.apache.abdera2.ext.features.Features features = addFeaturesElement(collection);
+        features.addFeature(FEATURE_SUPPORTS_DRAFTS);
+        features.addFeature(FEATURE_REQUIRES_TEXT_TEXT);
+        features.addFeature(FEATURE_IGNORES_SLUG);
+        features.addFeature(FEATURE_SUPPORTS_BIDI);
 
         // Get the support status of a specific feature
-        System.out.println(FeaturesHelper.getFeatureStatus(collection, FeaturesHelper.FEATURE_SUPPORTS_DRAFTS));
-        System.out.println(FeaturesHelper.getFeatureStatus(collection, FeaturesHelper.FEATURE_REQUIRES_TEXT_TEXT));
-        System.out.println(FeaturesHelper.getFeatureStatus(collection, FeaturesHelper.FEATURE_IGNORES_SLUG));
-        System.out.println(FeaturesHelper.getFeatureStatus(collection, FeaturesHelper.FEATURE_SUPPORTS_BIDI));
-        System.out.println(FeaturesHelper.getFeatureStatus(collection, FeaturesHelper.FEATURE_SUPPORTS_GEO));
+        System.out.println(getFeatureStatus(collection, FEATURE_SUPPORTS_DRAFTS));
+        System.out.println(getFeatureStatus(collection, FEATURE_REQUIRES_TEXT_TEXT));
+        System.out.println(getFeatureStatus(collection, FEATURE_IGNORES_SLUG));
+        System.out.println(getFeatureStatus(collection, FEATURE_SUPPORTS_BIDI));
+        System.out.println(getFeatureStatus(collection, FEATURE_SUPPORTS_GEO));
 
-        Iterable<Feature> fs = FeaturesHelper.getFeatures(collection);
-        for (Feature feature : fs) {
+        Iterable<Feature> fs = getFeatures(collection);
+        for (Feature feature : fs)
             System.out.println("\t" + feature.getRef());
-        }
 
         // Select a collection by feature
         Iterable<Collection> selectedCollections =
-            FeaturesHelper.select(service, new FeatureSelector(FeaturesHelper.FEATURE_SUPPORTS_DRAFTS,
-                                                               FeaturesHelper.FEATURE_SUPPORTS_BIDI));
+            select(service, new FeatureSelector(
+              FEATURE_SUPPORTS_DRAFTS,
+              FEATURE_SUPPORTS_BIDI));
         System.out.println("Selected Collections:");
         for (Collection selected : selectedCollections)
             System.out.println("\t" + selected.getTitle());

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Json.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Json.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Json.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Json.java Sat Oct 29 21:51:17 2011
@@ -27,6 +27,15 @@ public class Json {
 
     public static void main(String... args) throws Exception {
 
+        /**
+         * NOTE: If you need to convert and Atom Feed to JSON, consider
+         * using the Activity Streams "activity" writer as an alternative to this.
+         * The Activity Streams format is a standard and defines a 
+         * mapping between Atom and JSON that is much more efficient and
+         * useful than the generic output the "json" writer used here
+         * does.
+         */
+      
         Abdera abdera =Abdera.getInstance();
         Entry entry = abdera.newEntry();
         entry.newId();

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/License.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/License.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/License.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/License.java Sat Oct 29 21:51:17 2011
@@ -18,7 +18,7 @@
 package org.apache.abdera2.examples.ext;
 
 import org.apache.abdera2.Abdera;
-import org.apache.abdera2.ext.license.LicenseHelper;
+import static org.apache.abdera2.ext.license.LicenseHelper.*;
 import org.apache.abdera2.model.Entry;
 import org.apache.abdera2.model.Feed;
 import org.apache.abdera2.model.Link;
@@ -36,29 +36,28 @@ public class License {
         Entry entry = feed.addEntry();
 
         // Add a license to the feed
-        LicenseHelper.addLicense(feed, "http://example.org/foo", "Foo");
+        addLicense(feed, "http://example.org/foo", "Foo");
 
         // does the feed have a license link?
-        System.out.println(LicenseHelper.hasLicense(feed));
+        System.out.println(hasLicense(feed));
 
         // does the feed have a specific license link?
-        System.out.println(LicenseHelper.hasLicense(feed, "http://example.org/foo"));
+        System.out.println(hasLicense(feed, "http://example.org/foo"));
 
         // since the entry does not have a license, it inherits the feeds
-        System.out.println(LicenseHelper.hasLicense(entry));
-        System.out.println(LicenseHelper.hasLicense(entry, "http://example.org/foo"));
+        System.out.println(hasLicense(entry));
+        System.out.println(hasLicense(entry, "http://example.org/foo"));
 
         // list the licenses
-        Iterable<Link> licenses = LicenseHelper.getLicense(entry);
-        for (Link link : licenses) {
+        Iterable<Link> licenses = getLicense(entry);
+        for (Link link : licenses)
             System.out.println(link.getResolvedHref());
-        }
 
         // Add an unspecified license to the entry
-        LicenseHelper.addUnspecifiedLicense(entry);
+        addUnspecifiedLicense(entry);
 
         // now the entry does not inherit the feeds license
-        System.out.println(LicenseHelper.hasLicense(entry, "http://example.org/foo"));
+        System.out.println(hasLicense(entry, "http://example.org/foo"));
 
     }
 

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Paging.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Paging.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Paging.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Paging.java Sat Oct 29 21:51:17 2011
@@ -20,7 +20,7 @@ package org.apache.abdera2.examples.ext;
 import org.apache.abdera2.Abdera;
 import org.apache.abdera2.common.templates.MapContext;
 import org.apache.abdera2.common.templates.Template;
-import org.apache.abdera2.ext.history.FeedPagingHelper;
+import static org.apache.abdera2.ext.history.FeedPagingHelper.*;
 import org.apache.abdera2.model.Feed;
 
 public class Paging {
@@ -41,30 +41,30 @@ public class Paging {
         
 
         // Set/Get the paging links
-        FeedPagingHelper.setCurrent(feed, gen(-1));
-        FeedPagingHelper.setNext(feed, gen(3));
-        FeedPagingHelper.setPrevious(feed, gen(1));
-        FeedPagingHelper.setFirst(feed, gen(-1));
-        FeedPagingHelper.setLast(feed, gen(10));
-        FeedPagingHelper.setNextArchive(feed, gen(3));
-        FeedPagingHelper.setPreviousArchive(feed, gen(1));
-
-        System.out.println(FeedPagingHelper.getCurrent(feed));
-        System.out.println(FeedPagingHelper.getNext(feed));
-        System.out.println(FeedPagingHelper.getPrevious(feed));
-        System.out.println(FeedPagingHelper.getFirst(feed));
-        System.out.println(FeedPagingHelper.getLast(feed));
-        System.out.println(FeedPagingHelper.getNextArchive(feed));
-        System.out.println(FeedPagingHelper.getPreviousArchive(feed));
+        setCurrent(feed, gen(-1));
+        setNext(feed, gen(3));
+        setPrevious(feed, gen(1));
+        setFirst(feed, gen(-1));
+        setLast(feed, gen(10));
+        setNextArchive(feed, gen(3));
+        setPreviousArchive(feed, gen(1));
+
+        System.out.println(getCurrent(feed));
+        System.out.println(getNext(feed));
+        System.out.println(getPrevious(feed));
+        System.out.println(getFirst(feed));
+        System.out.println(getLast(feed));
+        System.out.println(getNextArchive(feed));
+        System.out.println(getPreviousArchive(feed));
 
         // Set/Get the archive flag
-        FeedPagingHelper.setArchive(feed, true);
-        if (FeedPagingHelper.isArchive(feed))
+        setArchive(feed, true);
+        if (isArchive(feed))
             System.out.println("archive feed!");
 
         // Set/Get the complete flag
-        FeedPagingHelper.setComplete(feed, true);
-        if (FeedPagingHelper.isComplete(feed))
+        setComplete(feed, true);
+        if (isComplete(feed))
             System.out.println("complete feed!");
 
     }

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Thread.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Thread.java?rev=1195048&r1=1195047&r2=1195048&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Thread.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/ext/Thread.java Sat Oct 29 21:51:17 2011
@@ -19,7 +19,7 @@ package org.apache.abdera2.examples.ext;
 
 import org.apache.abdera2.Abdera;
 import org.apache.abdera2.ext.thread.InReplyTo;
-import org.apache.abdera2.ext.thread.ThreadHelper;
+import static org.apache.abdera2.ext.thread.ThreadHelper.*;
 import org.apache.abdera2.model.Entry;
 import org.apache.abdera2.model.Link;
 
@@ -39,20 +39,20 @@ public class Thread {
         e2.newId();
 
         // Entry e2 is a reply to Entry e1
-        ThreadHelper.addInReplyTo(e2, e1);
+        addInReplyTo(e2, e1);
 
         // Get the in-reply-to information
-        InReplyTo irt = ThreadHelper.getInReplyTo(e2);
+        InReplyTo irt = getInReplyTo(e2);
         System.out.println(irt.getRef());
 
         // Add a link to a feed containing replies to e1
         Link replies = e1.addLink("replies.xml", Link.REL_REPLIES);
 
         // Set the known number of replies as an attribute on the link
-        ThreadHelper.setCount(replies, 10);
+        setCount(replies, 10);
 
         // alternatively, use the thr:total element to specify the number of replies
-        ThreadHelper.addTotal(e1, 10);
+        addTotal(e1, 10);
 
     }
 

Added: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/ApiKeyExample.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/ApiKeyExample.java?rev=1195048&view=auto
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/ApiKeyExample.java (added)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/ApiKeyExample.java Sat Oct 29 21:51:17 2011
@@ -0,0 +1,42 @@
+package org.apache.abdera2.examples.security;
+
+import org.apache.abdera2.common.security.ApiKey;
+
+import com.google.common.base.Supplier;
+
+public class ApiKeyExample {
+
+  public static void main(String... args) throws Exception {
+    
+    // Many REST-apis deployed today employ random, cryptographically
+    // generated API Keys used for keeping track of api calls and 
+    // monitoring quotas, etc. Abdera includes a simple Api Key 
+    // generator that can be used to generate several variations of
+    // random strings usable as API Keys. The generated values are
+    // cryptographically derived from a given key and can vary in 
+    // size. 
+    
+    byte[] key = new byte[] {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0};
+
+    ApiKey apikey = ApiKey.STRONG(key);
+    
+    System.out.println(apikey.generateNext());
+    
+    // You can use the Guava Library Supplier interface also...
+    
+    Supplier<String> sup = apikey.asSupplier();
+    System.out.println(sup.get()); // every call generates a new 
+    System.out.println(sup.get()); // random api key string
+    
+    // instances of the ApiKey and the supplier are immutable and
+    // threadsafe..
+    
+    // the generated api keys are guaranteed to only contain characters
+    // that are safe for use within URL's, so they can easily be passed
+    // around in URL Query String parameters as is typical of most API
+    // key usage scenarios
+    
+    
+  }
+  
+}

Propchange: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/ApiKeyExample.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/JwtExample.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/JwtExample.java?rev=1195048&view=auto
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/JwtExample.java (added)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/JwtExample.java Sat Oct 29 21:51:17 2011
@@ -0,0 +1,38 @@
+package org.apache.abdera2.examples.security;
+
+import java.security.KeyPair;
+
+import org.apache.abdera2.activities.extra.Jwt;
+import org.apache.abdera2.activities.model.Activity;
+import org.apache.abdera2.activities.model.Verb;
+import org.apache.abdera2.common.security.KeyHelper;
+
+/**
+ * The Abdera Activity Streams implementation includes
+ * basic support for the JSON Web Tokens (JWT) spec.
+ * This essentially gives us digital signatures for 
+ * Activities / JSON. The mechanism can generate and 
+ * validate JWT's using a supplier key pair
+ */
+public class JwtExample {
+
+  public static void main(String... args) throws Exception {
+   
+    KeyHelper.prepareDefaultJceProvider();
+    
+    KeyPair pair = KeyHelper.generateKeyPair("RSA", 1024);
+
+    Activity activity = new Activity();
+    activity.setVerb(Verb.POST);
+
+    String jwt = Jwt.generate(pair.getPrivate(), activity);
+    
+    System.out.println(jwt);
+
+    activity = (Activity) Jwt.getClaimIfValid(pair.getPrivate(), jwt);  
+    
+    System.out.println(activity);
+    
+  }
+  
+}

Propchange: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/JwtExample.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/OtpExample.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/OtpExample.java?rev=1195048&view=auto
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/OtpExample.java (added)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/OtpExample.java Sat Oct 29 21:51:17 2011
@@ -0,0 +1,105 @@
+package org.apache.abdera2.examples.security;
+
+import java.security.Key;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.abdera2.common.security.Otp;
+import com.google.common.base.Supplier;
+
+/**
+ * Abdera includes a simple One-time-password generator
+ * that can be used in a variety of scenarios to enhance 
+ * security through two-factor authentication. 
+ */
+public class OtpExample {
+
+  public static void main(String... args) throws Exception {
+    
+    // the time-based one-time-password uses time as the 
+    // moving factor. so long as two parties have the same
+    // source key and synchronize their clocks, they will
+    // be able to generate the same one-time-password for 
+    // the same window of time (in this example, the window
+    // changes every 30 seconds). 
+    
+    // OTP generators are immutable and threadsafe.
+    
+    byte[] key = new byte[] {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0};
+
+    Otp.Totp totp = new Otp.Totp(30, key);
+
+    System.out.println(totp.generateNext());
+    
+    
+    // We can also use the Guava libraries supplier interface...
+    
+    Supplier<String> otp = Otp.totpSupplier(key, 30);
+    System.out.println(otp.get());
+    
+    // Use your own OTP if you'd like...
+    
+    otp = Otp.supplier(new MyOtp(key));
+    System.out.println(otp.get()); // with this one,
+    System.out.println(otp.get()); // the otp changes
+    System.out.println(otp.get()); // every call because
+    System.out.println(otp.get()); // of the counter
+    
+  }
+  
+  /** 
+   * You can easily implement your own OTP based on 
+   * other moving factors... such as this counter
+   * based otp
+   */
+  public static class MyOtp extends Otp {
+
+    public MyOtp(byte[] key, int size) {
+      super(key, size);
+    }
+
+    public MyOtp(byte[] key, String alg, int size) {
+      super(key, alg, size);
+    }
+
+    public MyOtp(byte[] key) {
+      super(key);
+    }
+
+    public MyOtp(Key key, int size) {
+      super(key, size);
+    }
+
+    public MyOtp(Key key, String alg, int size) {
+      super(key, alg, size);
+    }
+
+    public MyOtp(Key key) {
+      super(key);
+    }
+
+    public MyOtp(String key, int size) {
+      super(key, size);
+    }
+
+    public MyOtp(String key, String alg, int size) {
+      super(key, alg, size);
+    }
+
+    public MyOtp(String key) {
+      super(key);
+    }
+
+    private final AtomicInteger counter = new AtomicInteger();
+    
+    @Override
+    protected byte[] getMovingFactor() {
+      int val = counter.incrementAndGet();
+      return new byte[] {
+          (byte)(val >>> 24),
+          (byte)(val >>> 16),
+          (byte)(val >>> 8),
+          (byte)val};
+    }
+    
+  }
+  
+}

Propchange: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/security/OtpExample.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain