/******************************************************************************* | |
* Copyright (c) 2008, 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.extensionssample.ui.properties; | |
import org.eclipse.bpel.common.ui.details.IDetailsAreaConstants; | |
import org.eclipse.bpel.common.ui.flatui.FlatFormAttachment; | |
import org.eclipse.bpel.common.ui.flatui.FlatFormData; | |
import org.eclipse.bpel.extensionsample.model.SampleSimpleActivity; | |
import org.eclipse.bpel.model.Variable; | |
import org.eclipse.bpel.ui.IBPELUIConstants; | |
import org.eclipse.bpel.ui.Messages; | |
import org.eclipse.bpel.ui.commands.SetCommand; | |
import org.eclipse.bpel.ui.dialogs.VariableSelectorDialog; | |
import org.eclipse.bpel.ui.properties.BPELPropertySection; | |
import org.eclipse.bpel.ui.util.BPELUtil; | |
import org.eclipse.bpel.ui.util.BatchedMultiObjectAdapter; | |
import org.eclipse.bpel.ui.util.ModelHelper; | |
import org.eclipse.bpel.ui.util.MultiObjectAdapter; | |
import org.eclipse.draw2d.FigureUtilities; | |
import org.eclipse.emf.common.notify.Notification; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.gef.commands.Command; | |
import org.eclipse.jface.window.Window; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.events.SelectionEvent; | |
import org.eclipse.swt.events.SelectionListener; | |
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.swt.widgets.Shell; | |
import org.eclipse.swt.widgets.Text; | |
/* | |
* Bug 120110 | |
* This class implements the detail property tab for the "elemental" extension activity. | |
* This property detail tab allows the user to select a variable in scope for this activity. | |
* | |
* Note that validation of this activity is not yet implemented. | |
*/ | |
public class SampleSimpleActivityPropertySection extends BPELPropertySection { | |
protected Composite parentComposite; | |
protected Label variableName; | |
protected Button variableBrowseButton; | |
private SampleSimpleActivity getActivity() { | |
return (SampleSimpleActivity)getInput(); | |
} | |
@Override | |
protected MultiObjectAdapter[] createAdapters() { | |
return new MultiObjectAdapter[] { | |
/* model object */ | |
new BatchedMultiObjectAdapter() { | |
@Override | |
public void notify (Notification n) { | |
} | |
@Override | |
public void finish() { | |
updateVariableWidgets(); | |
} | |
} | |
}; | |
} | |
public class SetVariableCommand extends SetCommand { | |
public String getDefaultLabel() { return IBPELUIConstants.CMD_SELECT_VARIABLE; } | |
public SetVariableCommand(EObject target, Variable newVariable) { | |
super(target, newVariable); | |
} | |
@Override | |
public Object get() { | |
return ((SampleSimpleActivity)fTarget).getVariable(); | |
} | |
@Override | |
public void set(Object o) { | |
((SampleSimpleActivity)fTarget).setVariable((Variable)o); | |
} | |
} | |
@Override | |
protected void createClient(Composite parent) { | |
FlatFormData data; | |
final Composite composite = parentComposite = createFlatFormComposite( createFlatFormComposite(parent) ); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(100, 0); | |
data.top = new FlatFormAttachment(composite, IDetailsAreaConstants.VSPACE); | |
composite.setLayoutData(data); | |
Label variableLabel = fWidgetFactory.createLabel(composite, "Variable:"); | |
variableName = fWidgetFactory.createLabel(composite, "", SWT.NONE); //$NON-NLS-1$ | |
variableBrowseButton = fWidgetFactory.createButton(composite, Messages.FaultThrowNameSection_Browse_1, SWT.PUSH); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(variableLabel, STANDARD_LABEL_WIDTH_SM)); | |
data.right = new FlatFormAttachment(variableBrowseButton, -IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(0, 0); | |
data.height = FigureUtilities.getTextExtents(variableBrowseButton.getText(), variableBrowseButton.getFont()).height + 4; | |
variableName.setLayoutData(data); | |
data = new FlatFormData(); | |
data.top = new FlatFormAttachment(variableName, 0, SWT.TOP); | |
data.bottom = new FlatFormAttachment(variableName, 2, SWT.BOTTOM); | |
data.left = new FlatFormAttachment(50, -BPELUtil.calculateButtonWidth(variableBrowseButton, SHORT_BUTTON_WIDTH)-IDetailsAreaConstants.CENTER_SPACE); | |
data.right = new FlatFormAttachment(50, -IDetailsAreaConstants.CENTER_SPACE); | |
variableBrowseButton.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(variableName, -IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(variableName, 0, SWT.CENTER); | |
variableLabel.setLayoutData(data); | |
variableBrowseButton.addSelectionListener(new SelectionListener() { | |
public void widgetSelected(SelectionEvent e) { | |
Shell shell = composite.getShell(); | |
EObject model = getInput(); | |
VariableSelectorDialog dialog = new VariableSelectorDialog(shell, model, ModelHelper.getVariableType(model, ModelHelper.OUTGOING)); | |
dialog.setTitle(Messages.FaultThrowNameSection_Select_Fault_Variable_2); | |
if (dialog.open() == Window.OK) { | |
Variable variable = dialog.getVariable(); | |
Command command = new SetVariableCommand(model, variable); | |
getCommandFramework().execute(wrapInShowContextCommand(command)); | |
} | |
} | |
public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } | |
}); | |
} | |
public void updateVariableWidgets() { | |
if (getActivity() != null ) { | |
Variable variable = getActivity().getVariable(); | |
if (variable!=null) { | |
String name = variable.getName(); | |
if (name==null) | |
name = ""; | |
variableName.setText(name); | |
} | |
} | |
} | |
@Override | |
protected void basicSetInput(EObject newInput) { | |
if ( newInput instanceof SampleSimpleActivity) { | |
super.basicSetInput(newInput); | |
updateVariableWidgets(); | |
} | |
} | |
} |