blob: b4a1f0075ae18ad6d1f3171197642d9c94be8410 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}