blob: 75c592ef40faa7aec1392a86fcc930157ce59be5 [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.bpel.ui;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import org.eclipse.bpel.common.ui.ColorUtils;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.ISaveContext;
import org.eclipse.core.resources.ISaveParticipant;
import org.eclipse.core.resources.ISavedState;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
public class BPELUIPlugin extends AbstractUIPlugin {
public static final String PLUGIN_ID = "org.eclipse.bpel.ui"; //$NON-NLS-1$
static BPELUIPlugin plugin;
private ColorRegistry colorRegistry;
protected boolean imagesAndColorsInitialized;
// takes care of changes to the BPEL file
private BPELResourceChangeListener resourceChangeListener;
private ISaveParticipant saveParticipant;
public BPELUIPlugin() {
super();
plugin = this;
}
/**
* Creates an image descriptor and places it in the image registry.
*/
private void createImageDescriptor(String id, URL baseURL) {
URL url = null;
try {
url = new URL(baseURL, IBPELUIConstants.ICON_PATH + id);
} catch (MalformedURLException e) {
BPELUIPlugin.log(e);
}
ImageDescriptor desc = ImageDescriptor.createFromURL(url);
getImageRegistry().put(id, desc);
}
/**
* Returns the image descriptor for the given image ID.
* Returns null if there is no such image.
*/
public ImageDescriptor getImageDescriptor(String id) {
return getImageRegistry().getDescriptor(id);
}
public Image getImage(String id) {
return getImageRegistry().get(id);
}
public static BPELUIPlugin getPlugin() {
return plugin;
}
private void initializeColors() {
colorRegistry = new ColorRegistry();
RGB color_240_240_240 = ColorUtils.getRelativeRGB(240, 240, 240);
RGB color_255_255_255 = ColorUtils.getRelativeRGB(255, 255, 255);
colorRegistry.put(IBPELUIConstants.COLOR_FLOW_BORDER, ColorUtils.getRelativeRGB(112, 152, 224));
colorRegistry.put(IBPELUIConstants.COLOR_GRADIENT_FROM, color_255_255_255);
colorRegistry.put(IBPELUIConstants.COLOR_GRADIENT_TO, color_240_240_240);
if (ColorUtils.isInvertedColorScheme()) {
colorRegistry.put(IBPELUIConstants.COLOR_ACTIVITY_BORDER, ColorUtils.getRelativeRGB(25, 25, 25));
colorRegistry.put(IBPELUIConstants.COLOR_COMPOSITE_ACTIVITY_BORDER, ColorUtils.getRelativeRGB(25, 25, 25));
colorRegistry.put(IBPELUIConstants.COLOR_SCOPE_BORDER, ColorUtils.getRelativeRGB(25, 25, 25));
colorRegistry.put(IBPELUIConstants.COLOR_IMPLICIT_LINK, ColorUtils.getRelativeRGB(25, 25, 25));
} else {
colorRegistry.put(IBPELUIConstants.COLOR_ACTIVITY_BORDER, ColorUtils.getRelativeRGB(176, 176, 176));
colorRegistry.put(IBPELUIConstants.COLOR_COMPOSITE_ACTIVITY_BORDER, ColorUtils.getRelativeRGB(205, 205, 205));
colorRegistry.put(IBPELUIConstants.COLOR_SCOPE_BORDER, ColorUtils.getRelativeRGB(205, 205, 205));
colorRegistry.put(IBPELUIConstants.COLOR_IMPLICIT_LINK, ColorUtils.getRelativeRGB(200, 200, 200));
}
colorRegistry.put(IBPELUIConstants.COLOR_HILIGHT_NODE, ColorUtils.getRelativeRGB(255, 255, 0));
colorRegistry.put(IBPELUIConstants.COLOR_VARIABLE_BACKGROUND, ColorUtils.getRelativeRGB(255, 255, 255));
colorRegistry.put(IBPELUIConstants.COLOR_VARIABLE_SEPARATOR, ColorUtils.getRelativeRGB(230, 230, 230));
colorRegistry.put(IBPELUIConstants.COLOR_VARIABLE_REFERENCE, ColorUtils.getRelativeRGB(99, 151, 245));
colorRegistry.put(IBPELUIConstants.COLOR_LINK_ONE, ColorUtils.getRelativeRGB(238, 197, 253));
colorRegistry.put(IBPELUIConstants.COLOR_LINK_TWO, ColorUtils.getRelativeRGB(73, 0, 107));
colorRegistry.put(IBPELUIConstants.COLOR_LINK_THREE, ColorUtils.getRelativeRGB(222, 144, 254));
colorRegistry.put(IBPELUIConstants.COLOR_WHITE, ColorUtils.getRelativeRGB(255, 255, 255));
colorRegistry.put(IBPELUIConstants.COLOR_BLACK, ColorUtils.getRelativeRGB(0,0,0));
colorRegistry.put(IBPELUIConstants.COLOR_RED, ColorUtils.getRelativeRGB(255,0,0));
colorRegistry.put(IBPELUIConstants.COLOR_DARK_RED, ColorUtils.getRelativeRGB(0x80, 0, 0));
colorRegistry.put(IBPELUIConstants.COLOR_GREEN, ColorUtils.getRelativeRGB( 0, 255, 0));
colorRegistry.put(IBPELUIConstants.COLOR_DARK_GREEN, ColorUtils.getRelativeRGB(0, 0x80, 0));
colorRegistry.put(IBPELUIConstants.COLOR_YELLOW, ColorUtils.getRelativeRGB(255, 255, 0));
colorRegistry.put(IBPELUIConstants.COLOR_DARK_YELLOW, ColorUtils.getRelativeRGB(0x80, 0x80, 0));
colorRegistry.put(IBPELUIConstants.COLOR_BLUE, ColorUtils.getRelativeRGB( 0, 0 ,255));
colorRegistry.put(IBPELUIConstants.COLOR_DARK_BLUE, ColorUtils.getRelativeRGB(0, 0, 0x80));
colorRegistry.put(IBPELUIConstants.COLOR_MAGENTA, ColorUtils.getRelativeRGB( 255, 0, 255));
colorRegistry.put(IBPELUIConstants.COLOR_DARK_MAGENTA, ColorUtils.getRelativeRGB( 0x80, 0, 0x80));
colorRegistry.put(IBPELUIConstants.COLOR_CYAN, ColorUtils.getRelativeRGB( 0, 255, 255));
colorRegistry.put(IBPELUIConstants.COLOR_DARK_CYAN, ColorUtils.getRelativeRGB( 0, 0x80, 0x80));
colorRegistry.put(IBPELUIConstants.COLOR_GRAY, ColorUtils.getRelativeRGB( 0xC0, 0xC0, 0xC0));
colorRegistry.put(IBPELUIConstants.COLOR_DARK_GRAY, ColorUtils.getRelativeRGB(0x80, 0x80, 0x80));
}
/**
* TODO: registry should be moved to editors and removed from plug-in
*/
public ColorRegistry getColorRegistry() {
if (colorRegistry == null) {
initialize();
}
return colorRegistry;
}
public ImageRegistry getImageRegistry() {
ImageRegistry result = super.getImageRegistry();
initialize();
return result;
}
/**
* Initializes the table of images used in this plugin.
*/
private void initializeImages() {
URL baseURL = getBundle().getEntry("/"); //$NON-NLS-1$
createImageDescriptor(IBPELUIConstants.ICON_ASSIGN_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ASSIGN_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_EMPTY_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_EMPTY_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_FLOW_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_FLOW_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_INVOKE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_INVOKE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PICK_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PICK_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_RECEIVE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_RECEIVE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_REPLY_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_REPLY_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_SCOPE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_SCOPE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_SEQUENCE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_SEQUENCE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_SWITCH_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_SWITCH_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_EXIT_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_EXIT_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_THROW_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_THROW_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_RETHROW_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_RETHROW_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_COMPENSATE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_COMPENSATE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_WAIT_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_WAIT_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_WHILE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_WHILE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_REPEAT_UNTIL_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_REPEAT_UNTIL_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_VALIDATE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_VALIDATE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PARTNER_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PARTNER_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PARTNER_IN_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PARTNER_OUT_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_VARIABLE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_VARIABLE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_CORRELATIONSET_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_CORRELATIONSET_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_LINK_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_LINK_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PROCESS_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PROCESS_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_STARTNODE_16_GIF, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ENDNODE_16_GIF, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_CASE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_CASE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_OTHERWISE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_OTHERWISE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ONMESSAGE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ONMESSAGE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ONALARM_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ONALARM_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_FAULTHANDLER_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_FAULTHANDLER_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_COMPENSATIONHANDLER_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_COMPENSATIONHANDLER_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_TERMINATIONHANDLER_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_TERMINATIONHANDLER_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_EVENTHANDLER_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_EVENTHANDLER_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_CATCH_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_CATCH_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_CATCHALL_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_CATCHALL_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_FAULT_INDICATOR, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_COMPENSATION_INDICATOR, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_EVENT_INDICATOR, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_TERMINATION_INDICATOR, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ACTION_INCOMING, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ACTION_INCOMING_GIF, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ACTION_OUTGOING, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ACTION_OUTGOING_GIF, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_FIGURE_EXPANDED, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_FIGURE_COLLAPSED, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_OUTLINE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_OVERVIEW_16, baseURL);
// Wizard banner
createImageDescriptor(IBPELUIConstants.ICON_WIZARD_BANNER, baseURL);
// Cursors
createImageDescriptor(IBPELUIConstants.CURSOR_ZOOM_MASK, baseURL);
createImageDescriptor(IBPELUIConstants.CURSOR_ZOOM_IN, baseURL);
createImageDescriptor(IBPELUIConstants.CURSOR_ZOOM_OUT, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_LINK_BOTTOMLEFT, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_LINK_BOTTOMRIGHT, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_LINK_TOPLEFT, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_LINK_TOPRIGHT, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_LINK_ARROWDOWN, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_LINK_CONDITIONAL, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_MESSAGE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_MESSAGE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_OPERATION_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PART_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PART_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PORTTYPE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PORTTYPE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ROLE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_ROLE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PARTNERLINKTYPE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PARTNERLINKTYPE_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PROPERTY_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_PROPERTY_32, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_SERVICE_16, baseURL);
createImageDescriptor(IBPELUIConstants.ICON_SERVICE_32, baseURL);
}
/**
* @see org.eclipse.core.runtime.Plugin#start(BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
initializePreferences();
initializeResourceChangeListener();
}
protected void initializePreferences() {
IPreferenceStore store = getPreferenceStore();
store.setDefault(IBPELUIConstants.PREF_SHOW_FREEFORM_FLOW, true);
store.setDefault(IBPELUIConstants.PREF_WARN_LINKS, true);
store.setDefault(IBPELUIConstants.PREF_AUTO_FLOW_LAYOUT, false);
store.setDefault(IBPELUIConstants.PREF_USE_ANIMATION, true);
store.setDefault(IBPELUIConstants.PREF_CREATE_SPEC_COMPLIANT_PROCESS, false);
}
/**
* Installs the IResourceChangeListener for the BPEL Plugin. Also
* checks if there were any changes to BPEL files while the plug-in
* was not active.
*/
private void initializeResourceChangeListener() throws CoreException {
resourceChangeListener = new BPELResourceChangeListener();
// Add the save participant in a separate thread
// to make sure that it doesn't block the UI thread and potentially cause
// deadlocks with the code that caused our plugin to be started.
Thread initSaveParticipantThread = new Thread(new Runnable() {
public void run() {
try {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
workspace.addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_BUILD);
ISavedState savedState = workspace.addSaveParticipant(BPELUIPlugin.this, getSaveParticipant());
if (savedState != null) {
savedState.processResourceChangeEvents(resourceChangeListener);
}
} catch (CoreException e) {
throw new RuntimeException(e);
}
}
});
initSaveParticipantThread.setName("BPELUIPlugin init"); //$NON-NLS-1$
initSaveParticipantThread.start();
}
public boolean activateZoomSupport() {
return false;
}
protected void initialize() {
if (!imagesAndColorsInitialized) {
imagesAndColorsInitialized = true;
initializeImages();
initializeColors();
}
}
/**
* @see org.eclipse.core.runtime.Plugin#stop(BundleContext)
*/
public void stop(BundleContext context) throws Exception {
ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
disposeColors();
super.stop(context);
}
private void disposeColors() {
if (colorRegistry != null) {
Iterator it = colorRegistry.getKeySet().iterator();
while (it.hasNext()) {
Color c = colorRegistry.get((String)it.next());
c.dispose();
}
colorRegistry = null;
}
}
/**
* We are only interested in the resource delta while the plugin was
* not active and don't really care about the plug-in save lifecycle.
*/
private ISaveParticipant getSaveParticipant() {
if (saveParticipant == null) {
saveParticipant = new ISaveParticipant() {
public void doneSaving(ISaveContext context) {
}
public void prepareToSave(ISaveContext context) throws CoreException {
}
public void rollback(ISaveContext context) {
}
public void saving(ISaveContext context) throws CoreException {
context.needDelta();
}
};
}
return saveParticipant;
}
/**
* Returns the resource change listener.
*/
public BPELResourceChangeListener getResourceChangeListener() {
return resourceChangeListener;
}
/**
* Utility methods for logging exceptions.
*/
public static void log(Exception e, int severity) {
IStatus status = null;
if (e instanceof CoreException) {
status = ((CoreException)e).getStatus();
} else {
String m = e.getMessage();
status = new Status(severity, PLUGIN_ID, 0, m==null? "<no message>" : m, e); //$NON-NLS-1$
}
System.out.println(e.getClass().getName()+": "+status); //$NON-NLS-1$
BPELUIPlugin.getPlugin().getLog().log(status);
}
public static void log(Exception e) { log(e, IStatus.ERROR); }
}