| /******************************************************************************* |
| * Copyright (c) 2005, 2012 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.extensions; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.bpel.ui.BPELUIPlugin; |
| import org.eclipse.bpel.ui.IHoverHelper; |
| import org.eclipse.bpel.ui.bpelactions.AbstractBPELAction; |
| import org.eclipse.bpel.ui.factories.AbstractUIObjectFactory; |
| import org.eclipse.bpel.ui.util.BPELUtil; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtensionPoint; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.ecore.EClass; |
| |
| |
| /** |
| * Responsible for getting information from the BPEL UI extension points. |
| */ |
| public class BPELUIRegistry { |
| |
| static final String EXTPT_HOVERHELPERS = "hoverHelpers"; //$NON-NLS-1$ |
| static final String ELEMENT_HOVERHELPER = "hoverHelper"; //$NON-NLS-1$ |
| static final String ELEMENT_EDITOR = "editor"; //$NON-NLS-1$ |
| static final String ATT_EXPRESSION_LANGUAGE = "expressionLanguage"; //$NON-NLS-1$ |
| static final String ATT_CLASS = "class"; //$NON-NLS-1$ |
| static final String ATT_LABEL = "label"; //$NON-NLS-1$ |
| static final String EXTPT_ACTIONS = "actions"; //$NON-NLS-1$ |
| static final String ELEMENT_CATEGORY = "category"; //$NON-NLS-1$ |
| static final String ATT_NAME = "name"; //$NON-NLS-1$ |
| static final String ATT_ID = "id"; //$NON-NLS-1$ |
| static final String ELEMENT_ACTION = "action"; //$NON-NLS-1$ |
| static final String ATT_CATEGORY_ID = "categoryId"; //$NON-NLS-1$ |
| static final String EXTPT_MODELLISTENER = "modelListener"; //$NON-NLS-1$ |
| static final String ELEMENT_LISTENER = "listener"; //$NON-NLS-1$ |
| static final String ATT_SPEC_COMPLIANT = "specCompliant"; //$NON-NLS-1$ |
| |
| private static BPELUIRegistry instance; |
| |
| private HoverHelperDescriptor hoverHelperDescriptor; |
| private ActionCategoryDescriptor[] fActionCategoryDescriptors; |
| private ActionDescriptor[] fActionDescriptors; |
| private ListenerDescriptor[] fListenerDescriptors; |
| private UIObjectFactoryDescriptor[] uiObjectFactoryDescriptor; |
| private IHoverHelper hoverHelper; |
| |
| private BPELUIRegistry() { |
| readHoverHelpers(); |
| readActions(); |
| readListeners(); |
| readUIObjecFactories(); |
| } |
| |
| /** |
| * @return the singleton instance of this regitry. |
| */ |
| |
| public static BPELUIRegistry getInstance() { |
| if (instance == null) { |
| instance = new BPELUIRegistry(); |
| } |
| return instance; |
| } |
| |
| |
| /** |
| * Return the hover helper. |
| * @return the hover helper extension. |
| * @throws CoreException |
| */ |
| public IHoverHelper getHoverHelper() throws CoreException { |
| |
| if (this.hoverHelperDescriptor == null) { |
| return null; |
| } |
| if (this.hoverHelper == null) { |
| this.hoverHelper = this.hoverHelperDescriptor.createHoverHelper(); |
| } |
| return this.hoverHelper; |
| } |
| |
| /** |
| * Return the UIObjectFactory descriptors |
| */ |
| public UIObjectFactoryDescriptor[] getUIObjectFactoryDescriptors() { |
| return this.uiObjectFactoryDescriptor; |
| } |
| |
| /** |
| * Return all action descriptors. |
| * @return Return all action descriptors. |
| */ |
| public ActionDescriptor[] getActionDescriptors() { |
| return this.fActionDescriptors; |
| } |
| |
| /** |
| * Returns the ActionDescriptor for the given EClass. |
| * @param target the target |
| * @return Returns the ActionDescriptor for the given EClass. |
| */ |
| public ActionDescriptor getActionDescriptor(EClass target) { |
| for(ActionDescriptor descriptor : this.fActionDescriptors ) { |
| if (descriptor.getAction().getModelType() == target) { |
| return descriptor; |
| } |
| } |
| return null; |
| } |
| |
| /** |
| * @return the action category descriptors. |
| */ |
| public ActionCategoryDescriptor[] getActionCategoryDescriptors() { |
| return this.fActionCategoryDescriptors; |
| } |
| |
| /** |
| * @return the listener descriptors. |
| */ |
| public ListenerDescriptor[] getListenerDescriptors() { |
| return this.fListenerDescriptors; |
| } |
| |
| private void readHoverHelpers() { |
| |
| for (IConfigurationElement helper : getConfigurationElements(EXTPT_HOVERHELPERS) ) { |
| if (helper.getName().equals(ELEMENT_HOVERHELPER) == false) { |
| continue; |
| } |
| |
| String clazz = helper.getAttribute(ATT_CLASS); |
| if (clazz == null) { |
| continue; |
| } |
| |
| HoverHelperDescriptor descriptor = new HoverHelperDescriptor(); |
| descriptor.setElement(helper); |
| this.hoverHelperDescriptor = descriptor; |
| } |
| } |
| |
| /** |
| * Read all the actions and categories. |
| */ |
| private void readActions() { |
| List<ActionCategoryDescriptor> categories = new ArrayList<ActionCategoryDescriptor>(); |
| List<ActionDescriptor> actions = new ArrayList<ActionDescriptor>(); |
| |
| for (IConfigurationElement element : getConfigurationElements(EXTPT_ACTIONS)) { |
| |
| if (element.getName().equals(ELEMENT_CATEGORY)) { |
| String name = element.getAttribute(ATT_NAME); |
| String id = element.getAttribute(ATT_ID); |
| if (name != null && id != null) { |
| ActionCategoryDescriptor descriptor = new ActionCategoryDescriptor(); |
| descriptor.setName(name); |
| descriptor.setId(id); |
| categories.add(descriptor); |
| } |
| } else if (element.getName().equals(ELEMENT_ACTION)) { |
| String id = element.getAttribute(ATT_ID); |
| String category = element.getAttribute(ATT_CATEGORY_ID); |
| String specCompliant = element.getAttribute(ATT_SPEC_COMPLIANT); |
| if (category != null && id != null) { |
| ActionDescriptor descriptor = new ActionDescriptor(); |
| descriptor.setId(id); |
| descriptor.setCategoryId(category); |
| descriptor.setSpecCompliant(Boolean.valueOf(specCompliant).booleanValue()); |
| try { |
| AbstractBPELAction action = (AbstractBPELAction)element.createExecutableExtension(ATT_CLASS); |
| descriptor.setAction(action); |
| } catch (CoreException e) { |
| BPELUIPlugin.log(e); |
| } |
| actions.add(descriptor); |
| |
| // register AdapterFactory - since it has to be done only once we do it here |
| AdapterFactory factory = descriptor.getAction().getAdapterFactory(); |
| if (factory != null) { |
| BPELUtil.registerAdapterFactory(descriptor.getAction().getModelType(), factory); |
| } |
| } |
| } |
| } |
| |
| this.fActionCategoryDescriptors = new ActionCategoryDescriptor[categories.size()]; |
| categories.toArray(this.fActionCategoryDescriptors); |
| this.fActionDescriptors = new ActionDescriptor[actions.size()]; |
| actions.toArray(this.fActionDescriptors); |
| } |
| |
| /** |
| * Read all the actions and categories. |
| */ |
| private void readUIObjecFactories() { |
| |
| List factories = new ArrayList(); |
| IConfigurationElement[] extensions = getConfigurationElements("uiObjectFactories"); |
| for( IConfigurationElement element : extensions ) { |
| if (element.getName().equals("factory")) { |
| String id = element.getAttribute(ATT_ID); |
| String category = element.getAttribute(ATT_CATEGORY_ID); |
| String specCompliant = element.getAttribute(ATT_SPEC_COMPLIANT); |
| if (category != null && id != null) { |
| UIObjectFactoryDescriptor descriptor = new UIObjectFactoryDescriptor(); |
| descriptor.setId(id); |
| descriptor.setCategoryId(category); |
| descriptor.setSpecCompliant(Boolean.valueOf(specCompliant).booleanValue()); |
| try { |
| AbstractUIObjectFactory factory = (AbstractUIObjectFactory) element.createExecutableExtension(ATT_CLASS); |
| descriptor.setFactory(factory); |
| descriptor.setConfigElement(element); |
| } catch (CoreException e) { |
| BPELUIPlugin.log(e); |
| } |
| factories.add(descriptor); |
| } |
| } |
| } |
| |
| this.uiObjectFactoryDescriptor = new UIObjectFactoryDescriptor[factories.size()]; |
| factories.toArray(this.uiObjectFactoryDescriptor); |
| } |
| |
| /** |
| * Read all the model listeners |
| */ |
| private void readListeners() { |
| List<ListenerDescriptor> listeners = new ArrayList<ListenerDescriptor>(); |
| |
| for (IConfigurationElement element : getConfigurationElements(EXTPT_MODELLISTENER)) { |
| if (element.getName().equals(ELEMENT_LISTENER)) { |
| String id = element.getAttribute(ATT_ID); |
| if (id != null) { |
| ListenerDescriptor descriptor = new ListenerDescriptor(); |
| descriptor.setId(id); |
| try { |
| IModelListener listener = (IModelListener)element.createExecutableExtension(ATT_CLASS); |
| descriptor.setModelListener(listener); |
| } catch (CoreException e) { |
| BPELUIPlugin.log(e); |
| } |
| listeners.add(descriptor); |
| } |
| } |
| } |
| |
| this.fListenerDescriptors = new ListenerDescriptor[listeners.size()]; |
| listeners.toArray(this.fListenerDescriptors); |
| } |
| |
| /** |
| * Given an extension point name returns its configuration elements. |
| */ |
| private IConfigurationElement[] getConfigurationElements(String extensionPointId) { |
| IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint( |
| BPELUIPlugin.PLUGIN_ID, extensionPointId); |
| if (extensionPoint == null) { |
| return null; |
| } |
| return extensionPoint.getConfigurationElements(); |
| } |
| } |