| /******************************************************************************* |
| * 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.properties; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.bpel.common.ui.details.viewers.CComboViewer; |
| import org.eclipse.bpel.common.ui.flatui.FlatFormAttachment; |
| import org.eclipse.bpel.common.ui.flatui.FlatFormData; |
| import org.eclipse.bpel.ui.BPELEditor; |
| import org.eclipse.bpel.ui.IHelpContextIds; |
| import org.eclipse.bpel.ui.Messages; |
| import org.eclipse.bpel.ui.bpelactions.AbstractBPELAction; |
| import org.eclipse.bpel.ui.bpelactions.SimpleAction; |
| import org.eclipse.bpel.ui.details.providers.AbstractContentProvider; |
| import org.eclipse.bpel.ui.details.providers.ModelViewerSorter; |
| import org.eclipse.bpel.ui.extensions.ActionCategoryDescriptor; |
| import org.eclipse.bpel.ui.extensions.ActionDescriptor; |
| import org.eclipse.bpel.ui.extensions.BPELUIRegistry; |
| import org.eclipse.bpel.ui.factories.AbstractUIObjectFactory; |
| import org.eclipse.bpel.ui.factories.ActionUIObjectFactory; |
| import org.eclipse.bpel.ui.util.ModelHelper; |
| import org.eclipse.core.runtime.OperationCanceledException; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.gef.commands.Command; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.LabelProvider; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.browser.Browser; |
| import org.eclipse.swt.custom.CCombo; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.layout.RowLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.ui.PlatformUI; |
| |
| |
| public class ActionImplementationSection extends BPELPropertySection { |
| |
| protected Browser description; |
| protected CCombo categoryCombo; |
| protected CComboViewer categoryViewer; |
| protected Composite buttonsComposite; |
| protected List buttonsList; |
| |
| public ActionImplementationSection() { |
| super(); |
| buttonsList = new ArrayList(); |
| } |
| |
| @Override |
| protected void createClient(Composite parent) { |
| Composite composite = createFlatFormComposite(parent); |
| createImplementationWidgets(composite); |
| |
| PlatformUI.getWorkbench().getHelpSystem().setHelp( |
| composite, IHelpContextIds.PROPERTY_PAGE_EMPTY_IMPLEMENTATION); |
| } |
| |
| public void createImplementationWidgets(Composite parent) { |
| Composite left = getWidgetFactory().createComposite(parent); |
| FlatFormData data = new FlatFormData(); |
| data.left = new FlatFormAttachment(0, 0); |
| data.top = new FlatFormAttachment(0, 0); |
| data.bottom = new FlatFormAttachment(100, 0); |
| left.setLayoutData(data); |
| |
| left.setLayout(new GridLayout(1, false)); |
| Composite combos = getWidgetFactory().createComposite(left); |
| combos.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); |
| combos.setLayout(new GridLayout(2, false)); |
| Label categoryLabel = getWidgetFactory().createLabel(combos, Messages.ActionImplementationSection_Action_Category_1); |
| categoryLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); |
| categoryCombo = getWidgetFactory().createCCombo(combos); |
| Composite chooseActionComposite = getWidgetFactory().createComposite(left); |
| chooseActionComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); |
| chooseActionComposite.setLayout(new GridLayout(1, false)); |
| Label chooseActionLabel = getWidgetFactory().createLabel(chooseActionComposite, Messages.ActionImplementationSection_Choose_one_of_these_actions_2); |
| chooseActionLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); |
| buttonsComposite = getWidgetFactory().createComposite(left); |
| buttonsComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| buttonsComposite.setLayout(new RowLayout()); |
| |
| Composite right = getWidgetFactory().createComposite(parent); |
| data = new FlatFormData(); |
| data.left = new FlatFormAttachment(left); |
| data.top = new FlatFormAttachment(0, 0); |
| data.right = new FlatFormAttachment(100, 0); |
| data.bottom = new FlatFormAttachment(100, 0); |
| right.setLayoutData(data); |
| |
| right.setLayout(new GridLayout(1, false)); |
| Label descriptionLabel = getWidgetFactory().createLabel(right, Messages.ActionImplementationSection_Description_3); |
| descriptionLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); |
| descriptionLabel.setToolTipText(Messages.ActionImplementationSection_Hover_tooltip_4); |
| description = new Browser(right, SWT.NONE); |
| description.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| |
| // initialize values and viewers |
| categoryViewer = new CComboViewer(categoryCombo); |
| categoryViewer.setLabelProvider(new LabelProvider() { |
| @Override |
| public String getText(Object element) { |
| if (element instanceof ActionCategoryDescriptor) { |
| return ((ActionCategoryDescriptor)element).getName(); |
| } |
| return super.getText(element); |
| } |
| }); |
| categoryViewer.setContentProvider(new AbstractContentProvider() { |
| @Override |
| public Object[] getElements(Object inputElement) { |
| return (Object[])inputElement; |
| } |
| }); |
| categoryViewer.setSorter(ModelViewerSorter.getInstance()); |
| categoryViewer.addSelectionChangedListener(new ISelectionChangedListener() { |
| public void selectionChanged(SelectionChangedEvent event) { |
| if (event.getSelection() instanceof IStructuredSelection) { |
| ActionCategoryDescriptor category = (ActionCategoryDescriptor)((IStructuredSelection)event.getSelection()).getFirstElement(); |
| createActionButtons(category); |
| } |
| } |
| }); |
| ActionCategoryDescriptor[] categories = BPELUIRegistry.getInstance().getActionCategoryDescriptors(); |
| categoryViewer.setInput(categories); |
| } |
| |
| @Override |
| public void refresh() { |
| super.refresh(); |
| ActionCategoryDescriptor[] categories = BPELUIRegistry.getInstance().getActionCategoryDescriptors(); |
| categoryViewer.setSelection(new StructuredSelection(categories[0])); // select the Basic Actions category |
| } |
| |
| @Override |
| public boolean shouldUseExtraSpace() { |
| return true; |
| } |
| |
| protected void createActionButtons(ActionCategoryDescriptor category) { |
| // remove old buttons |
| for (Iterator iter = buttonsList.iterator(); iter.hasNext();) { |
| Button button = (Button) iter.next(); |
| button.dispose(); |
| } |
| |
| // create buttons |
| ActionDescriptor[] descriptors = BPELUIRegistry.getInstance().getActionDescriptors(); |
| for (int i = 0; i < descriptors.length; i++) { |
| ActionDescriptor descriptor = descriptors[i]; |
| // filter by spec-compliance |
| if (ModelHelper.isSpecCompliant(getProcess()) && !descriptor.isSpecCompliant()) { |
| continue; |
| } |
| final AbstractBPELAction action = descriptor.getAction(); |
| // Remove the Empty action since we are already in it. |
| // Also remove the actions that do not belong to the given category. |
| if (action instanceof SimpleAction || !descriptor.getCategoryId().equals(category.getId())) { |
| continue; |
| } |
| final Object currentModel = getModel(); |
| final BPELEditor editor = ModelHelper.getBPELEditor(getProcess()); |
| final AbstractUIObjectFactory factory = action.getUIObjectFactory(); |
| Button button = getWidgetFactory().createButton(buttonsComposite, String.valueOf(i), SWT.PUSH); |
| button.setImage(factory.getSmallImage()); |
| button.setToolTipText(action.getLabel()); |
| Listener listener = new Listener() { |
| public void handleEvent(Event event) { |
| description.setText("<HTML>" + action.getDescription() + "</HTML>"); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| }; |
| button.addListener(SWT.MouseEnter, listener); |
| button.addListener(SWT.FocusIn, listener); |
| button.addListener(SWT.Selection, new Listener() { |
| public void handleEvent(Event event) { |
| try { |
| EObject parent = getModel().eContainer(); |
| final Object newModel = (factory instanceof ActionUIObjectFactory) ? ((ActionUIObjectFactory)factory).createInstance(parent) : factory.createInstance(); |
| Command command = action.getChangeActionTypeCommand(parent, currentModel, newModel); |
| command = wrapInShowContextCommand(command); |
| editor.getCommandStack().execute(command); |
| selectModelObject((EObject)newModel); |
| } catch (OperationCanceledException e) { |
| // The user has canceled the request so we just return without doing anything. |
| return; |
| } |
| } |
| }); |
| buttonsList.add(button); |
| } |
| buttonsComposite.layout(true); |
| } |
| |
| @Override |
| public void aboutToBeShown() { |
| super.aboutToBeShown(); |
| description.setText(Messages.ActionImplementationSection_HTML_hover_description_text_5); |
| } |
| } |