191 lines
6.2 KiB
Java
191 lines
6.2 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.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
|
|
|
|
}
|
|
}
|