Package org.pdtextensions.core.launch

Source Code of org.pdtextensions.core.launch.ScriptLauncherManager

package org.pdtextensions.core.launch;

import java.util.HashMap;

import javax.inject.Inject;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.e4.core.di.annotations.Creatable;
import org.pdtextensions.core.PEXCorePlugin;
import org.pdtextensions.core.exception.ExecutableNotFoundException;
import org.pdtextensions.core.launch.environment.Environment;
import org.pdtextensions.core.launch.environment.EnvironmentFactory;
import org.pdtextensions.core.log.Logger;

/**
*
* @Inject the {@link ScriptLauncherManager} into your service to retrieve a {@link ScriptLauncherInterface}
* for executing PHP scripts.
*
* See FixerEnvironmentFactory in the semanticanalysis plugin for an example implementation.
*
*/
@Creatable
public class ScriptLauncherManager implements ScriptLauncherInterface {
 
  private static final String LAUNCHER_ID = PEXCorePlugin.PLUGIN_ID + ".executableLauncher";
  private final HashMap<String, EnvironmentFactory> factories = new HashMap<String, EnvironmentFactory>();
 
  @Inject
  public ScriptLauncherManager(IExtensionRegistry registry) {
    evaluate(registry);
  }
 
  private void evaluate(IExtensionRegistry registry) {
    try {
      IConfigurationElement[] config = registry.getConfigurationElementsFor(LAUNCHER_ID);
      for (IConfigurationElement e : config) {
        final EnvironmentFactory factory = (EnvironmentFactory) e.createExecutableExtension("class");
        if (factory != null) {
          factories.put(e.getAttribute("id"), factory);
        }
      }
    } catch (Exception e) {
      Logger.logException(e);
    }
  }
 
  private Environment getEnvironment(String factoryId, IProject project) throws ExecutableNotFoundException {
   
    if (!factories.containsKey(factoryId)) {
      return null;
    }
   
    return factories.get(factoryId).getEnvironment(project);
  }
 
  /* (non-Javadoc)
   * @see org.pdtextensions.core.launch.ScriptLauncherInterface#getLauncher(java.lang.String, org.eclipse.core.resources.IProject)
   */
  @Override
  public ScriptLauncher getLauncher(String factoryId, IProject project) throws ScriptNotFoundException, ExecutableNotFoundException {
    Environment env = getEnvironment(factoryId, project);
    if (env == null) {
      throw new ExecutableNotFoundException("Can't find any executable");
    }
   
    return new ScriptLauncher(env, project);
 
 
  /* (non-Javadoc)
   * @see org.pdtextensions.core.launch.ScriptLauncherInterface#resetEnvironment()
   */
  @Override
  public void resetEnvironment() {
    //TODO: ?
    /*
    if (env != null) {
      synchronized (env) {
        env = null;
      } 
    }
    */
  }
TOP

Related Classes of org.pdtextensions.core.launch.ScriptLauncherManager

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.