Inital commit
This commit is contained in:
@@ -0,0 +1,813 @@
|
||||
/* 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.sites;
|
||||
|
||||
import com.google.gdata.client.http.HttpGDataRequest;
|
||||
import com.google.gdata.client.sites.SitesService;
|
||||
import com.google.gdata.data.Link;
|
||||
import com.google.gdata.data.MediaContent;
|
||||
import com.google.gdata.data.OutOfLineContent;
|
||||
import com.google.gdata.data.PlainTextConstruct;
|
||||
import com.google.gdata.data.XhtmlTextConstruct;
|
||||
import com.google.gdata.data.acl.AclEntry;
|
||||
import com.google.gdata.data.acl.AclFeed;
|
||||
import com.google.gdata.data.media.MediaFileSource;
|
||||
import com.google.gdata.data.media.MediaSource;
|
||||
import com.google.gdata.data.sites.ActivityFeed;
|
||||
import com.google.gdata.data.sites.AnnouncementEntry;
|
||||
import com.google.gdata.data.sites.AnnouncementsPageEntry;
|
||||
import com.google.gdata.data.sites.AttachmentEntry;
|
||||
import com.google.gdata.data.sites.BaseActivityEntry;
|
||||
import com.google.gdata.data.sites.BaseContentEntry;
|
||||
import com.google.gdata.data.sites.BasePageEntry;
|
||||
import com.google.gdata.data.sites.CommentEntry;
|
||||
import com.google.gdata.data.sites.ContentFeed;
|
||||
import com.google.gdata.data.sites.FileCabinetPageEntry;
|
||||
import com.google.gdata.data.sites.ListItemEntry;
|
||||
import com.google.gdata.data.sites.ListPageEntry;
|
||||
import com.google.gdata.data.sites.RevisionFeed;
|
||||
import com.google.gdata.data.sites.SiteFeed;
|
||||
import com.google.gdata.data.sites.SiteEntry;
|
||||
import com.google.gdata.data.sites.SitesLink;
|
||||
import com.google.gdata.data.sites.Theme;
|
||||
import com.google.gdata.data.sites.WebAttachmentEntry;
|
||||
import com.google.gdata.data.sites.WebPageEntry;
|
||||
import com.google.gdata.data.spreadsheet.Column;
|
||||
import com.google.gdata.data.spreadsheet.Field;
|
||||
import com.google.gdata.util.AuthenticationException;
|
||||
import com.google.gdata.util.ServiceException;
|
||||
import com.google.gdata.util.XmlBlob;
|
||||
import com.google.gdata.util.XmlParser;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.logging.ConsoleHandler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.activation.MimetypesFileTypeMap;
|
||||
|
||||
/**
|
||||
* Wrapper class for lower level Sites API calls.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class SitesHelper {
|
||||
|
||||
private String domain;
|
||||
private String siteName;
|
||||
|
||||
public SitesService service;
|
||||
public MimetypesFileTypeMap mediaTypes;
|
||||
|
||||
public static final String[] KINDS = {
|
||||
"announcement", "announcementspage", "attachment", "comment",
|
||||
"filecabinet", "listitem", "listpage", "webpage", "webattachment"
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param applicationName The name of the application.
|
||||
* @param domain The Site's Google Apps domain or "site".
|
||||
* @param siteName The webspace name of the Site.
|
||||
*/
|
||||
public SitesHelper(String applicationName, String domain, String siteName) {
|
||||
this(applicationName, domain, siteName, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param applicationName The name of the application.
|
||||
* @param domain The Site's Google Apps domain or "site".
|
||||
* @param siteName The webspace name of the Site.
|
||||
* @param logging Whether to enable HTTP requests to stdout
|
||||
*/
|
||||
public SitesHelper(String applicationName, String domain, String siteName,
|
||||
boolean logging) {
|
||||
if (logging) {
|
||||
turnOnLogging(false);
|
||||
}
|
||||
|
||||
this.domain = domain;
|
||||
this.siteName = siteName;
|
||||
this.service = new SitesService(applicationName);
|
||||
|
||||
registerMediaTypes();
|
||||
}
|
||||
|
||||
private void registerMediaTypes() {
|
||||
// Common MIME types used for uploading attachments.
|
||||
mediaTypes = new MimetypesFileTypeMap();
|
||||
mediaTypes.addMimeTypes("application/msword doc");
|
||||
mediaTypes.addMimeTypes("application/vnd.ms-excel xls");
|
||||
mediaTypes.addMimeTypes("application/pdf pdf");
|
||||
mediaTypes.addMimeTypes("text/richtext rtx");
|
||||
mediaTypes.addMimeTypes("text/csv csv");
|
||||
mediaTypes.addMimeTypes("text/tab-separated-values tsv tab");
|
||||
mediaTypes.addMimeTypes("application/x-vnd.oasis.opendocument.spreadsheet ods");
|
||||
mediaTypes.addMimeTypes("application/vnd.oasis.opendocument.text odt");
|
||||
mediaTypes.addMimeTypes("application/vnd.ms-powerpoint ppt pps pot");
|
||||
mediaTypes.addMimeTypes("application/vnd.openxmlformats-officedocument."
|
||||
+ "wordprocessingml.document docx");
|
||||
mediaTypes.addMimeTypes("application/vnd.openxmlformats-officedocument."
|
||||
+ "spreadsheetml.sheet xlsx");
|
||||
mediaTypes.addMimeTypes("audio/mpeg mp3 mpeg3");
|
||||
mediaTypes.addMimeTypes("image/png png");
|
||||
mediaTypes.addMimeTypes("application/zip zip");
|
||||
mediaTypes.addMimeTypes("application/x-tar tar");
|
||||
mediaTypes.addMimeTypes("video/quicktime qt mov moov");
|
||||
mediaTypes.addMimeTypes("video/mpeg mpeg mpg mpe mpv vbs mpegv");
|
||||
mediaTypes.addMimeTypes("video/msvideo avi");
|
||||
}
|
||||
|
||||
/**
|
||||
* Authenticates the user using ClientLogin
|
||||
*
|
||||
* @param username User's email address.
|
||||
* @param password User's password.
|
||||
*/
|
||||
public void login(String username, String password) throws AuthenticationException {
|
||||
service.setUserCredentials(username, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Authenticates the user using AuthSub
|
||||
*
|
||||
* @param authSubToken A valid AuthSub session token.
|
||||
*/
|
||||
public void login(String authSubToken) {
|
||||
service.setAuthSubToken(authSubToken);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs HTTP requests and XML to stdout.
|
||||
*/
|
||||
private void turnOnLogging(boolean logXML) {
|
||||
// Create a log handler which prints all log events to the console
|
||||
ConsoleHandler logHandler = new ConsoleHandler();
|
||||
logHandler.setLevel(Level.ALL);
|
||||
|
||||
// Configure the logging mechanisms
|
||||
Logger httpLogger =
|
||||
Logger.getLogger(HttpGDataRequest.class.getName());
|
||||
httpLogger.setLevel(Level.ALL);
|
||||
httpLogger.addHandler(logHandler);
|
||||
|
||||
if (logXML) {
|
||||
Logger xmlLogger = Logger.getLogger(XmlParser.class.getName());
|
||||
xmlLogger.setLevel(Level.ALL);
|
||||
xmlLogger.addHandler(logHandler);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an entry's numeric ID.
|
||||
*/
|
||||
private String getEntryId(BaseContentEntry<?> entry) {
|
||||
String selfLink = entry.getSelfLink().getHref();
|
||||
return selfLink.substring(selfLink.lastIndexOf("/") + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an entry's numeric ID.
|
||||
*/
|
||||
private String getEntryId(String selfLink) {
|
||||
return selfLink.substring(selfLink.lastIndexOf("/") + 1);
|
||||
}
|
||||
|
||||
public String getContentFeedUrl() {
|
||||
return "https://sites.google.com/feeds/content/" + domain + "/" + siteName + "/";
|
||||
}
|
||||
|
||||
public String getRevisionFeedUrl() {
|
||||
return "https://sites.google.com/feeds/revision/" + domain + "/" + siteName + "/";
|
||||
}
|
||||
|
||||
public String getActivityFeedUrl() {
|
||||
return "https://sites.google.com/feeds/activity/" + domain + "/" + siteName + "/";
|
||||
}
|
||||
|
||||
public String getSiteFeedUrl() {
|
||||
return "https://sites.google.com/feeds/site/" + domain + "/";
|
||||
}
|
||||
|
||||
public String getAclFeedUrl(String siteName) {
|
||||
return "https://sites.google.com/feeds/acl/site/" + domain + "/" + siteName + "/";
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches and displays the user's site feed.
|
||||
*/
|
||||
public void getSiteFeed() throws IOException, ServiceException {
|
||||
SiteFeed siteFeed = service.getFeed(
|
||||
new URL(getSiteFeedUrl()), SiteFeed.class);
|
||||
for (SiteEntry entry : siteFeed.getEntries()){
|
||||
System.out.println("title: " + entry.getTitle().getPlainText());
|
||||
System.out.println("site name: " + entry.getSiteName().getValue());
|
||||
System.out.println("theme: " + entry.getTheme().getValue());
|
||||
System.out.println("");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches and displays a Site's acl feed.
|
||||
*/
|
||||
public void getAclFeed(String siteName) throws IOException, ServiceException {
|
||||
AclFeed aclFeed = service.getFeed(
|
||||
new URL(getAclFeedUrl(siteName)), AclFeed.class);
|
||||
for (AclEntry entry : aclFeed.getEntries()) {
|
||||
System.out.println(entry.getScope().getValue() + " (" +
|
||||
entry.getScope().getType() + ") : " + entry.getRole().getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches and displays the Site's activity feed.
|
||||
*/
|
||||
public void getActivityFeed() throws IOException, ServiceException {
|
||||
ActivityFeed activityFeed = service.getFeed(
|
||||
new URL(getActivityFeedUrl()), ActivityFeed.class);
|
||||
for (BaseActivityEntry<?> entry : activityFeed.getEntries()){
|
||||
System.out.println(entry.getSummary().getPlainText());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches and displays the revisions feed for an entry.
|
||||
*/
|
||||
public void getRevisionFeed(String contentEntryId) throws IOException, ServiceException {
|
||||
URL url = new URL(getRevisionFeedUrl() + contentEntryId);
|
||||
RevisionFeed revisionFeed = service.getFeed(url, RevisionFeed.class);
|
||||
for (BaseContentEntry<?> entry : revisionFeed.getEntries()) {
|
||||
System.out.println(entry.getTitle().getPlainText());
|
||||
System.out.println(" updated: " + entry.getUpdated().toUiString() + " by " +
|
||||
entry.getAuthors().get(0).getEmail());
|
||||
System.out.println(" revision #: " + entry.getRevision().getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches and displays entries from the content feed.
|
||||
*
|
||||
* @param kind An entry kind to fetch. For example, "webpage". If null, the
|
||||
* entire content feed is returned.
|
||||
*/
|
||||
public void listSiteContents(String kind) throws IOException, ServiceException {
|
||||
String url = kind.equals("all") ? getContentFeedUrl() : getContentFeedUrl() + "?kind=" + kind;
|
||||
ContentFeed contentFeed = service.getFeed(new URL(url), ContentFeed.class);
|
||||
|
||||
for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) {
|
||||
System.out.println("WebPageEntry:");
|
||||
System.out.println(" title: " + entry.getTitle().getPlainText());
|
||||
System.out.println(" id: " + getEntryId(entry));
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
System.out.println(" authors: " + entry.getAuthors().get(0).getEmail());
|
||||
System.out.println(" content: " + getContentBlob(entry));
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) {
|
||||
System.out.println("ListPageEntry:");
|
||||
System.out.println(" title: " + entry.getTitle().getPlainText());
|
||||
System.out.println(" id: " + getEntryId(entry));
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
for (Column col : entry.getData().getColumns()) {
|
||||
System.out.print(" [" + col.getIndex() + "] " + col.getName() + "\t");
|
||||
}
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
for (ListItemEntry entry : contentFeed.getEntries(ListItemEntry.class)) {
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
for (Field field : entry.getFields()) {
|
||||
System.out.print(" [" + field.getIndex() + "] " + field.getValue() + "\t");
|
||||
}
|
||||
System.out.println("\n");
|
||||
}
|
||||
|
||||
for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) {
|
||||
System.out.println("FileCabinetPageEntry:");
|
||||
System.out.println(" title: " + entry.getTitle().getPlainText());
|
||||
System.out.println(" id: " + getEntryId(entry));
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
System.out.println(" content: " + getContentBlob(entry));
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
for (CommentEntry entry : contentFeed.getEntries(CommentEntry.class)) {
|
||||
System.out.println("CommentEntry:");
|
||||
System.out.println(" id: " + getEntryId(entry));
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
System.out.println(" in-reply-to: " + entry.getInReplyTo().toString());
|
||||
System.out.println(" content: " + getContentBlob(entry));
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
for (AnnouncementsPageEntry entry : contentFeed.getEntries(AnnouncementsPageEntry.class)) {
|
||||
System.out.println("AnnouncementsPageEntry:");
|
||||
System.out.println(" title: " + entry.getTitle().getPlainText());
|
||||
System.out.println(" id: " + getEntryId(entry));
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
System.out.println(" content: " + getContentBlob(entry));
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
for (AnnouncementEntry entry : contentFeed.getEntries(AnnouncementEntry.class)) {
|
||||
System.out.println("AnnouncementEntry:");
|
||||
System.out.println(" title: " + entry.getTitle().getPlainText());
|
||||
System.out.println(" id: " + getEntryId(entry));
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
System.out.println(" draft?: " + entry.isDraft());
|
||||
System.out.println(" content: " + getContentBlob(entry));
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) {
|
||||
System.out.println("AttachmentEntry:");
|
||||
System.out.println(" title: " + entry.getTitle().getPlainText());
|
||||
System.out.println(" id: " + getEntryId(entry));
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
if (entry.getSummary() != null) {
|
||||
System.out.println(" description: " + entry.getSummary().getPlainText());
|
||||
}
|
||||
System.out.println(" revision: " + entry.getRevision().getValue());
|
||||
MediaContent content = (MediaContent) entry.getContent();
|
||||
System.out.println(" src: " + content.getUri());
|
||||
System.out.println(" content type: " + content.getMimeType().getMediaType());
|
||||
System.out.println("");
|
||||
}
|
||||
|
||||
for (WebAttachmentEntry entry : contentFeed.getEntries(WebAttachmentEntry.class)) {
|
||||
System.out.println("WebAttachmentEntry:");
|
||||
System.out.println(" title: " + entry.getTitle().getPlainText());
|
||||
System.out.println(" id: " + getEntryId(entry));
|
||||
if (entry.getParentLink() != null) {
|
||||
System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
|
||||
}
|
||||
if (entry.getSummary() != null) {
|
||||
System.out.println(" description: " + entry.getSummary().getPlainText());
|
||||
}
|
||||
System.out.println(" src: " + ((MediaContent) entry.getContent()).getUri());
|
||||
System.out.println("");
|
||||
}
|
||||
}
|
||||
|
||||
public String getContentBlob(BaseContentEntry<?> entry) {
|
||||
return ((XhtmlTextConstruct) entry.getTextContent().getContent()).getXhtml().getBlob();
|
||||
}
|
||||
|
||||
private void setContentBlob(BaseContentEntry<?> entry) {
|
||||
XmlBlob xml = new XmlBlob();
|
||||
xml.setBlob(String.format(
|
||||
"content for %s", entry.getCategories().iterator().next().getLabel()));
|
||||
entry.setContent(new XhtmlTextConstruct(xml));
|
||||
}
|
||||
|
||||
public SiteEntry createSite(String title, String summary)
|
||||
throws MalformedURLException, IOException, ServiceException {
|
||||
return createSite(title, summary, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new Google Sites.
|
||||
*
|
||||
* @param title A name for the site.
|
||||
* @param summary A description for the site.
|
||||
* @param theme A theme to create the site with.
|
||||
* @return The created site entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
public SiteEntry createSite(String title, String summary, String theme)
|
||||
throws MalformedURLException, IOException, ServiceException {
|
||||
SiteEntry entry = new SiteEntry();
|
||||
entry.setTitle(new PlainTextConstruct(title));
|
||||
entry.setSummary(new PlainTextConstruct(summary));
|
||||
|
||||
// Set theme if user specified it.
|
||||
if (theme != null) {
|
||||
Theme tt = new Theme();
|
||||
tt.setValue(theme);
|
||||
entry.setTheme(tt);
|
||||
}
|
||||
|
||||
return service.insert(new URL(getSiteFeedUrl()), entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies a Google Site from an existing site.
|
||||
*
|
||||
* @param title A title heading for the new site.
|
||||
* @param summary A description for the site.
|
||||
* @param theme A theme to create the site with.
|
||||
* @param sourceHref The self link of the site entry to copy this site from.
|
||||
* If null, an empty site is created.
|
||||
* @return The created site entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
public SiteEntry copySite(String title, String summary, String sourceHref)
|
||||
throws MalformedURLException, IOException, ServiceException {
|
||||
SiteEntry entry = new SiteEntry();
|
||||
entry.setTitle(new PlainTextConstruct(title));
|
||||
entry.setSummary(new PlainTextConstruct(summary));
|
||||
entry.addLink(SitesLink.Rel.SOURCE, Link.Type.ATOM, sourceHref);
|
||||
|
||||
return service.insert(new URL(getSiteFeedUrl()), entry);
|
||||
}
|
||||
|
||||
public BaseContentEntry<?> createPage(String kind, String title)
|
||||
throws MalformedURLException, SitesException, IOException, ServiceException {
|
||||
return createPage(kind, title, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new (sub)page.
|
||||
*
|
||||
* @param kind The type of page to created (e.g. webpage, filecabinet, listpage, etc).
|
||||
* @param title A title heading for the page
|
||||
* @param parent The full URL of the parent to create the subpage under
|
||||
* or the parent entry's ID (e.g. 1234567890).
|
||||
* @return The created entry.
|
||||
* @throws SitesException
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
public BaseContentEntry<?> createPage(String kind, String title, String parent)
|
||||
throws SitesException, MalformedURLException, IOException, ServiceException {
|
||||
BaseContentEntry<?> entry = null;
|
||||
if (kind.equals("announcement")) {
|
||||
entry = new AnnouncementEntry();
|
||||
} else if (kind.equals("announcementspage")) {
|
||||
entry = new AnnouncementsPageEntry();
|
||||
} else if (kind.equals("comment")) {
|
||||
entry = new CommentEntry();
|
||||
} else if (kind.equals("filecabinet")) {
|
||||
entry = new FileCabinetPageEntry();
|
||||
} else if (kind.equals("listitem")) {
|
||||
entry = new ListItemEntry();
|
||||
} else if (kind.equals("listpage")) {
|
||||
entry = new ListPageEntry();
|
||||
} else if (kind.equals("webpage")) {
|
||||
entry = new WebPageEntry();
|
||||
} else {
|
||||
if (kind.equals("attachment") || kind.equals("webattachment")) {
|
||||
throw new SitesException("Trying to create " + kind
|
||||
+ ". Please use upload command instead.");
|
||||
} else {
|
||||
throw new SitesException("Unknown kind '" + kind + "'");
|
||||
}
|
||||
}
|
||||
|
||||
entry.setTitle(new PlainTextConstruct(title));
|
||||
setContentBlob(entry);
|
||||
|
||||
// Upload to a parent page?
|
||||
if (parent != null) {
|
||||
if (parent.lastIndexOf("/") == -1) {
|
||||
parent = getContentFeedUrl() + parent;
|
||||
}
|
||||
entry.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parent);
|
||||
}
|
||||
|
||||
return service.insert(new URL(getContentFeedUrl()), entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads a file from the specified URL to disk.
|
||||
*
|
||||
* @param downloadUrl The full URL to download the file from.
|
||||
* @param fullFilePath The local path to save the file to on disk.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
private void downloadFile(String downloadUrl, String fullFilePath) throws IOException,
|
||||
ServiceException {
|
||||
System.out.println("Downloading file from: " + downloadUrl);
|
||||
|
||||
MediaContent mc = new MediaContent();
|
||||
mc.setUri(downloadUrl);
|
||||
MediaSource ms = service.getMedia(mc);
|
||||
|
||||
InputStream inStream = null;
|
||||
FileOutputStream outStream = null;
|
||||
|
||||
try {
|
||||
inStream = ms.getInputStream();
|
||||
outStream = new FileOutputStream(fullFilePath);
|
||||
|
||||
int c;
|
||||
while ((c = inStream.read()) != -1) {
|
||||
outStream.write(c);
|
||||
}
|
||||
} finally {
|
||||
if (inStream != null) {
|
||||
inStream.close();
|
||||
}
|
||||
if (outStream != null) {
|
||||
outStream.flush();
|
||||
outStream.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads an attachment.
|
||||
*
|
||||
* @param entry The attachment (entry) to download.
|
||||
* @param directory Path to a local directory to download the attach to.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public void downloadAttachment(AttachmentEntry entry, String directory)
|
||||
throws IOException, ServiceException {
|
||||
String url = ((OutOfLineContent) entry.getContent()).getUri();
|
||||
downloadFile(url, directory + entry.getTitle().getPlainText());
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads an attachment.
|
||||
*
|
||||
* @param entry The attachment (entry) to download.
|
||||
* @param entryId The content entry id of the attachment (e.g. 1234567890)
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public void downloadAttachment(String entryId, String directory)
|
||||
throws IOException, ServiceException {
|
||||
AttachmentEntry attachment = service.getEntry(
|
||||
new URL(getContentFeedUrl() + entryId), AttachmentEntry.class);
|
||||
String url = ((OutOfLineContent) attachment.getContent()).getUri();
|
||||
///*MediaSource mediaSource = service.getMedia((MediaContent) entry.getContent());*/
|
||||
downloadFile(url, directory + attachment.getTitle().getPlainText());
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads all attachments from a Site and assumes they all have different names.
|
||||
*
|
||||
* @param entry The attachment (entry) to download.
|
||||
* @param directory Path to a local directory to download the attach to.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public void downloadAllAttachments(String directory) throws IOException, ServiceException {
|
||||
URL contentFeedUrl = new URL(getContentFeedUrl() + "?kind=attachment");
|
||||
ContentFeed contentFeed = service.getFeed(contentFeedUrl, ContentFeed.class);
|
||||
for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) {
|
||||
downloadAttachment(entry, directory);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an attachment to a selected parent page.
|
||||
*
|
||||
* @param file The file contents to upload.
|
||||
* @param parentPage Entry of the page to upload the attachment to.
|
||||
* @return Created attachment entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage)
|
||||
throws IOException, ServiceException {
|
||||
return uploadAttachment(file, parentPage.getSelfLink().getHref(), file.getName(), "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an attachment to a selected parent page.
|
||||
*
|
||||
* @param file The file contents to upload,
|
||||
* @param parentPage Entry of the page to upload the attachment to.
|
||||
* @param title A title to name the attachment.
|
||||
* @return Created attachment entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage, String title)
|
||||
throws IOException, ServiceException {
|
||||
return uploadAttachment(file, parentPage.getSelfLink().getHref(), title, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an attachment to a selected parent page.
|
||||
*
|
||||
* @param file The file contents to upload.
|
||||
* @param parentPage Entry of the page to upload the attachment to.
|
||||
* @param title A title to name the attachment.
|
||||
* @param description A description for the file.
|
||||
* @return Created attachment entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage,
|
||||
String title, String description) throws IOException, ServiceException {
|
||||
return uploadAttachment(file, parentPage.getSelfLink().getHref(), title, description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an attachment to a selected parent page.
|
||||
*
|
||||
* @param filename Path of the file to upload.
|
||||
* @param parentPage Entry of the page to upload the attachment to.
|
||||
* @return Created attachment entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry uploadAttachment(String filename, BasePageEntry<?> parentPage)
|
||||
throws IOException, ServiceException {
|
||||
File file = new File(filename);
|
||||
return uploadAttachment(file, parentPage.getSelfLink().getHref(), file.getName(), "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an attachment to a selected parent page.
|
||||
*
|
||||
* @param filename Path of the file to upload.
|
||||
* @param parentUrl Full self id of the parent entry to upload the attachmen to.
|
||||
* @param description A file description.
|
||||
* @return Created attachment entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry uploadAttachment(String filename, String parentUrl, String description)
|
||||
throws IOException, ServiceException {
|
||||
File file = new File(filename);
|
||||
return uploadAttachment(file, parentUrl, file.getName(), description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an attachment to a parent page using the file name for a title.
|
||||
*
|
||||
* @param file The file contents to upload.
|
||||
* @param parentUrl Feed URL of the page to upload the attachment to.
|
||||
* @return Created attachment entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry uploadAttachment(File file, String parentUrl)
|
||||
throws IOException, ServiceException {
|
||||
return uploadAttachment(file, parentUrl, file.getName(), "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an attachment to a parent page using the file name for a title.
|
||||
*
|
||||
* @param file The file contents to upload
|
||||
* @param parentLink Full self id of the parent entry to upload the attach to.
|
||||
* @param description A file description.
|
||||
* @return The created attachment entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry uploadAttachment(File file, String parentLink, String description)
|
||||
throws IOException, ServiceException {
|
||||
return uploadAttachment(file, parentLink, file.getName(), description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uploads an attachment to a parent page.
|
||||
*
|
||||
* @param file The file contents to upload
|
||||
* @param parentLink Full self id of the parent entry to upload the attach to.
|
||||
* @param title A title for the attachment.
|
||||
* @param description A description for the attachment.
|
||||
* @return The created attachment entry.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry uploadAttachment(File file, String parentLink, String title,
|
||||
String description) throws IOException, ServiceException {
|
||||
String fileMimeType = mediaTypes.getContentType(file);
|
||||
|
||||
AttachmentEntry newAttachment = new AttachmentEntry();
|
||||
newAttachment.setMediaSource(new MediaFileSource(file, fileMimeType));
|
||||
newAttachment.setTitle(new PlainTextConstruct(title));
|
||||
newAttachment.setSummary(new PlainTextConstruct(description));
|
||||
newAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentLink);
|
||||
|
||||
return service.insert(new URL(getContentFeedUrl()), newAttachment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a web attachment under the selected file cabinet.
|
||||
*
|
||||
* @param contentUrl The full URL of the hosted file.
|
||||
* @param filecabinet File cabinet to create the web attachment on.
|
||||
* @param title A title for the attachment.
|
||||
* @param description A description for the attachment.
|
||||
* @return The created web attachment.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
public WebAttachmentEntry uploadWebAttachment(String contentUrl,
|
||||
FileCabinetPageEntry filecabinet, String title, String description)
|
||||
throws MalformedURLException, IOException, ServiceException {
|
||||
MediaContent content = new MediaContent();
|
||||
content.setUri(contentUrl);
|
||||
|
||||
WebAttachmentEntry webAttachment = new WebAttachmentEntry();
|
||||
webAttachment.setTitle(new PlainTextConstruct(title));
|
||||
webAttachment.setSummary(new PlainTextConstruct(description));
|
||||
webAttachment.setContent(content);
|
||||
webAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM,
|
||||
filecabinet.getSelfLink().getHref());
|
||||
|
||||
return service.insert(new URL(getContentFeedUrl()), webAttachment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates an existing attachment with new content.
|
||||
*
|
||||
* @param entry Attachment entry to update.
|
||||
* @param newFile The replacement file content.
|
||||
* @return The created attachment.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry updateAttachment(AttachmentEntry entry, File newFile)
|
||||
throws IOException, ServiceException {
|
||||
return updateAttachment(entry, newFile, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates an existing attachment's metadata.
|
||||
*
|
||||
* @param entry Attachment entry to update.
|
||||
* @param newTitle A new title for the attachment.
|
||||
* @param newDescription A new description for the attachment.
|
||||
* @return The created attachment.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry updateAttachment(AttachmentEntry entry, String newTitle,
|
||||
String newDescription) throws IOException, ServiceException {
|
||||
entry.setTitle(new PlainTextConstruct(newTitle));
|
||||
entry.setSummary(new PlainTextConstruct(newDescription));
|
||||
|
||||
return entry.update();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates an existing attachment's metadata and content.
|
||||
*
|
||||
* @param entry Attachment entry to update.
|
||||
* @param newFile The replacement file content.
|
||||
* @param newTitle A new title for the attachment.
|
||||
* @param newDescription A new description for the attachment.
|
||||
* @return The created attachment.
|
||||
* @throws ServiceException
|
||||
* @throws IOException
|
||||
*/
|
||||
public AttachmentEntry updateAttachment(AttachmentEntry entry, File newFile,
|
||||
String newTitle, String newDescription) throws IOException, ServiceException {
|
||||
entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile)));
|
||||
if (newTitle != null) {
|
||||
entry.setTitle(new PlainTextConstruct(newTitle));
|
||||
}
|
||||
if (newDescription != null) {
|
||||
entry.setSummary(new PlainTextConstruct(newDescription));
|
||||
}
|
||||
|
||||
return entry.updateMedia(true);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user