diff --git a/rse/plugins/org.eclipse.rse.core/META-INF/MANIFEST.MF b/rse/plugins/org.eclipse.rse.core/META-INF/MANIFEST.MF index a84f01e6838..2dfa21ecdc7 100644 --- a/rse/plugins/org.eclipse.rse.core/META-INF/MANIFEST.MF +++ b/rse/plugins/org.eclipse.rse.core/META-INF/MANIFEST.MF @@ -7,7 +7,6 @@ Bundle-Activator: org.eclipse.rse.core.RSECorePlugin Bundle-Localization: plugin Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.resources, - org.eclipse.rse.logging, org.eclipse.rse.services Eclipse-LazyStart: true Export-Package: org.eclipse.rse.core, @@ -18,9 +17,11 @@ Export-Package: org.eclipse.rse.core, org.eclipse.rse.internal.core;x-internal:=true, org.eclipse.rse.internal.core.filters;x-internal:=true, org.eclipse.rse.internal.core.subsystems;x-internal:=true, + org.eclipse.rse.internal.logging, org.eclipse.rse.internal.persistence;x-internal:=true, org.eclipse.rse.internal.persistence.dom;x-internal:=true, org.eclipse.rse.internal.references;x-internal:=true, + org.eclipse.rse.logging, org.eclipse.rse.persistence, org.eclipse.rse.persistence.dom Bundle-Vendor: %providerName diff --git a/rse/plugins/org.eclipse.rse.core/plugin.xml b/rse/plugins/org.eclipse.rse.core/plugin.xml index 73ab6bd1519..b60e6bed838 100644 --- a/rse/plugins/org.eclipse.rse.core/plugin.xml +++ b/rse/plugins/org.eclipse.rse.core/plugin.xml @@ -32,6 +32,7 @@ + diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/logging/LogListener.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/logging/LogListener.java new file mode 100644 index 00000000000..f9ab21e4d52 --- /dev/null +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/logging/LogListener.java @@ -0,0 +1,139 @@ +/******************************************************************************** + * Copyright (c) 2002, 2006 IBM Corporation. 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 + * + * Initial Contributors: + * The following IBM employees contributed to the Remote System Explorer + * component that contains this file: David McKnight, Kushal Munir, + * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, + * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. + * + * Contributors: + * {Name} (company) - description of contribution. + ********************************************************************************/ + +package org.eclipse.rse.internal.logging; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.util.Date; + +import org.eclipse.core.runtime.ILogListener; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Plugin; +import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; +import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; + +/** + * Log Listener is a sink for messages coming from Logger. + */ +public class LogListener implements ILogListener, IPropertyChangeListener { + + private PrintWriter log = null; + private File outputFile = null; + + /** + * Create a new log listener for a plugin. + * @param plugin The plugin for which to create a log listener. + */ + public LogListener(Plugin plugin) { + IPath path = plugin.getStateLocation().addTrailingSeparator().append(".log"); //$NON-NLS-1$ + outputFile = path.toFile(); + if ((outputFile != null) && (outputFile.exists())) { + outputFile.delete(); + } + initialize(); + } + + /** + * Initialize the logger. Retrieves the logging location preference and sets up the logger + * to log to that location. + */ + private void initialize() { + try { + freeResources(); + log = new PrintWriter(new BufferedWriter(new FileWriter(outputFile.toString(), true)), true); + } catch (Exception e) { + log = null; + System.err.println("Exception in RemoteSystemLogListener.initialize(): " + e.getMessage()); //$NON-NLS-1$ + e.printStackTrace(); + } + } + + public void logging(IStatus status) { + if (log == null) + return; + else { + // Need a to string here, because we need to be able to compare dates. + String date = new Date().toString(); + log.println(date); + int severity = status.getSeverity(); + if (severity == IStatus.ERROR) { + log.print("ERROR"); //$NON-NLS-1$ + } else if (severity == IStatus.WARNING) { + log.print("WARNING"); //$NON-NLS-1$ + } else if (severity == IStatus.INFO) { + log.print("INFO"); //$NON-NLS-1$ + } else if (severity == IStatus.OK) { + log.print("DEBUG"); //$NON-NLS-1$ + } + + log.print(" "); //$NON-NLS-1$ + log.print(status.getPlugin()); + log.print(" "); //$NON-NLS-1$ + log.println(status.getMessage()); + if (status.getException() != null) status.getException().printStackTrace(log); + if (status.isMultiStatus()) { + IStatus[] children = status.getChildren(); + for (int i = 0; i < children.length; i++) { + loggingChild(children[i]); + } + } + log.println("--------------------------------------------"); //$NON-NLS-1$ + } + + } + + public void logging(IStatus status, String plugin) { + logging(status); + } + + /** + * @param tmp org.eclipse.core.runtime.IStatus + */ + private void loggingChild(IStatus status) { + if (log == null) + return; + else { + log.print("\t\t"); //$NON-NLS-1$ + log.println(status.getMessage()); + if (status.getException() != null) status.getException().printStackTrace(log); + if (status.isMultiStatus()) { + IStatus[] children = status.getChildren(); + for (int i = 0; i < children.length; i++) + logging(children[i]); + } + } + } + + /** + * Handle changes from Preferences page. + */ + public synchronized void propertyChange(PropertyChangeEvent event) { + // refresh the log location from plugin Preference store + initialize(); + } + + public void freeResources() { + if (log == null) return; + log.flush(); + log.close(); + log = null; + + } +} \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/logging/LoggingPreferenceInitializer.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/logging/LoggingPreferenceInitializer.java new file mode 100644 index 00000000000..216d7053d7f --- /dev/null +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/logging/LoggingPreferenceInitializer.java @@ -0,0 +1,43 @@ +/******************************************************************************** + * Copyright (c) 2006 IBM Corporation. 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 + * + * Initial Contributors: + * The following IBM employees contributed to the Remote System Explorer + * component that contains this file: David McKnight, Kushal Munir, + * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, + * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. + * + * Contributors: + * {Name} (company) - description of contribution. + ********************************************************************************/ + +package org.eclipse.rse.internal.logging; + +import org.eclipse.core.runtime.Preferences; +import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; +import org.eclipse.rse.core.RSECorePlugin; +import org.eclipse.rse.logging.Logger; + +/** + * This class initializes logging preferences. + */ +public class LoggingPreferenceInitializer extends AbstractPreferenceInitializer { + + /** + * Constructor. + */ + public LoggingPreferenceInitializer() { + super(); + } + + /** + * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences() + */ + public void initializeDefaultPreferences() { + Preferences prefs = RSECorePlugin.getDefault().getPluginPreferences(); + prefs.setDefault(Logger.LOGGING_LEVEL, Logger.LOG_ERROR); + } +} \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/logging/Logger.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/logging/Logger.java new file mode 100644 index 00000000000..c0e85501a81 --- /dev/null +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/logging/Logger.java @@ -0,0 +1,250 @@ +/******************************************************************************** + * Copyright (c) 2002, 2006 IBM Corporation. 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 + * + * Initial Contributors: + * The following IBM employees contributed to the Remote System Explorer + * component that contains this file: David McKnight, Kushal Munir, + * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, + * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. + * + * Contributors: + * {Name} (company) - description of contribution. + ********************************************************************************/ + +package org.eclipse.rse.logging; + +import org.eclipse.core.runtime.ILog; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.MultiStatus; +import org.eclipse.core.runtime.Plugin; +import org.eclipse.core.runtime.Preferences; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; +import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; +import org.eclipse.rse.internal.logging.LogListener; + +/** + * Generic Logger class for handling Remote Systems logging and tracing.
+ *
+ * The debug level is determined by a "debug_level" key in the preferences store + * of the plugin that owns this Logger instance.
+ *
+ * The debug location is determined by a "log_location" key in the preferences store + * of the plugin that owns this Logger instance.
+ *
+ * The valid values for these keys can be found in the javadocs for IRemoteSystemsLogging.
. + * This means that these keys could have been defined through hardcoding in your + * plugin startup code, through preferences.ini in the plugin install directory, + * OR from pref_store.ini in the plugin read/write metadata area.
+ * The default behavior is to log to file, and to log only errors. + *
+ * A typical usage of this class is as follows:
+ *
+ * public class myPlugin extends AbstractUIPlugin {
+ *
+ * // a cached Logger inst for convenience.
+ * public static Logger out = null;
+ *
+ * public myPlugin(IPluginDescriptor descriptor) {
+ * super(descriptor);
+ * ......
+ * ......
+ * out = LoggerFactory.getInst(this);
+ * out.logInfo("loading myPlugin class.");
+ * //out.logWarning("This is a warning message.");
+ * //out.logError("This is an error.", new Exception());
+ * //out.logDebugMessage(
+ * // "myPlugin",
+ * // "this is a debug message from class myPlugin.");
+ * ......
+ * ......
+ * }
+ *
+ *
+ * public void shutdown() throws CoreException {
+ * super.shutdown();
+ * LoggerFactory.freeInst(this);
+ * }
+ *
+ * + */ +public class Logger implements IPropertyChangeListener { + + /** + * Constant can be used to surround debugging code. Optimizing + * compilers have the possibility of removing the code from + * a production copy. + * + * Should be set false normally. Only set to true when testing. + */ + public static final boolean DEBUG = false; + + /** + * Name of the key that controls the logging level.
+ * (value is "debug_level"). + */ + public static final String LOGGING_LEVEL = "logging_level"; //$NON-NLS-1$ + /** + * Set debug_level to this value to get Error messages.
+ * (value is 0). + */ + public static final int LOG_ERROR = 0; + /** + * Set debug_level to this value to get Warning messages.
+ * (value is 1). + */ + public static final int LOG_WARNING = 1; + /** + * Set debug_level to this value to get Information messages.
+ * (value is 2). + */ + public static final int LOG_INFO = 2; + /** + * Set debug_level to this value to get Debug messages.
+ * (value is 3). + */ + public static final int LOG_DEBUG = 3; + + private ILog systemsPluginLog = null; + + private LogListener logListener = null; + + private String pluginId = null; + + private Plugin systemPlugin = null; + + private int debug_level = Logger.LOG_ERROR; + + /** + * Creates a new Logger. Invoked by the LoggerFactory. + * @param systemPlugin The preferences for this plugin will determine the detail + * logged by this logger. This allows different levels of detail to be logged in the + * workbench. + * @see LoggerFactory#getLogger(Plugin) + */ + Logger(Plugin systemPlugin) { + this.systemPlugin = systemPlugin; + this.pluginId = systemPlugin.getBundle().getSymbolicName(); + initialize(); + } + + public synchronized void freeResources() { + logListener.freeResources(); + } + + public synchronized int getDebugLevel() { + return debug_level; + } + + /** + * Log a Debug message. This is intended to be used as follows:
+ * Logger.logDebugMessage("someClassName", "someMessage");
+ *
+ * and the output will be:
+ *
+ * ---------------------------------------------------------------
+ * DEBUG org.eclipse.rse.logging someClassName
+ * someMessage
+ * ---------------------------------------------------------------
+ *
+ *
+ * Note that since this message is only for developer debugging, it does not + * need to be localized to proper local.
+ */ + public synchronized void logDebugMessage(String className, String message) { + if (Logger.DEBUG && debug_level >= Logger.LOG_DEBUG) { + MultiStatus debugStatus = new MultiStatus(pluginId, IStatus.OK, className, null); + Status infoStatus = new Status(IStatus.OK, pluginId, IStatus.OK, message, null); + debugStatus.add(infoStatus); + systemsPluginLog.log(debugStatus); + } + } + + /** + * Log an Error message with an exception. Note that the message should already + * be localized to proper locale. + * @param message the message to log. + * @param ex the exception that caused the condition, may be null. + */ + public synchronized void logError(String message, Throwable ex) { + if (debug_level >= Logger.LOG_ERROR) { + if (message == null) message = ""; //$NON-NLS-1$ + Status errorStatus = new Status(IStatus.ERROR, pluginId, IStatus.OK, message, ex); + systemsPluginLog.log(errorStatus); + } + } + + /** + * Log an Information message. Note that the message should already + * be localized to proper local.
+ * ie: Resource.getString() should already have been called + */ + public synchronized void logInfo(String message) { + logInfo(message, null); + } + + /** + * Log an Information message. Note that the message should already + * be localized to proper local.
+ * ie: Resource.getString() should already have been called + */ + public synchronized void logInfo(String message, Throwable ex) { + if (debug_level >= Logger.LOG_INFO) { + if (message == null) message = ""; //$NON-NLS-1$ + Status infoStatus = new Status(IStatus.INFO, pluginId, IStatus.OK, message, ex); + systemsPluginLog.log(infoStatus); + } + } + + /** + * Log a Warning message. Note that the message should already + * be localized to proper local.
+ * ie: Resource.getString() should already have been called + */ + public synchronized void logWarning(String message) { + logWarning(message, null); + } + + /** + * Log a Warning message. Note that the message should already + * be localized to proper local.
+ * ie: Resource.getString() should already have been called + */ + public synchronized void logWarning(String message, Throwable ex) { + if (debug_level >= Logger.LOG_WARNING) { + if (message == null) message = ""; //$NON-NLS-1$ + Status warningStatus = new Status(IStatus.WARNING, pluginId, IStatus.OK, message, ex); + systemsPluginLog.log(warningStatus); + } + } + + /** + * Handle changes from a Preferences page. + */ + public synchronized void propertyChange(PropertyChangeEvent event) { + Preferences prefs = systemPlugin.getPluginPreferences(); + debug_level = prefs.getInt(Logger.LOGGING_LEVEL); + } + + public synchronized void setDebugLevel(int level) { + debug_level = level; + } + + /** + * Initialize the Logger. The logger uses an ILog from the platform for this particular plugin, and + * establishes a listener on that log to format the items placed in the log. + */ + private void initialize() { + systemsPluginLog = systemPlugin.getLog(); + logListener = new LogListener(systemPlugin); + systemsPluginLog.addLogListener(logListener); + Preferences store = systemPlugin.getPluginPreferences(); + debug_level = store.getInt(Logger.LOGGING_LEVEL); + store.addPropertyChangeListener(this); + store.addPropertyChangeListener(logListener); + } + +} \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/logging/LoggerFactory.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/logging/LoggerFactory.java new file mode 100644 index 00000000000..e2ad3124314 --- /dev/null +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/logging/LoggerFactory.java @@ -0,0 +1,61 @@ +/******************************************************************************** + * Copyright (c) 2006 IBM Corporation. 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 + * + * Initial Contributors: + * The following IBM employees contributed to the Remote System Explorer + * component that contains this file: David McKnight, Kushal Munir, + * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, + * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. + * + * Contributors: + * {Name} (company) - description of contribution. + ********************************************************************************/ + +package org.eclipse.rse.logging; + +import java.util.Hashtable; + +import org.eclipse.core.runtime.Plugin; + +/** + * Factory class for creating Logger instances.
+ * Keep in mind that this factory class follows the singleton model.
+ * ie: once an instance of a Logger class for a given plugin is created, + * it will always be reused. + */ +public class LoggerFactory { + + private static Hashtable pluginTable = new Hashtable(); + + /** + * Returns the Logger instance for a given plugin. There is only + * one instance of the Logger class per plugin. + * @param plugin the plugin for which to find or create the log + * @return the logger for that plugin + */ + public static Logger getLogger(Plugin plugin) { + Logger logger = (Logger) pluginTable.get(plugin); + if (logger == null) { + logger = new Logger(plugin); + pluginTable.put(plugin, logger); + } + return logger; + } + + /** + * Frees resources used by the Logger instance for the given plugin. + * This method must be called as part of the the plugin shutdown life cycle. + * @param plugin the plugin for which to free logging resources + */ + public static void freeLogger(Plugin plugin) { + Logger logger = (Logger) pluginTable.get(plugin); + if (logger != null) { + logger.freeResources(); + pluginTable.remove(plugin); + } + } + +} \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.ui/HelpContexts.xml b/rse/plugins/org.eclipse.rse.ui/HelpContexts.xml index c32bab0b85c..296cfd8a6a0 100644 --- a/rse/plugins/org.eclipse.rse.ui/HelpContexts.xml +++ b/rse/plugins/org.eclipse.rse.ui/HelpContexts.xml @@ -967,4 +967,14 @@ From here you can manage the certificates that the RSE client uses when connecti + + +This page allows you to specify the Remote System Explorer logging preferences. + +You can specify what severity of messages you wish to log - from informational messages, to warnings, to errors. If it is available, the debug setting provides the most detail. + +Messages are logged to the .log file in the .metadata folder of the workspace. + + + \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.ui/META-INF/MANIFEST.MF b/rse/plugins/org.eclipse.rse.ui/META-INF/MANIFEST.MF index d973cdd3b85..fb99564205b 100644 --- a/rse/plugins/org.eclipse.rse.ui/META-INF/MANIFEST.MF +++ b/rse/plugins/org.eclipse.rse.ui/META-INF/MANIFEST.MF @@ -8,7 +8,6 @@ Bundle-Localization: plugin Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.rse.services, - org.eclipse.rse.logging, org.eclipse.core.resources, org.eclipse.jface.text, org.eclipse.ui.views, @@ -26,6 +25,11 @@ Export-Package: org.eclipse.rse.core, org.eclipse.rse.internal.model;x-internal:=true, org.eclipse.rse.internal.ui;x-internal:=true, org.eclipse.rse.internal.ui.actions;x-internal:=true, + org.eclipse.rse.internal.ui.dialogs;x-internal:=true, + org.eclipse.rse.internal.ui.filters;x-internal:=true, + org.eclipse.rse.internal.ui.filters.dialogs;x-internal:=true, + org.eclipse.rse.internal.ui.logging;x-internal:=true, + org.eclipse.rse.internal.ui.propertypages;x-internal:=true, org.eclipse.rse.internal.ui.view;x-internal:=true, org.eclipse.rse.internal.ui.view.monitor;x-internal:=true, org.eclipse.rse.internal.ui.view.scratchpad;x-internal:=true, diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferenceLabels.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferenceLabels.java new file mode 100644 index 00000000000..30c775e5bc1 --- /dev/null +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferenceLabels.java @@ -0,0 +1,29 @@ +/******************************************************************************** + * Copyright (c) 2006 IBM Corporation. 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: + * David Dykstal (IBM) - 148434 Better F1 help. + ********************************************************************************/ +package org.eclipse.rse.internal.ui.logging; + +import org.eclipse.osgi.util.NLS; + +public class LoggingPreferenceLabels extends NLS { + + private static String BUNDLE_NAME = "org.eclipse.rse.internal.ui.logging.LoggingPreferenceLabels";//$NON-NLS-1$ + + public static String LOGGING_PREFERENCE_PAGE_TOPLABEL; + public static String LOGGING_PREFERENCE_PAGE_ERRORS_ONLY; + public static String LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS; + public static String LOGGING_PREFERENCE_PAGE_INFO_DEBUG; + public static String LOGGING_PREFERENCE_PAGE_FULL_DEBUG; + + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, LoggingPreferenceLabels.class); + } + +} diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferenceLabels.properties b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferenceLabels.properties new file mode 100644 index 00000000000..0bc35b6014f --- /dev/null +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferenceLabels.properties @@ -0,0 +1,29 @@ +################################################################################ +# Copyright (c) 2006 IBM Corporation. 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 +# +# Initial Contributors: +# The following IBM employees contributed to the Remote System Explorer +# component that contains this file: David McKnight, Kushal Munir, +# Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, +# Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. +# +# Contributors: +# {Name} (company) - description of contribution. +################################################################################ + +# ===================================== +# Remote System Logging properties file +# ===================================== +# NLS_MESSAGEFORMAT_VAR +# NLS_ENCODING=UTF-8 + +# Preference Page +# ---------------- +LOGGING_PREFERENCE_PAGE_TOPLABEL = Logging Level +LOGGING_PREFERENCE_PAGE_ERRORS_ONLY = &Errors only +LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS = &Warnings and errors +LOGGING_PREFERENCE_PAGE_INFO_DEBUG = Warnings, errors and &information messages +LOGGING_PREFERENCE_PAGE_FULL_DEBUG = Full &debug diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferencePage.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferencePage.java new file mode 100644 index 00000000000..aa0bacb51c2 --- /dev/null +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/logging/LoggingPreferencePage.java @@ -0,0 +1,245 @@ +/******************************************************************************** + * Copyright (c) 2006 IBM Corporation. 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 + * + * Initial Contributors: + * The following IBM employees contributed to the Remote System Explorer + * component that contains this file: David McKnight, Kushal Munir, + * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, + * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. + * + * Contributors: + * Michael Berger (IBM Canada) - 148434 Better F1 help. + * {Name} (company) - description of contribution. + ********************************************************************************/ + +package org.eclipse.rse.internal.ui.logging; + +import org.eclipse.core.runtime.Plugin; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.jface.preference.PreferenceStore; +import org.eclipse.rse.logging.Logger; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.Bundle; + +/** + * An abstract preference page for all remote system logging.
+ * Use a subclass of this page if you need a preference page to control + * logging. + */ +public abstract class LoggingPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { + + private Button radioButton0; + private Button radioButton1; + private Button radioButton2; + private Button radioButton3; + + /** + * Creates composite control and sets the default layout data. + * + * @param parent the parent of the new composite + * @param numColumns the number of columns for the new composite + * @return the newly-created coposite + */ + private Composite createComposite(Composite parent, int span, int numColumns) { + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = numColumns; + composite.setLayout(layout); + GridData data = new GridData(); + data.verticalAlignment = GridData.FILL; + data.horizontalAlignment = GridData.FILL; + data.horizontalSpan = span; + composite.setLayoutData(data); + return composite; + } + + /** + * Creates group control and sets the default layout data. + * @param parent the parent of the new composite + * @param numColumns the number of columns for the new composite + * @return the newly-created coposite + */ + private Group createGroup(Composite parent, int span, int numColumns, String text) { + Group group = new Group(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = numColumns; + group.setLayout(layout); + GridData data = new GridData(); + data.verticalAlignment = GridData.FILL; + data.horizontalAlignment = GridData.FILL; + data.horizontalSpan = span; + group.setLayoutData(data); + group.setText(text); + return group; + } + + /** + * Utility method that creates a radio button instance + * and sets the default layout data. + * + * @param parent the parent for the new button + * @param label the label for the new button + * @return the newly-created button + */ + private Button createRadioButton(Composite parent, String label) { + Button button = new Button(parent, SWT.RADIO | SWT.LEFT); + button.setText(label); + GridData data = new GridData(); + button.setLayoutData(data); + return button; + } + + /** + * Method declared on PreferencePage + */ + protected Control createContents(Composite parent) { + Composite composite_tab = createComposite(parent, 1, 1); + String topLabel = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_TOPLABEL; + Group group = createGroup(composite_tab, 1, 1, topLabel); + radioButton0 = createRadioButton(group, LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_ERRORS_ONLY); + radioButton1 = createRadioButton(group, LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS); + radioButton2 = createRadioButton(group, LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_INFO_DEBUG); + if (Logger.DEBUG) { + radioButton3 = createRadioButton(group, LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_FULL_DEBUG); + } + initializeValues(); + PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, "org.eclipse.rse.ui.rsel0000"); //$NON-NLS-1$ + return composite_tab; + } + + /** + * + */ + protected IPreferenceStore doGetPreferenceStore() { + Bundle bundle = getBundle(); + if (bundle != null) { + AbstractUIPlugin plugin = getPlugin(); + if (plugin != null) { + return plugin.getPreferenceStore(); + } else { + return new PreferenceStore(); + } + } else { + return new PreferenceStore(); + } + } + + protected abstract AbstractUIPlugin getPlugin(); + + private Bundle getBundle() { + Plugin plugin = getPlugin(); + Bundle bundle = plugin.getBundle(); + return bundle; + } + + /** + * Method declared on IWorkbenchPreferencePage + */ + public void init(IWorkbench workbench) { + } + + /** + * Initializes states of the controls using current values + * in the preference store. + */ + private void initializeValues() { + IPreferenceStore store = getPreferenceStore(); + radioButton0.setSelection(false); + radioButton1.setSelection(false); + radioButton2.setSelection(false); + if (null != radioButton3) radioButton3.setSelection(false); + int choice = store.getInt(Logger.LOGGING_LEVEL); + switch (choice) { + case 0: + radioButton0.setSelection(true); + break; + case 1: + radioButton1.setSelection(true); + break; + case 2: + radioButton2.setSelection(true); + break; + case 3: + if (null != radioButton3) + radioButton3.setSelection(true); + else + radioButton2.setSelection(true); + break; + } + } + + /** + * Initializes states of the controls using default values + * in the preference store. + */ + private void initializeDefaults() { + IPreferenceStore store = getPreferenceStore(); + radioButton0.setSelection(false); + radioButton1.setSelection(false); + radioButton2.setSelection(false); + if (null != radioButton3) radioButton3.setSelection(false); + int choice = store.getDefaultInt(Logger.LOGGING_LEVEL); + switch (choice) { + case 0: + radioButton0.setSelection(true); + break; + case 1: + radioButton1.setSelection(true); + break; + case 2: + radioButton2.setSelection(true); + break; + case 3: + if (null != radioButton3) + radioButton3.setSelection(true); + else + radioButton2.setSelection(true); + break; + } + } + + /** + * Method declared on PreferencePage + */ + protected void performDefaults() { + super.performDefaults(); + initializeDefaults(); + } + + /** + * Method declared on PreferencePage + */ + public boolean performOk() { + storeValues(); + return true; + } + + /** + * Stores the values of the controls back to the preference store. + */ + private void storeValues() { + IPreferenceStore store = getPreferenceStore(); + int choice = 0; + if (radioButton1.getSelection()) + choice = 1; + else if (radioButton2.getSelection()) + choice = 2; + else if (null != radioButton3 && radioButton3.getSelection()) choice = 3; + store.setValue(Logger.LOGGING_LEVEL, choice); + } + +} \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/propertypages/SystemLoggingPreferencePage.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/propertypages/SystemLoggingPreferencePage.java index bbba0dcb2ea..f4a14c7d5e9 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/propertypages/SystemLoggingPreferencePage.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/propertypages/SystemLoggingPreferencePage.java @@ -16,7 +16,7 @@ package org.eclipse.rse.internal.ui.propertypages; -import org.eclipse.rse.internal.logging.ui.LoggingPreferencePage; +import org.eclipse.rse.internal.ui.logging.LoggingPreferencePage; import org.eclipse.rse.ui.RSEUIPlugin; import org.eclipse.ui.plugin.AbstractUIPlugin;