Inital commit
This commit is contained in:
@@ -0,0 +1,454 @@
|
||||
/* 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.photos.PicasawebService;
|
||||
import com.google.gdata.data.OtherContent;
|
||||
import com.google.gdata.data.PlainTextConstruct;
|
||||
import com.google.gdata.data.photos.AlbumEntry;
|
||||
import com.google.gdata.data.photos.CommentEntry;
|
||||
import com.google.gdata.data.photos.GphotoEntry;
|
||||
import com.google.gdata.data.photos.PhotoEntry;
|
||||
import com.google.gdata.data.photos.TagEntry;
|
||||
import com.google.gdata.util.ContentType;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A Command-line application using the PicasawebClient to make calls to the
|
||||
* Picasa Web Album GData API.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class PicasawebCommandLine extends PicasawebClient {
|
||||
|
||||
// Input stream for reading user input.
|
||||
private static final BufferedReader IN
|
||||
= new BufferedReader(new InputStreamReader(System.in));
|
||||
|
||||
/**
|
||||
* Constructs the command line application.
|
||||
*/
|
||||
public PicasawebCommandLine(PicasawebService service, String uname,
|
||||
String passwd) {
|
||||
super(service, uname, passwd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Main loop, runs the client application against the standard service, and
|
||||
* asks the user for their username and password.
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
try {
|
||||
PicasawebService service = new PicasawebService("exampleClient");
|
||||
|
||||
String uname, passwd;
|
||||
if (args.length == 2) {
|
||||
uname = args[0];
|
||||
passwd = args[1];
|
||||
} else if (args.length != 0) {
|
||||
println("Syntax: PicasawebCommandLine <username> <password>");
|
||||
return;
|
||||
} else {
|
||||
uname = getString("Username");
|
||||
passwd = getString("Password");
|
||||
}
|
||||
|
||||
new PicasawebCommandLine(service, uname, passwd).mainLoop();
|
||||
|
||||
} catch (ExitException ee) {
|
||||
println("Exiting...");
|
||||
}
|
||||
}
|
||||
|
||||
private void mainLoop() throws Exception {
|
||||
while (true) {
|
||||
println("Main Menu:");
|
||||
println("0) Exit Program");
|
||||
println("1) Show albums");
|
||||
println("2) Show user tags");
|
||||
int choice = getInt("Action");
|
||||
switch (choice) {
|
||||
case -1:
|
||||
continue;
|
||||
case 0:
|
||||
return;
|
||||
case 1:
|
||||
showAlbums();
|
||||
break;
|
||||
case 2:
|
||||
showUserTags();
|
||||
break;
|
||||
default:
|
||||
println("Invalid choice " + choice);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showAlbums() throws Exception {
|
||||
List<AlbumEntry> albums = getAlbums();
|
||||
int count = 1;
|
||||
if (albums.size() == 0) {
|
||||
println("No albums found.");
|
||||
} else {
|
||||
for (AlbumEntry entry : albums) {
|
||||
println("Album " + count++ + ") " + entry.getTitle().getPlainText());
|
||||
println(entry.getDescription().getPlainText());
|
||||
}
|
||||
}
|
||||
while (true) {
|
||||
println("Album Menu:");
|
||||
println("0) Exit to main menu");
|
||||
println("1) Show an album's photos");
|
||||
println("2) Show an album's tags");
|
||||
println("3) Create a new album");
|
||||
println("4) Delete an album");
|
||||
int choice = getInt("Action");
|
||||
switch (choice) {
|
||||
case -1:
|
||||
continue;
|
||||
case 0:
|
||||
return;
|
||||
case 1:
|
||||
showAlbumPhotos(albums);
|
||||
break;
|
||||
case 2:
|
||||
showAlbumTags(albums);
|
||||
break;
|
||||
case 3:
|
||||
createAlbum();
|
||||
showAlbums();
|
||||
return;
|
||||
case 4:
|
||||
deleteEntry(albums, "album");
|
||||
showAlbums();
|
||||
return;
|
||||
default:
|
||||
println("Invalid choice " + choice);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showUserTags() throws Exception {
|
||||
printTags(getTags());
|
||||
}
|
||||
|
||||
private void showAlbumTags(List<AlbumEntry> albums) throws Exception {
|
||||
AlbumEntry albumEntry;
|
||||
try {
|
||||
albumEntry = getEntry(albums, "album");
|
||||
} catch (ExitException ee) {
|
||||
return;
|
||||
}
|
||||
|
||||
printTags(getTags(albumEntry));
|
||||
}
|
||||
|
||||
private void createAlbum() throws Exception {
|
||||
AlbumEntry album = new AlbumEntry();
|
||||
|
||||
String title = getString("Title");
|
||||
album.setTitle(new PlainTextConstruct(title));
|
||||
String description = getString("Description");
|
||||
album.setDescription(new PlainTextConstruct(description));
|
||||
|
||||
String access = "";
|
||||
while (!access.equals("public") && !access.equals("private")) {
|
||||
access = getString("Access (public | private)");
|
||||
}
|
||||
|
||||
album.setAccess(access);
|
||||
|
||||
String location = getString("Location");
|
||||
album.setLocation(location);
|
||||
album.setDate(new Date());
|
||||
|
||||
insertAlbum(album);
|
||||
}
|
||||
|
||||
private void createComment(PhotoEntry photoEntry) throws Exception {
|
||||
CommentEntry comment = new CommentEntry();
|
||||
|
||||
String gphotoId = photoEntry.getGphotoId();
|
||||
comment.setPhotoId(Long.parseLong(gphotoId));
|
||||
comment.setTitle(new PlainTextConstruct("Inserted Comment"));
|
||||
|
||||
String commentStr = getString("Comment");
|
||||
comment.setContent(new PlainTextConstruct(commentStr));
|
||||
|
||||
insert(photoEntry, comment);
|
||||
}
|
||||
|
||||
private void showAlbumPhotos(List<AlbumEntry> albums) throws Exception {
|
||||
|
||||
AlbumEntry albumEntry;
|
||||
try {
|
||||
albumEntry = getEntry(albums, "album");
|
||||
} catch (ExitException ee) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<PhotoEntry> photos = getPhotos(albumEntry);
|
||||
int count = 1;
|
||||
if (photos.size() == 0) {
|
||||
println("No photos found.");
|
||||
} else {
|
||||
for (PhotoEntry entry : photos) {
|
||||
println("Photo " + count++ + ") " + entry.getTitle().getPlainText());
|
||||
println(entry.getDescription().getPlainText());
|
||||
}
|
||||
}
|
||||
while (true) {
|
||||
println("Photo Menu:");
|
||||
println("0) Exit to album menu");
|
||||
println("1) Show photo comments");
|
||||
println("2) Show photo tags");
|
||||
println("3) Create a new photo");
|
||||
println("4) Delete a photo");
|
||||
int choice = getInt("Action");
|
||||
switch (choice) {
|
||||
case -1:
|
||||
continue;
|
||||
case 0:
|
||||
return;
|
||||
case 1:
|
||||
showPhotoComments(albumEntry, photos);
|
||||
break;
|
||||
case 2:
|
||||
showPhotoTags(albumEntry, photos);
|
||||
break;
|
||||
case 3:
|
||||
createPhoto(albumEntry);
|
||||
break;
|
||||
case 4:
|
||||
deleteEntry(photos, "photo");
|
||||
break;
|
||||
default:
|
||||
println("Invalid choice " + choice);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createPhoto(AlbumEntry albumEntry) throws Exception {
|
||||
PhotoEntry photo = new PhotoEntry();
|
||||
|
||||
String title = getString("Title");
|
||||
photo.setTitle(new PlainTextConstruct(title));
|
||||
String description = getString("Description");
|
||||
photo.setDescription(new PlainTextConstruct(description));
|
||||
photo.setTimestamp(new Date());
|
||||
|
||||
OtherContent content = new OtherContent();
|
||||
|
||||
|
||||
File file = null;
|
||||
while (file == null || !file.canRead()) {
|
||||
file = new File(getString("Photo location"));
|
||||
}
|
||||
content.setBytes(getBytes(file));
|
||||
content.setMimeType(new ContentType("image/jpeg"));
|
||||
photo.setContent(content);
|
||||
|
||||
insert(albumEntry, photo);
|
||||
}
|
||||
|
||||
private byte[] getBytes(File file) throws FileNotFoundException, IOException {
|
||||
byte[] result = new byte[(int) file.length()];
|
||||
new FileInputStream(file).read(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void showPhotoTags(AlbumEntry albumEntry, List<PhotoEntry> photos)
|
||||
throws Exception {
|
||||
PhotoEntry photoEntry;
|
||||
try {
|
||||
photoEntry = getEntry(photos, "photo");
|
||||
} catch (ExitException ee) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<TagEntry> photoTags = getTags(photoEntry);
|
||||
|
||||
printTags(photoTags);
|
||||
while (true) {
|
||||
println("Tag Menu:");
|
||||
println("0) Exit to photo menu");
|
||||
println("1) Add a tag");
|
||||
println("2) Delete a tag");
|
||||
int choice = getInt("Action");
|
||||
switch (choice) {
|
||||
case -1:
|
||||
continue;
|
||||
case 0:
|
||||
return;
|
||||
case 1:
|
||||
createTag(photoEntry);
|
||||
showPhotoTags(albumEntry, photos);
|
||||
return;
|
||||
case 2:
|
||||
deleteEntry(photoTags, "tag");
|
||||
showPhotoTags(albumEntry, photos);
|
||||
return;
|
||||
default:
|
||||
println("Invalid choice " + choice);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void printTags(List<TagEntry> tags) throws Exception {
|
||||
int count = 1;
|
||||
if (tags.size() == 0) {
|
||||
println("No tags found.");
|
||||
} else {
|
||||
for (TagEntry tag : tags) {
|
||||
String tagWeight = tag.getWeight() == null
|
||||
? "" : " Weight: " + tag.getWeight();
|
||||
println("Tag " + count++ + ") " + tag.getTitle().getPlainText()
|
||||
+ tagWeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createTag(PhotoEntry photoEntry) throws Exception {
|
||||
TagEntry tag = new TagEntry();
|
||||
|
||||
String title = getString("Tag");
|
||||
tag.setTitle(new PlainTextConstruct(title));
|
||||
|
||||
insert(photoEntry, tag);
|
||||
}
|
||||
|
||||
private void showPhotoComments(AlbumEntry albumEntry, List<PhotoEntry> photos)
|
||||
throws Exception {
|
||||
|
||||
PhotoEntry photoEntry;
|
||||
try {
|
||||
photoEntry = getEntry(photos, "photo");
|
||||
} catch (ExitException ee) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<CommentEntry> comments = getComments(photoEntry);
|
||||
int count = 1;
|
||||
if (comments.size() == 0) {
|
||||
println("No comments found.");
|
||||
} else {
|
||||
for (CommentEntry comment : comments) {
|
||||
println("Comment " + count++ + ") " + comment.getTitle().getPlainText());
|
||||
println(comment.getPlainTextContent());
|
||||
}
|
||||
}
|
||||
while (true) {
|
||||
println("Comment Menu:");
|
||||
println("0) Exit to photo menu");
|
||||
println("1) Add a comment");
|
||||
println("2) Delete a comment");
|
||||
int choice = getInt("Action");
|
||||
switch (choice) {
|
||||
case -1:
|
||||
continue;
|
||||
case 0:
|
||||
return;
|
||||
case 1:
|
||||
createComment(photoEntry);
|
||||
showPhotoComments(albumEntry, photos);
|
||||
return;
|
||||
case 2:
|
||||
deleteEntry(comments, "comment");
|
||||
showPhotoComments(albumEntry, photos);
|
||||
return;
|
||||
default:
|
||||
println("Invalid choice " + choice);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteEntry(List<? extends GphotoEntry> entries, String name)
|
||||
throws Exception {
|
||||
GphotoEntry entry;
|
||||
try {
|
||||
entry = getEntry(entries, name);
|
||||
} catch (ExitException ee) {
|
||||
return;
|
||||
}
|
||||
|
||||
entry.delete();
|
||||
}
|
||||
|
||||
private <T extends GphotoEntry> T getEntry(List<T> entries, String name)
|
||||
throws Exception {
|
||||
while (true) {
|
||||
int index = getInt("which " + name) - 1;
|
||||
if (index >= 0 && index < entries.size()) {
|
||||
return entries.get(index);
|
||||
} else {
|
||||
println("Invalid index " + index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static int getInt(String name) throws ExitException, IOException {
|
||||
while (true) {
|
||||
String input = getString(name);
|
||||
try {
|
||||
return Integer.parseInt(input);
|
||||
} catch (NumberFormatException nfe) {
|
||||
println("Invalid number " + input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String getString(String name) throws ExitException,
|
||||
IOException {
|
||||
print("Please enter ");
|
||||
print(name);
|
||||
println(":");
|
||||
System.out.flush();
|
||||
String result = IN.readLine();
|
||||
result = result.trim();
|
||||
if (result.length() == 0) {
|
||||
return "-1";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void print(String str) {
|
||||
System.out.print(str);
|
||||
}
|
||||
|
||||
private static void println(String str) {
|
||||
System.out.println(str);
|
||||
}
|
||||
|
||||
private static class ExitException extends Exception {
|
||||
// Empty, just used to exit quickly.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user