blob: fe406787c9f3726b009138f7982eba676d4a040b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2009 THALES GLOBAL SERVICES.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.sirius.common.ui;
import java.io.File;
import java.net.MalformedURLException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.ui.EclipseUIPlugin;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
import org.eclipse.sirius.common.tools.DslCommonPlugin;
import org.eclipse.sirius.common.tools.api.constant.CommonPreferencesConstants;
import org.eclipse.sirius.common.tools.api.resource.FileProvider;
import org.eclipse.sirius.common.ui.business.internal.views.properties.tabbed.LabelProviderProviderRegistryListener;
import org.eclipse.sirius.common.ui.tools.internal.util.ISaveDialogExtensionRegistryListener;
/**
* This is the central singleton for the SystemInterfaces edit plugin. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @author cbrun
*/
public final class SiriusTransPlugin extends EMFPlugin {
/**
* The icons root directory.
*/
public static final String PREFIX_ROOT = "icons/"; //$NON-NLS-1$
/**
* Keep track of the singleton. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @generated
*/
// The plug-in ID
public static final String PLUGIN_ID = "org.eclipse.sirius.common.ui";
/**
* Singleton instance.
*/
public static final SiriusTransPlugin INSTANCE = new SiriusTransPlugin();
/**
* Keep track of the singleton. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
*/
private static Implementation plugin;
private ImageRegistry imageRegistry;
/**
* Create the instance. <!-- begin-user-doc --> <!-- end-user-doc -->
*
*/
public SiriusTransPlugin() {
super(new ResourceLocator[] {});
}
/**
* Returns the singleton instance of the Eclipse plugin. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @return the singleton instance.
* @generated
*/
@Override
public ResourceLocator getPluginResourceLocator() {
return plugin;
}
/**
* Returns an image descriptor for the image file at the given plug-in
* relative path.
*
*
* @param path
* the path
* @return the image descriptor
*/
public static ImageDescriptor getBundledImageDescriptor(final String path) {
return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path);
}
/**
* Creates the image descriptor from the filename given.
*
* @param imageName
* the full filename of the image
* @return the new image descriptor
*/
public static ImageDescriptor create(final String imageName) {
return AbstractUIPlugin.imageDescriptorFromPlugin(SiriusTransPlugin.PLUGIN_ID, PREFIX_ROOT + imageName);
}
/**
* Returns an image for the image file. If path is relative, then this
* bundle is looked up for the image, otherwise, for absolute path, first
* segment is taken as id of plug-in with image. Client do not need to
* dispose this image. Images will be disposed automatically.
*
* @generated
* @param path
* the path
* @return image instance
*/
public Image getBundledImage(final String path) {
Image image = getImageRegistry().get(path);
if (image == null) {
final File imageFile = FileProvider.getDefault().getFile(new Path(path));
if (imageFile != null && imageFile.exists() && imageFile.canRead()) {
try {
ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(imageFile.toURI().toURL());
getImageRegistry().put(path, imageDescriptor);
image = getImageRegistry().get(path);
} catch (MalformedURLException e) {
// do nothing
}
}
}
return image;
}
/**
* Returns the image registry for this UI plug-in.
* <p>
* The image registry contains the images used by this plug-in that are very
* frequently used and so need to be globally shared within the plug-in.
* Since many OSs have a severe limit on the number of images that can be in
* memory at any given time, a plug-in should only keep a small number of
* images in their registry.
* <p>
* Subclasses should reimplement <code>initializeImageRegistry</code> if
* they have custom graphic images to load.
* </p>
* <p>
* Subclasses may override this method but are not expected to.
* </p>
*
* @return the image registry
*/
public ImageRegistry getImageRegistry() {
if (imageRegistry == null) {
imageRegistry = createImageRegistry();
}
return imageRegistry;
}
/**
* Returns a new image registry for this plug-in. The registry will be used
* to manage images which are frequently used by the plug-in.
* <p>
* The default implementation of this method creates an empty registry.
* Subclasses may override this method if needed.
* </p>
*
* @return ImageRegistry the resulting registry.
* @see #getImageRegistry
*/
protected ImageRegistry createImageRegistry() {
// If we are in the UI Thread use that
if (Display.getCurrent() != null) {
return new ImageRegistry(Display.getCurrent());
}
if (PlatformUI.isWorkbenchRunning()) {
return new ImageRegistry(PlatformUI.getWorkbench().getDisplay());
}
// Invalid thread access if it is not the UI Thread
// and the workbench is not created.
throw new SWTError(SWT.ERROR_THREAD_INVALID_ACCESS);
}
/**
* Returns the singleton instance of the Eclipse plugin. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @return the singleton instance.
*/
public static Implementation getPlugin() {
return plugin;
}
/**
* Log a an error in the error log view.
*
* @param message
* the message.
* @param t
* the optional exception.
*/
public void error(final String message, final Throwable t) {
final IStatus status = new Status(IStatus.ERROR, PLUGIN_ID, message, t);
if (getPluginLogger() != null) {
getPluginLogger().log(status);
}
}
/**
* Log an info in the error log view.
*
* @param message
* the message.
* @param t
* the optional exception.
*/
public void info(final String message, final Throwable t) {
final IStatus status = new Status(IStatus.INFO, PLUGIN_ID, message, t);
if (getPluginLogger() != null) {
getPluginLogger().log(status);
}
}
/**
* The actual implementation of the Eclipse <b>Plugin</b>. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @generated-not
*/
public static class Implementation extends EclipseUIPlugin {
private ISaveDialogExtensionRegistryListener registryListener;
/**
* The registry listener that will be used to listen to
* propertyContributorLabelProviderDelegate extension changes.
*/
private LabelProviderProviderRegistryListener labelProviderProviderRegistryListener;
private PreferenceChangeListener preferenceChangeListener;
/**
* Creates an instance. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public Implementation() {
super();
// Remember the static instance.
//
plugin = this;
preferenceChangeListener = new PreferenceChangeListener();
}
private void initProfiler() {
final boolean profiling = this.getPreferenceStore().getBoolean(CommonPreferencesConstants.PREF_TRACE_ON);
DslCommonPlugin.PROFILER.setActive(profiling);
}
/**
* Log a an error in the error log view.
*
* @param message
* the message.
* @param t
* the optional exception.
*/
public void error(final String message, final Throwable t) {
final IStatus status = new Status(IStatus.ERROR, PLUGIN_ID, message, t);
getLog().log(status);
}
/**
* Log a an error in the error log view.
*
* @param message
* the message.
* @param t
* the optional exception.
*/
public void warning(final String message, final Throwable t) {
final IStatus status = new Status(IStatus.WARNING, PLUGIN_ID, message, t);
getLog().log(status);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
* @generated-not
*/
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
initProfiler();
getPreferenceStore().addPropertyChangeListener(preferenceChangeListener);
registryListener = new ISaveDialogExtensionRegistryListener();
registryListener.init();
labelProviderProviderRegistryListener = new LabelProviderProviderRegistryListener();
labelProviderProviderRegistryListener.init();
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
* @generated-not
*/
@Override
public void stop(BundleContext context) throws Exception {
getPreferenceStore().removePropertyChangeListener(preferenceChangeListener);
registryListener.dispose();
registryListener = null;
labelProviderProviderRegistryListener.dispose();
labelProviderProviderRegistryListener = null;
super.stop(context);
}
/**
* Listens preferences.
*
* @author ymortier
*/
private class PreferenceChangeListener implements IPropertyChangeListener {
public void propertyChange(final PropertyChangeEvent event) {
final boolean profiling = getPreferenceStore().getBoolean(CommonPreferencesConstants.PREF_TRACE_ON);
DslCommonPlugin.PROFILER.setActive(profiling);
}
}
}
}