211 lines
6.4 KiB
Java
211 lines
6.4 KiB
Java
/* 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.photos;
|
|
|
|
import com.google.gdata.client.Query;
|
|
import com.google.gdata.client.photos.PicasawebService;
|
|
import com.google.gdata.data.photos.AlbumEntry;
|
|
import com.google.gdata.data.photos.AlbumFeed;
|
|
import com.google.gdata.data.photos.GphotoEntry;
|
|
import com.google.gdata.util.ServiceException;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.PrintStream;
|
|
import java.net.URL;
|
|
|
|
/**
|
|
* Demo of partial response and partial patch to change location on photo
|
|
* albums.
|
|
*
|
|
*
|
|
*/
|
|
public class PicasawebPartialDemo {
|
|
|
|
/** Picasaweb feed url prefix. */
|
|
private static final String API_PREFIX
|
|
= "https://picasaweb.google.com/data/feed/api/user/";
|
|
|
|
/** Input stream for reading user input. */
|
|
private static final BufferedReader IN
|
|
= new BufferedReader(new InputStreamReader(System.in));
|
|
|
|
/** Output stream to write program output. */
|
|
private static final PrintStream OUT = System.out;
|
|
|
|
/** Picasaweb service to talk to the server */
|
|
private PicasawebService service;
|
|
|
|
/** Constructor */
|
|
private PicasawebPartialDemo(PicasawebService service) {
|
|
this.service = service;
|
|
}
|
|
|
|
/**
|
|
* Displays a menu of the main activities a user can perform.
|
|
*/
|
|
private void printMenu() {
|
|
OUT.println("\n");
|
|
OUT.println("Choose one of the following demo options:");
|
|
OUT.println("\t1) Retrieve my albums with location");
|
|
OUT.println("\t2) Update location for an album");
|
|
OUT.println("\t0) Exit");
|
|
OUT.println("\nEnter Number (0-2): ");
|
|
}
|
|
|
|
/**
|
|
* Demonstrates use of partial query to retrieve album title and location
|
|
* information for user's albums.
|
|
*/
|
|
private void printAlbumLocation(String uname)
|
|
throws IOException, ServiceException {
|
|
String albumsUrl = API_PREFIX + uname;
|
|
String fields = "entry(title,gphoto:id,gphoto:location)";
|
|
|
|
Query albumQuery = new Query(new URL(albumsUrl));
|
|
albumQuery.setFields(fields);
|
|
|
|
AlbumFeed feed = service.query(albumQuery, AlbumFeed.class);
|
|
for (GphotoEntry entry : feed.getEntries()) {
|
|
if (entry instanceof AlbumEntry) {
|
|
AlbumEntry albumEntry = (AlbumEntry) entry;
|
|
OUT.println(albumEntry.getGphotoId() + ":"
|
|
+ albumEntry.getTitle().getPlainText()
|
|
+ " (" + albumEntry.getLocation() + ")");
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Demonstrates update operation using partial patch to update location
|
|
* string for specified album.
|
|
*/
|
|
private void updateAlbumLocation(String uname)
|
|
throws IOException, ServiceException {
|
|
OUT.println("Enter album id to update:");
|
|
String albumId = IN.readLine();
|
|
|
|
// Get the current album entry
|
|
String albumEntryUrl = API_PREFIX + uname + "/" + albumId;
|
|
String fields = "@gd:etag,gphoto:location";
|
|
Query patchQuery = new Query(new URL(albumEntryUrl));
|
|
patchQuery.setFields(fields);
|
|
AlbumEntry entry = service.getEntry(patchQuery.getUrl(), AlbumEntry.class);
|
|
OUT.println("Current location: " + entry.getLocation());
|
|
|
|
// Update the location in the album entry
|
|
OUT.println("Specify new location: ");
|
|
String newLocation = IN.readLine();
|
|
entry.setLocation(newLocation);
|
|
entry.setSelectedFields("gphoto:location");
|
|
AlbumEntry updated = service.patch(new URL(albumEntryUrl), fields, entry);
|
|
OUT.println("Location set to: " + updated.getLocation());
|
|
}
|
|
|
|
/** Program entry point. */
|
|
public static void main(String args[]) throws IOException, ServiceException {
|
|
// parse user input
|
|
String uname, passwd;
|
|
if (args.length == 2) {
|
|
uname = args[0];
|
|
passwd = args[1];
|
|
} else if (args.length != 0) {
|
|
OUT.println(
|
|
"Syntax: PicasawebCommandLine <username> <password>");
|
|
return;
|
|
} else {
|
|
uname = getString("Username");
|
|
passwd = getString("Password");
|
|
}
|
|
|
|
PicasawebService service = new PicasawebService("gdata-PhotosPartialDemo");
|
|
service.setUserCredentials(uname, passwd);
|
|
|
|
PicasawebPartialDemo demo = new PicasawebPartialDemo(service);
|
|
while (true) {
|
|
try {
|
|
demo.printMenu();
|
|
int choice = readInt();
|
|
|
|
switch (choice) {
|
|
case 1:
|
|
// Prints out the user's uploaded videos
|
|
demo.printAlbumLocation(uname);
|
|
break;
|
|
case 2:
|
|
demo.updateAlbumLocation(uname);
|
|
break;
|
|
case 0:
|
|
System.exit(1);
|
|
break;
|
|
}
|
|
} 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();
|
|
}
|
|
}
|
|
}
|
|
|
|
/** Reads a user string input. */
|
|
private static String getString(String name) throws IOException {
|
|
OUT.print("Please enter ");
|
|
OUT.print(name);
|
|
OUT.println(":");
|
|
OUT.flush();
|
|
String result = IN.readLine();
|
|
result = result.trim();
|
|
if (result.length() == 0) {
|
|
return "-1";
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Reads a line of text from the standard input.
|
|
*
|
|
* @throws IOException If unable to read a line from the standard input.
|
|
* @return A line of text read from the standard input.
|
|
*/
|
|
private static String readLine() throws IOException {
|
|
return IN.readLine();
|
|
}
|
|
|
|
/**
|
|
* Reads a line of text from the standard input and returns the parsed
|
|
* integer representation.
|
|
*
|
|
* @throws IOException If unable to read a line from the standard input.
|
|
* @return An integer read from the standard input.
|
|
*/
|
|
private static int readInt() throws IOException {
|
|
String input = readLine();
|
|
|
|
try {
|
|
return Integer.parseInt(input);
|
|
} catch (NumberFormatException nfe) {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|