Inital commit
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
/* Copyright (c) 2008 Google Inc.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
|
||||
package sample.sidewiki;
|
||||
|
||||
import com.google.gdata.util.common.base.CharEscapers;
|
||||
import com.google.gdata.client.sidewiki.SidewikiService;
|
||||
import com.google.gdata.data.Content;
|
||||
import com.google.gdata.data.IContent;
|
||||
import com.google.gdata.data.ILink;
|
||||
import com.google.gdata.data.TextContent;
|
||||
import com.google.gdata.data.sidewiki.SidewikiAuthor;
|
||||
import com.google.gdata.data.sidewiki.SidewikiEntry;
|
||||
import com.google.gdata.data.sidewiki.SidewikiEntryFeed;
|
||||
import com.google.gdata.data.sidewiki.SidewikiLink;
|
||||
import com.google.gdata.util.AuthenticationException;
|
||||
import com.google.gdata.util.ServiceException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Demonstrates interactions with the Google Sidewiki Data API's entry feeds
|
||||
* using the Java client library.
|
||||
*/
|
||||
public class SidewikiEntryFeedDemo {
|
||||
|
||||
// The base URL for all Google Sidewiki feeds.
|
||||
private static final String SIDEWIKI_FEEDS_URL_BASE =
|
||||
"https://www.google.com/sidewiki/feeds";
|
||||
|
||||
// The base URL for all Google Sidewiki entries feeds.
|
||||
private static final String ENTRIES_FEEDS_URL_BASE =
|
||||
SIDEWIKI_FEEDS_URL_BASE + "/entries";
|
||||
|
||||
// The suffix for Sidewiki entries by author feed format.
|
||||
private static final String AUTHORS_FEED_URL_SUFFIX_FORMAT =
|
||||
"/author/{author_id}/full?max-results=2";
|
||||
|
||||
// The suffix for Sidewiki entries for web page feed format.
|
||||
private static final String WEBPAGE_FEED_URL_SUFFIX_FORMAT =
|
||||
"/webpage/{url}/full?max-results=2";
|
||||
|
||||
/**
|
||||
* Utility classes should not have a public or default constructor.
|
||||
*/
|
||||
private SidewikiEntryFeedDemo() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns URL of the feed of entries written by author {@code authorId}.
|
||||
*
|
||||
* @param authorId author Profile ID
|
||||
* @return URL of the feed of entries written by given author
|
||||
* @throws MalformedURLException if error happens during URL construction
|
||||
*/
|
||||
private static URL getEntriesByAuthorFeedUrl(String authorId) throws MalformedURLException {
|
||||
return new URL(ENTRIES_FEEDS_URL_BASE
|
||||
+ AUTHORS_FEED_URL_SUFFIX_FORMAT.replace("{author_id}", authorId));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns URL of the feed of entries written for web page {@code webpage}.
|
||||
*
|
||||
* @param webpage unescaped web page URL
|
||||
* @return URL of the feed of entries written for given web page
|
||||
* @throws MalformedURLException if error happens during URL construction
|
||||
*/
|
||||
private static URL getEntriesForWebpageFeedUrl(String webpage) throws MalformedURLException {
|
||||
return new URL(ENTRIES_FEEDS_URL_BASE
|
||||
+ WEBPAGE_FEED_URL_SUFFIX_FORMAT.replace("{url}",
|
||||
CharEscapers.uriEscaper().escape(webpage)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints Sidewiki entries in the feed specified by the given URL.
|
||||
*
|
||||
* @param service an authenticated SidewikiService object
|
||||
* @param feedUrl the URL of a Sidewiki entry feed to retrieve
|
||||
* @throws IOException if there is a problem communicating with the server
|
||||
* @throws ServiceException if the service is unable to handle the request
|
||||
* @return a set of author IDs who wrote entries found in given feed
|
||||
*/
|
||||
private static Set<String> printSidewikiEntries(SidewikiService service, URL feedUrl)
|
||||
throws IOException, ServiceException {
|
||||
Set<String> authors = new HashSet<String>();
|
||||
|
||||
// Send the request and receive the response.
|
||||
SidewikiEntryFeed resultFeed = service.getFeed(feedUrl, SidewikiEntryFeed.class);
|
||||
|
||||
// Print each Sidewiki entry.
|
||||
System.out.println(resultFeed.getTitle().getPlainText());
|
||||
|
||||
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
|
||||
SidewikiEntry entry = resultFeed.getEntries().get(i);
|
||||
printEntry(entry);
|
||||
SidewikiAuthor author = (SidewikiAuthor) entry.getAuthors().get(0);
|
||||
authors.add(author.getResourceId().getValue());
|
||||
}
|
||||
return authors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns plain text representation of content {@code c}.
|
||||
*
|
||||
* @param c content object to convert to plain text
|
||||
* @return content string or "{@code null}" if {@code c} is {@code null}
|
||||
*/
|
||||
private static String contentToString(Content c) {
|
||||
if (c == null) {
|
||||
return "null";
|
||||
}
|
||||
switch (c.getType()) {
|
||||
case IContent.Type.TEXT:
|
||||
return ((TextContent) c).getContent().getPlainText();
|
||||
default:
|
||||
return "(" + c.getType() + ")";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints Sidewiki entry to standard output, including its author,
|
||||
* title and content.
|
||||
*
|
||||
* @param entry Sidewiki entry to print
|
||||
*/
|
||||
private static void printEntry(SidewikiEntry entry) {
|
||||
SidewikiAuthor author = (SidewikiAuthor) entry.getAuthors().get(0);
|
||||
System.out.println("Sidewiki entry by " + author.getName() + " about \""
|
||||
+ entry.getLink(SidewikiLink.Rel.ORIGINAL_URL, ILink.Type.HTML).getHref() + "\":\n"
|
||||
+ entry.getTitle().getPlainText() + "\" - \""
|
||||
+ contentToString(entry.getContent()) + "\"\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a SidewikiService object and uses the command line arguments
|
||||
* to authenticate. The SidewikiService object is used to demonstrate
|
||||
* interactions with the Google Sidewiki Data API's feeds.
|
||||
*
|
||||
* @param args must be length 3 and contain a valid username/password and web page url
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
// Set username and password from command-line arguments.
|
||||
if (args.length != 3) {
|
||||
usage();
|
||||
return;
|
||||
}
|
||||
|
||||
String userName = args[0];
|
||||
String userPassword = args[1];
|
||||
String webpage = args[2];
|
||||
|
||||
// Create SidewikiService and authenticate using ClientLogin.
|
||||
SidewikiService service = new SidewikiService("demo-SidewikiEntryFeedDemo-1");
|
||||
|
||||
try {
|
||||
service.setUserCredentials(userName, userPassword);
|
||||
} catch (AuthenticationException e) {
|
||||
// Invalid credentials
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
// Demonstrate retrieving Sidewiki entries written for web page or by some author.
|
||||
try {
|
||||
System.out.println("Entries for web page \"" + webpage + "\":");
|
||||
URL webpageFeedUrl = getEntriesForWebpageFeedUrl(webpage);
|
||||
Set<String> authorIds = printSidewikiEntries(service, webpageFeedUrl);
|
||||
|
||||
// Print entries written by each author found.
|
||||
for (String authorId : authorIds) {
|
||||
URL authorEntriesFeedUrl = getEntriesByAuthorFeedUrl(authorId);
|
||||
printSidewikiEntries(service, authorEntriesFeedUrl);
|
||||
}
|
||||
|
||||
// Print logged in user Sidewiki entries by using "me" keyword.
|
||||
System.out.println("My Sidewiki entries:");
|
||||
URL myEntriesFeedUrl = getEntriesByAuthorFeedUrl("me");
|
||||
printSidewikiEntries(service, myEntriesFeedUrl);
|
||||
} catch (IOException e) {
|
||||
// Communications error.
|
||||
System.err.println("There was a problem communicating with the service.");
|
||||
e.printStackTrace();
|
||||
} catch (ServiceException e) {
|
||||
// Server side error.
|
||||
System.err.println("The server had a problem handling your request.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints the command line usage of this sample application.
|
||||
*/
|
||||
private static void usage() {
|
||||
System.out.println("Syntax: SidewikiEntryFeedDemo <username> <password> <web page url>");
|
||||
System.out.println("\nPrints entries written for given web page. "
|
||||
+ "The username and password are used for authentication.");
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Reference in New Issue
Block a user