blob: 5f5dbe978504b0234cfdb675e6f7221b7949e4ef [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.emf.clipboard.core.internal;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.util.ResourceLocator;
import org.osgi.framework.BundleContext;
/**
* The main plugin class to be used in the desktop.
*/
public class ClipboardPlugin extends EMFPlugin {
//TODO This plugin class contains many of the tracing options in common with other plugins. Perhaps these should be conglomerated so that they share alot of this code?
///
// TRACING STRINGS
//
/**
* String containing an open parenthesis.
*
*/
protected static final String PARENTHESIS_OPEN = "("; //$NON-NLS-1$
/**
* String containing a close parenthesis.
*
*/
protected static final String PARENTHESIS_CLOSE = ")"; //$NON-NLS-1$
/**
* Prefix for tracing the changing of values.
*
*/
protected static final String PREFIX_CHANGING = "CHANGING "; //$NON-NLS-1$
/**
* Prefix for tracing the catching of throwables.
*
*/
protected static final String PREFIX_CATCHING = "CAUGHT "; //$NON-NLS-1$
/**
* Prefix for tracing the throwing of throwables.
*
*/
protected static final String PREFIX_THROWING = "THROWN "; //$NON-NLS-1$
/**
* Prefix for tracing the entering of methods.
*
*/
protected static final String PREFIX_ENTERING = "ENTERING "; //$NON-NLS-1$
/**
* Prefix for tracing the exiting of methods.
*
*/
protected static final String PREFIX_EXITING = "EXITING "; //$NON-NLS-1$
/**
* Separator for methods.
*
*/
protected static final String SEPARATOR_METHOD = "#"; //$NON-NLS-1$
/**
* Separator for parameters.
*
*/
protected static final String SEPARATOR_PARAMETER = ", "; //$NON-NLS-1$
/**
* Separator for return values.
*
*/
protected static final String SEPARATOR_RETURN = ":"; //$NON-NLS-1$
/**
* Separator containing a space.
*
*/
protected static final String SEPARATOR_SPACE = " "; //$NON-NLS-1$
/**
* Label indicating old value.
*
*/
protected static final String LABEL_OLD_VALUE = "old="; //$NON-NLS-1$
/**
* Label indicating new value.
*
*/
protected static final String LABEL_NEW_VALUE = "new="; //$NON-NLS-1$
/**
* The shared plug-in instance.
*/
public static final ClipboardPlugin INSTANCE = new ClipboardPlugin();
private static Implementation plugin;
/** IClipboardSupport extension point ID. */
public static final String EXTPT_CLIPBOARDSUPPORT = "clipboardSupport"; //$NON-NLS-1$
/**
* Initializes me.
*/
public ClipboardPlugin() {
super(new ResourceLocator[] {});
}
public ResourceLocator getPluginResourceLocator() {
return plugin;
}
/**
* Gets the shared Eclipse plug-in implementation.
*
* @return the shared implementation plug-in
*/
public static Implementation getPlugin() {
return plugin;
}
/**
* The Eclipse plug-in implementation that represents the EMF plug-in.
*/
public static class Implementation extends EclipsePlugin {
/** Initializes me. */
public Implementation() {
super();
// Remember the static instance.
//
plugin = this;
}
public void start(BundleContext context) throws Exception {
super.start(context);
configureClipboardSupport();
}
private void configureClipboardSupport() {
ClipboardSupportManager.configureExtensions(Platform
.getExtensionRegistry().getConfigurationElementsFor(
ClipboardSupportManager.EP_CLIPBOARD_SUPPORT));
}
}
public static class Tracing {
/**
* The cached debug options (for optimization).
*/
private static final Map cachedOptions = new HashMap();
/**
* Retrieves a Boolean value indicating whether tracing is enabled.
*
* @return Whether tracing is enabled for the plug-in.
*
*/
protected static boolean shouldTrace() {
return plugin.isDebugging();
}
/**
* Retrieves a Boolean value indicating whether tracing is enabled for the
* specified debug option.
*
* @return Whether tracing is enabled for the debug option of the plug-in.
* @param option The debug option for which to determine trace enablement.
*
*/
public static boolean shouldTrace(String option) {
if (shouldTrace()) {
Boolean value = null;
synchronized (cachedOptions) {
value = (Boolean) cachedOptions.get(option);
if (null == value) {
value =
new Boolean(
Boolean.TRUE.toString().equalsIgnoreCase(
org.eclipse.core.runtime.Platform.getDebugOption(option)));
cachedOptions.put(option, value);
}
}
return value.booleanValue();
}
return false;
}
/**
* Retrieves a textual representation of the specified argument.
*
* @return A textual representation of the specified argument.
* @param argument The argument for which to retrieve a textual
* representation.
*
*/
protected static String getArgumentString(Object argument) {
return String.valueOf(argument);
}
/**
* Retrieves a textual representation of the specified arguments.
*
* @return A textual representation of the specified arguments.
* @param arguments The arguments for which to retrieve a textual
* representation.
*
*/
protected static String getArgumentsString(Object[] arguments) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < arguments.length; i++) {
buffer.append(getArgumentString(arguments[i]));
if (i < arguments.length - 1) {
buffer.append(SEPARATOR_PARAMETER);
}
}
return buffer.toString();
}
/**
* Traces the specified message.
*
* @param message The message to be traced.
*
*/
public static void trace(String message) {
if (shouldTrace()) {
System.out.println(message);
}
}
/**
* Traces the specified message for the specified
* debug option.
*
* @param option The debug option for which to trace.
* @param message The message to be traced.
*
*/
public static void trace(String option, String message) {
if (shouldTrace(option)) {
trace(message);
}
}
/**
* Traces the changing of a value.
*
* @param option The debug option for which to trace.
* @param valueDescription The description of the value which is changing.
* @param oldValue The old value.
* @param newValue The new value.
*/
public static void changing(
String option,
String valueDescription,
Object oldValue,
Object newValue) {
if (shouldTrace(option)) {
trace(
PREFIX_CHANGING
+ valueDescription
+ SEPARATOR_SPACE
+ LABEL_OLD_VALUE
+ getArgumentString(oldValue)
+ SEPARATOR_PARAMETER
+ LABEL_NEW_VALUE
+ getArgumentString(newValue)
);
}
}
/**
*
* @param option The debug option for which to trace.
* @param clazz The class in which the value is changing.
* @param methodName The name of the method in which the value is changing.
* @param valueDescription The description of the value which is changing.
* @param oldValue The old value.
* @param newValue The new value.
*/
public static void changing(
String option,
Class clazz,
String methodName,
String valueDescription,
Object oldValue,
Object newValue) {
if (shouldTrace(option)) {
trace(
PREFIX_CHANGING
+ valueDescription
+ SEPARATOR_SPACE
+ LABEL_OLD_VALUE
+ getArgumentString(oldValue)
+ SEPARATOR_PARAMETER
+ LABEL_NEW_VALUE
+ getArgumentString(newValue)
+ SEPARATOR_SPACE
+ PARENTHESIS_OPEN
+ clazz.getName()
+ SEPARATOR_METHOD
+ methodName
+ PARENTHESIS_CLOSE
);
}
}
/**
* Traces the catching of the specified throwable in the specified method of
* the specified class.
*
* @param option The debug option for which to trace.
* @param clazz The class in which the throwable is being caught.
* @param methodName The name of the method in which the throwable is being
* caught.
* @param throwable The throwable that is being caught.
*
*/
public static void catching(
String option,
Class clazz,
String methodName,
Throwable throwable) {
if (shouldTrace(option)) {
trace(
PREFIX_CATCHING
+ throwable.getMessage()
+ SEPARATOR_SPACE
+ PARENTHESIS_OPEN
+ clazz.getName()
+ SEPARATOR_METHOD
+ methodName
+ PARENTHESIS_CLOSE);
throwable.printStackTrace(System.err);
}
}
/**
* Traces the throwing of the specified throwable from the specified method
* of the specified class.
*
* @param option The debug option for which to trace.
* @param clazz The class from which the throwable is being thrown.
* @param methodName The name of the method from which the throwable is
* being thrown.
* @param throwable The throwable that is being thrown.
*
*/
public static void throwing(
String option,
Class clazz,
String methodName,
Throwable throwable) {
if (shouldTrace(option)) {
trace(
PREFIX_THROWING
+ throwable.getMessage()
+ SEPARATOR_SPACE
+ PARENTHESIS_OPEN
+ clazz.getName()
+ SEPARATOR_METHOD
+ methodName
+ PARENTHESIS_CLOSE);
throwable.printStackTrace(System.err);
}
}
/**
* Traces the entering into the specified method of the specified class.
*
* @param option The debug option for which to trace.
* @param clazz The class whose method is being entered.
* @param methodName The name of method that is being entered.
*
*/
public static void entering(
String option,
Class clazz,
String methodName) {
if (shouldTrace(option)) {
trace(
PREFIX_ENTERING
+ clazz.getName()
+ SEPARATOR_METHOD
+ methodName);
}
}
/**
* Traces the entering into the specified method of the specified class,
* with the specified parameter.
*
* @param option The debug option for which to trace.
* @param clazz The class whose method is being entered.
* @param methodName The name of method that is being entered.
* @param parameter The parameter to the method being entered.
*
*/
public static void entering(
String option,
Class clazz,
String methodName,
Object parameter) {
if (shouldTrace(option)) {
trace(
PREFIX_ENTERING
+ clazz.getName()
+ SEPARATOR_METHOD
+ methodName
+ PARENTHESIS_OPEN
+ getArgumentString(parameter)
+ PARENTHESIS_CLOSE);
}
}
/**
* Traces the entering into the specified method of the specified class,
* with the specified parameters.
*
* @param option The debug option for which to trace.
* @param clazz The class whose method is being entered.
* @param methodName The name of method that is being entered.
* @param parameters The parameters to the method being entered.
*
*/
public static void entering(
String option,
Class clazz,
String methodName,
Object[] parameters) {
if (shouldTrace(option)) {
trace(
PREFIX_ENTERING
+ clazz.getName()
+ SEPARATOR_METHOD
+ methodName
+ PARENTHESIS_OPEN
+ getArgumentsString(parameters)
+ PARENTHESIS_CLOSE);
}
}
/**
* Traces the exiting from the specified method of the specified class.
*
* @param option The debug option for which to trace.
* @param clazz The class whose method is being exited.
* @param methodName The name of method that is being exited.
*
*/
public static void exiting(
String option,
Class clazz,
String methodName) {
if (shouldTrace(option)) {
trace(
PREFIX_EXITING
+ clazz.getName()
+ SEPARATOR_METHOD
+ methodName);
}
}
/**
* Traces the exiting from the specified method of the specified class,
* with the specified return value.
*
* @param option The debug option for which to trace.
* @param clazz The class whose method is being exited.
* @param methodName The name of method that is being exited.
* @param returnValue The return value of the method being exited.
*
*/
public static void exiting(
String option,
Class clazz,
String methodName,
Object returnValue) {
if (shouldTrace(option)) {
trace(
PREFIX_EXITING
+ clazz.getName()
+ SEPARATOR_METHOD
+ methodName
+ SEPARATOR_RETURN
+ getArgumentString(returnValue));
}
}
}
public static void catching(Class class1, String functionName, Throwable exception) {
Tracing.catching(ClipboardDebugOptions.EXCEPTIONS_CATCHING, class1, functionName, exception);
}
public static void throwing(Class class1, String functionName, Throwable exception) {
Tracing.throwing(ClipboardDebugOptions.EXCEPTIONS_THROWING, class1, functionName, exception);
}
public static void log(int code, String message, Throwable exception) {
Status s = new Status(IStatus.INFO, plugin.getSymbolicName(),
code, message != null ? message : "", exception); //$NON-NLS-1$
getPlugin().log(s);
}
public static void warning(int code, String message, Throwable exception) {
Status s = new Status(IStatus.WARNING, plugin.getSymbolicName(),
code, message != null ? message : "", exception); //$NON-NLS-1$
getPlugin().log(s);
}
}