Package org.nodeclipse.vertx.launch

Source Code of org.nodeclipse.vertx.launch.LaunchConfigurationDelegate

package org.nodeclipse.vertx.launch;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
import org.eclipse.debug.core.model.RuntimeProcess;
import org.eclipse.jface.preference.IPreferenceStore;
import org.nodeclipse.common.preferences.CommonDialogs;
import org.nodeclipse.common.ui.CommonConsole;
import org.nodeclipse.debug.util.Constants;
import org.nodeclipse.debug.util.VariablesUtil;
import org.nodeclipse.ui.util.NodeclipseConsole;
import org.nodeclipse.vertx.Activator;
import org.nodeclipse.vertx.VertxConstants;

/**
* Launching `vertx run rhino:path` .<br>
* see LaunchConfigurationDelegate in .debug and .phantomjs module for comparison.
*
* @since 0.11
* @author Paul Verest
*/
public class LaunchConfigurationDelegate implements ILaunchConfigurationDelegate {

  boolean isWindows = Platform.getOS().startsWith("win");
  private boolean warned = false;
 
  @Override
  public void launch(ILaunchConfiguration configuration, String mode,
      ILaunch launch, IProgressMonitor monitor) throws CoreException {

    IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
    boolean isDebugMode = mode.equals(ILaunchManager.DEBUG_MODE);
   
    // Using configuration to build command line 
    List<String> cmdLine = new ArrayList<String>();

    String vertxHomeToUse= preferenceStore.getString(VertxConstants.VERTX_HOME_TO_USE);
    String executablePath=  vertxHomeToUse + (isWindows?"\\bin\\vertx.bat":"/bin/vertx");
    // Check if the vertx location is correctly configured
    File executableFile = new File(executablePath);
    if( ("".equals(vertxHomeToUse)) || (!executableFile.exists()) ){
      // If the location is not valid than show a dialog which prompts the user to goto the preferences page
//      Dialogs.showPreferencesDialog("path to jjs util from Java 8 runtime is not correctly configured.\n\n"
//          + "Please goto Window -> Prefrences -> Nodeclipse and configure the correct location under 'JJS path:'");
      CommonDialogs.showPreferencesDialog(VertxConstants.PREFERENCES_PAGE,
          "Vert.x installation is not correctly configured.\n\n"
          + "Please goto Window -> Preferences -> "+VertxConstants.PREFERENCE_PAGE_NAME
          +" and configure the correct location");
      return;
    }     
    cmdLine.add(executablePath);
   
    cmdLine.add("run");

    String file = configuration.getAttribute(VertxConstants.KEY_FILE_PATH,  "");
    String filePath = ResourcesPlugin.getWorkspace().getRoot().findMember(file).getLocation().toOSString();
    // path is relative, so cannot find it, unless get absolute path
    cmdLine.add("rhino:"+filePath);
   
    File workingPath = null;
    String workingDirectory = configuration.getAttribute(Constants.ATTR_WORKING_DIRECTORY, "");
    if(workingDirectory.length() > 0) {
      workingDirectory = VariablesUtil.resolveValue(workingDirectory);
      if(workingDirectory != null) {
        workingPath = new File(workingDirectory);
      }
    }
    if (workingPath == null){
      workingPath = (new File(filePath)).getParentFile();
    }
   
    //env
    String[] envp = getEnvironmentVariables(configuration);
   
    for(String s : cmdLine) NodeclipseConsole.write(s+" ");
    NodeclipseConsole.write("\n");
   
    String[] cmds = {};
    cmds = cmdLine.toArray(cmds);
    // Launch a process to debug.eg,
    Process p = DebugPlugin.exec(cmds, workingPath, envp);
    RuntimeProcess process = (RuntimeProcess)DebugPlugin.newProcess(launch, p, VertxConstants.PROCESS_MESSAGE);
    if (isDebugMode) {
      //TODO research how to debug -> 2 mode rhino & nashorn
    }
   
  }
 
  /** Get EnvironmentVariables from ILaunchConfiguration
   * and adds JAVA_HOME, GRADLE_HOME, PATH, TEMP, SystemDrive, HOME
   * @param configuration ILaunchConfiguration
   * @return String[]
   * @throws CoreException
   */
  protected String[] getEnvironmentVariables(ILaunchConfiguration configuration) throws CoreException {
    Map<String, String> envm = new HashMap<String, String>();
    envm = configuration.getAttribute(VertxConstants.ATTR_ENVIRONMENT_VARIABLES, envm);
    String[] envp = new String[envm.size() + 1 + 4 + 2];
    int idx = 0;
    for(String key : envm.keySet()) {
      String value = envm.get(key);
      envp[idx++] = key + "=" + value;
    }
    envp[idx++] = "JAVA_HOME=" + System.getProperty("java.home"); //System.getenv("JAVA_HOME");
    //+ #81
    envp[idx++] = getEnvVariableEqualsString("PATH");
    envp[idx++] = getEnvVariableEqualsString("TEMP");
    envp[idx++] = getEnvVariableEqualsString("TMP");
    envp[idx++] = getEnvVariableEqualsString("SystemDrive");
    //+
    envp[idx++] = getEnvVariableEqualsString("HOME");
    envp[idx++] = getEnvVariableEqualsString("USERPROFILE");
   
    if (!warned ){
      StringBuilder sb = new StringBuilder(100);
      for(int i=0; i<envp.length; i++){
        sb.append(envp[i]).append('\n')
      }
      CommonConsole.write(sb.toString());
      CommonConsole.write("Warning: JAVA_HOME and others environment variables will be applied automatically to every `gradle` launch.\n");
      warned = true;
    }
    return envp;
  }

  protected String getEnvVariableEqualsString(String envvarName){
    String envvarValue = System.getenv(envvarName);
    if (envvarValue==null) envvarValue = "";
    return envvarName + "=" + envvarValue;   
  }
}
TOP

Related Classes of org.nodeclipse.vertx.launch.LaunchConfigurationDelegate

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.