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 2006/11/14 05:07:26 UTC

svn commit: r474644 - /incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Services.java

Author: jmsnell
Date: Mon Nov 13 20:07:26 2006
New Revision: 474644

URL: http://svn.apache.org/viewvc?view=rev&rev=474644
Log:
Atom publishing client examples from a recently published developerWorks article

Added:
    incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Services.java

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Services.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Services.java?view=auto&rev=474644
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Services.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Services.java Mon Nov 13 20:07:26 2006
@@ -0,0 +1,246 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+import java.io.FileInputStream;
+import java.util.Date;
+
+import javax.xml.namespace.QName;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.ext.gdata.GoogleLoginAuthCredentials;
+import org.apache.abdera.factory.Factory;
+import org.apache.abdera.model.AtomDate;
+import org.apache.abdera.model.Collection;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Element;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Service;
+import org.apache.abdera.parser.stax.util.FOMHelper;
+import org.apache.abdera.protocol.Response;
+import org.apache.abdera.protocol.client.Client;
+import org.apache.abdera.protocol.client.CommonsClient;
+import org.apache.abdera.protocol.client.RequestOptions;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
+
+public class Services {
+  /**
+   * Posting to Blogger Beta
+   */
+  public static void postToBlogger() throws Exception {
+    
+    Abdera abdera = new Abdera();
+    
+    // Create the entry that will be posted
+    Factory factory = abdera.getFactory();
+    Entry entry = factory.newEntry();
+    entry.setId(FOMHelper.generateUuid());
+    entry.setUpdated(new java.util.Date());
+    entry.addAuthor("James");
+    entry.setTitle("Posting to Blogger");
+    entry.setContentAsXhtml("<p>This is an example post to the new blogger beta</p>");
+    
+    // Initialize the client
+    Client client = new CommonsClient(abdera);
+    
+    // Get and set the GoogleLogin authentication token
+    GoogleLoginAuthCredentials creds = 
+      new GoogleLoginAuthCredentials(
+        "username", "password","blogger");
+    client.addCredentials(
+      "http://beta.blogger.com", 
+      null, "GoogleLogin", creds);
+    
+    RequestOptions options = client.getDefaultRequestOptions();
+    options.setUseChunked(false);
+    
+    // Post the entry
+    Response response = client.post(
+      "http://beta.blogger.com/feeds/7352231422284704069/posts/full", 
+      entry, options);
+    
+    // Check the response.
+    if (response.getStatus() == 201) 
+      System.out.println("Success!");
+    else
+      System.out.println("Failed!");
+    
+  }
+  
+  /**
+   * Posting to Roller
+   */
+  public static void postToRoller() throws Exception {
+    
+    // Set the URI of the Introspection document
+    String start = "http://example.org/app";
+    
+    Abdera abdera = new Abdera();
+    Factory factory = abdera.getFactory();
+    
+    // Create the entry that will be posted
+    Entry entry = factory.newEntry();
+    entry.setId(FOMHelper.generateUuid());
+    entry.setUpdated(new java.util.Date());
+    entry.addAuthor("James");
+    entry.setTitle("Posting to Roller");
+    entry.setContentAsHtml("<p>This is an example post to Roller</p>");
+    
+    // Initialize the client and set the authentication credentials
+    Client client = new CommonsClient(abdera);
+    client.addCredentials(
+    start, null, null, 
+    new UsernamePasswordCredentials(
+      "username", "password"));
+    
+    // Get the service document and look up the collection uri
+    Document<Service> service_doc = client.get(start).getDocument();
+    Service service = service_doc.getRoot();
+    Collection collection = service.getWorkspaces().get(0).getCollections().get(0);
+    String uri = collection.getHref().toString();
+      
+    // Post the entry to the collection
+    Response response = client.post(uri, entry);
+    
+    // Check the result
+    if (response.getStatus() == 201)
+      System.out.println("Success!");
+    else 
+      System.out.println("Failed!");
+  }
+  
+  /**
+   * Posting a Podcast to Roller
+   */
+  public static void postMediaToRoller() throws Exception {
+    
+    // Set the introspection document
+    String start = "http://example.org/app";
+    
+    Abdera abdera = new Abdera();
+
+    // Prepare the media resource to be sent
+    FileInputStream fis = new FileInputStream("mypodcast.mp3");
+    InputStreamRequestEntity re = new InputStreamRequestEntity(fis, "audio/mp3");
+    
+    // Initialize the client and set the auth credentials
+    Client client = new CommonsClient(abdera);
+    client.addCredentials(
+    start, null, null, 
+    new UsernamePasswordCredentials(
+      "username", "password"));
+    
+    // Get the service doc and locate the href of the collection
+    Document<Service> service_doc = client.get(start).getDocument();
+    Service service = service_doc.getRoot();
+    Collection collection = service.getWorkspaces().get(0).getCollections().get(1);
+    String uri = collection.getHref().toString();
+      
+    // Set the filename.  Note: the Title header was used by older drafts
+    // of the Atom Publishing Protocol and should no longer be used.  The
+    // current Roller APP implementation still currently requires it.
+    RequestOptions options = client.getDefaultRequestOptions();
+    options.setHeader("Title", "mypodcast.mp3");
+    
+    // Post the entry
+    Response response = client.post(uri, re, options);
+    
+    // Check the response
+    if (response.getStatus() == 201)
+      System.out.println("Success!");
+    else 
+      System.out.println("Failed!");
+  }  
+  
+  /**
+   * Post to Google Calendar
+   */
+  public static void postToCalendar() throws Exception {
+    
+    Abdera abdera = new Abdera();
+    
+    // Prepare the entry
+    Factory factory = abdera.getFactory();
+    Entry entry = factory.newEntry();
+    entry.setId(FOMHelper.generateUuid());
+    entry.setUpdated(new java.util.Date());
+    entry.addAuthor("James");
+    entry.setTitle("New Calendar Event");
+    entry.setContentAsXhtml("<p>A new calendar event</p>");
+    
+    // Add the Google Specific extensions
+    entry.addExtension(
+      new QName(
+        "http://schemas.google.com/g/2005", 
+        "transparency")).setAttributeValue(
+          "value", 
+          "http://schemas.google.com/g/2005#event.opaque");
+    entry.addExtension(
+        new QName(
+          "http://schemas.google.com/g/2005", 
+          "eventStatus")).setAttributeValue(
+            "value", 
+            "http://schemas.google.com/g/2005#event.confirmed");
+    entry.addExtension(
+        new QName(
+          "http://schemas.google.com/g/2005", 
+          "where")).setAttributeValue(
+            "valueString", 
+            "Rolling Lawn Courts");
+    Element el = entry.addExtension(
+        new QName(
+          "http://schemas.google.com/g/2005",
+          "when"));
+    el.setAttributeValue("startTime", AtomDate.valueOf(new Date()).toString());
+    el.setAttributeValue("endTime", AtomDate.valueOf(new Date()).toString());
+    
+    // Prepare the client
+    Client client = new CommonsClient(abdera);
+    
+    // Get and set the GoogleLogin auth token
+    GoogleLoginAuthCredentials creds = 
+      new GoogleLoginAuthCredentials(
+        "username", "password","cl");
+    client.addCredentials(
+      "http://www.google.com/calendar", 
+      null, "GoogleLogin", creds);
+    
+    String uri = "http://www.google.com/calendar/feeds/default/private/full";
+    
+    RequestOptions options = client.getDefaultRequestOptions();
+    options.setUseChunked(false);
+    
+    // Post the entry
+    Response response = client.post(uri, entry, options);
+    
+    // Google Calendar might return a 302 response with a new POST URI.
+    // If it does, get the new URI and post again
+    if (response.getStatus() == 302) {
+      uri = response.getLocation().toString();
+      response = client.post(uri, entry, options);
+    }
+    
+    // Check the response
+    if (response.getStatus() == 201) 
+      System.out.println("Success!");
+    else
+      System.out.println("Failed!");
+    
+  }
+}