/* 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 com.google.gdata.data.spreadsheet; import com.google.gdata.client.spreadsheet.SpreadsheetService; import com.google.gdata.data.BaseEntry; import com.google.gdata.data.Category; import com.google.gdata.data.ExtensionProfile; import com.google.gdata.data.Kind; import com.google.gdata.data.Link; import com.google.gdata.data.OutOfLineContent; import com.google.gdata.util.ServiceException; import com.google.gdata.util.Version; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.List; /** * One spreadsheet, when listing all spreadsheets you have access to. * * */ @Kind.Term(SpreadsheetEntry.KIND) public class SpreadsheetEntry extends BaseEntry<SpreadsheetEntry> { /** * Kind category term used to label the entries that contains spreadsheet * data. */ public static final String KIND = Namespaces.gSpreadPrefix + "spreadsheet"; /** * Category used to label entries that contain spreadsheet data. */ public static final Category CATEGORY = new Category(Namespaces.gSpread, KIND); /** * Constructs a new uninitialized entry, to be populated by the * GData parsers. */ public SpreadsheetEntry() { getCategories().add(CATEGORY); } /** * Constructs a new entry by doing a shallow copy from another BaseEntry * instance. */ public SpreadsheetEntry(BaseEntry sourceEntry) { super(sourceEntry); getCategories().add(CATEGORY); } /** * Gets the link with which you can open up the spreadsheet in a Web * browser, the full Google Spreadsheets user interface. * * @return a link to open up the web browser with */ public Link getSpreadsheetLink() { return super.getHtmlLink(); } /** * Gets the URL for this spreadsheet's worksheets feed. * * You can then create a query using this URL to query this worksheet's * sheets. * * * @return a URL to get a feed of worksheets */ public URL getWorksheetFeedUrl() { try { return new URL(getWorksheetFeedUrlString()); } catch(MalformedURLException e) { throw new RuntimeException("Error in GData server", e); } } /** * Gets the URL for this spreadseet's worksheets feed as a string. * * <p>This checks for version compatibility also. * * and call that from here, just like in WorksheetEntry. * * @return a string representing the URL for the worksheets feed */ private String getWorksheetFeedUrlString() { Version spreadsheetVersion = state.service.getProtocolVersion(); if (spreadsheetVersion.isCompatible(SpreadsheetService.Versions.V1)) { Link feedLink = this.getLink(Namespaces.WORKSHEETS_LINK_REL, Link.Type.ATOM); return feedLink.getHref(); } else { // must be SpreadsheetService.Versions.V2; only 2 versions for now return ((OutOfLineContent)(this.getContent())).getUri(); } } /** * Gets all worksheet entries that are part of this spreadsheet. * * You must be online for this to work. * * @return the list of worksheet entries */ public List<WorksheetEntry> getWorksheets() throws IOException, ServiceException { WorksheetFeed feed = state.service.getFeed(getWorksheetFeedUrl(), WorksheetFeed.class); return feed.getEntries(); } /** * Gets the first worksheet in the spreadsheet. * * This is very useful if your spreadsheet only has one worksheet. * * @return the first worksheet */ public WorksheetEntry getDefaultWorksheet() throws IOException, ServiceException { String url = getWorksheetFeedUrlString() + "/default"; return state.service.getEntry(new URL(url), WorksheetEntry.class); } /** * Gets the non-user-friendly key that is used to access the spreadsheet. * * This is the key that can be used to open the spreadsheet in a Web * browser, such as, http://spreadsheets.google.com/ccc?key={key}. * * @return the Google Spreadsheets key, in "o10110101.1010101" format */ public String getKey() { String result = state.id; int position = result.lastIndexOf("/"); if (position > 0) { result = result.substring(position + 1); } return result; } /** * Declares extensions (although Spreadsheet Kind currently has none). */ public void declareExtensions(ExtensionProfile extProfile) { // No special extensions. } }