/********************************************************************** Copyright (c) 2000, 2002 IBM Corp. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/cpl-v10.html Contributors: IBM Corporation - Initial implementation Klaus Hartlage - www.eclipseproject.de **********************************************************************/ package net.sourceforge.phpeclipse; import net.sourceforge.phpdt.externaltools.internal.model.ColorManager; import net.sourceforge.phpdt.externaltools.internal.model.ExternalToolsPlugin; import net.sourceforge.phpdt.externaltools.internal.model.VariableContextManager; import net.sourceforge.phpdt.internal.ui.preferences.TemplatePreferencePage; import net.sourceforge.phpdt.internal.ui.viewsupport.ImageDescriptorRegistry; import net.sourceforge.phpdt.ui.PreferenceConstants; import net.sourceforge.phpdt.ui.text.JavaTextTools; import net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider; import net.sourceforge.phpeclipse.phpeditor.PHPSyntaxRdr; import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider; import net.sourceforge.phpeclipse.resourcesview.PHPElement; import net.sourceforge.phpeclipse.resourcesview.PHPElementAdapterFactory; import net.sourceforge.phpeclipse.resourcesview.ResourceAdapterFactory; import org.eclipse.core.boot.BootLoader; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdapterManager; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPluginDescriptor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.plugin.AbstractUIPlugin; /** * The main plugin class to be used in the desktop. */ public class PHPeclipsePlugin extends AbstractUIPlugin implements IPreferenceConstants { /** * The id of the PHP plugin (value "net.sourceforge.phpeclipse"). */ public static final String PLUGIN_ID = "net.sourceforge.phpeclipse"; //$NON-NLS-1$ public final static String PHP_NATURE_ID = PLUGIN_ID + ".phpnature"; /** * id of builder - matches plugin.xml (concatenate pluginid.builderid) */ public static final String BUILDER_INDEX_ID = PLUGIN_ID + ".indexbuilder"; public static final String BUILDER_PARSER_ID = PLUGIN_ID + ".parserbuilder"; // public static final String PHP_RESOURCES_VIEW_ID = PLUGIN_ID + ".resourcesview.ViewPHPResources"; //$NON-NLS-1$ public static final String PHP_CODING_ACTION_SET_ID = PLUGIN_ID + ".ui.CodingActionSet"; //$NON-NLS-1$ public static final String PHPPARSER_NEW = "test.PHPParser"; public static final String PHPPARSER_ORIGINAL = "net.sourceforge.phpdt.internal.compiler.parser.Parser"; /** Change this if you want to switch PHP Parser. */ public static final String PHPPARSER = PHPPARSER_ORIGINAL; //The shared instance. private static PHPeclipsePlugin plugin; private static ExternalToolsPlugin externalTools; //Resource bundle. //private ResourceBundle resourceBundle; private ImageDescriptorRegistry fImageDescriptorRegistry; private PHPDocumentProvider fCompilationUnitDocumentProvider; private IFile fLastEditorFile = null; private JavaTextTools fJavaTextTools; /** * The Java virtual machine that we are running on. */ private static int jvm; /** MRJ 2.0 */ private static final int MRJ_2_0 = 0; /** MRJ 2.1 or later */ private static final int MRJ_2_1 = 1; /** Java on Mac OS X 10.0 (MRJ 3.0) */ private static final int MRJ_3_0 = 3; /** MRJ 3.1 */ private static final int MRJ_3_1 = 4; /** Windows NT */ private static final int WINDOWS_NT = 5; /** Windows 9x */ private static final int WINDOWS_9x = 6; /** JVM constant for any other platform */ private static final int OTHER = -1; /** General debug flag*/ public static final boolean DEBUG = false; /** * The constructor. */ public PHPeclipsePlugin(IPluginDescriptor descriptor) { super(descriptor); plugin = this; setJVM(); externalTools = new ExternalToolsPlugin(); // try { // resourceBundle = ResourceBundle.getBundle("net.sourceforge.PHPeclipsePluginResources"); // } catch (MissingResourceException x) { // resourceBundle = null; // } } public static ImageDescriptorRegistry getImageDescriptorRegistry() { return getDefault().internalGetImageDescriptorRegistry(); } private ImageDescriptorRegistry internalGetImageDescriptorRegistry() { if (fImageDescriptorRegistry == null) fImageDescriptorRegistry = new ImageDescriptorRegistry(); return fImageDescriptorRegistry; } // @TODO: refactor this into a better method name ! public synchronized PHPDocumentProvider getCompilationUnitDocumentProvider() { if (fCompilationUnitDocumentProvider == null) fCompilationUnitDocumentProvider = new PHPDocumentProvider(); return fCompilationUnitDocumentProvider; } private static void setJVM() { String osName = System.getProperty("os.name"); if (osName.startsWith("Mac OS")) { String mrjVersion = System.getProperty("mrj.version"); String majorMRJVersion = mrjVersion.substring(0, 3); jvm = OTHER; try { double version = Double.valueOf(majorMRJVersion).doubleValue(); if (version == 2) { jvm = MRJ_2_0; } else if (version >= 2.1 && version < 3) { jvm = MRJ_2_1; } else if (version == 3.0) { jvm = MRJ_3_0; } else if (version >= 3.1) { jvm = MRJ_3_1; } } catch (NumberFormatException nfe) { } } else if (osName.startsWith("Windows")) { if (osName.indexOf("9") != -1) { jvm = WINDOWS_9x; } else { jvm = WINDOWS_NT; } } } public static int getJVM() { return jvm; } /** * Returns the shared instance. */ public static PHPeclipsePlugin getDefault() { return plugin; } // public static ExternalToolsPlugin getExternalTools() { // return externalTools; // } /** * Returns the workspace instance. */ public static IWorkspace getWorkspace() { return ResourcesPlugin.getWorkspace(); } public static IWorkbenchPage getActivePage() { return getDefault().internalGetActivePage(); } private IWorkbenchPage internalGetActivePage() { IWorkbenchWindow window = getWorkbench().getActiveWorkbenchWindow(); if (window != null) return window.getActivePage(); return null; } public static IWorkbenchWindow getActiveWorkbenchWindow() { return getDefault().getWorkbench().getActiveWorkbenchWindow(); } public static Shell getActiveWorkbenchShell() { return getActiveWorkbenchWindow().getShell(); } public static String getPluginId() { return getDefault().getDescriptor().getUniqueIdentifier(); } public static void log(IStatus status) { getDefault().getLog().log(status); } // public static void logErrorMessage(String message) { // log(new Status(IStatus.ERROR, getPluginId(), JavaStatusConstants.INTERNAL_ERROR, message, null)); // } // // public static void logErrorStatus(String message, IStatus status) { // if (status == null) { // logErrorMessage(message); // return; // } // MultiStatus multi= new MultiStatus(getPluginId(), JavaStatusConstants.INTERNAL_ERROR, message, null); // multi.add(status); // log(multi); // } // // public static void log(Throwable e) { // log(new Status(IStatus.ERROR, getPluginId(), JavaStatusConstants.INTERNAL_ERROR, JavaUIMessages.getString("JavaPlugin.internal_error"), e)); //$NON-NLS-1$ // } public static void log(int severity, String message) { Status status = new Status(severity, PLUGIN_ID, IStatus.OK, message, null); log(status); } public static void log(Throwable e) { log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, "PHPeclipsePlugin.internalErrorOccurred", e)); //$NON-NLS-1$ } public static boolean isDebug() { return getDefault().isDebugging(); } static IPath getInstallLocation() { return new Path(getDefault().getDescriptor().getInstallURL().getFile()); } public synchronized JavaTextTools getJavaTextTools() { if (fJavaTextTools == null) fJavaTextTools = new JavaTextTools(getPreferenceStore()); return fJavaTextTools; } /** * Returns the string from the plugin's resource bundle, * or 'key' if not found. */ // public static String getResourceString(String key) { // ResourceBundle bundle = PHPeclipsePlugin.getDefault().getResourceBundle(); // try { // return bundle.getString(key); // } catch (MissingResourceException e) { // return key; // } // } /** * Returns the plugin's resource bundle, */ // public ResourceBundle getResourceBundle() { // return resourceBundle; // } protected void initializeDefaultPreferences(IPreferenceStore store) { // windows preferences: store.setDefault(LOCALHOST_PREF, "http://localhost"); store.setDefault(SHOW_EXTERNAL_PREVIEW_PREF, "true"); store.setDefault(USE_EXTERNAL_BROWSER_PREF, "false"); store.setDefault(SHOW_OUTPUT_IN_CONSOLE, "true"); String windowsSystem = BootLoader.getWS(); if (jvm == WINDOWS_9x) { store.setDefault(EXTERNAL_BROWSER_PREF, "command.com /c start iexplore {0}"); } else if (windowsSystem.equals(BootLoader.WS_WIN32)) { store.setDefault(EXTERNAL_BROWSER_PREF, "rundll32 url.dll,FileProtocolHandler {0}"); } else { store.setDefault(EXTERNAL_BROWSER_PREF, "netscape {0}"); } store.setDefault(DOCUMENTROOT_PREF, getWorkspace().getRoot().getLocation().toString()); // if ((jvm == WINDOWS_9x) || (jvm == WINDOWS_NT)) { // if (windowsSystem.equals(BootLoader.WS_WIN32)) { store.setDefault(PHP_RUN_PREF, "c:\\apache\\php\\php.exe"); store.setDefault(EXTERNAL_PARSER_PREF, "c:\\apache\\php\\php -l -f {0}"); store.setDefault(MYSQL_RUN_PREF, "c:\\apache\\mysql\\bin\\mysqld-nt.exe"); store.setDefault(APACHE_RUN_PREF, "c:\\apache\\apache.exe"); } else { store.setDefault(PHP_RUN_PREF, "/apache/php/php"); store.setDefault(EXTERNAL_PARSER_PREF, "/apache/php/php -l -f {0}"); store.setDefault(MYSQL_RUN_PREF, "/apache/mysql/bin/mysqld"); store.setDefault(APACHE_RUN_PREF, "/apache/apache"); } store.setDefault(MYSQL_PREF, "--standalone"); store.setDefault(APACHE_START_PREF, "-c \"DocumentRoot \"{0}\"\""); store.setDefault(APACHE_STOP_PREF, "-k shutdown"); store.setDefault(APACHE_RESTART_PREF, "-k restart"); store.setDefault(MYSQL_START_BACKGROUND, "true"); store.setDefault(APACHE_START_BACKGROUND, "true"); store.setDefault(APACHE_STOP_BACKGROUND, "true"); store.setDefault(APACHE_RESTART_BACKGROUND, "true"); store.setDefault(PHP_PARSER_DEFAULT, PHP_EXTERNAL_PARSER); store.setDefault(PHP_INTERNAL_PARSER, "false"); store.setDefault(PHP_EXTERNAL_PARSER, "true"); // store.setDefault(PHP_PARSE_ON_SAVE, "true"); // show line numbers: // store.setDefault(LINE_NUMBER_RULER, "false"); // store.setDefault(FORMATTER_TAB_SIZE, "4"); // php syntax highlighting store.setDefault(PHP_USERDEF_XMLFILE, ""); //assume there is none chooA PreferenceConverter.setDefault(store, PHP_MULTILINE_COMMENT, PHPColorProvider.MULTI_LINE_COMMENT); PreferenceConverter.setDefault(store, PHP_SINGLELINE_COMMENT, PHPColorProvider.SINGLE_LINE_COMMENT); PreferenceConverter.setDefault(store, PHP_KEYWORD, PHPColorProvider.KEYWORD); PreferenceConverter.setDefault(store, PHP_VARIABLE, PHPColorProvider.VARIABLE); PreferenceConverter.setDefault(store, PHP_FUNCTIONNAME, PHPColorProvider.FUNCTION_NAME); PreferenceConverter.setDefault(store, PHP_CONSTANT, PHPColorProvider.CONSTANT); PreferenceConverter.setDefault(store, PHP_TYPE, PHPColorProvider.TYPE); PreferenceConverter.setDefault(store, PHP_STRING, PHPColorProvider.STRING); PreferenceConverter.setDefault(store, PHP_DEFAULT, PHPColorProvider.DEFAULT); // PreferenceConverter.setDefault( // store, // PHP_EDITOR_BACKGROUND, // PHPColorProvider.BACKGROUND); // PreferenceConverter.setDefault( // store, // LINKED_POSITION_COLOR, // PHPColorProvider.LINKED_POSITION_COLOR); // PreferenceConverter.setDefault( // store, // LINE_NUMBER_COLOR, // PHPColorProvider.LINE_NUMBER_COLOR); // // set default PHPDoc colors: // PreferenceConverter.setDefault( // store, // PHPDOC_KEYWORD, // PHPColorProvider.PHPDOC_KEYWORD); // PreferenceConverter.setDefault( // store, // PHPDOC_LINK, // PHPColorProvider.PHPDOC_LINK); // PreferenceConverter.setDefault( // store, // PHPDOC_DEFAULT, // PHPColorProvider.PHPDOC_DEFAULT); // PreferenceConverter.setDefault( // store, // PHPDOC_TAG, // PHPColorProvider.PHPDOC_TAG); // store.setDefault(PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, "true"); // PreferenceConverter.setDefault( // store, // PREFERENCE_COLOR_BACKGROUND, // PHPColorProvider.BACKGROUND_COLOR); //language stuff store.setDefault(RESOURCE_BUNDLE, LANGUAGE_DEFAULT); store.setDefault(RESOURCE_BUNDLE_EN_GB, "true"); store.setDefault(RESOURCE_BUNDLE_DE, "false"); store.setDefault(RESOURCE_BUNDLE_FR, "false"); store.setDefault(RESOURCE_BUNDLE_ES, "false"); store.setDefault(PHP_OUTLINE_CLASS, "true"); //$NON-NLS-1$ store.setDefault(PHP_OUTLINE_FUNC, "true"); //$NON-NLS-1$ store.setDefault(PHP_OUTLINE_VAR, "true"); //$NON-NLS-1$ TemplatePreferencePage.initDefaults(store); //this will initialize the static fields in the syntaxrdr class new PHPSyntaxRdr(); PHPCore.initializeDefaultPluginPreferences(); PreferenceConstants.initializeDefaultValues(store); externalTools.initializeDefaultPreferences(store); } /** * Returns the standard display to be used. The method first checks, if * the thread calling this method has an associated display. If so, this * display is returned. Otherwise the method returns the default display. */ public static Display getStandardDisplay() { Display display = Display.getCurrent(); if (display == null) { display = Display.getDefault(); } return display; } public void startup() throws CoreException { super.startup(); IAdapterManager manager = Platform.getAdapterManager(); manager.registerAdapters(new PHPElementAdapterFactory(), PHPElement.class); manager.registerAdapters(new ResourceAdapterFactory(), IResource.class); // externalTools.startUp(); getStandardDisplay().asyncExec(new Runnable() { public void run() { //initialize the variable context manager VariableContextManager.getDefault(); } }); } /** * @see org.eclipse.core.runtime.Plugin#shutdown() */ public void shutdown() throws CoreException { // externalTools.shutDown(); ColorManager.getDefault().dispose(); } public void setLastEditorFile(IFile textEditor) { this.fLastEditorFile = textEditor; } public IFile getLastEditorFile() { return fLastEditorFile; } }