/* 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.
*/
// All Rights Reserved.
package sample.tester;
import com.google.gdata.client.GoogleService;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.TextContent;
import com.google.gdata.util.ServiceException;
import sample.util.SimpleCommandLineParser;
import java.net.URL;
/**
* An application that serves as a sample to show how the GData
* Service object can be used to create/read/update/delete data
* in a Google service.
*
*
*/
public class Tester {
public static void main(String[] args) throws Exception {
SimpleCommandLineParser parser = new SimpleCommandLineParser(args);
String serviceName = parser.getValue("serviceName", "service", "s");
String appName = parser.getValue("appName", "app", "a");
String feedUrlString = parser.getValue("feedUrl", "feed", "f");
String username = parser.getValue("username", "user", "u");
String password = parser.getValue("password", "pass", "p");
boolean updateEntry = parser.containsKey("update");
boolean help = parser.containsKey("help", "h");
if (help) {
usage();
System.exit(1);
}
if (serviceName == null) {
throw new IllegalArgumentException("Must specify service name");
}
if (appName == null) {
throw new IllegalArgumentException("Must specify application name");
}
if (feedUrlString == null) {
throw new IllegalArgumentException("Must specify feed URL");
}
GoogleService service = new GoogleService(serviceName, appName);
try {
// URL of service endpoint.
URL feedUrl = new URL(feedUrlString);
// Set up authentication.
if (username != null) {
if (password == null) {
throw new IllegalArgumentException("Must specify password");
}
service.setUserCredentials(username, password);
}
// Send the query request and receive the response.
Feed feed = service.getFeed(feedUrl, Feed.class);
// Print the title and update time of the returned feed.
System.out.println("Feed title " + feed.getTitle().getPlainText() +
" (" + feed.getUpdated() + ")");
// Print the title and update time and body of each entry.
System.out.println("Entries:");
for (Entry e : feed.getEntries()) {
String content =
(e.getContent() != null ?
((TextContent) e.getContent()).getContent().getPlainText() :
"");
System.out.println(" " + e.getTitle().getPlainText() +
" (" + e.getUpdated() + ")" +
(content.length() > 0 ? ": " : "") + content);
}
// Insert, update, and delete an entry if so requested.
if (updateEntry) {
BaseEntry newEntry = new Entry();
newEntry.setTitle(new PlainTextConstruct("Sample entry title"));
newEntry.setContent(new PlainTextConstruct("Sample entry content"));
BaseEntry e = service.insert(feedUrl, newEntry);
System.out.println("Inserted an entry, ID is " + e.getId());
e.setContent(new PlainTextConstruct("New sample entry content"));
service.update(new URL(e.getEditLink().getHref()), e);
System.out.println("Updated the entry");
service.delete(new URL(e.getEditLink().getHref()));
System.out.println("Deleted the entry");
}
} catch (ServiceException e) {
throw new RuntimeException(e.getMessage() + "\n" + e.getResponseBody());
}
}
/**
* Prints usage of this application.
*/
private static void usage() {
System.out.println("Usage: java Tester --serviceName [service] " +
"--appName [app] --feedUrl [feed] --username [user] " +
"--password [pass] --update");
System.out.println(
"\nA generic client for querying a GData feed and optionally\n" +
"inserting/updating/deleting entries.\n\n" +
"It uses the specified Google Account username and password to\n" +
"query the specified feed URL and displays the title and content\n" +
"of each entry returned. If --update is specified, it will insert\n" +
"an entry, update it, and then delete it.\n");
}
}