/******************************************************************************* * Copyright (c) 2006 Sybase, Inc. and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.jsf.common.ui; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.MissingResourceException; import java.util.Properties; import java.util.ResourceBundle; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; 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; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jst.jsf.common.ui.internal.guiutils.Alerts; import org.eclipse.jst.jsf.common.ui.internal.logging.Logger; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.osgi.framework.Version; /** * The main plugin class to be used in the desktop. */ public class JSFUICommonPlugin extends AbstractUIPlugin { // Properties contains general properties and defaults to preferences. private static final String PROPERTIES = "default.properties"; //$NON-NLS-1$ // preferences will // contain this string // in the key. private static final String P_CONSOLE_LOGGING = "console.logging.on"; //$NON-NLS-1$ private static final String P_CONSOLE_LOG_LEVEL = "console.logging.max.level"; //$NON-NLS-1$ private static final String P_ECLIPSE_LOGGING = "eclipse.logging.on"; //$NON-NLS-1$ private static final String P_ECLIPSE_LOG_LEVEL = "eclipse.logging.max.level"; //$NON-NLS-1$ private static final String P_FILE_LOGGING = "file.logging.on"; //$NON-NLS-1$ private static final String P_FILE_LOG_LEVEL = "file.logging.max.level"; //$NON-NLS-1$ private static final String P_FILE_PATH = "file.logging.path"; //$NON-NLS-1$ private static final String P_FILE_CLEAR = "file.logging.startup.clear"; //$NON-NLS-1$ private static final String P_FILE_ROLLOVER_FREQUENCY = "file.logging.rollover.frequency"; //$NON-NLS-1$ private static final int DEBUG_LEVEL = 0; private static final int INFO_LEVEL = 1; private static final int WARN_LEVEL = 2; private static final int ERROR_LEVEL = 3; private static final int FATAL_LEVEL = 4; // What version of the platform are we on. private static boolean TWO_DOT_ONE; private static boolean THREE_DOT; private static String _version; // The shared instance. private static JSFUICommonPlugin _plugin; private Logger _log; private ResourceBundle _resourceBundle; private Properties _properties; private URL _pluginBase; private static Alerts _alerts; /** * The constructor. */ public JSFUICommonPlugin() { super(); _plugin = this; versionCheck(); } private void versionCheck() { String version = (String) ResourcesPlugin.getPlugin().getBundle() .getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION); Version identifier = new Version(version); TWO_DOT_ONE = ((identifier.getMajor() == 2) && (identifier .getMinor() == 1)); THREE_DOT = (identifier.getMajor() == 3); _version = identifier.toString(); } /** * This method is called upon plug-in activation */ public void start(BundleContext context) throws Exception { super.start(context); // This plugin is for 3.0 only, do a version check. if (isThreeDot() == false) { throw new CoreException(new Status(IStatus.ERROR, getBundle() .getSymbolicName(), IStatus.OK, "Requires eclipse version 3.x", null)); //$NON-NLS-1$ } try { // get resource bundle. _resourceBundle = ResourceBundle .getBundle("org.eclipse.jst.jsf.common.ui.CommonResources"); //$NON-NLS-1$ _alerts = new Alerts(this, _resourceBundle); // get properties. _properties = new Properties(); InputStream input = null; _pluginBase = getBundle().getEntry("/"); //$NON-NLS-1$ try { input = (new URL(_pluginBase, PROPERTIES)).openStream(); _properties.load(input); } finally { try { input.close(); } catch (IOException ee)// NOPMD { // nothing to do when IOException throwed in closing files. } } // set up logging for this plugin and everthing under it. _log = new Logger(this.getBundle(), _resourceBundle); // NOTE: add in any other plugin code statup HERE!!!! // log.CommonPlugin=Web Application Development Common Plugin // initialized on eclipse version {0}. // log.info("log.CommonPlugin", version); } catch (Exception ee) { // only log if the logger was configured correctly. if (_log != null) { _log .error( "log.msg", //$NON-NLS-1$ "Problems starting plug-in Web Application Development Common.", //$NON-NLS-1$ ee); } throw new CoreException( new Status( IStatus.ERROR, getBundle().getSymbolicName(), IStatus.OK, "Problems starting plug-in Web Application Development Common", //$NON-NLS-1$ ee)); } } /** * Returns the shared instance. * @return the plugin instance */ public static JSFUICommonPlugin getDefault() { return _plugin; } /** * get the alerts objects associated with this plugin for alerting the user. * * @return the alerts object */ public static Alerts getAlerts() { return _alerts; } /** * Returns a logger for the new class using this plugin for reference. * @param theClass * @return the logger */ // TODO: theClass is never used!! public static Logger getLogger(Class theClass) { return getDefault().getRootLogger(); } /** * Returns the plugin's root logger * @return the root logger */ public Logger getRootLogger() { return _log; } /** * Returns this plugin's unique identifier * * @return this plugin's unique identifier * */ public static String getPluginId() { return getDefault().getBundle().getSymbolicName(); } /** * Returns the plugin's resource bundle, * @return the resource bundle */ public ResourceBundle getResourceBundle() { return _resourceBundle; } /** * Returns the string from the plugin's resource bundle, or 'key' if not * found. * @param key * @return the resource string */ public static String getResourceString(String key) { ResourceBundle bundle = JSFUICommonPlugin.getDefault().getResourceBundle(); try { return (bundle != null) ? bundle.getString(key) : key; } catch (MissingResourceException e) { return key; } } /** * Returns the plugin's descriptor's resource bundle, * @return the bundle */ public ResourceBundle getPluginDecriptorBundle() { return Platform.getResourceBundle(getDefault().getBundle()); } /** * Returns the plugin's default properties. These are normally used for * default preferences. * @return the properties */ public Properties getProperties() { return _properties; } /** * Returns a shared image for the given name * <p> * Note: Images returned from this method will be automitically disposed of * when this plug-in shuts down. Callers must not dispose of these images * themselves. * </p> * * @param name * the image name found in /icons (with extension) * @return the image, null on error or not found. */ public Image getImage(String name) { if (name == null) { return null; } ImageRegistry images = getImageRegistry(); Image image = images.get(name); if (image == null) { try { ImageDescriptor id = ImageDescriptor.createFromURL(new URL( _pluginBase, "icons/" + name)); //$NON-NLS-1$ images.put(name, id); image = images.get(name); } catch (MalformedURLException ee) { // log.CommonPlugin.image.error=Image {0} not found. _log.error("log.msg", "log.CommonPlugin.image.error", name, ee); //$NON-NLS-1$ //$NON-NLS-2$ } } return image; } /** * Returns a shared ImageDescriptor for the given name * <p> * Note: ImageDescriptor returned from this method will be automitically * disposed of when this plug-in shuts down. Callers must not dispose of * these ImageDescriptor themselves. * </p> * * @param name * the ImageDescriptor name found in /icons (with extension) * @return the ImageDescriptor, null on error or not found. */ public ImageDescriptor getImageDescriptor(String name) { if (name == null) { return null; } ImageRegistry images = getImageRegistry(); ImageDescriptor id = images.getDescriptor(name); if (id == null) { try { id = ImageDescriptor.createFromURL(new URL(_pluginBase, "icons/" + name)); //$NON-NLS-1$ images.put(name, id); } catch (MalformedURLException ee) { // log.CommonPlugin.image.error=Image {0} not found. _log.error("log.msg", "log.CommonPlugin.image.error", name, ee); //$NON-NLS-1$ //$NON-NLS-2$ } } return id; } /** * Is this eclipse version 2.1 * * @return true if version is 2.1 */ public static boolean isTwoDotOne() { return TWO_DOT_ONE; } /** * Is this eclipse version 3.x * * @return true if version is 3.x */ public static boolean isThreeDot() { return THREE_DOT; } /** * get the eclipse version * * @return version string. */ public static String getVersion() { return _version; } /** * Initializes the preference controls to the default values. These values * are used the first time the preference page is displayed or when the user * presses the Defaults button in the preferences page. */ protected void initializeDefaultPreferences(IPreferenceStore store) { // NOTE: no logging can happen here since we haven't initialized logging // yet because it // depends on preferences!!!! store.setDefault(P_CONSOLE_LOGGING, _properties.getProperty( P_CONSOLE_LOGGING, Boolean.TRUE.toString())); store.setDefault(P_CONSOLE_LOG_LEVEL, strToIntLogLevel(_properties .getProperty(P_CONSOLE_LOG_LEVEL, "ERROR"))); //$NON-NLS-1$ store.setDefault(P_ECLIPSE_LOGGING, _properties.getProperty( P_ECLIPSE_LOGGING, Boolean.TRUE.toString())); store.setDefault(P_ECLIPSE_LOG_LEVEL, strToIntLogLevel(_properties .getProperty(P_ECLIPSE_LOG_LEVEL, "ERROR"))); //$NON-NLS-1$ store.setDefault(P_FILE_LOGGING, _properties.getProperty( P_FILE_LOGGING, Boolean.FALSE.toString())); store.setDefault(P_FILE_LOG_LEVEL, strToIntLogLevel(_properties .getProperty(P_FILE_LOG_LEVEL, "ERROR"))); //$NON-NLS-1$ store.setDefault(P_FILE_PATH, _properties.getProperty(P_FILE_PATH, "")); //$NON-NLS-1$ store.setDefault(P_FILE_CLEAR, _properties.getProperty(P_FILE_CLEAR, Boolean.TRUE.toString())); store.setDefault(P_FILE_ROLLOVER_FREQUENCY, _properties.getProperty( P_FILE_ROLLOVER_FREQUENCY, "DAILY")); //$NON-NLS-1$ } /** * Converts the log level from string to int. The level defaults to * ERROR_LEVEL. * * @param str * String representation of log level * @return integer representation of log level */ private int strToIntLogLevel(String str) { if (str == null) { return ERROR_LEVEL; } if (str.equalsIgnoreCase("DEBUG")) { //$NON-NLS-1$ return DEBUG_LEVEL; } if (str.equalsIgnoreCase("INFO")) { //$NON-NLS-1$ return INFO_LEVEL; } if (str.equalsIgnoreCase("WARN")) { //$NON-NLS-1$ return WARN_LEVEL; } if (str.equalsIgnoreCase("FATAL")) { //$NON-NLS-1$ return FATAL_LEVEL; } return ERROR_LEVEL; } }