Package org.springframework.ide.eclipse.roo.core

Source Code of org.springframework.ide.eclipse.roo.core.RooCoreActivator

/*******************************************************************************
*  Copyright (c) 2012 VMware, Inc.
*  All rights reserved. This program and the accompanying materials
*  are made available under the terms of the Eclipse Public License v1.0
*  which accompanies this distribution, and is available at
*  http://www.eclipse.org/legal/epl-v10.html
*
*  Contributors:
*      VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.roo.core;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
import org.osgi.service.url.URLConstants;
import org.osgi.service.url.URLStreamHandlerService;
import org.springframework.ide.eclipse.roo.core.model.RooInstallManager;
import org.springframework.roo.felix.HttpPgpUrlStreamHandlerServiceImpl;
import org.springframework.roo.felix.pgp.PgpServiceImpl;
import org.springframework.roo.url.stream.UrlInputStreamService;


/**
* The activator class controls the plug-in life cycle
* @author Christian Dupuis
* @author Steffen Pingel
* @author Leo Dos Santos
*/
public class RooCoreActivator extends AbstractUIPlugin {

  // The plug-in ID
  public static final String PLUGIN_ID = "org.springframework.ide.eclipse.roo.core";
 
  public static String NATURE_ID = "com.springsource.sts.roo.core.nature";

  /** The identifier for enablement of project versus workspace settings */
  public static final String PROJECT_PROPERTY_ID = "use.default.install";

  public static final String ROO_INSTALL_PROPERTY = PLUGIN_ID + ".install.name";
 
  // The shared instance
  private static RooCoreActivator plugin;

  private RooInstallManager installManager;

  public RooInstallManager getInstallManager() {
    return installManager;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void start(final BundleContext context) throws Exception {
    super.start(context);
    plugin = this;
    this.installManager = new RooInstallManager();
    this.installManager.start();
   
    Job registerJob = new Job("Initializing Spring Roo Tooling") {

      @Override
      protected IStatus run(IProgressMonitor monitor) {
        registerHttpPgpUrlHandler(context);
        return Status.OK_STATUS;
      }
     
    };
    registerJob.setSystem(true);
    registerJob.schedule();
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void stop(BundleContext context) throws Exception {
    plugin = null;
    super.stop(context);
  }
 
  private void invokeMethod(String fieldName, Object target) {
    try {
      Method method = target.getClass().getDeclaredMethod(fieldName);
      method.setAccessible(true);
      method.invoke(target);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  private void registerHttpPgpUrlHandler(BundleContext context) {
    Hashtable<String,String> dict = new Hashtable<String,String>();
    dict.put(URLConstants.URL_HANDLER_PROTOCOL, "httppgp");
   
   
    // Create our own forwarding UrlInputStreamService
    UrlInputStreamService inputStreamService = new UrlInputStreamService() {
      public InputStream openConnection(URL url) throws IOException {
        return url.openStream();
      }

      public String getUrlCannotBeOpenedMessage(URL url) {
        return "Cannot open URL " + url.toString();
      }
    };
   
    // Setup the PGP verification service
    PgpServiceImpl pgpService = new PgpServiceImpl();
    setField("context", pgpService, context);
    setField("urlInputStreamService", pgpService, inputStreamService);
    invokeMethod("trustDefaultKeys", pgpService);
   
    // Prepare the Http PGP Url Handler and register as OSGi service
    HttpPgpUrlStreamHandlerServiceImpl httpPgpService = new HttpPgpUrlStreamHandlerServiceImpl();
    setField("urlInputStreamService", httpPgpService, inputStreamService);
    setField("pgpService", httpPgpService, pgpService);
   
    context.registerService(URLStreamHandlerService.class.getName(), httpPgpService, dict);
  }
 
 
  private void setField(String fieldName, Object target, Object value) {
    try {
      Field field = target.getClass().getDeclaredField(fieldName);
      field.setAccessible(true);
      field.set(target, value);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static IStatus createErrorStatus(String message, Throwable exception) {
    if (message == null) {
      message = "";
    }
    return new Status(IStatus.ERROR, PLUGIN_ID, 0, message, exception);
  }

  public static RooCoreActivator getDefault() {
    return plugin;
  }

  public static InputStream getBundleInputStream(String location) {
    try {
      return getDefault().getBundle().getEntry(location).openStream();
    }
    catch (IOException e) {
      return null;
    }
  }

  @SuppressWarnings("unchecked")
  public static List<String> getAutoDeployBundleLocations() {
    List<String> result = new ArrayList<String>();
    Enumeration<String> libs = getDefault().getBundle().getEntryPaths("/bundle/");
    while (libs.hasMoreElements()) {
      String lib = libs.nextElement();
      if (lib.endsWith(".jar")) {
        result.add(lib);
      }
    }
    return result;
  }

  public static void log(IStatus status) {
    getDefault().getLog().log(status);
  }
 
  public static void log(String message, Throwable exception) {
    IStatus status = createErrorStatus(message, exception);
    getDefault().getLog().log(status);
  }
 
  public static void log(Throwable exception) {
    getDefault().getLog().log(createErrorStatus("Internal Error", exception));
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.roo.core.RooCoreActivator

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.