Index: src/net/sourceforge/phpeclipse/ui/WebUI.java =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/ui/WebUI.java,v retrieving revision 1.6 diff -u -r1.6 WebUI.java --- net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/ui/WebUI.java 13 Oct 2005 18:38:19 -0000 1.6 +++ net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/ui/WebUI.java 12 Aug 2006 00:13:12 -0000 @@ -14,6 +14,7 @@ package net.sourceforge.phpeclipse.ui; import java.io.IOException; +import java.net.ServerSocket; import java.net.URL; import net.sourceforge.phpeclipse.ui.templates.template.HTMLContextType; @@ -24,6 +25,7 @@ import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; @@ -36,6 +38,7 @@ import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry; import org.eclipse.ui.editors.text.templates.ContributionTemplateStore; import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; /** * The web development tools UI plugin. @@ -53,6 +56,7 @@ /** The shared instance. */ private static WebUI plugin; + private int port = 0; public static IWorkbenchPage getActivePage() { return getDefault().internalGetActivePage(); @@ -151,9 +155,41 @@ } return fStore; } + + public int getHttpdPort() { + if (port == 0) { + port = findFreePort(); + } + return port; + } + + public int findFreePort() { + ServerSocket socket = null; + try { + socket = new ServerSocket(0); + socket.setReuseAddress(true); + return socket.getLocalPort(); + } catch(IOException e) { + IStatus status = new Status(IStatus.ERROR, "net.sourceforge.phpeclipse.ui", IStatus.OK, "Error finding free port.", e); //$NON-NLS-1$ //$NON-NLS-2$ + plugin.getLog().log(status); + } finally { + if(socket != null) { + try { + socket.close(); + } catch(IOException e) { + IStatus status = new Status(IStatus.ERROR, "net.sourceforge.phpeclipse.ui", IStatus.OK, "Error finding free port.", e); //$NON-NLS-1$ //$NON-NLS-2$; + plugin.getLog().log(status); + } + } + } + return -1; + } protected void initializeDefaultPreferences(IPreferenceStore store) { - store.setDefault(PHP_LOCALHOST_PREF, "http://localhost"); + if (port == 0) { + port = findFreePort(); + } + store.setDefault(PHP_LOCALHOST_PREF, "http://localhost" + ":" + port); store.setDefault(PHP_DOCUMENTROOT_PREF, getWorkspace().getRoot().getLocation().toString()); // store.setDefault(PHP_BOOKMARK_DEFAULT, ""); Index: src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java,v retrieving revision 1.97 diff -u -r1.97 PHPeclipsePlugin.java --- net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java 10 Feb 2006 20:53:56 -0000 1.97 +++ net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java 12 Aug 2006 00:13:14 -0000 @@ -27,6 +27,7 @@ import net.sourceforge.phpdt.core.IJavaElement; import net.sourceforge.phpdt.core.JavaCore; import net.sourceforge.phpdt.core.WorkingCopyOwner; +import net.sourceforge.phpdt.externaltools.actions.PHPStopApacheAction; import net.sourceforge.phpdt.internal.core.BatchOperation; import net.sourceforge.phpdt.internal.core.JavaModelManager; import net.sourceforge.phpdt.internal.core.util.Util; @@ -52,6 +53,7 @@ import net.sourceforge.phpeclipse.builder.ExternalStorageDocumentProvider; import net.sourceforge.phpeclipse.builder.FileStorage; import net.sourceforge.phpeclipse.builder.IdentifierIndexManager; +import net.sourceforge.phpeclipse.externaltools.ExternalToolsPlugin; import net.sourceforge.phpeclipse.phpeditor.CustomBufferFactory; import net.sourceforge.phpeclipse.phpeditor.DocumentAdapter; import net.sourceforge.phpeclipse.phpeditor.ICompilationUnitDocumentProvider; @@ -79,6 +81,7 @@ import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.action.Action; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.Separator; @@ -1023,10 +1026,15 @@ // RefactoringCore.getUndoManager().shutdown(); } finally { + ExternalToolsPlugin.getDefault().stopHttpd(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { /* ignore */ } super.stop(context); - } - } + } + } + /** * @see org.eclipse.ui.plugin.AbstractUIPlugin#shutdown() */ Index: prefs/default_linux.properties =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse.externaltools/prefs/default_linux.properties,v retrieving revision 1.2 diff -u -r1.2 default_linux.properties --- net.sourceforge.phpeclipse.externaltools/prefs/default_linux.properties 13 Oct 2005 18:30:49 -0000 1.2 +++ net.sourceforge.phpeclipse.externaltools/prefs/default_linux.properties 12 Aug 2006 00:13:15 -0000 @@ -1,14 +1,14 @@ -_php_run_pref=/opt/lamp/php/php -_external_parser=/opt/lamp/php/php -l -f {0} -_mysql_run_pref=/opt/lampp/lampp startmysql -_apache_run_pref=/opt/lampp/lampp -_xampp_start_pref=/opt/lampp/lampp start -_xampp_stop_pref=/opt/lampp/lampp stop -__mysql_start=startmysql -__apache_start=startapache -c \"DocumentRoot {0}\" -__apache_stop=stop -__apache_restart=restart +_php_run_pref=/usr/bin/php +_external_parser=/usr/bin/php -l -f {0} +_mysql_run_pref= +_apache_run_pref=/usr/sbin/httpd +_xampp_start_pref= +_xampp_stop_pref= +__mysql_start= +__apache_start=-f /usr/share/eclipse/plugins/net.sourceforge.phpeclipse.externaltools_1.1.8/confs/httpd.conf -c "ErrorLog {0}/.metadata/phpeclipse-httpd-error_log" -c "DocumentRoot {0}" -c "PidFile {0}/.metadata/phpeclipse-httpd.pid" -c "Listen {1}" +__apache_stop=-f /usr/share/eclipse/plugins/net.sourceforge.phpeclipse.externaltools_1.1.8/confs/httpd.conf -c "ErrorLog {0}/.metadata/phpeclipse-httpd-error_log" -c "DocumentRoot {0}" -c "PidFile {0}/.metadata/phpeclipse-httpd.pid" -c "Listen {1}" -k stop +__apache_restart=-f /usr/share/eclipse/plugins/net.sourceforge.phpeclipse.externaltools_1.1.8/confs/httpd.conf -c "ErrorLog {0}/.metadata/phpeclipse-httpd-error_log" -c "DocumentRoot {0}" -c "PidFile {0}/.metadata/phpeclipse-httpd.pid" -c "Listen {1}" -k restart _mysql_start_background=true _apache_start_background=true _apache_stop_background=true -_apache_restart_background=true \ No newline at end of file +_apache_restart_background=true Index: src/net/sourceforge/phpdt/externaltools/actions/PHPRestartApacheAction.java =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPRestartApacheAction.java,v retrieving revision 1.1 diff -u -r1.1 PHPRestartApacheAction.java --- net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPRestartApacheAction.java 11 Jun 2005 17:15:01 -0000 1.1 +++ net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPRestartApacheAction.java 12 Aug 2006 00:13:16 -0000 @@ -12,7 +12,10 @@ package net.sourceforge.phpdt.externaltools.actions; +import java.text.MessageFormat; + import net.sourceforge.phpeclipse.externaltools.ExternalToolsPlugin; +import net.sourceforge.phpeclipse.ui.WebUI; import org.eclipse.jface.action.IAction; import org.eclipse.jface.preference.IPreferenceStore; @@ -21,10 +24,18 @@ public void run(IAction action) { final IPreferenceStore store = ExternalToolsPlugin.getDefault().getPreferenceStore(); // execute(store.getString(PHPeclipsePlugin.APACHE_RESTART_PREF), "Restart Apache: "); + + final IPreferenceStore webUIStore = WebUI.getDefault().getPreferenceStore(); + String documentRoot = webUIStore.getString(WebUI.PHP_DOCUMENTROOT_PREF); + // replace backslash with slash in the DocumentRoot under Windows + documentRoot = documentRoot.replace('\\', '/'); + String[] arguments = { documentRoot, new Integer(WebUI.getDefault().getHttpdPort()).toString() }; + MessageFormat form = new MessageFormat(store.getString(ExternalToolsPlugin.APACHE_RESTART_PREF)); + execute( "apache_restart", store.getString(ExternalToolsPlugin.APACHE_RUN_PREF), - store.getString(ExternalToolsPlugin.APACHE_RESTART_PREF), + form.format(arguments), store.getBoolean(ExternalToolsPlugin.APACHE_RESTART_BACKGROUND)); } } Index: src/net/sourceforge/phpdt/externaltools/actions/PHPStartApacheAction.java =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPStartApacheAction.java,v retrieving revision 1.3 diff -u -r1.3 PHPStartApacheAction.java --- net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPStartApacheAction.java 13 Oct 2005 18:31:29 -0000 1.3 +++ net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPStartApacheAction.java 12 Aug 2006 00:13:16 -0000 @@ -30,7 +30,7 @@ // replace backslash with slash in the DocumentRoot under Windows documentRoot = documentRoot.replace('\\', '/'); - String[] arguments = { documentRoot }; + String[] arguments = { documentRoot, new Integer(WebUI.getDefault().getHttpdPort()).toString() }; MessageFormat form = new MessageFormat(store.getString(ExternalToolsPlugin.APACHE_START_PREF)); execute("apache_start", store.getString(ExternalToolsPlugin.APACHE_RUN_PREF), form.format(arguments), store .getBoolean(ExternalToolsPlugin.APACHE_START_BACKGROUND)); Index: src/net/sourceforge/phpdt/externaltools/actions/PHPStopApacheAction.java =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPStopApacheAction.java,v retrieving revision 1.1 diff -u -r1.1 PHPStopApacheAction.java --- net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPStopApacheAction.java 11 Jun 2005 17:15:01 -0000 1.1 +++ net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/actions/PHPStopApacheAction.java 12 Aug 2006 00:13:16 -0000 @@ -11,7 +11,10 @@ **********************************************************************/ package net.sourceforge.phpdt.externaltools.actions; +import java.text.MessageFormat; + import net.sourceforge.phpeclipse.externaltools.ExternalToolsPlugin; +import net.sourceforge.phpeclipse.ui.WebUI; import org.eclipse.jface.action.IAction; import org.eclipse.jface.preference.IPreferenceStore; @@ -20,10 +23,18 @@ public void run(IAction action) { final IPreferenceStore store = ExternalToolsPlugin.getDefault().getPreferenceStore(); // execute(store.getString(PHPeclipsePlugin.APACHE_STOP_PREF), "Stop Apache: "); + + final IPreferenceStore webUIStore = WebUI.getDefault().getPreferenceStore(); + String documentRoot = webUIStore.getString(WebUI.PHP_DOCUMENTROOT_PREF); + // replace backslash with slash in the DocumentRoot under Windows + documentRoot = documentRoot.replace('\\', '/'); + String[] arguments = { documentRoot, new Integer(WebUI.getDefault().getHttpdPort()).toString() }; + MessageFormat form = new MessageFormat(store.getString(ExternalToolsPlugin.APACHE_STOP_PREF)); + execute( "apache_stop", store.getString(ExternalToolsPlugin.APACHE_RUN_PREF), - store.getString(ExternalToolsPlugin.APACHE_STOP_PREF), + form.format(arguments), store.getBoolean(ExternalToolsPlugin.APACHE_STOP_BACKGROUND)); } } Index: src/net/sourceforge/phpeclipse/externaltools/ExternalToolsPlugin.java =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpeclipse/externaltools/ExternalToolsPlugin.java,v retrieving revision 1.8 diff -u -r1.8 ExternalToolsPlugin.java --- net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpeclipse/externaltools/ExternalToolsPlugin.java 4 Feb 2006 15:47:51 -0000 1.8 +++ net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpeclipse/externaltools/ExternalToolsPlugin.java 12 Aug 2006 00:13:16 -0000 @@ -9,12 +9,17 @@ Contributors: **********************************************************************/ +import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Enumeration; import java.util.PropertyResourceBundle; +import net.sourceforge.phpdt.externaltools.actions.PHPStartApacheAction; +import net.sourceforge.phpdt.externaltools.actions.PHPStopApacheAction; import net.sourceforge.phpdt.externaltools.internal.model.ExternalToolsImages; import net.sourceforge.phpdt.externaltools.internal.model.IPreferenceConstants; import net.sourceforge.phpdt.externaltools.internal.model.VariableContextManager; @@ -28,6 +33,7 @@ import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; +import org.eclipse.jface.action.Action; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.resource.ImageDescriptor; @@ -280,5 +286,41 @@ VariableContextManager.getDefault(); } }); + initializeDefaultPluginPreferences(); + } + + /** + * @throws Exception + * @see org.eclipse.core.runtime.Plugin#stop(BundleContext context) + */ + public void stop(BundleContext context) throws Exception { + super.stop(context); + } + + public void startHttpd(){ + try { + // move httpd.conf into the plugins metadata area + InputStream is = getDefault().openStream(new Path("confs/httpd.conf")); + OutputStream os = new FileOutputStream(getStateLocation() + "/httpd.conf"); + byte[] buf = new byte[1024]; + int len; + while ((len = is.read(buf)) > 0) { + os.write(buf, 0, len); + } + is.close(); + os.close(); + + // start httpd + new PHPStartApacheAction().run(new Action(){}); + } catch (IOException e) { + IStatus status = new Status(Status.ERROR, IExternalToolConstants.PLUGIN_ID, 0, "There was a problem starting httpd.", e); + getDefault().getLog().log(status); + } + } + + + public void stopHttpd() { + // stop httpd + new PHPStopApacheAction().run(new Action(){}); } } \ No newline at end of file Index: plugin.xml =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse.externaltools/plugin.xml,v retrieving revision 1.7 diff -u -r1.7 plugin.xml --- net.sourceforge.phpeclipse.externaltools/plugin.xml 5 Feb 2006 21:07:11 -0000 1.7 +++ net.sourceforge.phpeclipse.externaltools/plugin.xml 12 Aug 2006 00:13:15 -0000 @@ -1,32 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> -<plugin - id="net.sourceforge.phpeclipse.externaltools" - name="PHP ExternalTools Plug-in" - version="1.1.8" - provider-name="phpeclipse.de" - class="net.sourceforge.phpeclipse.externaltools.ExternalToolsPlugin"> - - <runtime> - <library name="externaltools.jar"> - <export name="*"/> - </library> - </runtime> - - <requires> - <import plugin="org.eclipse.ui"/> - <import plugin="org.eclipse.ui.console"/> - <import plugin="org.eclipse.ui.ide"/> - <import plugin="org.eclipse.ui.editors"/> - <import plugin="org.eclipse.core.resources"/> - <import plugin="org.eclipse.core.runtime"/> - <import plugin="org.eclipse.debug.core"/> - <import plugin="org.eclipse.debug.ui"/> - <import plugin="org.eclipse.ui.externaltools"/> - <import plugin="net.sourceforge.phpeclipse.ui"/> - </requires> - +<plugin> + <!-- external tools --> <!-- extension point definitions --> @@ -255,11 +231,6 @@ </page> <page category="net.sourceforge.phpdt.externaltools.preferences" - class="net.sourceforge.phpdt.externaltools.preferences.XamppPrefencePage" - id="net.sourceforge.phpeclipse.externaltools.xampp.preferences" - name="XAMPP"/> - <page - category="net.sourceforge.phpdt.externaltools.preferences" class="net.sourceforge.phpdt.externaltools.preferences.MySQLPreferencePage" id="net.sourceforge.phpeclipse.externaltools.mysql.preferences" name="MySQL"/> @@ -331,24 +302,6 @@ toolbarPath="Normal" id="net.sourceforge.phpdt.externaltools.actions.PHPStartMySQLAction"> </action> - <action - label="Stop XAMPP" - icon="icons/obj16/xampp_stop.gif" - tooltip="Stop XAMPP" - class="net.sourceforge.phpdt.externaltools.actions.PHPStopXAMPPAction" - menubarPath="net.sourceforge.phpeclipse.PHPMenu/phpeclipse" - toolbarPath="Normal" - id="net.sourceforge.phpdt.externaltools.actions.PHPStopXAMPPAction"> - </action> - <action - label="Start XAMPP" - icon="icons/obj16/xampp_start.gif" - tooltip="Start XAMPP" - class="net.sourceforge.phpdt.externaltools.actions.PHPStartXAMPPAction" - menubarPath="net.sourceforge.phpeclipse.PHPMenu/phpeclipse" - toolbarPath="Normal" - id="net.sourceforge.phpdt.externaltools.actions.PHPStartXAMPPAction"> - </action> </actionSet> </extension> Index: build.properties =================================================================== RCS file: /cvsroot/phpeclipse/net.sourceforge.phpeclipse.externaltools/build.properties,v retrieving revision 1.2 diff -u -r1.2 build.properties --- net.sourceforge.phpeclipse.externaltools/build.properties 3 Aug 2005 20:55:43 -0000 1.2 +++ net.sourceforge.phpeclipse.externaltools/build.properties 12 Aug 2006 00:53:50 -0000 @@ -2,7 +2,16 @@ output.externaltools.jar = bin/ bin.includes = plugin.xml,\ externaltools.jar,\ - icons/ + icons/,\ + META-INF/,\ + confs/,\ + prefs/ src.includes = src/,\ build.properties,\ - icons/ + icons/,\ + confs/,\ + prefs/ +bin.excludes = prefs/default_macosx.properties,\ + prefs/default_win32.properties +src.excludes = prefs/default_macosx.properties,\ + prefs/default_win32.properties Index: META-INF/MANIFEST.MF =================================================================== RCS file: META-INF/MANIFEST.MF diff -N META-INF/MANIFEST.MF --- net.sourceforge.phpeclipse.externaltools/META-INF/MANIFEST.MF 1 Jan 1970 00:00:00 -0000 +++ net.sourceforge.phpeclipse.externaltools/META-INF/MANIFEST.MF 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,33 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: PHP ExternalTools Plug-in +Bundle-SymbolicName: net.sourceforge.phpeclipse.externaltools; singleton:=true +Bundle-Version: 1.1.8 +Bundle-ClassPath: externaltools.jar +Bundle-Activator: net.sourceforge.phpeclipse.externaltools.ExternalToolsPlugin +Bundle-Vendor: phpeclipse.de +Bundle-Localization: plugin +Export-Package: net.sourceforge.phpdt.externaltools.actions, + net.sourceforge.phpdt.externaltools.group, + net.sourceforge.phpdt.externaltools.internal.dialog, + net.sourceforge.phpdt.externaltools.internal.model, + net.sourceforge.phpdt.externaltools.internal.program.launchConfigurations, + net.sourceforge.phpdt.externaltools.internal.registry, + net.sourceforge.phpdt.externaltools.internal.ui, + net.sourceforge.phpdt.externaltools.launchConfigurations, + net.sourceforge.phpdt.externaltools.model, + net.sourceforge.phpdt.externaltools.preferences, + net.sourceforge.phpdt.externaltools.util, + net.sourceforge.phpdt.externaltools.variable, + net.sourceforge.phpeclipse.externaltools +Require-Bundle: org.eclipse.ui, + org.eclipse.ui.console, + org.eclipse.ui.ide, + org.eclipse.ui.editors, + org.eclipse.core.resources, + org.eclipse.core.runtime, + org.eclipse.debug.core, + org.eclipse.debug.ui, + org.eclipse.ui.externaltools, + net.sourceforge.phpeclipse.ui +Eclipse-LazyStart: true Index: confs/httpd.conf =================================================================== RCS file: confs/httpd.conf diff -N confs/httpd.conf --- net.sourceforge.phpeclipse.externaltools/confs/httpd.conf 1 Jan 1970 00:00:00 -0000 +++ net.sourceforge.phpeclipse.externaltools/confs/httpd.conf 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,16 @@ +# minimal httpd conf file for use with PHPeclipse + +StartServers 1 +MinSpareServers 1 +MaxSpareServers 1 +MaxClients 3 + +# modules +LoadModule mime_module modules/mod_mime.so +LoadModule dir_module modules/mod_dir.so + +TypesConfig /etc/httpd/conf/mime.types + +# PHP settings +LoadModule php5_module extramodules/mod_php5.so +AddType application/x-httpd-php .php