Tried to implement ConsoleLineTracker (see plugin.xml) for PHP stack traces in the...
[phpeclipse.git] / net.sourceforge.phpeclipse.launching / src / net / sourceforge / phpdt / internal / launching / PHPInterpreter.java
index 151d5f0..f8b5ac1 100644 (file)
@@ -1,59 +1,98 @@
 package net.sourceforge.phpdt.internal.launching;
 
 import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
+import java.util.ArrayList;
 
-import org.eclipse.core.runtime.IPath;
+import net.sourceforge.phpdt.internal.ui.phpdocexport.JavadocExportMessages;
+import net.sourceforge.phpdt.internal.ui.util.ExceptionHandler;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.IDebugEventSetListener;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfigurationType;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.Launch;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.debug.ui.IDebugUIConstants;
 
 public class PHPInterpreter {
-       //public final String endOfOptionsDelimeter = " -- ";
-
-       protected IPath installLocation;
-       protected String name;
-
-       public PHPInterpreter(String aName, IPath validInstallLocation) {
-               name = aName;
-               installLocation = validInstallLocation;
-       }
-
-       public IPath getInstallLocation() {
-               return installLocation;
-       }
-
-       public void setInstallLocation(IPath validInstallLocation) {
-               installLocation = validInstallLocation;
-       }
-       
-       public String getName() {
-               return name;
-       }
-       
-       public void setName(String newName) {
-               name = newName;
-       }
-       
-       public String getCommand() {
-               String directory = installLocation.toOSString() + File.separator;
-               if (new File(directory + "php.exe").isFile())
-                       return directory + "php.exe";
-
-               if (new File(directory, "php").isFile())
-                       return directory + "php";
-                       
-               return null;
-       }
-       
-       public Process exec(String arguments, File workingDirectory, String[] env) throws IOException {
-               return Runtime.getRuntime().exec(this.getCommand() + " " +  arguments, env, workingDirectory);
-       }
-       
-       public boolean equals(Object other) {
-               if (other instanceof PHPInterpreter) {
-                       PHPInterpreter otherInterpreter = (PHPInterpreter) other;
-                       if (name.equals(otherInterpreter.getName()))
-                               return installLocation.equals(otherInterpreter.getInstallLocation());
-               }
-               
-               return false;
-       }
-}
+
+  protected File installLocation;
+
+  public PHPInterpreter(File interpreter) {
+    installLocation = interpreter;
+  }
+
+  public File getInstallLocation() {
+    return installLocation;
+  }
+
+  public void setInstallLocation(File interpreter) {
+    installLocation = interpreter;
+  }
+
+  public String getCommand() {
+    return installLocation.toString();
+  }
+
+  private boolean executePHPProcess(String arguments, File workingDirectory, String[] env) {
+    Process process = null;
+    try {
+      StringBuffer buf = new StringBuffer();
+      buf.append(getCommand() + " " + arguments);
+      process = Runtime.getRuntime().exec(buf.toString(), env, workingDirectory);
+      if (process != null) {
+        // construct a formatted command line for the process properties
+
+        //                     for (int i= 0; i < args.length; i++) {
+        //                             buf.append(args[i]);
+        //                             buf.append(' ');
+        //                     }
+
+        ILaunchConfigurationWorkingCopy wc = null;
+        try {
+          ILaunchConfigurationType lcType = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(
+              PHPLaunchConfigurationAttribute.PHP_LAUNCH_CONFIGURATION_TYPE);
+          String name = "PHP Launcher"; //$NON-NLS-1$
+          wc = lcType.newInstance(null, name);
+          wc.setAttribute(IDebugUIConstants.ATTR_FAVORITE_GROUPS, true);
+
+          ILaunch newLaunch = new Launch(wc, ILaunchManager.RUN_MODE, null);
+          IProcess iprocess = DebugPlugin.newProcess(newLaunch, process, "PHP Process"); //$NON-NLS-1$
+          iprocess.setAttribute(IProcess.ATTR_CMDLINE, buf.toString());
+          iprocess.setAttribute(IProcess.ATTR_PROCESS_TYPE, PHPLaunchConfigurationAttribute.PHP_LAUNCH_PROCESS_TYPE);
+
+          DebugPlugin.getDefault().getLaunchManager().addLaunch(newLaunch);
+
+        } catch (CoreException e) {
+        }
+
+        return true;
+
+      }
+    } catch (IOException e) {
+      return false;
+    }
+    return false;
+
+  }
+
+  public Process exec(String arguments, File workingDirectory, String[] env) throws IOException {
+    return Runtime.getRuntime().exec(getCommand() + " " + arguments, env, workingDirectory);
+    //    executePHPProcess(arguments, workingDirectory, env);
+  }
+
+  public boolean equals(Object other) {
+    if (other instanceof PHPInterpreter) {
+      PHPInterpreter otherInterpreter = (PHPInterpreter) other;
+      return installLocation.equals(otherInterpreter.getInstallLocation());
+    }
+    return false;
+  }
+}
\ No newline at end of file