/* 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.gui;
import com.google.gdata.client.spreadsheet.ListQuery;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.spreadsheet.ListEntry;
import com.google.gdata.data.spreadsheet.ListFeed;
import com.google.gdata.util.ServiceException;
import java.io.IOException;
import java.net.URL;
import java.util.List;
/**
* This class helps you access your spreadsheet like a list or like a
* database.
*
*
* In this model, each row is treated like a separate entry, with multiple
* fields. Each field is named based on the top row of your speradsheet.
*
*
*/
public class ListFeedHelper {
/** The SpreadsheetService to contact Google with. */
private SpreadsheetService service;
/** List feed URL. */
private URL feedUrl;
/**
* Creates a list feed helper for a particular URL.
*
* @param inService the SpreadsheetService to contact Google with
* @param inFeedUrl the URL of the list feed; to get this URL, you can
* use SpreadsheetFeedHelper, or if you have a WorksheetEntry
* you can use its method to get the list feed URL
*/
public ListFeedHelper(SpreadsheetService inService, URL inFeedUrl) {
service = inService;
feedUrl = inFeedUrl;
}
/**
* Adds a new list entry to the spreadsheet.
*
* @param entry the new entry
* @throws IOException if there was a problem contacting Google
* @throws ServiceException if there was an error processnig the request
*/
public ListEntry addListEntry(ListEntry entry)
throws IOException, ServiceException {
return service.insert(feedUrl, entry);
}
/**
* Gets a list of all the list entries.
*
* @return a list of all non-empty rows in the spreadsheet
* @throws IOException if there was a problem contacting Google
* @throws ServiceException if there was an error processnig the request
*/
public List<ListEntry> getAllListEntries()
throws IOException, ServiceException {
ListQuery query = new ListQuery(feedUrl);
ListFeed feed = service.query(query, ListFeed.class);
return feed.getEntries();
}
/**
* Gets a list of all entries that match a full-text search.
*
* Full-text searches look for the keywords you specify, that may
* occur in any order in the row. Right now only the simplest syntax
* is supported, as a convenience feature.
*
* @param search the search string like "adam technical writer"
* @return all matching entries
* @throws IOException if there was a problem contacting Google
* @throws ServiceException if there was an error processnig the request
*/
public List<ListEntry> getFullTextSearch(String search)
throws IOException, ServiceException {
ListQuery query = new ListQuery(feedUrl);
query.setFullTextQuery(search);
ListFeed feed = service.query(query, ListFeed.class);
return feed.getEntries();
}
/**
* Gets a list of all entries that match a structured query.
*
* Structured queries are in format:
* name = 'adam' and (job = 'technical writer' or job = 'artist')
*
* In short, it is case-insensitive, supporting both SQL-like and
* C-like syntaxes for all varieties of new and seasoned programmers.
*
* @param structuredQuery the search string
* @return all matching entries
* @throws IOException if there was a problem contacting Google
* @throws ServiceException if there was an error processnig the request
*/
public List<ListEntry> getStructuredQuery(
String structuredQuery)
throws IOException, ServiceException {
ListQuery query = new ListQuery(feedUrl);
query.setFullTextQuery(structuredQuery);
ListFeed feed = service.query(query, ListFeed.class);
return feed.getEntries();
}
}