blob: 1c11af856daedc9fb232abf5f94c7aed92af1238 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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.ui.internal.misc;
import org.eclipse.core.runtime.Platform;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartConstants;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.util.Util;
/**
* To whom it may concern: Please stop deleting the logging code. This is important for debugging
* event ordering issues.
*/
public class UIListenerLogging {
// Types of listeners that can be logged (the names of the options that enable/disable their logging)
private final static String LISTENER_EVENTS = PlatformUI.PLUGIN_ID + "/debug"; //$NON-NLS-1$
public final static String PAGE_PARTLISTENER_EVENTS = PlatformUI.PLUGIN_ID + "/listeners/IWorkbenchPage.IPartListener"; //$NON-NLS-1$
public final static String PAGE_PARTLISTENER2_EVENTS = PlatformUI.PLUGIN_ID + "/listeners/IWorkbenchPage.IPartListener2"; //$NON-NLS-1$
private final static String PAGE_PROPERTY_EVENTS = PlatformUI.PLUGIN_ID + "/listeners/IWorkbenchPage.IPropertyChangeListener"; //$NON-NLS-1$
private final static String WINDOW_PAGE_EVENTS = PlatformUI.PLUGIN_ID + "/listeners/IWorkbenchWindow.IPageListener"; //$NON-NLS-1$
private final static String WINDOW_PERSPECTIVE_EVENTS = PlatformUI.PLUGIN_ID + "/listeners/IWorkbenchWindow.IPerspectiveListener"; //$NON-NLS-1$
public final static String WINDOW_PARTLISTENER_EVENTS = PlatformUI.PLUGIN_ID + "/listeners/IWorkbenchWindow.IPartListener"; //$NON-NLS-1$
public final static String WINDOW_PARTLISTENER2_EVENTS = PlatformUI.PLUGIN_ID + "/listeners/IWorkbenchWindow.IPartListener2"; //$NON-NLS-1$
private final static String PARTREFERENCE_PROPERTY_EVENTS = PlatformUI.PLUGIN_ID + "/listeners/IWorkbenchPartReference"; //$NON-NLS-1$
public final static boolean enabled = internal_isEnabled(LISTENER_EVENTS);
// IPartListener events
public final static String PE_ACTIVATED = "partActivated"; //$NON-NLS-1$
public final static String PE_PART_BROUGHT_TO_TOP = "partBroughtToTop"; //$NON-NLS-1$
public final static String PE_PART_CLOSED = "partClosed"; //$NON-NLS-1$
public final static String PE_PART_DEACTIVATED = "partDeactivated"; //$NON-NLS-1$
public final static String PE_PART_OPENED = "partOpened"; //$NON-NLS-1$
// IPartListener2 events
public final static String PE2_ACTIVATED = "partActivated"; //$NON-NLS-1$
public final static String PE2_PART_VISIBLE = "partVisible"; //$NON-NLS-1$
public final static String PE2_PART_HIDDEN = "partHidden"; //$NON-NLS-1$
public final static String PE2_PART_BROUGHT_TO_TOP = "partBroughtToTop"; //$NON-NLS-1$
public final static String PE2_PART_CLOSED = "partClosed"; //$NON-NLS-1$
public final static String PE2_PART_DEACTIVATED = "partDectivated"; //$NON-NLS-1$
public final static String PE2_PART_OPENED = "partOpened"; //$NON-NLS-1$
public static final String PE2_PART_INPUT_CHANGED = "partInputChanged"; //$NON-NLS-1$
// IPageListener events
public final static String WPE_PAGE_ACTIVATED = "pageActivated"; //$NON-NLS-1$
public final static String WPE_PAGE_OPENED = "pageOpened"; //$NON-NLS-1$
public final static String WPE_PAGE_CLOSED = "pageClosed"; //$NON-NLS-1$
// IPerspectiveListener events
public static final String PLE_PERSP_PRE_DEACTIVATE = "perspectivePreDeactivate"; //$NON-NLS-1$
public static final String PLE_PERSP_DEACTIVATED = "perspectiveDeactivated"; //$NON-NLS-1$
public static final String PLE_PERSP_ACTIVATED = "perspectiveActivated"; //$NON-NLS-1$
public static final String PLE_PERSP_OPENED = "perspectiveOpened"; //$NON-NLS-1$
public static final String PLE_PERSP_CLOSED = "perspectiveClosed"; //$NON-NLS-1$
public static final String PLE_PERSP_SAVED_AS = "perspectiveSavedAs"; //$NON-NLS-1$
private static String getSourceId(Object source) {
return Util.safeString(Integer.toString(source.hashCode() % 1000));
}
private static String getWindowId(IWorkbenchWindow source) {
return "window " + Util.safeString(Integer.toString(source.hashCode() % 1000)); //$NON-NLS-1$
}
private static String getPageId(IWorkbenchPage page) {
return "page " + Util.safeString(Integer.toString(page.hashCode() % 1000)); //$NON-NLS-1$
}
private static String getPerspectiveId(IPerspectiveDescriptor descriptor) {
return Util.safeString(descriptor.getId());
}
public static final void logPageEvent(IWorkbenchWindow window, IWorkbenchPage page, String eventId) {
if (isEnabled(WINDOW_PAGE_EVENTS)) {
System.out.println(WINDOW_PAGE_EVENTS
+ " " + getWindowId(window) //$NON-NLS-1$
+ " " + eventId + " (" + getPageId(page) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
public static final void logPerspectiveEvent(IWorkbenchWindow window, IWorkbenchPage page,
IPerspectiveDescriptor descriptor, String eventId) {
if (isEnabled(WINDOW_PERSPECTIVE_EVENTS)) {
System.out.println(WINDOW_PERSPECTIVE_EVENTS
+ " " + getWindowId(window) //$NON-NLS-1$
+ " " + eventId + " (" + getPageId(page) + ", " + getPerspectiveId(descriptor) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
}
public static final void logPerspectiveChangedEvent(IWorkbenchWindow window, IWorkbenchPage page,
IPerspectiveDescriptor descriptor, IWorkbenchPartReference ref, String changeId) {
if (isEnabled(WINDOW_PERSPECTIVE_EVENTS)) {
System.out.println(WINDOW_PERSPECTIVE_EVENTS
+ " "+ getWindowId(window) //$NON-NLS-1$
+ " perspectiveChanged (" + getPageId(page) + ", " + getPerspectiveId(descriptor) //$NON-NLS-1$ //$NON-NLS-2$
+ ", " + getPartId(ref) + ", " + changeId + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
public static final void logPerspectiveSavedAs(IWorkbenchWindow window, IWorkbenchPage page,
IPerspectiveDescriptor oldDescriptor, IPerspectiveDescriptor newDescriptor) {
if (isEnabled(WINDOW_PERSPECTIVE_EVENTS)) {
System.out.println(WINDOW_PERSPECTIVE_EVENTS
+ " " + getWindowId(window) //$NON-NLS-1$
+ " " + PLE_PERSP_SAVED_AS + " (" + getPageId(page) + ", " + getPerspectiveId(oldDescriptor) + ", " + getPerspectiveId(newDescriptor) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
}
private static String getPartId(IWorkbenchPart part) {
if (part == null) {
return "null part"; //$NON-NLS-1$
}
return Util.safeString(part.getTitle()) + " - " //$NON-NLS-1$
+ Util.safeString(part.getSite().getId());
}
private static String getPartId(IWorkbenchPartReference ref) {
if (ref == null) {
return "null part"; //$NON-NLS-1$
}
return Util.safeString(ref.getPartName()) + " - " //$NON-NLS-1$
+ Util.safeString(ref.getId());
}
/**
* Log a partListener event fired from the workbench window
*
* @param page
* @param eventId
*/
public static final void logPartListenerEvent(String sourceType, Object source, IWorkbenchPart part, String eventId) {
if (isEnabled(sourceType)) {
System.out.println(sourceType + " " + getSourceId(source) //$NON-NLS-1$
+ ", " + eventId + "(" + getPartId(part) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
/**
* Log a partListener2 event fired from the workbench window
*
* @param page
* @param eventId
*/
public static final void logPartListener2Event(String sourceType, Object source, IWorkbenchPartReference part, String eventId) {
if (isEnabled(sourceType)) {
System.out.println(sourceType + " " + getSourceId(source) //$NON-NLS-1$
+ ", " + eventId + "(" + getPartId(part) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
/**
* Log an event fired from the workbench page
*
* @param page
* @param eventId
*/
public static final void logPartListenerEvent(IWorkbenchPage page, IWorkbenchPart part, String eventId) {
if (isEnabled(PAGE_PARTLISTENER_EVENTS)) {
System.out.println(PAGE_PARTLISTENER_EVENTS + " page " //$NON-NLS-1$
+ Util.safeString(page.getLabel())
+ ", " + eventId + "(" + getPartId(part) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
/**
* Log an event fired from the workbench page
*
* @param page
* @param eventId
*/
public static final void logPartListener2Event(IWorkbenchPage page, IWorkbenchPartReference part, String eventId) {
if (isEnabled(PAGE_PARTLISTENER2_EVENTS)) {
System.out.println(PAGE_PARTLISTENER2_EVENTS + " page " //$NON-NLS-1$
+ Util.safeString(page.getLabel())
+ ", " + eventId + "(" + getPartId(part) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
/**
* Log an event fired from the workbench page
*
* @param page
* @param eventId
*/
public static final void logPagePropertyChanged(IWorkbenchPage page, String changeId, Object oldValue, Object newValue) {
if (isEnabled(PAGE_PROPERTY_EVENTS)) {
System.out.println(PAGE_PROPERTY_EVENTS + " page " //$NON-NLS-1$
+ Util.safeString(page.getLabel())
+ ", " + changeId + " = " + Util.safeString(newValue.toString()) + "( old value = " + newValue.toString() + " )"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
}
public static final void logPartReferencePropertyChange(IWorkbenchPartReference ref, int changeId) {
if (isEnabled(PARTREFERENCE_PROPERTY_EVENTS)) {
String eventDescription;
switch(changeId) {
case IWorkbenchPartConstants.PROP_TITLE: eventDescription = "title"; break; //$NON-NLS-1$
case IWorkbenchPartConstants.PROP_DIRTY: eventDescription = "dirty"; break; //$NON-NLS-1$
case IWorkbenchPartConstants.PROP_INPUT: eventDescription = "input"; break; //$NON-NLS-1$
case IWorkbenchPartConstants.PROP_PART_NAME: eventDescription = "part_name"; break; //$NON-NLS-1$
case IWorkbenchPartConstants.PROP_CONTENT_DESCRIPTION: eventDescription = "content_description"; break; //$NON-NLS-1$
default:
eventDescription = "unknown event id = " + changeId; //$NON-NLS-1$
}
System.out.println(PARTREFERENCE_PROPERTY_EVENTS + " " //$NON-NLS-1$
+ getPartId(ref)
+ ", property " + eventDescription); //$NON-NLS-1$
}
}
private static boolean isEnabled(String eventName) {
return enabled && internal_isEnabled(eventName);
}
private static boolean internal_isEnabled(String eventName) {
String option = Platform.getDebugOption(eventName);
return option != null && !option.equalsIgnoreCase("false") && !option.equalsIgnoreCase("-1"); //$NON-NLS-1$ //$NON-NLS-2$
}
}