Inital commit
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
Google Spreadsheets data API Java Sample - README.txt
|
||||
-----------------------------------------------------
|
||||
|
||||
This is a very simple Java example of reading and writing to worksheets in
|
||||
a spreadsheet. Using it, you can fully experiment with creating, listing,
|
||||
updating, and deleting worksheets.
|
||||
|
||||
|
||||
This can be built an run with Ant:
|
||||
|
||||
1. Edit gdata/java/build-samples/build.properties with your Google Account
|
||||
username, password, and a URL to your Google spreadsheet
|
||||
(in the format ....spreadsheets.google.com/ccc?id=...)
|
||||
|
||||
2. Run the Ant rule:
|
||||
|
||||
ant -f gdata/java/build-samples/spreadsheet.xml sample.spreadsheet.worksheetdemo.run
|
||||
|
||||
Alternately, you can compile and run it from the command line:
|
||||
|
||||
java sample.spreadsheet.worksheet.WorksheetDemo
|
||||
--username [user]
|
||||
--password [pass]
|
||||
|
||||
@@ -0,0 +1,396 @@
|
||||
/* 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.spreadsheet.worksheet;
|
||||
|
||||
import com.google.gdata.client.spreadsheet.FeedURLFactory;
|
||||
import com.google.gdata.client.spreadsheet.SpreadsheetService;
|
||||
import com.google.gdata.data.BaseEntry;
|
||||
import com.google.gdata.data.PlainTextConstruct;
|
||||
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
|
||||
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
|
||||
import com.google.gdata.data.spreadsheet.WorksheetEntry;
|
||||
import com.google.gdata.data.spreadsheet.WorksheetFeed;
|
||||
import com.google.gdata.util.AuthenticationException;
|
||||
import com.google.gdata.util.ServiceException;
|
||||
|
||||
import sample.util.SimpleCommandLineParser;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Demo of the CRUD operation on the worksheets feed.
|
||||
*
|
||||
* Using this demo, you can see how the Google data API can you can manage the
|
||||
* worksheets in your spreadsheets.
|
||||
*
|
||||
* Usage: java WorksheetDemo --username [username] --password [password]
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class WorksheetDemo {
|
||||
|
||||
/** The message for displaying the usage parameters. */
|
||||
private static final String[] USAGE_MESSAGE = {
|
||||
"Usage: java WorksheetDemo --username [user] --password [pass] ", ""};
|
||||
|
||||
/** Welcome message, introducing the program. */
|
||||
private static final String[] WELCOME_MESSAGE = {
|
||||
"This is a demo of the worksheets feed!",
|
||||
"",
|
||||
"Using this interface, you can manage the worksheets in your "
|
||||
+ "spreadsheet.", ""};
|
||||
|
||||
/** Help on all available commands. */
|
||||
private static final String[] COMMAND_HELP_MESSAGE = {
|
||||
"Commands:",
|
||||
" load [[load a spreadsheet]]",
|
||||
" list [[show all worksheets]]",
|
||||
" create title, #rows, #cols [[create a new worksheet]]",
|
||||
" update oldTitle, newTitle, #rows, #cols "
|
||||
+ "[[update the title and size of a worksheet]]",
|
||||
" delete title [[delete a worksheet]]",
|
||||
" quit or q [[quit demo]]"};
|
||||
|
||||
/** Our view of Google Spreadsheets as an authenticated Google user. */
|
||||
private SpreadsheetService service;
|
||||
|
||||
/** The URL of the worksheet feed. */
|
||||
private URL worksheetFeedUrl;
|
||||
|
||||
/** The output stream. */
|
||||
private PrintStream out;
|
||||
|
||||
/** A factory that generates the appropriate feed URLs. */
|
||||
private FeedURLFactory factory;
|
||||
|
||||
/**
|
||||
* Constructs a worksheet demo using the given spreadsheet service and output
|
||||
* stream. The spreadsheet service is used to authenticate to and access
|
||||
* Google Spreadsheets.
|
||||
*
|
||||
* @param service the connection to the Google Spreadsheets service.
|
||||
* @param outputStream a handle for stdout.
|
||||
*/
|
||||
public WorksheetDemo(SpreadsheetService service, PrintStream outputStream) {
|
||||
this.service = service;
|
||||
this.out = outputStream;
|
||||
this.factory = FeedURLFactory.getDefault();
|
||||
}
|
||||
|
||||
/**
|
||||
* Log in to Google, under the Google Spreadsheets account.
|
||||
*
|
||||
* @param username name of user to authenticate (e.g. yourname@gmail.com)
|
||||
* @param password password to use for authentication
|
||||
* @throws AuthenticationException if the service is unable to validate the
|
||||
* username and password.
|
||||
*/
|
||||
public void login(String username, String password)
|
||||
throws AuthenticationException {
|
||||
|
||||
// Authenticate
|
||||
service.setUserCredentials(username, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the given list of entries and prompts the user to select the index
|
||||
* of one of the entries. NOTE: The displayed index is 1-based and is
|
||||
* converted to 0-based before being returned.
|
||||
*
|
||||
* @param reader to read input from the keyboard
|
||||
* @param entries the list of entries to display
|
||||
* @param type describes the type of things the list contains
|
||||
* @return the 0-based index of the user's selection
|
||||
* @throws IOException if an I/O error occurs while getting input from user
|
||||
*/
|
||||
private int getIndexFromUser(BufferedReader reader, List entries, String type)
|
||||
throws IOException {
|
||||
for (int i = 0; i < entries.size(); i++) {
|
||||
BaseEntry entry = (BaseEntry) entries.get(i);
|
||||
System.out.println("\t(" + (i + 1) + ") "
|
||||
+ entry.getTitle().getPlainText());
|
||||
}
|
||||
int index = -1;
|
||||
while (true) {
|
||||
out.print("Enter the number of the spreadsheet to load: ");
|
||||
String userInput = reader.readLine();
|
||||
try {
|
||||
index = Integer.parseInt(userInput);
|
||||
if (index < 1 || index > entries.size()) {
|
||||
throw new NumberFormatException();
|
||||
}
|
||||
break;
|
||||
} catch (NumberFormatException e) {
|
||||
System.out.println("Please enter a valid number for your selection.");
|
||||
}
|
||||
}
|
||||
return index - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the user's credentials to get a list of spreadsheets. Then asks the
|
||||
* user which spreadsheet to load. If the selected spreadsheet has multiple
|
||||
* worksheets then the user will also be prompted to select what sheet to use.
|
||||
*
|
||||
* @param reader to read input from the keyboard
|
||||
* @throws ServiceException when the request causes an error in the Google
|
||||
* Spreadsheets service.
|
||||
* @throws IOException when an error occurs in communication with the Google
|
||||
* Spreadsheets service.
|
||||
*
|
||||
*/
|
||||
public void loadSheet(BufferedReader reader) throws IOException,
|
||||
ServiceException {
|
||||
SpreadsheetFeed feed = service.getFeed(factory.getSpreadsheetsFeedUrl(),
|
||||
SpreadsheetFeed.class);
|
||||
List<SpreadsheetEntry> spreadsheets = feed.getEntries();
|
||||
int spreadsheetIndex = getIndexFromUser(reader, spreadsheets, "spreadsheet");
|
||||
SpreadsheetEntry spreadsheet = feed.getEntries().get(spreadsheetIndex);
|
||||
worksheetFeedUrl = spreadsheet.getWorksheetFeedUrl();
|
||||
System.out.println("Spreadsheet loaded.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Lists all the worksheets in the loaded spreadsheet.
|
||||
*
|
||||
* @throws ServiceException when the request causes an error in the Google
|
||||
* Spreadsheets service.
|
||||
* @throws IOException when an error occurs in communication with the Google
|
||||
* Spreadsheets service.
|
||||
*/
|
||||
private void listAllWorksheets() throws IOException, ServiceException {
|
||||
WorksheetFeed worksheetFeed = service.getFeed(worksheetFeedUrl,
|
||||
WorksheetFeed.class);
|
||||
for (WorksheetEntry worksheet : worksheetFeed.getEntries()) {
|
||||
String title = worksheet.getTitle().getPlainText();
|
||||
int rowCount = worksheet.getRowCount();
|
||||
int colCount = worksheet.getColCount();
|
||||
System.out.println("\t" + title + " - rows:" + rowCount + " cols: "
|
||||
+ colCount);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new worksheet in the loaded spreadsheets, using the title and
|
||||
* sizes given.
|
||||
*
|
||||
* @param title a String containing a name for the new worksheet.
|
||||
* @param rowCount the number of rows the new worksheet should have.
|
||||
* @param colCount the number of columns the new worksheet should have.
|
||||
*
|
||||
* @throws ServiceException when the request causes an error in the Google
|
||||
* Spreadsheets service.
|
||||
* @throws IOException when an error occurs in communication with the Google
|
||||
* Spreadsheets service.
|
||||
*/
|
||||
private void createWorksheet(String title, int rowCount, int colCount)
|
||||
throws IOException, ServiceException {
|
||||
WorksheetEntry worksheet = new WorksheetEntry();
|
||||
worksheet.setTitle(new PlainTextConstruct(title));
|
||||
worksheet.setRowCount(rowCount);
|
||||
worksheet.setColCount(colCount);
|
||||
service.insert(worksheetFeedUrl, worksheet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the worksheet specified by the oldTitle parameter, with the given
|
||||
* title and sizes. Note that worksheet titles are not unique, so this method
|
||||
* just updates the first worksheet it finds. Hey, it's just sample code - no
|
||||
* refunds!
|
||||
*
|
||||
* @param oldTitle a String specifying the worksheet to update.
|
||||
* @param newTitle a String containing the new name for the worksheet.
|
||||
* @param rowCount the number of rows the new worksheet should have.
|
||||
* @param colCount the number of columns the new worksheet should have.
|
||||
*
|
||||
* @throws ServiceException when the request causes an error in the Google
|
||||
* Spreadsheets service.
|
||||
* @throws IOException when an error occurs in communication with the Google
|
||||
* Spreadsheets service.
|
||||
*/
|
||||
private void updateWorksheet(String oldTitle, String newTitle, int rowCount,
|
||||
int colCount) throws IOException, ServiceException {
|
||||
WorksheetFeed worksheetFeed = service.getFeed(worksheetFeedUrl,
|
||||
WorksheetFeed.class);
|
||||
for (WorksheetEntry worksheet : worksheetFeed.getEntries()) {
|
||||
String currTitle = worksheet.getTitle().getPlainText();
|
||||
if (currTitle.equals(oldTitle)) {
|
||||
worksheet.setTitle(new PlainTextConstruct(newTitle));
|
||||
worksheet.setRowCount(rowCount);
|
||||
worksheet.setColCount(colCount);
|
||||
worksheet.update();
|
||||
System.out.println("Worksheet updated.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If it got this far, the worksheet wasn't found.
|
||||
System.out.println("Worksheet not found: " + oldTitle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the worksheet specified by the title parameter. Note that worksheet
|
||||
* titles are not unique, so this method just updates the first worksheet it
|
||||
* finds.
|
||||
*
|
||||
* @param title a String containing the name of the worksheet to delete.
|
||||
*
|
||||
* @throws ServiceException when the request causes an error in the Google
|
||||
* Spreadsheets service.
|
||||
* @throws IOException when an error occurs in communication with the Google
|
||||
* Spreadsheets service.
|
||||
*/
|
||||
private void deleteWorksheet(String title) throws IOException,
|
||||
ServiceException {
|
||||
WorksheetFeed worksheetFeed = service.getFeed(worksheetFeedUrl,
|
||||
WorksheetFeed.class);
|
||||
for (WorksheetEntry worksheet : worksheetFeed.getEntries()) {
|
||||
String currTitle = worksheet.getTitle().getPlainText();
|
||||
if (currTitle.equals(title)) {
|
||||
worksheet.delete();
|
||||
System.out.println("Worksheet deleted.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If it got this far, the worksheet wasn't found.
|
||||
System.out.println("Worksheet not found: " + title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses and executes a command.
|
||||
*
|
||||
* @param reader to read input from the keyboard
|
||||
* @return false if the user quits, true on exception
|
||||
*/
|
||||
public boolean executeCommand(BufferedReader reader) {
|
||||
for (String s : COMMAND_HELP_MESSAGE) {
|
||||
out.println(s);
|
||||
}
|
||||
|
||||
System.err.print("Command: ");
|
||||
|
||||
try {
|
||||
String command = reader.readLine();
|
||||
String[] parts = command.trim().split(" ", 2);
|
||||
String name = parts[0];
|
||||
String parameters = parts.length > 1 ? parts[1] : "";
|
||||
|
||||
if (name.equals("load")) {
|
||||
loadSheet(reader);
|
||||
} else if (name.equals("list")) {
|
||||
listAllWorksheets();
|
||||
} else if (name.equals("create")) {
|
||||
String[] split = parameters.split(" ", 3);
|
||||
createWorksheet(split[0], Integer.parseInt(split[1]), Integer
|
||||
.parseInt(split[2]));
|
||||
} else if (name.equals("update")) {
|
||||
String[] split = parameters.split(" ", 4);
|
||||
updateWorksheet(split[0], split[1], Integer.parseInt(split[2]), Integer
|
||||
.parseInt(split[3]));
|
||||
} else if (name.equals("delete")) {
|
||||
deleteWorksheet(parameters);
|
||||
} else if (name.equals("q") || name.equals("quit")) {
|
||||
return false;
|
||||
} else {
|
||||
out.println("Unknown command.");
|
||||
}
|
||||
} catch (ServiceException se) {
|
||||
// Show *exactly* what went wrong.
|
||||
se.printStackTrace();
|
||||
} catch (IOException ioe) {
|
||||
// Show *exactly* what went wrong.
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts up the demo and prompts for commands.
|
||||
*
|
||||
* @param username name of user to authenticate (e.g. yourname@gmail.com)
|
||||
* @param password password to use for authentication
|
||||
* @throws AuthenticationException if the service is unable to validate the
|
||||
* username and password.
|
||||
*/
|
||||
public void run(String username, String password)
|
||||
throws AuthenticationException {
|
||||
for (String s : WELCOME_MESSAGE) {
|
||||
out.println(s);
|
||||
}
|
||||
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||
|
||||
// Login and prompt the user to pick a sheet to use.
|
||||
login(username, password);
|
||||
try {
|
||||
loadSheet(reader);
|
||||
} catch (ServiceException se) {
|
||||
// Show *exactly* what went wrong.
|
||||
se.printStackTrace();
|
||||
} catch (IOException ioe) {
|
||||
// Show *exactly* what went wrong.
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
|
||||
while (executeCommand(reader)) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the demo.
|
||||
*
|
||||
* @param args the command-line arguments
|
||||
* @throws AuthenticationException if the service is unable to validate the
|
||||
* username and password.
|
||||
*/
|
||||
public static void main(String[] args) throws AuthenticationException {
|
||||
SimpleCommandLineParser parser = new SimpleCommandLineParser(args);
|
||||
String username = parser.getValue("username", "user", "u");
|
||||
String password = parser.getValue("password", "pass", "p");
|
||||
boolean help = parser.containsKey("help", "h");
|
||||
|
||||
if (help || username == null || password == null) {
|
||||
usage();
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
final String appName = "sampleCo-WorksheetDemo-0.9";
|
||||
WorksheetDemo demo = new WorksheetDemo(new SpreadsheetService(appName),
|
||||
System.out);
|
||||
|
||||
demo.run(username, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints out the usage.
|
||||
*/
|
||||
private static void usage() {
|
||||
for (String s : USAGE_MESSAGE) {
|
||||
System.out.println(s);
|
||||
}
|
||||
for (String s : WELCOME_MESSAGE) {
|
||||
System.out.println(s);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user