/* 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;
import com.google.gdata.data.Person;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.client.spreadsheet.FeedURLFactory;
import com.google.gdata.client.spreadsheet.CellQuery;
import com.google.gdata.data.Feed;
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
import com.google.gdata.data.spreadsheet.CellFeed;
import com.google.gdata.data.Entry;
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.WorksheetEntry;
import com.google.gdata.data.spreadsheet.CellEntry;
import com.google.gdata.data.spreadsheet.Cell;
import sample.util.SimpleCommandLineParser;
import java.net.URL;
import java.util.List;
import java.util.ArrayList;
/**
* An application that serves as a sample to show how the SpreadhseetService
* can be used to obtain an index of spreadsheets with author and worksheets.
*
*
*/
public class IndexClient {
private SpreadsheetService service;
private FeedURLFactory factory;
/**
* Creates a client object for which the provided username and password
* produces a valid authentication.
*
* @param username the Google service user name
* @param password the corresponding password for the user name
* @throws Exception if error is encountered, such as invalid username and
* password pair
*/
public IndexClient(String username, String password) throws Exception {
factory = FeedURLFactory.getDefault();
service = new SpreadsheetService("gdata-sample-spreadhsheetindex");
service.setUserCredentials(username, password);
}
/**
* Retrieves the spreadsheets that the authenticated user has access to.
*
* @return a list of spreadsheet entries
* @throws Exception if error in retrieving the spreadsheet information
*/
public List<SpreadsheetEntry> getSpreadsheetEntries() throws Exception {
SpreadsheetFeed feed = service.getFeed(
factory.getSpreadsheetsFeedUrl(), SpreadsheetFeed.class);
return feed.getEntries();
}
/**
* Retrieves the worksheet entries from a spreadsheet entry.
*
* @param spreadsheet the spreadsheet entry containing the worksheet entries
* @return a list of worksheet entries
* @throws Exception if error in retrieving the spreadsheet information
*/
public List<WorksheetEntry> getWorksheetEntries(SpreadsheetEntry spreadsheet)
throws Exception {
return spreadsheet.getWorksheets();
}
/**
* Retrieves the columns headers from the cell feed of the worksheet
* entry.
*
* @param worksheet worksheet entry containing the cell feed in question
* @return a list of column headers
* @throws Exception if error in retrieving the spreadsheet information
*/
public List<String> getColumnHeaders(WorksheetEntry worksheet)
throws Exception {
List<String> headers = new ArrayList<String>();
// Get the appropriate URL for a cell feed
URL cellFeedUrl = worksheet.getCellFeedUrl();
// Create a query for the top row of cells only (1-based)
CellQuery cellQuery = new CellQuery(cellFeedUrl);
cellQuery.setMaximumRow(1);
// Get the cell feed matching the query
CellFeed topRowCellFeed = service.query(cellQuery, CellFeed.class);
// Get the cell entries fromt he feed
List<CellEntry> cellEntries = topRowCellFeed.getEntries();
for (CellEntry entry : cellEntries) {
// Get the cell element from the entry
Cell cell = entry.getCell();
headers.add(cell.getValue());
}
return headers;
}
/**
* Prints the usage of this application.
*/
private static void usage() {
System.out.println("Usage: java IndexClient --username [user] " +
"--password [pass] [--authors] [--worksheets] [--headers]");
System.out.println("\nA simple application that uses the provided Google\n"
+ "Account username and password to create\n"
+ "an index of the user's spreadsheets against\n"
+ "the user's Google Spreadsheet account.\n");
}
/**
* Main entry point. Parses arguments and creates and invokes the
* IndexClient.
*/
public static void main(String[] args) throws Exception {
SimpleCommandLineParser parser = new SimpleCommandLineParser(args);
String username = parser.getValue("username", "user", "u");
String password = parser.getValue("password", "pass", "passwd", "pw", "p");
boolean help = parser.containsKey("help", "h");
if (help || (username == null) || (password == null)) {
usage();
System.exit(1);
}
boolean author = parser.containsKey("author", "a");
boolean columns = parser.containsKey("headers", "header", "h");
boolean worksheets = parser.containsKey("worksheets", "worksheet", "w");
IndexClient client = new IndexClient(username, password);
for (SpreadsheetEntry spreadsheet : client.getSpreadsheetEntries()) {
System.out.print(spreadsheet.getTitle().getPlainText());
if (author) {
for (Person person : spreadsheet.getAuthors()) {
System.out.println(" - " + person.getName());
}
} else {
System.out.println();
} //authors (or not)
if (worksheets || columns) {
List<WorksheetEntry> entries = client.getWorksheetEntries(spreadsheet);
for (WorksheetEntry worksheet : entries) {
System.out.println("\t" + worksheet.getTitle().getPlainText());
if (columns) {
List<String> headers = client.getColumnHeaders(worksheet);
for (String header : headers) {
System.out.println("\t\t" + header);
}
} // columns
}
} // worksheets
} // spreadsheets
}
}