blob: e23b672aa6762f92f34d4a0db275d1f0bd72a029 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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.views;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* The plug-in runtime class for the views UI plug-in (id <code>"org.eclipse.ui.views"</code>).
* <p>
* This class provides static methods and fields only; it is not intended to be
* instantiated or subclassed by clients.
* </p>
*
* @since 2.1
*/
public final class ViewsPlugin extends AbstractUIPlugin {
/**
* Views UI plug-in id (value <code>"org.eclipse.ui.views"</code>).
*/
public static final String PLUGIN_ID = "org.eclipse.ui.views"; //$NON-NLS-1$
private final static String ICONS_PATH = "$nl$/icons/full/";//$NON-NLS-1$
private static ViewsPlugin instance;
/**
* Returns the singleton instance.
*
* @return the singleton instance.
*/
public static ViewsPlugin getDefault() {
return instance;
}
/**
* Creates a new instance of the receiver.
*
* @see org.eclipse.core.runtime.Plugin#Plugin()
*/
public ViewsPlugin() {
super();
instance = this;
}
/**
* Get the workbench image with the given path relative to
* ICON_PATH.
* @param relativePath
* @return ImageDescriptor
*/
public static ImageDescriptor getViewImageDescriptor(String relativePath){
return imageDescriptorFromPlugin(PLUGIN_ID, ICONS_PATH + relativePath);
}
/**
* If it is possible to adapt the given object to the given type, this
* returns the adapter. Performs the following checks:
*
* <ol>
* <li>Returns <code>sourceObject</code> if it is an instance of the
* adapter type.</li>
* <li>If sourceObject implements IAdaptable, it is queried for adapters.</li>
* <li>If sourceObject is not an instance of PlatformObject (which would have
* already done so), the adapter manager is queried for adapters</li>
* </ol>
*
* Otherwise returns null.
*
* @param sourceObject
* object to adapt, or null
* @param adapter
* type to adapt to
* @param activatePlugins
* true if IAdapterManager.loadAdapter should be used (may trigger plugin activation)
* @return a representation of sourceObject that is assignable to the
* adapter type, or null if no such representation exists
*/
public static Object getAdapter(Object sourceObject, Class adapter, boolean activatePlugins) {
Assert.isNotNull(adapter);
if (sourceObject == null) {
return null;
}
if (adapter.isInstance(sourceObject)) {
return sourceObject;
}
if (sourceObject instanceof IAdaptable) {
IAdaptable adaptable = (IAdaptable) sourceObject;
Object result = adaptable.getAdapter(adapter);
if (result != null) {
// Sanity-check
Assert.isTrue(adapter.isInstance(result));
return result;
}
}
if (!(sourceObject instanceof PlatformObject)) {
Object result;
if (activatePlugins) {
result = Platform.getAdapterManager().loadAdapter(sourceObject, adapter.getName());
} else {
result = Platform.getAdapterManager().getAdapter(sourceObject, adapter);
}
if (result != null) {
return result;
}
}
return null;
}
}