Package org.dcarew.googledocs

Source Code of org.dcarew.googledocs.DocsPlugin

/*
* DocsPlugin.java
*
* Copyright (c) 2007
*
* 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 org.dcarew.googledocs;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dcarew.googledocs.utils.DocsUtils;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

import com.google.gdata.client.docs.DocsService;
import com.google.gdata.client.spreadsheet.FeedURLFactory;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.docs.DocumentListFeed;
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.ServiceException;

// TODO: New doc menu item - allows the user to create a new doc


/**
* The activator class controls the plug-in life cycle.
*
* @author Devon Carew
*/
public class DocsPlugin
  extends AbstractUIPlugin
{
  public static final String       PLUGIN_ID = "org.dcarew.googledocs";
 
  // [company-id]-[app-name]-[app-version]
  public static final String       APPLICATION_NAME = "org.dcarew-EclipseDocsClient-0.9.5";
 
  private static DocsPlugin      plugin;
 
  private static DocsService      docsService;
  private static SpreadsheetService   spreadsheetService;
 
  //private static final String DEFAULT_AUTH_PROTOCOL = "https";
  //private static final String DEFAULT_AUTH_HOST = "docs.google.com";
 
  private static final String     DEFAULT_PROTOCOL = "http";
  private static final String     DEFAULT_HOST = "docs.google.com";
 
  //private static final String SPREADSHEETS_SERVICE_NAME = "wise";
  //private static final String SPREADSHEETS_HOST = "spreadsheets.google.com";
 
  private static final String     URL_FEED = "/feeds";
  //private static final String URL_DOWNLOAD = "/download";
 
  private static final String     URL_GROUP_DOCUMENTS = "/documents";
  //private static final String URL_GROUP_FOLDERS = "/folders";
  //private static final String URL_GROUP_MEDIA = "/media";
  //private static final String URL_GROUP_ACL = "/acl";
 
  private static final String     URL_PATH = "/private/full";
 
  private static final String     URL_CATEGORY_DOCUMENT = "/-/document";
  private static final String     URL_CATEGORY_SPREADSHEET = "/-/spreadsheet";
  private static final String     URL_CATEGORY_PDF = "/-/pdf";
  private static final String     URL_CATEGORY_PRESENTATION = "/-/presentation";
  private static final String     URL_CATEGORY_STARRED = "/-/starred";
  private static final String     URL_CATEGORY_TRASHED = "/-/trashed";
  private static final String     URL_CATEGORY_FOLDER = "/-/folder";
  //private static final String URL_CATEGORY_EXPORT = "/Export";
 
  private static final String     PARAMETER_SHOW_FOLDERS = "showfolders=true";
 
 
  public DocsPlugin()
  {
   
  }

  public void start(BundleContext context)
    throws Exception
  {
    super.start(context);
   
    plugin = this;
   
    DocsUtils.registerWorkbenchAdapters();
  }

  public void stop(BundleContext context)
    throws Exception
  {
    plugin = null;
   
    super.stop(context);
  }

  /**
   * Returns the shared instance
   *
   * @return the shared instance
   */
  public static DocsPlugin getDefault()
  {
    return plugin;
  }

  /**
   * Returns an image descriptor for the image file at the given plug-in relative path
   *
   * @param path
   *            the path
   * @return the image descriptor
   */
  public static ImageDescriptor getImageDescriptor(String path)
  {
    return imageDescriptorFromPlugin(PLUGIN_ID, path);
  }
 
  /**
   * Get an image given a path relative to this plugin.
   *
   * @param path
   * @return
   */
  public static Image getImage(String path)
  {
    if (getDefault().getImageRegistry().get(path) != null)
      return getDefault().getImageRegistry().get(path);
   
    ImageDescriptor descriptor = findImageDescriptor(path);
   
    if (descriptor != null)
    {
      getDefault().getImageRegistry().put(path, descriptor);
     
      return getDefault().getImageRegistry().get(path);
    }
   
    return null;
  }
 
  /**
   * Returns an image descriptor for the image file at the given plug-in relative path.
   *
   * @param path
   *            the path
   * @return the image descriptor
   */
  public static ImageDescriptor getBundledImageDescriptor(String path)
  {
    return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path);
  }

  /**
   * Respects images residing in any plug-in. If path is relative, then this bundle is looked up
   * for the image, otherwise, for absolute path, first segment is taken as id of plug-in with
   * image
   *
   * @param path
   *            the path to image, either absolute (with plug-in id as first segment), or relative
   *            for bundled images
   * @return the image descriptor
   */
  public static ImageDescriptor findImageDescriptor( String path )
  {
    IPath iPath = new Path(path);
   
    if (iPath.isAbsolute() && iPath.segmentCount() > 1)
    {
      return AbstractUIPlugin.imageDescriptorFromPlugin(iPath.segment(0),
        iPath.removeFirstSegments(1).makeAbsolute().toString());
    }
    else
    {
      return getBundledImageDescriptor(iPath.makeAbsolute().toString());
    }
  }
 
 
  // User credentials section.
 
  private static final URL   GOOGLE_AUTH_URL;
 
  private static final String AUTH_PASSWORD   = "org.dcarew.googledocs.password";
  private static final String AUTH_USERNAME   = "org.dcarew.googledocs.username";
 
  static
  {
    try
    {
      GOOGLE_AUTH_URL = new URL("http://docs.google.com/");
    }
    catch (MalformedURLException e)
    {
      throw new RuntimeException(e);
    }
  }
 
  public static boolean hasUserCredentials()
  {
    return getUserCredentials() != null;
  }
 
  public static DocsCredentials getUserCredentials()
  {
    Map authMap = Platform.getAuthorizationInfo(GOOGLE_AUTH_URL, "", "");
   
    if (authMap == null)
      return null;
   
    String userName = (String)authMap.get(AUTH_USERNAME);
    String password = (String)authMap.get(AUTH_PASSWORD);
   
    if (userName == null || password == null)
      return null;
   
    return new DocsCredentials(userName, password);
  }
 
  public static void setUserCredentials(String userName, String password)
  {
    if (userName == null)
      throw new IllegalArgumentException();
   
    if (password == null)
      throw new IllegalArgumentException();
   
    Map authMap = Platform.getAuthorizationInfo(GOOGLE_AUTH_URL, "", "");
   
    if (authMap == null)
      authMap = new HashMap();
   
    authMap.put(AUTH_USERNAME, userName);
    authMap.put(AUTH_PASSWORD, password);
   
    try
    {
      Platform.addAuthorizationInfo(GOOGLE_AUTH_URL, "", "", authMap);
    }
    catch (CoreException e)
    {
      log(e);
    }
  }
 
  public static void initializeService()
    throws AuthenticationException
  {
    try
    {
      spreadsheetService = new SpreadsheetService(APPLICATION_NAME);
      docsService = new DocsService(APPLICATION_NAME);
     
      DocsCredentials credentials = DocsPlugin.getUserCredentials();
     
      if (credentials == null)
        throw new AuthenticationException("No username / password provided.");
     
      spreadsheetService.setUserCredentials(credentials.getUserName(), credentials.getPassword());
      docsService.setUserCredentials(credentials.getUserName(), credentials.getPassword());
    }
    catch (AuthenticationException ae)
    {
      spreadsheetService = null;
     
      throw ae;
    }
    catch (RuntimeException re)
    {
      spreadsheetService = null;
     
      throw re;
    }
  }
 
  public static boolean isServiceInitialized()
  {
    return spreadsheetService != null;
  }
 
  public static List getAllGoogleSpreadSheets()
    throws IOException, ServiceException
  {
    if (!isServiceInitialized())
      initializeService();
   
    FeedURLFactory factory = FeedURLFactory.getDefault();
     
    SpreadsheetFeed feed = (SpreadsheetFeed)spreadsheetService.getFeed(factory.getSpreadsheetsFeedUrl(), SpreadsheetFeed.class);
     
      return feed.getEntries();
  }
 
  public static List getAllGoogleDocuments()
    throws IOException, MalformedURLException, ServiceException
  {
    if (!isServiceInitialized())
      initializeService();
   
    DocumentListFeed feed = getDocsListFeed("documents");
   
    return feed.getEntries();
  }
 
  public static List getAllGoogleFiles()
    throws IOException, MalformedURLException, ServiceException
  {
    if (!isServiceInitialized())
      initializeService();
   
    DocumentListFeed feed = getDocsListFeed("all");
   
    return feed.getEntries();
  }
 
  public static DocumentListFeed getDocsListFeed(String category)
    throws IOException, MalformedURLException, ServiceException
  {
    if (category == null)
      throw new IllegalArgumentException("null category");
   
    URL url;
 
    if (category.equals("all")) {
      url = buildUrl(URL_GROUP_DOCUMENTS + URL_PATH);
    } else if (category.equals("folders")) {
      String[] parameters = {PARAMETER_SHOW_FOLDERS};
      url = buildUrl(URL_GROUP_DOCUMENTS + URL_PATH + URL_CATEGORY_FOLDER, parameters);
    } else if (category.equals("documents")) {
      url = buildUrl(URL_GROUP_DOCUMENTS + URL_PATH + URL_CATEGORY_DOCUMENT);
    } else if (category.equals("spreadsheets")) {
      url = buildUrl(URL_GROUP_DOCUMENTS + URL_PATH + URL_CATEGORY_SPREADSHEET);
    } else if (category.equals("pdfs")) {
      url = buildUrl(URL_GROUP_DOCUMENTS + URL_PATH + URL_CATEGORY_PDF);
    } else if (category.equals("presentations")) {
      url = buildUrl(URL_GROUP_DOCUMENTS + URL_PATH + URL_CATEGORY_PRESENTATION);
    } else if (category.equals("starred")) {
      url = buildUrl(URL_GROUP_DOCUMENTS + URL_PATH + URL_CATEGORY_STARRED);
    } else if (category.equals("trashed")) {
      url = buildUrl(URL_GROUP_DOCUMENTS + URL_PATH + URL_CATEGORY_TRASHED);
    } else {
      return null;
    }
   
    return (DocumentListFeed)docsService.getFeed(url, DocumentListFeed.class);
  }
   
  public static SpreadsheetEntry openSpreadSheet(String spreadsheetID)
    throws IOException, ServiceException
  {
    if (!isServiceInitialized())
      initializeService();
   
    SpreadsheetEntry spreadsheet = new SpreadsheetEntry();
   
    spreadsheet.setService(spreadsheetService);
    spreadsheet.setId(spreadsheetID);
   
    return (SpreadsheetEntry)spreadsheet.getSelf();
  }

 
  // /////////////////////////////////////////////////////////////////////////////
  //
  // Logging
  //
  // /////////////////////////////////////////////////////////////////////////////

  /**
   * Logs a warning with this plug-in's log.
   *
   * @param message the warning message
   */
  public static void logWarning(String message)
  {
    Status errorStatus = new Status(IStatus.WARNING, PLUGIN_ID, IStatus.OK, message, null);
    log(errorStatus);
  }
 
  /**
   * Logs an error with this plug-in's log.
   *
   * @param message the error message
   */
  public static void logError(String message)
  {
    log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, message, null));
  }
 
  /**
   * Logs the specified status with this plug-in's log.
   *
   * @param status status to log
   */
  public static void log(IStatus status)
  {
    getDefault().getLog().log(status);
  }
 
  /**
   * Logs the specified throwable with this plug-in's log.
   *
   * @param t throwable to log
   */
  public static void log(Throwable t)
  {
    log(newErrorStatus("Java NCSS Plugin", t));
  }
 
  /**
   * Returns a new error status for this plug-in with the given message
   *
   * @param message the message to be included in the status
   * @param exception the exception to be included in the status or <code>null</code> if none
   * @return a new error status
   */
  public static IStatus newErrorStatus(String message, Throwable exception)
  {
    return new Status(IStatus.ERROR, PLUGIN_ID, message, exception);
  }
 
  /**
     *
     * @param path the path to add to the protocol/host
     *
     * @throws MalformedURLException
     * @throws DocumentListException
     */
    private static URL buildUrl(String path) throws MalformedURLException {
      return buildUrl(path, null);
    }

    /**
     * Builds a URL with parameters.
     *
     * @param path the path to add to the protocol/host
     * @param parameters parameters to be added to the URL.
     *
     * @throws MalformedURLException
     * @throws DocumentListException
     */
    private static URL buildUrl(String path, String[] parameters)
        throws MalformedURLException {
     
      return buildUrl(DEFAULT_HOST, path, parameters);
    }

    /**
     * Builds a URL with parameters.
     *
     * @param host the domain of the server
     * @param path the path to add to the protocol/host
     * @param parameters parameters to be added to the URL.
     *
     * @throws MalformedURLException
     * @throws DocumentListException
     */
    private static URL buildUrl(String host, String path,  String[] parameters)
        throws MalformedURLException {

      StringBuffer url = new StringBuffer();
      url.append(DEFAULT_PROTOCOL + "://" + host + URL_FEED + path);
     
      if (parameters != null && parameters.length > 0) {
        url.append("?");
        for (int i = 0; i < parameters.length; i++) {
          url.append(parameters[i]);
          if (i != (parameters.length - 1)) {
            url.append("&");
          }
        }
      }

      return new URL(url.toString());
    }

   
}
TOP

Related Classes of org.dcarew.googledocs.DocsPlugin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.