/******************************************************************************* | |
* 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 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* 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); | |
} | |
} |