/******************************************************************************* | |
* 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.List; | |
import org.eclipse.bpel.common.ui.assist.FieldAssistAdapter; | |
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.model.BPELFactory; | |
import org.eclipse.bpel.model.Invoke; | |
import org.eclipse.bpel.model.OnEvent; | |
import org.eclipse.bpel.model.OnMessage; | |
import org.eclipse.bpel.model.PartnerLink; | |
import org.eclipse.bpel.model.Process; | |
import org.eclipse.bpel.model.Receive; | |
import org.eclipse.bpel.model.Reply; | |
import org.eclipse.bpel.model.Scope; | |
import org.eclipse.bpel.model.Variable; | |
import org.eclipse.bpel.model.Variables; | |
import org.eclipse.bpel.model.partnerlinktype.PartnerLinkType; | |
import org.eclipse.bpel.model.partnerlinktype.Role; | |
import org.eclipse.bpel.model.util.BPELUtils; | |
import org.eclipse.bpel.ui.BPELUIPlugin; | |
import org.eclipse.bpel.ui.IHelpContextIds; | |
import org.eclipse.bpel.ui.Messages; | |
import org.eclipse.bpel.ui.adapters.ILabeledElement; | |
import org.eclipse.bpel.ui.commands.AddPartnerLinkCommand; | |
import org.eclipse.bpel.ui.commands.AddVariableCommand; | |
import org.eclipse.bpel.ui.commands.CompoundCommand; | |
import org.eclipse.bpel.ui.commands.SetCommand; | |
import org.eclipse.bpel.ui.commands.SetOnEventVariableTypeCommand; | |
import org.eclipse.bpel.ui.commands.SetOperationCommand; | |
import org.eclipse.bpel.ui.commands.SetPartnerLinkCommand; | |
import org.eclipse.bpel.ui.commands.SetVariableCommand; | |
import org.eclipse.bpel.ui.commands.SetWSDLFaultCommand; | |
import org.eclipse.bpel.ui.details.providers.ModelLabelProvider; | |
import org.eclipse.bpel.ui.details.providers.ModelTreeLabelProvider; | |
import org.eclipse.bpel.ui.details.providers.OperationContentProvider; | |
import org.eclipse.bpel.ui.details.providers.PartnerLinkContentProvider; | |
import org.eclipse.bpel.ui.details.providers.PartnerLinkTreeContentProvider; | |
import org.eclipse.bpel.ui.details.providers.PartnerRoleFilter; | |
import org.eclipse.bpel.ui.details.providers.WSDLFaultContentProvider; | |
import org.eclipse.bpel.ui.details.tree.ITreeNode; | |
import org.eclipse.bpel.ui.details.tree.OperationTreeNode; | |
import org.eclipse.bpel.ui.details.tree.PartnerLinkTreeNode; | |
import org.eclipse.bpel.ui.details.tree.TreeNode; | |
import org.eclipse.bpel.ui.dialogs.PartnerLinkRoleSelectorDialog; | |
import org.eclipse.bpel.ui.dialogs.PartnerLinkTypeSelectorDialog; | |
import org.eclipse.bpel.ui.proposal.providers.ModelContentProposalProvider; | |
import org.eclipse.bpel.ui.proposal.providers.RunnableProposal; | |
import org.eclipse.bpel.ui.proposal.providers.Separator; | |
import org.eclipse.bpel.ui.util.BPELUtil; | |
import org.eclipse.bpel.ui.util.ListMap; | |
import org.eclipse.bpel.ui.util.ModelHelper; | |
import org.eclipse.bpel.ui.util.MultiObjectAdapter; | |
import org.eclipse.bpel.ui.util.NameDialog; | |
import org.eclipse.emf.common.notify.Adapter; | |
import org.eclipse.emf.common.notify.Notification; | |
import org.eclipse.emf.common.util.EList; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.gef.commands.Command; | |
import org.eclipse.jface.fieldassist.ContentProposalAdapter; | |
import org.eclipse.jface.fieldassist.IContentProposal; | |
import org.eclipse.jface.fieldassist.IContentProposalListener; | |
import org.eclipse.jface.fieldassist.IControlContentAdapter; | |
import org.eclipse.jface.fieldassist.TextContentAdapter; | |
import org.eclipse.jface.viewers.ISelection; | |
import org.eclipse.jface.viewers.ISelectionChangedListener; | |
import org.eclipse.jface.viewers.ITreeSelection; | |
import org.eclipse.jface.viewers.SelectionChangedEvent; | |
import org.eclipse.jface.viewers.TreePath; | |
import org.eclipse.jface.viewers.TreeViewer; | |
import org.eclipse.jface.window.Window; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.graphics.Point; | |
import org.eclipse.swt.widgets.Button; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Control; | |
import org.eclipse.swt.widgets.Event; | |
import org.eclipse.swt.widgets.Label; | |
import org.eclipse.swt.widgets.Listener; | |
import org.eclipse.swt.widgets.Text; | |
import org.eclipse.swt.widgets.Tree; | |
import org.eclipse.swt.widgets.TreeItem; | |
import org.eclipse.ui.PlatformUI; | |
import org.eclipse.ui.forms.events.HyperlinkAdapter; | |
import org.eclipse.ui.forms.events.HyperlinkEvent; | |
import org.eclipse.ui.forms.widgets.Hyperlink; | |
import org.eclipse.wst.wsdl.Fault; | |
import org.eclipse.wst.wsdl.Input; | |
import org.eclipse.wst.wsdl.Message; | |
import org.eclipse.wst.wsdl.Operation; | |
import org.eclipse.wst.wsdl.Output; | |
import org.eclipse.wst.wsdl.Part; | |
import org.eclipse.wst.wsdl.PortType; | |
import org.eclipse.wst.wsdl.WSDLFactory; | |
import org.eclipse.xsd.XSDElementDeclaration; | |
/** | |
* Details section for the Partner/PortType/Operation properties of a | |
* Receive/Reply/Invoke activity and OnMessage. | |
*/ | |
public class InvokeImplSection extends BPELPropertySection { | |
static final String NONE = Messages.InvokeImplSection_None_1; | |
protected static final int PARTNER_CONTEXT = 0; | |
protected static final int OPERATION_CONTEXT = 1; | |
protected static final int FAULTNAME_CONTEXT = 4; | |
private int lastChangeContext = -1; | |
private Composite parentComposite; | |
private Label partnerLabel; | |
private Text partnerName; | |
private Label interfaceLabel, operationLabel; | |
private Hyperlink interfaceName; | |
private Button partnerBrowseButton; | |
private Text operationText; | |
private Button faultButton; | |
private boolean isInvoke; | |
private PartnerRoleFilter fPartnerRoleFilter = new PartnerRoleFilter(); | |
private Label quickPickLabel; | |
private Tree quickPickTree; | |
private TreeViewer quickPickTreeViewer; | |
private Composite faultComposite; | |
private Label faultLabel; | |
private Text faultText; | |
// https://issues.jboss.org/browse/JBIDE-7861 | |
private boolean ignoreQuickPickSelection = false; | |
// https://issues.jboss.org/browse/JBIDE-8305 | |
private Label messageOrElementLabel; | |
private Text messageOrElementText; | |
private IControlContentAdapter fTextContentAdapter = new TextContentAdapter() { | |
@Override | |
public void insertControlContents(Control control, String text, int cursorPosition) { | |
if (text != null) { | |
super.insertControlContents(control, text, cursorPosition); | |
} | |
} | |
@Override | |
public void setControlContents(Control control, String text, int cursorPosition) { | |
if (text != null) { | |
super.setControlContents(control, text, cursorPosition); | |
} | |
} | |
}; | |
private Button operationButton; | |
private RunnableProposal fWSDLEditRunnableProposal; | |
public static final int SPLIT_POINT = 55; | |
public static final int SPLIT_POINT_OFFSET = 3 * IDetailsAreaConstants.HSPACE; | |
private static final PartnerLink IGNORE_PARTNER_LINK = BPELFactory.eINSTANCE.createPartnerLink(); | |
private static final Operation IGNORE_OPERATION = WSDLFactory.eINSTANCE.createOperation(); | |
/** | |
* Stretch this section to maximum use of space | |
*/ | |
@Override | |
public boolean shouldUseExtraSpace () { | |
return true; | |
} | |
private static List<String> getVariablesNamesInUse(EObject parent) { | |
List<String> variablesNames = new ArrayList<String>(); | |
// https://issues.jboss.org/browse/JBIDE-8042 | |
// grab all visible variables, not just Process and Scope variables | |
// NOTE: this includes implicit variables defined in ForEach | |
Variable[] variables = BPELUtil.getVisibleVariables((EObject)parent); | |
for (Variable var : variables) { | |
variablesNames.add(var.getName()); | |
} | |
return variablesNames; | |
} | |
/** | |
* The same as labelWordFor(), except these strings don't contain mnemonics! | |
* @param direction | |
* @return the label | |
*/ | |
private String plainLabelWordFor (EObject input, int direction) { | |
if (isInvoke || !(input instanceof Reply)) { | |
return (direction == ModelHelper.OUTGOING || direction == ModelHelper.NOT_SPECIFIED)? Messages.InvokeImplDetails_Request_3_Plain:Messages.InvokeImplDetails_Response_4_Plain; | |
} | |
return (direction == ModelHelper.OUTGOING || direction == ModelHelper.NOT_SPECIFIED)? Messages.InvokeImplDetails_Response_4_Plain:Messages.InvokeImplDetails_Request_3_Plain; | |
} | |
@Override | |
protected MultiObjectAdapter[] createAdapters() { | |
return new MultiObjectAdapter[] { | |
/* model object */ | |
new MultiObjectAdapter() { | |
@Override | |
public void notify(Notification n) { | |
try { | |
Object input = getInput(); | |
boolean upp = false; | |
// TODO: can the calls to updatePortTypeWidgets() be improved? | |
if (ModelHelper.isPartnerAffected(input, n)) { | |
upp = true; | |
updatePartnerWidgets(); | |
updatePortTypeWidgets(); | |
updateOperationWidgets(); | |
updateMessageOrElementWidgets(); // https://issues.jboss.org/browse/JBIDE-8305 | |
updateFaultWidgets(); | |
} else if (ModelHelper.isOperationAffected(input, n)) { | |
upp = true; | |
updatePortTypeWidgets(); | |
updateOperationWidgets(); | |
updateMessageOrElementWidgets(); // https://issues.jboss.org/browse/JBIDE-8305 | |
updateFaultWidgets(); | |
} else { | |
updateFaultWidgets(); | |
} | |
// Update the response variable widgets, because if the operation | |
// is one-way, these widgets should be disabled. | |
rearrangeWidgets(); | |
if (replyTypeEnabled() && ModelHelper.isFaultNameAffected(input, n)) { | |
updateFaultWidgets(); | |
} | |
} catch (Exception e) { | |
BPELUIPlugin.log(e); | |
} | |
} | |
}, | |
}; | |
} | |
protected boolean replyTypeEnabled () { | |
if ((getInput() instanceof Reply) == false) { | |
return false; | |
} | |
return true; | |
} | |
private void doChildLayout() { | |
faultComposite.setVisible( replyTypeEnabled() ); | |
parentComposite.layout(true); | |
} | |
@Override | |
protected void basicSetInput(EObject input) { | |
super.basicSetInput(input); | |
rearrangeWidgets(); | |
updateQuickPickWidgets(); | |
updatePartnerWidgets(); | |
updatePortTypeWidgets(); | |
updateOperationWidgets(); | |
updateMessageOrElementWidgets(); // https://issues.jboss.org/browse/JBIDE-8305 | |
updateFaultWidgets(); | |
} | |
private void rearrangeWidgets() { | |
Object input = getInput(); | |
isInvoke = (input instanceof Invoke); | |
fPartnerRoleFilter.setRequireMyRole( !isInvoke ); | |
fPartnerRoleFilter.setRequirePartnerRole( isInvoke ); | |
doChildLayout(); | |
} | |
private Composite createPartnerWidgets(Composite top, Composite parent) { | |
FlatFormData data; | |
final Composite composite = createFlatFormComposite(parent); | |
data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
} else { | |
data.top = new FlatFormAttachment(top, IDetailsAreaConstants.VSPACE); | |
} | |
data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
data.right = new FlatFormAttachment(SPLIT_POINT, -SPLIT_POINT_OFFSET); | |
composite.setLayoutData(data); | |
partnerLabel = fWidgetFactory.createLabel(composite, Messages.InvokeImplDetails_Partner__10); | |
partnerName = fWidgetFactory.createText(composite, EMPTY_STRING, SWT.NONE); | |
partnerBrowseButton = fWidgetFactory.createButton(composite,EMPTY_STRING,SWT.ARROW | SWT.DOWN | SWT.RIGHT ); | |
// Content Assist for Partner Link | |
RunnableProposal proposal = new RunnableProposal() { | |
@Override | |
public String getLabel() { | |
return Messages.InvokeImplSection_0; | |
} | |
public void run() { | |
createPartnerLink ( BPELUtils.getProcess( getInput () ) , null ); | |
} | |
}; | |
RunnableProposal proposal2 = new RunnableProposal() { | |
@Override | |
public String getLabel() { | |
return Messages.InvokeImplSection_1; | |
} | |
public void run() { | |
createPartnerLink ( ModelHelper.getContainingScope( getInput()), null); | |
} | |
}; | |
RunnableProposal proposal3 = new RunnableProposal() { | |
@Override | |
public String getLabel() { | |
return Messages.InvokeImplSection_2; | |
} | |
public void run() { | |
CompoundCommand cmd = new CompoundCommand(); | |
cmd.getCommands().addAll( basicCommandList( getInput() , null, null )) ; | |
getCommandFramework().execute( cmd ); | |
} | |
}; | |
PartnerLinkContentProvider provider = new PartnerLinkContentProvider(); | |
ModelContentProposalProvider proposalProvider; | |
proposalProvider = new ModelContentProposalProvider( new ModelContentProposalProvider.ValueProvider () { | |
@Override | |
public Object value() { | |
return getInput(); | |
} | |
}, provider,fPartnerRoleFilter ); | |
proposalProvider.addProposalToEnd( new Separator () ); | |
proposalProvider.addProposalToEnd( proposal ); | |
proposalProvider.addProposalToEnd( proposal2 ); | |
proposalProvider.addProposalToEnd( proposal3 ); | |
proposalProvider.addProposalToEnd( getWSDLEdit() ); | |
final FieldAssistAdapter contentAssist = new FieldAssistAdapter ( | |
partnerName, | |
fTextContentAdapter, | |
proposalProvider, | |
null, | |
null, true ); | |
// | |
contentAssist.setLabelProvider( new ModelLabelProvider () ); | |
contentAssist.setPopupSize( new Point(300,100) ); | |
contentAssist.setFilterStyle(ContentProposalAdapter.FILTER_CUMULATIVE); | |
contentAssist.setProposalAcceptanceStyle( ContentProposalAdapter.PROPOSAL_REPLACE); | |
contentAssist.addContentProposalListener( proposal ); | |
contentAssist.addContentProposalListener( proposal2 ); | |
contentAssist.addContentProposalListener( proposal3 ); | |
contentAssist.addContentProposalListener( getWSDLEdit() ); | |
contentAssist.addContentProposalListener(new IContentProposalListener () { | |
public void proposalAccepted(IContentProposal chosenProposal) { | |
if (chosenProposal.getContent() == null) { | |
return ; | |
} | |
PartnerLink pl = null; | |
try { | |
pl = (PartnerLink) ((Adapter)chosenProposal).getTarget(); | |
} catch (Throwable t) { | |
return ; | |
} | |
CompoundCommand cmd = new CompoundCommand(); | |
cmd.getCommands().addAll( basicCommandList(getInput(),pl,null) ); | |
getCommandFramework().execute(cmd); | |
} | |
}); | |
// End of Content Assist for variable | |
partnerBrowseButton.addListener(SWT.Selection, new Listener() { | |
public void handleEvent(Event event) { | |
contentAssist.openProposals(); | |
} | |
}); | |
partnerName.addListener(SWT.KeyDown, new Listener () { | |
public void handleEvent(Event event) { | |
if (event.keyCode == SWT.CR) { | |
findAndSetOrCreatePartnerLink( partnerName.getText() ); | |
} | |
} | |
}); | |
// End of content assist for partner link | |
data = new FlatFormData(); | |
data.right = new FlatFormAttachment(100, 0); | |
data.top = new FlatFormAttachment(partnerName,+2,SWT.TOP); | |
data.bottom = new FlatFormAttachment(partnerName,-2,SWT.BOTTOM); | |
partnerBrowseButton.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(partnerLabel, STANDARD_LABEL_WIDTH_SM)); | |
data.right = new FlatFormAttachment(partnerBrowseButton, 0); | |
partnerName.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(partnerName, -IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(partnerName, 0, SWT.CENTER); | |
partnerLabel.setLayoutData(data); | |
partnerBrowseButton.addListener(SWT.Selection, new Listener() { | |
public void handleEvent(Event event) { | |
contentAssist.openProposals(); | |
} | |
}); | |
return composite; | |
} | |
// private void browseForPartnerLink () { | |
// | |
// Shell shell = partnerLabel.getShell(); | |
// EObject model = getInput(); | |
// PartnerLinkSelectorDialog dialog = new PartnerLinkSelectorDialog(shell, model); | |
// if (dialog.open() == Window.OK) { | |
// PartnerLink partner = dialog.getPartnerLink(); | |
// | |
// List<Command> cmds = basicCommandList( model , null, null ); | |
// | |
// SetCommand cmd = (SetCommand) ListMap.Find(cmds, new ListMap.Visitor() { | |
// public Object visit(Object obj) { | |
// return (obj instanceof SetPartnerLinkCommand ? obj : ListMap.IGNORE ); | |
// } | |
// }); | |
// | |
// cmd.setNewValue( partner ); | |
// CompoundCommand ccmd = new CompoundCommand(); | |
// ccmd.getCommands().addAll(cmds); | |
// lastChangeContext = PARTNER_CONTEXT; | |
// getCommandFramework().execute(wrapInShowContextCommand(ccmd)); | |
// } | |
// } | |
private Composite createPortTypeWidgets (Composite top, Composite parent) { | |
FlatFormData data; | |
if (true) { | |
return top ; | |
} | |
final Composite composite = createFlatFormComposite(parent); | |
data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
} else { | |
data.top = new FlatFormAttachment(top, IDetailsAreaConstants.VSPACE); | |
} | |
data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
data.right = new FlatFormAttachment(SPLIT_POINT, -SPLIT_POINT_OFFSET); | |
composite.setLayoutData(data); | |
interfaceLabel = fWidgetFactory.createLabel(composite, Messages.InvokeImplSection_3); | |
interfaceName = fWidgetFactory.createHyperlink(composite, EMPTY_STRING, SWT.NONE); | |
interfaceName.addHyperlinkListener(new HyperlinkAdapter() { | |
@Override | |
public void linkActivated(HyperlinkEvent e) { | |
PortType pt = ModelHelper.getPortType(getInput()); | |
if (pt != null) { | |
BPELUtil.openEditor( pt, getBPELEditor() ); | |
} | |
} | |
}); | |
interfaceName.setToolTipText(Messages.InvokeImplSection_4); | |
data = new FlatFormData(); | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(interfaceLabel, STANDARD_LABEL_WIDTH_SM)); | |
data.right = new FlatFormAttachment(100,0); | |
interfaceName.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(interfaceName, 0); | |
data.top = new FlatFormAttachment(interfaceName, 0, SWT.CENTER); | |
interfaceLabel.setLayoutData(data); | |
return composite; | |
} | |
private Composite createOperationWidgets(Composite top, Composite parent) { | |
FlatFormData data; | |
final Composite composite = createFlatFormComposite(parent); | |
data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
} else { | |
data.top = new FlatFormAttachment(top, IDetailsAreaConstants.VSPACE ); | |
} | |
data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
data.right = new FlatFormAttachment(SPLIT_POINT, -SPLIT_POINT_OFFSET); | |
composite.setLayoutData(data); | |
operationLabel = fWidgetFactory.createLabel(composite, Messages.InvokeImplDetails_Operation__19); | |
operationText = fWidgetFactory.createText(composite,EMPTY_STRING,SWT.NONE); | |
operationButton = fWidgetFactory.createButton(composite,EMPTY_STRING,SWT.ARROW|SWT.CENTER|SWT.DOWN); | |
// Provide Content Assist for the variables | |
OperationContentProvider provider = new OperationContentProvider(); | |
ModelContentProposalProvider proposalProvider; | |
proposalProvider = new ModelContentProposalProvider( new ModelContentProposalProvider.ValueProvider () { | |
@Override | |
public Object value() { | |
return getInput(); | |
} | |
}, provider); | |
proposalProvider.addProposalToEnd( new Separator () ); | |
proposalProvider.addProposalToEnd( getWSDLEdit() ); | |
final FieldAssistAdapter contentAssist = new FieldAssistAdapter ( | |
operationText, | |
fTextContentAdapter, | |
proposalProvider, | |
null, | |
null, true ); | |
// | |
contentAssist.setLabelProvider( new ModelLabelProvider () ); | |
contentAssist.setPopupSize( new Point(300,100) ); | |
contentAssist.setFilterStyle(ContentProposalAdapter.FILTER_CUMULATIVE); | |
contentAssist.setProposalAcceptanceStyle( ContentProposalAdapter.PROPOSAL_REPLACE); | |
contentAssist.addContentProposalListener( getWSDLEdit() ); | |
contentAssist.addContentProposalListener(new IContentProposalListener () { | |
public void proposalAccepted(IContentProposal chosenProposal) { | |
if (chosenProposal.getContent() == null) { | |
return ; | |
} | |
Operation oper = null; | |
try { | |
oper = (Operation) ((Adapter)chosenProposal).getTarget(); | |
} catch (Throwable t) { | |
return ; | |
} | |
List<Command> list = basicCommandList(getInput(), IGNORE_PARTNER_LINK , oper ); | |
CompoundCommand cmd = new CompoundCommand(); | |
cmd.getCommands().addAll (list); | |
getCommandFramework().execute( cmd ); | |
} | |
}); | |
// End of Content Assist for variable | |
operationButton.addListener(SWT.Selection, new Listener() { | |
public void handleEvent(Event event) { | |
contentAssist.openProposals(); | |
} | |
}); | |
operationText.addListener(SWT.KeyDown, new Listener () { | |
public void handleEvent(Event event) { | |
if (event.keyCode == SWT.CR) { | |
findAndSetOperation ( operationText.getText() ); | |
} | |
} | |
}); | |
// end of content assist | |
data = new FlatFormData(); | |
data.right = new FlatFormAttachment(100,0); | |
data.top = new FlatFormAttachment(operationText,+2,SWT.TOP); | |
data.bottom = new FlatFormAttachment(operationText,-2,SWT.BOTTOM); | |
operationButton.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(operationLabel, STANDARD_LABEL_WIDTH_SM)); | |
data.right = new FlatFormAttachment(operationButton, 0); | |
operationText.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(operationText, -IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(operationText, 0, SWT.CENTER); | |
operationLabel.setLayoutData(data); | |
// operationViewer.addFilter(AddNullFilter.getInstance()); | |
// operationViewer.setLabelProvider(new ModelLabelProvider()); | |
// operationViewer.setContentProvider(new OperationContentProvider()); | |
// operationViewer.setSorter(ModelViewerSorter.getInstance()); | |
// operationViewer.addSelectionChangedListener(new ISelectionChangedListener() { | |
// public void selectionChanged(SelectionChangedEvent event) { | |
// IStructuredSelection sel = (IStructuredSelection)operationViewer.getSelection(); | |
// // TODO: if changing to a one-way operation, clear the response variable (if any) | |
// PartnerLink partnerLink = ModelHelper.getPartnerLink(getInput()); | |
// | |
// CompoundCommand cmd = new CompoundCommand(); | |
// Command child = null; | |
// PortType portType = getEffectivePortType(partnerLink); | |
// Operation op = (Operation)sel.getFirstElement(); | |
// | |
// if (op == null) portType = null; | |
// | |
// child = new SetPortTypeCommand(getInput(), portType); | |
// if (child.canExecute()) cmd.add(child); | |
// | |
// child = new SetOperationCommand(getInput(), op); | |
// if (child.canExecute()) { | |
// if (replyTypeEnabled()) { | |
// Command setFaultCommand = new SetWSDLFaultCommand(getInput(), null); | |
// if (setFaultCommand.canExecute()) cmd.add(setFaultCommand); | |
// } | |
// cmd.add(child); cmd.setLabel(child.getLabel()); | |
// } | |
// | |
// if (getInput() instanceof OnEvent) { | |
// child = new SetOnEventVariableTypeCommand((OnEvent)getInput()); | |
// cmd.add(child); | |
// } | |
// blockOperationUpdates = true; | |
// lastChangeContext = OPERATION_CONTEXT; | |
// try { | |
// getCommandFramework().execute(wrapInShowContextCommand(cmd)); | |
// } finally { | |
// blockOperationUpdates = false; | |
// } | |
// } | |
// }); | |
return composite; | |
} | |
// https://issues.jboss.org/browse/JBIDE-8305 | |
private Composite createMessageOrElementWidgets(Composite top, Composite parent) { | |
FlatFormData data; | |
final Composite composite = createFlatFormComposite(parent); | |
data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
} else { | |
data.top = new FlatFormAttachment(top, IDetailsAreaConstants.VSPACE ); | |
} | |
data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
data.right = new FlatFormAttachment(SPLIT_POINT, -SPLIT_POINT_OFFSET); | |
composite.setLayoutData(data); | |
messageOrElementLabel = fWidgetFactory.createLabel(composite, Messages.InvokeImplDetails_MessageTypeOrElement); | |
messageOrElementText = fWidgetFactory.createText(composite,EMPTY_STRING,SWT.NONE); | |
messageOrElementText.setEditable(false); // read-only text for visual feedback of Quick Pick tree selection | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(messageOrElementLabel, STANDARD_LABEL_WIDTH_SM)); | |
data.right = new FlatFormAttachment(operationButton, 0); | |
messageOrElementText.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(messageOrElementText, -IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(messageOrElementText, 0, SWT.CENTER); | |
messageOrElementLabel.setLayoutData(data); | |
return composite; | |
} | |
// protected Composite createInputVariableWidgets(Composite top, Composite parent) { | |
// FlatFormData data; | |
// | |
// final Composite composite = inputVariableComposite = createFlatFormComposite(parent); | |
// data = new FlatFormData(); | |
// if (top == null) { | |
// data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
// } else { | |
// data.top = new FlatFormAttachment(top, IDetailsAreaConstants.VSPACE); | |
// } | |
// data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
// data.right = new FlatFormAttachment(SPLIT_POINT, -SPLIT_POINT_OFFSET); | |
// composite.setLayoutData(data); | |
// | |
// inputVariableLabel = fWidgetFactory.createLabel(composite, Messages.InvokeImplSection_7); | |
// inputVariableText = fWidgetFactory.createText(composite,EMPTY_STRING); | |
// inputVariableButton = fWidgetFactory.createButton(composite, EMPTY_STRING, SWT.ARROW|SWT.DOWN|SWT.CENTER); | |
// | |
// // Provide Content Assist for the variables | |
// // Content assist on partnerName | |
// RunnableProposal proposal = new RunnableProposal() { | |
// | |
// @Override | |
// public String getLabel() { | |
// return Messages.InvokeImplSection_10; | |
// } | |
// public void run() { | |
// createVariable ( | |
// ModelHelper.getProcess( getInput () ), | |
// null, | |
// isInvoke ? ModelHelper.OUTGOING : ModelHelper.INCOMING); | |
// } | |
// }; | |
// | |
// RunnableProposal proposal2 = new RunnableProposal() { | |
// | |
// @Override | |
// public String getLabel() { | |
// return Messages.InvokeImplSection_11; | |
// } | |
// public void run() { | |
// createVariable ( | |
// getInput (), | |
// null, | |
// isInvoke ? ModelHelper.OUTGOING : ModelHelper.INCOMING); | |
// } | |
// }; | |
// | |
// RunnableProposal proposal3 = new RunnableProposal() { | |
// @Override | |
// public String getLabel() { | |
// return Messages.InvokeImplSection_12; | |
// } | |
// public void run() { | |
// int direction = isInvoke ? ModelHelper.OUTGOING : ModelHelper.INCOMING; | |
// getCommandFramework().execute( new SetVariableCommand(getInput(),null,direction) ); | |
// } | |
// }; | |
// | |
// VariableContentProvider provider = new VariableContentProvider(); | |
// ModelContentProposalProvider proposalProvider; | |
// proposalProvider = new ModelContentProposalProvider( new ModelContentProposalProvider.ValueProvider () { | |
// @Override | |
// public Object value() { | |
// return getInput(); | |
// } | |
// }, provider,fInputVariableFilter); | |
// | |
// proposalProvider.addProposalToEnd( new Separator () ); | |
// proposalProvider.addProposalToEnd( proposal ); | |
// proposalProvider.addProposalToEnd( proposal2 ); | |
// proposalProvider.addProposalToEnd( proposal3 ); | |
// | |
// final FieldAssistAdapter contentAssist = new FieldAssistAdapter ( | |
// inputVariableText, | |
// fTextContentAdapter, | |
// proposalProvider, | |
// null, | |
// null ); | |
// // | |
// contentAssist.setLabelProvider( new ModelLabelProvider () ); | |
// contentAssist.setPopupSize( new Point(300,100) ); | |
// contentAssist.setFilterStyle(ContentProposalAdapter.FILTER_CUMULATIVE); | |
// contentAssist.setProposalAcceptanceStyle( ContentProposalAdapter.PROPOSAL_REPLACE); | |
// contentAssist.addContentProposalListener( proposal ); | |
// contentAssist.addContentProposalListener( proposal2 ); | |
// contentAssist.addContentProposalListener( proposal3 ); | |
// contentAssist.addContentProposalListener(new IContentProposalListener () { | |
// | |
// public void proposalAccepted(IContentProposal chosenProposal) { | |
// if (chosenProposal.getContent() == null) { | |
// return ; | |
// } | |
// Variable variable = null; | |
// try { | |
// variable = (Variable) ((Adapter)chosenProposal).getTarget(); | |
// } catch (Throwable t) { | |
// return ; | |
// } | |
// SetVariableCommand cmd = new SetVariableCommand(getInput(),variable); | |
// getCommandFramework().execute( cmd ); | |
// } | |
// }); | |
// | |
// // End of Content Assist for variable | |
// inputVariableButton.addListener(SWT.Selection, new Listener() { | |
// public void handleEvent(Event event) { | |
// contentAssist.openProposals(); | |
// } | |
// }); | |
// | |
// inputVariableText.addListener(SWT.KeyDown, new Listener () { | |
// public void handleEvent(Event event) { | |
// if (event.keyCode == SWT.CR) { | |
// findAndSetOrCreateVariable( inputVariableText.getText(), | |
// isInvoke ? ModelHelper.OUTGOING : ModelHelper.INCOMING ); | |
// } | |
// } | |
// }); | |
// | |
// data = new FlatFormData(); | |
// data.right = new FlatFormAttachment(100,0); | |
// data.top = new FlatFormAttachment(inputVariableText,+2,SWT.TOP); | |
// data.bottom = new FlatFormAttachment(inputVariableText,-2,SWT.BOTTOM); | |
// inputVariableButton.setLayoutData(data); | |
// | |
// data = new FlatFormData(); | |
// data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(operationLabel, STANDARD_LABEL_WIDTH_SM)); | |
// data.right = new FlatFormAttachment(inputVariableButton, 0); | |
// inputVariableText.setLayoutData(data); | |
// | |
// data = new FlatFormData(); | |
// data.left = new FlatFormAttachment(0, 0); | |
// data.right = new FlatFormAttachment(inputVariableText, -IDetailsAreaConstants.HSPACE); | |
// data.top = new FlatFormAttachment(inputVariableText, 0, SWT.CENTER); | |
// inputVariableLabel.setLayoutData(data); | |
// | |
// return composite; | |
// | |
// | |
// } | |
// /** | |
// * The output variable widgets are only pertaining to Invoke activity, if there is | |
// * an output message on the partner link | |
// * | |
// * @param top | |
// * @param parent | |
// * @return the output variable composite | |
// */ | |
// | |
// protected Composite createOutputVariableComposite (Composite top, Composite parent) { | |
// FlatFormData data; | |
// | |
// final Composite composite = outputVariableComposite = createFlatFormComposite(parent); | |
// | |
// data = new FlatFormData(); | |
// if (top == null) { | |
// data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
// } else { | |
// data.top = new FlatFormAttachment( top, IDetailsAreaConstants.VSPACE); | |
// } | |
// data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
// data.right = new FlatFormAttachment(SPLIT_POINT, -SPLIT_POINT_OFFSET); | |
// composite.setLayoutData(data); | |
// | |
// outputVariableLabel = fWidgetFactory.createLabel(composite, Messages.InvokeImplSection_13); | |
// outputVariableText = fWidgetFactory.createText(composite,EMPTY_STRING); | |
// outputVariableButton = fWidgetFactory.createButton(composite, EMPTY_STRING, SWT.ARROW|SWT.DOWN|SWT.CENTER); | |
// | |
// // Provide Content Assist for the operation | |
// | |
// // Runnable proposal. | |
// RunnableProposal proposal = new RunnableProposal() { | |
// | |
// @Override | |
// public String getLabel() { | |
// return Messages.InvokeImplSection_16; | |
// } | |
// public void run() { | |
// createVariable ( ModelHelper.getProcess( getInput () ),null,ModelHelper.INCOMING ); | |
// } | |
// }; | |
// | |
// RunnableProposal proposal2 = new RunnableProposal() { | |
// @Override | |
// public String getLabel() { | |
// return "Create Local Output Variable"; //$NON-NLS-1$ | |
// } | |
// public void run() { | |
// createVariable (getInput (),null,ModelHelper.INCOMING); | |
// } | |
// }; | |
// | |
// | |
// RunnableProposal proposal3 = new RunnableProposal() { | |
// @Override | |
// public String getLabel() { | |
// return "Clear Output Variable"; //$NON-NLS-1$ | |
// } | |
// public void run() { | |
// getCommandFramework().execute( new SetVariableCommand(getInput(),null,ModelHelper.INCOMING) ); | |
// } | |
// }; | |
// | |
// VariableContentProvider provider = new VariableContentProvider(); | |
// ModelContentProposalProvider proposalProvider; | |
// proposalProvider = new ModelContentProposalProvider( new ModelContentProposalProvider.ValueProvider () { | |
// @Override | |
// public Object value() { | |
// return getInput(); | |
// } | |
// }, provider,fOutputVariableFilter); | |
// | |
// proposalProvider.addProposalToEnd( new Separator () ); | |
// proposalProvider.addProposalToEnd( proposal ); | |
// proposalProvider.addProposalToEnd( proposal2 ); | |
// proposalProvider.addProposalToEnd( proposal3 ); | |
// | |
// final FieldAssistAdapter contentAssist = new FieldAssistAdapter ( | |
// outputVariableText, | |
// fTextContentAdapter, | |
// proposalProvider, | |
// null, | |
// null ); | |
// // | |
// contentAssist.setLabelProvider( new ModelLabelProvider () ); | |
// contentAssist.setPopupSize( new Point(300,100) ); | |
// contentAssist.setFilterStyle(ContentProposalAdapter.FILTER_CUMULATIVE); | |
// contentAssist.setProposalAcceptanceStyle( ContentProposalAdapter.PROPOSAL_REPLACE ); | |
// contentAssist.addContentProposalListener( proposal ); | |
// contentAssist.addContentProposalListener( proposal2 ); | |
// contentAssist.addContentProposalListener( proposal3 ); | |
// contentAssist.addContentProposalListener(new IContentProposalListener () { | |
// | |
// public void proposalAccepted (IContentProposal chosenProposal) { | |
// if (chosenProposal.getContent() == null) { | |
// return ; | |
// } | |
// Variable variable = null; | |
// try { | |
// variable = (Variable) ((Adapter)chosenProposal).getTarget(); | |
// } catch (Throwable t) { | |
// return ; | |
// } | |
// SetVariableCommand cmd = new SetVariableCommand(getInput(),variable, ModelHelper.INCOMING ); | |
// getCommandFramework().execute( cmd ); | |
// } | |
// }); | |
// | |
// // End of Content Assist for operation | |
// | |
// outputVariableButton.addListener(SWT.Selection, new Listener() { | |
// public void handleEvent(Event event) { | |
// contentAssist.openProposals(); | |
// } | |
// }); | |
// outputVariableText.addListener(SWT.KeyDown, new Listener () { | |
// public void handleEvent(Event event) { | |
// if (event.keyCode == SWT.CR) { | |
// findAndSetOrCreateVariable( outputVariableText.getText(),ModelHelper.INCOMING ); | |
// } | |
// } | |
// }); | |
// | |
// data = new FlatFormData(); | |
// data.right = new FlatFormAttachment(100,0); | |
// data.top = new FlatFormAttachment(outputVariableText,+2,SWT.TOP); | |
// data.bottom = new FlatFormAttachment(outputVariableText,-2,SWT.BOTTOM); | |
// outputVariableButton.setLayoutData(data); | |
// | |
// data = new FlatFormData(); | |
// data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(operationLabel, STANDARD_LABEL_WIDTH_SM)); | |
// data.right = new FlatFormAttachment(outputVariableButton,0); | |
// outputVariableText.setLayoutData(data); | |
// | |
// data = new FlatFormData(); | |
// data.left = new FlatFormAttachment(0, 0); | |
// data.right = new FlatFormAttachment(outputVariableText, -IDetailsAreaConstants.HSPACE); | |
// data.top = new FlatFormAttachment(outputVariableText, 0, SWT.CENTER); | |
// outputVariableLabel.setLayoutData(data); | |
// | |
// return composite; | |
// } | |
// private String getVariableDialogTitle(EObject target, int direction) { | |
// if (fModelObject instanceof Invoke) { | |
// return (direction == ModelHelper.OUTGOING) ? | |
// Messages.InvokeImplSection_Select_Request_Variable_1 : | |
// Messages.InvokeImplSection_Select_Response_Variable_1; | |
// } | |
// return (direction == ModelHelper.OUTGOING) ? | |
// Messages.InvokeImplSection_Select_Response_Variable_1 : | |
// Messages.InvokeImplSection_Select_Request_Variable_1; | |
// } | |
private Composite createFaultComposite(Composite top, Composite parent) { | |
FlatFormData data; | |
final Composite composite = faultComposite = createFlatFormComposite(parent); | |
data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
} else { | |
data.top = new FlatFormAttachment(top, IDetailsAreaConstants.VSPACE); | |
} | |
data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
data.right = new FlatFormAttachment(InvokeImplSection.SPLIT_POINT, | |
-InvokeImplSection.SPLIT_POINT_OFFSET); | |
composite.setLayoutData(data); | |
faultLabel = fWidgetFactory.createLabel(composite, | |
Messages.InvokeImplDetails_Fault_Name__25); | |
faultText = fWidgetFactory.createText(composite, EMPTY_STRING); | |
faultButton = fWidgetFactory.createButton(composite, EMPTY_STRING, | |
SWT.ARROW | SWT.DOWN | SWT.CENTER); | |
// Provide Content Assist for the operation | |
WSDLFaultContentProvider provider = new WSDLFaultContentProvider(); | |
ModelContentProposalProvider proposalProvider; | |
proposalProvider = new ModelContentProposalProvider( | |
new ModelContentProposalProvider.ValueProvider() { | |
@Override | |
public Object value() { | |
return ModelHelper.getOperation(getInput()); | |
} | |
}, provider); | |
RunnableProposal proposalClearFault = new RunnableProposal() { | |
@Override | |
public String getLabel() { | |
return Messages.InvokeImplSection_25; | |
} | |
public void run() { | |
CompoundCommand cmd = new CompoundCommand(); | |
cmd.add(new SetWSDLFaultCommand(getInput(), null)); | |
getCommandFramework().execute( cmd ); | |
} | |
}; | |
proposalProvider.addProposalToEnd(new Separator()); | |
proposalProvider.addProposalToEnd(proposalClearFault); | |
final FieldAssistAdapter contentAssist = new FieldAssistAdapter( | |
faultText, fTextContentAdapter, proposalProvider, null, null, true); | |
// | |
contentAssist.setLabelProvider(new ModelLabelProvider()); | |
contentAssist.setPopupSize(new Point(300, 100)); | |
contentAssist.setFilterStyle(ContentProposalAdapter.FILTER_CUMULATIVE); | |
contentAssist | |
.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); | |
contentAssist.addContentProposalListener(new IContentProposalListener() { | |
public void proposalAccepted(IContentProposal chosenProposal) { | |
if (chosenProposal.getContent() == null) { | |
return; | |
} | |
Fault fault = null; | |
try { | |
fault = (Fault) ((Adapter) chosenProposal) | |
.getTarget(); | |
} catch (Throwable t) { | |
return; | |
} | |
CompoundCommand cmd = new CompoundCommand(); | |
cmd.add(new SetWSDLFaultCommand(getInput(), fault)); | |
getCommandFramework().execute( cmd ); | |
} | |
}); | |
contentAssist.addContentProposalListener( proposalClearFault ); | |
// End of Content Assist for fault | |
faultButton.addListener(SWT.Selection, new Listener() { | |
public void handleEvent(Event event) { | |
contentAssist.openProposals(); | |
} | |
}); | |
data = new FlatFormData(); | |
data.right = new FlatFormAttachment(100, 0); | |
data.top = new FlatFormAttachment(faultText, +2, SWT.TOP); | |
data.bottom = new FlatFormAttachment(faultText, -2, SWT.BOTTOM); | |
faultButton.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth( | |
operationLabel, STANDARD_LABEL_WIDTH_SM)); | |
data.right = new FlatFormAttachment(faultButton, 0); | |
faultText.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(faultText, | |
-IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(faultText, 0, SWT.CENTER); | |
faultLabel.setLayoutData(data); | |
return composite; | |
} | |
// protected Composite createFaultNameWidgets(Composite top, Composite parent) { | |
// FlatFormData data; | |
// | |
// Composite composite = faultNameComposite = createFlatFormComposite(parent); | |
// data = new FlatFormData(); | |
// if (top == null) { | |
// data.top = new FlatFormAttachment (0,IDetailsAreaConstants.VSPACE); | |
// } else { | |
// data.top = new FlatFormAttachment (top,IDetailsAreaConstants.VSPACE); | |
// } | |
// data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
// data.right = new FlatFormAttachment(SPLIT_POINT, -SPLIT_POINT_OFFSET); | |
// composite.setLayoutData(data); | |
// | |
// Label faultNameLabel = fWidgetFactory.createLabel(composite, Messages.InvokeImplDetails_Fault_Name__25); | |
// | |
// faultNameCombo = fWidgetFactory.createCCombo(composite); | |
// data = new FlatFormData(); | |
// data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(faultNameLabel, STANDARD_LABEL_WIDTH_SM)); | |
// data.right = new FlatFormAttachment(100, -SHORT_BUTTON_WIDTH-IDetailsAreaConstants.HSPACE); | |
// faultNameCombo.setLayoutData(data); | |
// | |
// faultNameViewer = new CComboViewer(faultNameCombo); | |
// faultNameViewer.setLabelProvider(new ModelLabelProvider()); | |
// faultNameViewer.setContentProvider(new WSDLFaultContentProvider()); | |
// faultNameViewer.setSorter(ModelViewerSorter.getInstance()); | |
// faultNameViewer.addFilter(AddNullFilter.getInstance()); | |
// faultNameViewer.addSelectionChangedListener(new ISelectionChangedListener() { | |
// public void selectionChanged(SelectionChangedEvent event) { | |
// IStructuredSelection sel = (IStructuredSelection)faultNameViewer.getSelection(); | |
// Fault fault = (Fault)sel.getFirstElement(); | |
// CompoundCommand cmd = new CompoundCommand(); | |
// cmd.add(new SetWSDLFaultCommand(getInput(), fault)); | |
// /* WDG: removed command */ | |
// lastChangeContext = FAULTNAME_CONTEXT; | |
// getCommandFramework().execute(wrapInShowContextCommand(cmd)); | |
// } | |
// }); | |
// | |
// data = new FlatFormData(); | |
// data.left = new FlatFormAttachment(0, 0); | |
// data.right = new FlatFormAttachment(faultNameCombo, -IDetailsAreaConstants.HSPACE); | |
// data.top = new FlatFormAttachment(faultNameCombo, 0, SWT.CENTER); | |
// faultNameLabel.setLayoutData(data); | |
// | |
// return composite; | |
// } | |
private Composite createQuickPick (Composite top, Composite parent) | |
{ | |
FlatFormData data; | |
final Composite composite = createFlatFormComposite(parent); | |
data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
} else { | |
data.top = new FlatFormAttachment(top,IDetailsAreaConstants.VSPACE); | |
} | |
data.left = new FlatFormAttachment(SPLIT_POINT, SPLIT_POINT_OFFSET); | |
data.right = new FlatFormAttachment(100, -IDetailsAreaConstants.HSPACE); | |
data.bottom = new FlatFormAttachment(100,-IDetailsAreaConstants.VSPACE); | |
composite.setLayoutData(data); | |
quickPickLabel = fWidgetFactory.createLabel(composite, "Quick Pick:"); //$NON-NLS-1$ | |
// Tree viewer for variable structure ... | |
quickPickTree = fWidgetFactory.createTree(composite, SWT.NONE); | |
PartnerLinkTreeContentProvider treeContentProvider = new PartnerLinkTreeContentProvider(true); | |
quickPickTreeViewer = new TreeViewer(quickPickTree); | |
quickPickTreeViewer.setContentProvider(treeContentProvider); | |
quickPickTreeViewer.setLabelProvider(new ModelTreeLabelProvider()); | |
quickPickTreeViewer.addFilter( fPartnerRoleFilter ); | |
quickPickTreeViewer.setInput ( null ); | |
// https://issues.jboss.org/browse/JBIDE-8305 | |
// show tree down to message part level so that tree node highlight works | |
// when the tree viewer is constructed. | |
quickPickTreeViewer.setAutoExpandLevel(5); | |
// end tree viewer for variable structure | |
data = new FlatFormData(); | |
data.top = new FlatFormAttachment ( 0,0); | |
data.left = new FlatFormAttachment(0,0); | |
quickPickLabel.setLayoutData(data); | |
data = new FlatFormData(); | |
data.top = new FlatFormAttachment( quickPickLabel, IDetailsAreaConstants.VSPACE); | |
data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE); | |
data.right = new FlatFormAttachment(100,-IDetailsAreaConstants.HSPACE); | |
data.bottom = new FlatFormAttachment(100,-IDetailsAreaConstants.HSPACE); | |
quickPickTree.setLayoutData(data); | |
quickPickTreeViewer.addSelectionChangedListener( new ISelectionChangedListener () { | |
public void selectionChanged(SelectionChangedEvent event) { | |
// https://issues.jboss.org/browse/JBIDE-7861 | |
// ignore if the selection event came from updateQuickPickSelection() | |
if (ignoreQuickPickSelection) | |
ignoreQuickPickSelection = false; | |
else | |
quickPickSelectionChanged ( event.getSelection() ); | |
} | |
}); | |
return composite; | |
} | |
@Override | |
protected void createClient(Composite parent) { | |
Composite composite = parentComposite = createFlatFormComposite(parent); | |
Composite ref = createPartnerWidgets(null,composite); | |
ref = createPortTypeWidgets(ref, composite); | |
ref = createOperationWidgets(ref,composite); | |
ref = createMessageOrElementWidgets(ref,composite); // https://issues.jboss.org/browse/JBIDE-8305 | |
ref = createFaultComposite ( ref, composite ); | |
// This creates it on the top | |
ref = createQuickPick(null,composite); | |
PlatformUI.getWorkbench().getHelpSystem().setHelp( | |
parentComposite, IHelpContextIds.PROPERTY_PAGE_INVOKE_IMPLEMENTATION); | |
} | |
private void updatePartnerWidgets() { | |
PartnerLink partnerLink = ModelHelper.getPartnerLink(getInput()); | |
if (partnerLink == null) { | |
partnerName.setText(EMPTY_STRING); | |
} else { | |
ILabeledElement labeledElement = BPELUtil.adapt(partnerLink, ILabeledElement.class); | |
// https://issues.jboss.org/browse/JBIDE-7861 | |
partnerName.setText(labeledElement.getLabel(partnerLink)); | |
updateQuickPickSelection(partnerLink); | |
} | |
} | |
// protected void updateInputVariableWidgets () { | |
// | |
// if (isInvoke) { | |
// inputVariableLabel.setText(Messages.InvokeImplSection_22); | |
// } else { | |
// inputVariableLabel.setText(Messages.InvokeImplSection_23); | |
// } | |
// | |
// Variable inputVar = ModelHelper.getVariable(getInput(), | |
// isInvoke ? ModelHelper.OUTGOING : ModelHelper.INCOMING); | |
// | |
// if (inputVar != null) { | |
// inputVariableText.setText( inputVar.getName() ); | |
// } else { | |
// inputVariableText.setText(EMPTY_STRING); | |
// } | |
// | |
// //Figure out the type of the message. | |
// fInputVariableFilter.clear(); | |
// Object type = ModelHelper.getVariableType( getInput(), isInvoke ? ModelHelper.OUTGOING : ModelHelper.INCOMING ); | |
// if (type != null && type instanceof Message) { | |
// fInputVariableFilter.setType( (Message) type ); | |
// } | |
// } | |
// protected void updateOutputVariableWidgets () { | |
// | |
// outputVariableComposite.setVisible( isInvoke ); | |
// | |
// if ( !isInvoke ) { | |
// return ; | |
// } | |
// | |
// Variable outputVar = ModelHelper.getVariable(getInput(), ModelHelper.INCOMING); | |
// if (outputVar != null) { | |
// outputVariableText.setText(outputVar.getName()); | |
// } else { | |
// outputVariableText.setText(EMPTY_STRING); | |
// } | |
// | |
// //Figure out the type of the message. | |
// fOutputVariableFilter.clear(); | |
// Object type = ModelHelper.getVariableType( getInput(), ModelHelper.INCOMING ); | |
// if (type != null) { | |
// if (type instanceof Message) { | |
// fOutputVariableFilter.setType( (Message) type ); | |
// } | |
// } | |
// } | |
// TODO: move these to ModelHelper? | |
private PortType getEffectivePortType (PartnerLink partnerLink) { | |
if (partnerLink != null) { | |
Role role = isInvoke? partnerLink.getPartnerRole() : partnerLink.getMyRole(); | |
return ModelHelper.getRolePortType(role); | |
} | |
return null; | |
} | |
private void updateQuickPickWidgets () { | |
fPartnerRoleFilter.setRequireMyRole( !isInvoke ); | |
fPartnerRoleFilter.setRequirePartnerRole( isInvoke ); | |
Object myInput = getInput(); | |
if ( myInput != quickPickTreeViewer.getInput() ) { | |
quickPickTreeViewer.setInput( myInput ); | |
if (myInput != null) { | |
quickPickTree.getVerticalBar().setSelection(0); | |
} | |
} | |
} | |
// https://issues.jboss.org/browse/JBIDE-7861 | |
// update the Quick Pick tree with currently selected model object | |
private void updateQuickPickSelection(Object model) { | |
ignoreQuickPickSelection = true; | |
TreeItem[] items = quickPickTree.getItems(); | |
for (int i=0; i<items.length; ++i) { | |
if ( updateQuickPickSelection(model, items[i])) | |
break; | |
} | |
} | |
private boolean updateQuickPickSelection(Object model, TreeItem item) | |
{ | |
Object data = item.getData(); | |
if ( data instanceof TreeNode ) { | |
Object obj = ((TreeNode)data).getModelObject(); | |
if (obj instanceof PartnerLink) { | |
PartnerLink partnerLink = ModelHelper.getPartnerLink(getInput()); | |
if (obj!=partnerLink) | |
return false; | |
} | |
// https://issues.jboss.org/browse/JBIDE-8305 | |
else if (obj instanceof Input) { | |
obj = ModelHelper.getMessageType(obj); | |
} | |
else if (obj instanceof Part) { | |
obj = ModelHelper.getVariableTypeFrom(obj); | |
} | |
if (model==obj) { | |
quickPickTree.setSelection(item); | |
return true; | |
} | |
TreeItem[] items = item.getItems(); | |
for (int i=0; i<items.length; ++i) { | |
if ( updateQuickPickSelection(model, items[i])) | |
return true;; | |
} | |
} | |
return false; | |
} | |
private void updatePortTypeWidgets() { | |
if (interfaceName == null) { | |
return ; | |
} | |
PartnerLink partnerLink = ModelHelper.getPartnerLink(getInput()); | |
PortType portType = getEffectivePortType(partnerLink); | |
if (portType == null) { | |
interfaceName.setText(Messages.InvokeImplSection_None_1); | |
interfaceName.setEnabled(false); | |
} else { | |
ILabeledElement labeledElement = BPELUtil.adapt(portType, ILabeledElement.class); | |
interfaceName.setText(labeledElement.getLabel(portType)); | |
interfaceName.setEnabled(true); | |
} | |
} | |
private void updateOperationWidgets() { | |
Operation operation = ModelHelper.getOperation(getInput()); | |
if (operation != null) { | |
operationText.setText( operation.getName() ); | |
// https://issues.jboss.org/browse/JBIDE-7861 | |
updateQuickPickSelection(operation); | |
} else { | |
operationText.setText ( EMPTY_STRING ); | |
} | |
if (getInput() instanceof OnEvent) { | |
// https://issues.jboss.org/browse/JBIDE-8305 | |
// show the message type or message part in the quick pick tree | |
OnEvent onEvent = (OnEvent)getInput(); | |
Message message = onEvent.getMessageType(); | |
if (message!=null) { | |
updateQuickPickSelection(message); | |
} | |
else { | |
XSDElementDeclaration element = onEvent.getXSDElement(); | |
if (element!=null) | |
updateQuickPickSelection(element); | |
} | |
} | |
} | |
// https://issues.jboss.org/browse/JBIDE-8305 | |
private void updateMessageOrElementWidgets() { | |
boolean visible = (getInput() instanceof OnEvent); | |
if (visible) { | |
OnEvent onEvent = (OnEvent)getInput(); | |
String text = ""; | |
String label = Messages.InvokeImplDetails_MessageTypeOrElement; | |
if (onEvent.getVariable()!=null) { | |
Message message = onEvent.getMessageType(); | |
if (message!=null) { | |
text = message.getQName().getLocalPart(); | |
label = Messages.InvokeImplDetails_MessageType; | |
} | |
else { | |
XSDElementDeclaration element = onEvent.getXSDElement(); | |
if (element!=null) { | |
text = element.getName(); | |
label = Messages.InvokeImplDetails_Element; | |
} | |
} | |
} | |
messageOrElementText.setText(text); | |
messageOrElementLabel.setText(label); | |
} | |
messageOrElementLabel.setVisible(visible); | |
messageOrElementText.setVisible(visible); | |
} | |
/** | |
* replyFaultEnabled() Checks if the active activity is a reply activity and | |
* has a fault name | |
* | |
* @return - true When the active activity is a reply activity and has a | |
* fault set. | |
* - false When the active activity is no reply activity. | |
* When the active activity is a reply activity and the fault is | |
* set. | |
*/ | |
protected boolean replyFaultEnabled() { | |
if (isInvoke) | |
return false; | |
if (!(getInput() instanceof Reply)) | |
return false; | |
boolean faultEnabled = (ModelHelper.getFaultName(getInput()) != null); | |
return faultEnabled; | |
} | |
protected void updateFaultWidgets () { | |
boolean faultEnabled = replyFaultEnabled(); | |
if (faultEnabled) { | |
Fault fault = ModelHelper.getWSDLFault(getInput()); | |
if (fault != null) { | |
faultText.setText( fault.getName() ); | |
} else { | |
faultText.setText ( EMPTY_STRING ); | |
} | |
} else { | |
faultText.setText ( EMPTY_STRING ); | |
} | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#aboutToBeShown() | |
*/ | |
@Override | |
public void aboutToBeShown() { | |
super.aboutToBeShown(); | |
doChildLayout(); | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#getUserContext() | |
*/ | |
@Override | |
public Object getUserContext() { | |
return Integer.valueOf( lastChangeContext ); | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#restoreUserContext(java.lang.Object) | |
*/ | |
@Override | |
public void restoreUserContext(Object userContext) { | |
int i = ((Integer)userContext).intValue(); | |
switch (i) { | |
case PARTNER_CONTEXT: partnerName.setFocus(); return; | |
case OPERATION_CONTEXT: operationText.setFocus(); return; | |
case FAULTNAME_CONTEXT: faultText.setFocus(); return; | |
} | |
throw new IllegalStateException(); | |
} | |
private void findAndSetOperation (String text) { | |
text = text.trim(); | |
EObject model = getInput(); | |
PortType portType = ModelHelper.getPortType( model ); | |
List<Command> cmdList = basicCommandList( model , IGNORE_PARTNER_LINK, null ); | |
Operation op = null; | |
if (text.length() > 0) { | |
op = (Operation) ModelHelper.findElementByName( | |
portType , | |
text, | |
Operation.class); | |
if (op != null) { | |
// set that operation | |
SetOperationCommand cmd = (SetOperationCommand) ListMap.Find(cmdList, new ListMap.Visitor () { | |
public Object visit(Object obj) { | |
return (obj instanceof SetOperationCommand ? obj : ListMap.IGNORE ); | |
} | |
}); | |
cmd.setNewValue(op); | |
// https://issues.jboss.org/browse/JBIDE-7861 | |
// set new operation in the command list | |
for (int i=0; i<cmdList.size(); ++i) { | |
if ( cmdList.get(i) instanceof SetOperationCommand) { | |
cmdList.set(i, cmd); | |
break; | |
} | |
} | |
} | |
} | |
CompoundCommand cmd = new CompoundCommand(); | |
cmd.getCommands().addAll( cmdList ); | |
getCommandFramework().execute ( cmd ); | |
if (op!=null) | |
updateQuickPickSelection(op); | |
} | |
// void findAndSetOrCreateVariable (String text, int direction) { | |
// | |
// text = text.trim(); | |
// EObject model = getInput(); | |
// | |
// SetVariableCommand cmd = new SetVariableCommand(getInput(),null,direction); | |
// if (text.length() > 0) { | |
// Variable variable = (Variable) ModelHelper.findElementByName(ModelHelper.getContainingScope(model), | |
// text, Variable.class); | |
// if (variable == null) { | |
// | |
// createVariable (getInput(), text,direction ); | |
// return ; | |
// } | |
// | |
// cmd.setNewValue( variable ); | |
// } | |
// | |
// getCommandFramework().execute ( cmd ); | |
// } | |
// /** | |
// * Create an input variable, set it to the right type, and set the input variable | |
// * pon the activity. | |
// * | |
// * @param ref the object on which to create the variable (Scope or Process) | |
// * @param name the name of the variable, or null | |
// * @param the direction of the variable | |
// */ | |
// | |
// void createVariable ( EObject ref, String name, int direction ) { | |
// | |
// Variable variable = BPELFactory.eINSTANCE.createVariable(); | |
// | |
// if (name == null) { | |
// name = plainLabelWordFor( direction ); | |
// } | |
// | |
// Message messageType = null; | |
// XSDElementDeclaration elementType = null; | |
// | |
// Object type = ModelHelper.getVariableType( getInput(), direction ); | |
// | |
// if (type != null && type instanceof Message) { | |
// messageType = (Message) type; | |
// if (messageType.getEParts().size() == 1) { | |
// Part part = (Part) messageType.getEParts().get(0); | |
// elementType = part.getElementDeclaration(); | |
// } | |
// } | |
// | |
// // ask for the name, we know the type. | |
// NameDialog nameDialog = new NameDialog( | |
// inputVariableComposite.getShell(), | |
// Messages.VariableSelectorDialog_New_Variable_4, | |
// Messages.VariableSelectorDialog_Variable_Name_5, | |
// name, | |
// BPELUtil.getNCNameValidator()); | |
// | |
// if (nameDialog.open() == Window.CANCEL) { | |
// return ; | |
// } | |
// | |
// // set name and type | |
// variable.setName ( nameDialog.getValue() ); | |
// | |
// if ( elementType != null ) { | |
// variable.setXSDElement(elementType); | |
// } else if (messageType != null) { | |
// variable.setMessageType ( messageType ); | |
// } | |
// | |
// // create the variable and then set the input variable to it. | |
// CompoundCommand cmd = new CompoundCommand(); | |
// cmd.add ( new AddVariableCommand(ref,variable) ); | |
// cmd.add ( new SetVariableCommand(getInput(), variable, direction) ); | |
// | |
// getCommandFramework().execute( cmd ); | |
// } | |
void findAndSetOrCreatePartnerLink ( String name ) { | |
name = name.trim(); | |
EObject model = getInput(); | |
PartnerLink pl = null; | |
if (name.length() > 0) { | |
pl = (PartnerLink) ModelHelper.findElementByName(ModelHelper.getContainingScope(model), | |
name, PartnerLink.class); | |
// does not exist | |
if (pl == null) { | |
// https://issues.jboss.org/browse/JBIDE-7861 | |
pl = createPartnerLink ( ModelHelper.getContainingScope(model), name ); | |
if (pl!=null) | |
updateQuickPickSelection(pl); | |
return ; | |
} | |
} | |
CompoundCommand cmd = new CompoundCommand(); | |
cmd.getCommands().addAll( basicCommandList(model, pl, null)); | |
getCommandFramework().execute ( cmd ); | |
if (pl!=null) | |
updateQuickPickSelection(pl); | |
} | |
private PartnerLink createPartnerLink ( EObject ref , String name ) { | |
PartnerLink pl = BPELFactory.eINSTANCE.createPartnerLink(); | |
if (name == null) { | |
name = EMPTY_STRING; | |
} | |
// ask for the name, we know the type. | |
NameDialog nameDialog = new NameDialog( | |
parentComposite.getShell(), | |
Messages.PartnerLinkSelectorDialog_5, | |
Messages.PartnerLinkSelectorDialog_6, | |
name, | |
BPELUtil.getNCNameValidator()); | |
if (nameDialog.open() == Window.CANCEL) { | |
return null; | |
} | |
PartnerLinkTypeSelectorDialog dialog = new PartnerLinkTypeSelectorDialog( | |
partnerName.getShell(), | |
getInput()); | |
if (dialog.open() == Window.CANCEL) { | |
return null; | |
} | |
Object result = dialog.getFirstResult(); | |
PartnerLinkType plt = null; | |
if (result != null && result instanceof PartnerLinkType) { | |
plt = (PartnerLinkType) result; | |
} | |
// Ask user about role | |
EList<Role> list = plt.getRole(); | |
if (list.size() > 1){ | |
PartnerLinkRoleSelectorDialog roleDialog = new PartnerLinkRoleSelectorDialog(parentComposite.getShell(), list, plt); | |
if (isInvoke){ | |
roleDialog.setTitle(Messages.PartnerRoleSelectorDialog_Title_PartnerRole); | |
} else { | |
roleDialog.setTitle(Messages.PartnerRoleSelectorDialog_Title_MyRole); | |
} | |
if (roleDialog.open() == Window.CANCEL){ | |
return null; | |
} | |
if (isInvoke){ | |
pl.setPartnerRole(list.get(roleDialog.getSelectedRole())); | |
} else { | |
pl.setMyRole(list.get(roleDialog.getSelectedRole())); | |
} | |
} else { | |
if (isInvoke){ | |
pl.setPartnerRole(list.get(0)); | |
} else { | |
pl.setMyRole(list.get(0)); | |
} | |
} | |
// set name and type | |
pl.setName ( nameDialog.getValue() ); | |
pl.setPartnerLinkType( plt ); | |
// ask for partner link type | |
List<Command> cmds = basicCommandList(getInput(), pl, null); | |
cmds.add(0, new AddPartnerLinkCommand( ref, pl )); | |
// | |
CompoundCommand cmd = new CompoundCommand(); | |
cmd.getCommands().addAll(cmds); | |
getCommandFramework().execute(cmd); | |
// TODO: Is there any way to refresh quick pick without this hack? | |
quickPickTreeViewer.setInput ( null ); | |
updateQuickPickWidgets(); | |
return pl; | |
} | |
/** | |
* Handle the quick pick from the partner link tree. | |
* | |
* The logic here will attempt to fill in as much of the details | |
* as possible. It may create variables necessary to for the partner | |
* activity to make sense. | |
* | |
* @param selection the selection from the tree | |
*/ | |
private void quickPickSelectionChanged ( ISelection selection ) { | |
if (selection.isEmpty()) { | |
return ; | |
} | |
ITreeSelection treeSelection = (ITreeSelection) selection; | |
quickPickSelectionChanged ( treeSelection.getPaths() ); | |
} | |
private void quickPickSelectionChanged ( TreePath[] paths ) { | |
// Assumption is that we are single selection ... | |
if (paths.length > 0) { | |
quickPickSelectionChanged ( paths[0] ); | |
} | |
} | |
private void quickPickSelectionChanged ( TreePath path ) { | |
// The tree view contains nodes which may have multiple parents | |
// so we have to walk the selection using the visual elements | |
// org.eclipse.bpel.ui.details.tree.PartnerLinkTreeNode@3905e3 | |
// org.eclipse.bpel.ui.details.tree.PortTypeTreeNode@13d765c | |
// org.eclipse.bpel.ui.details.tree.OperationTreeNode@fcc070 | |
// org.eclipse.bpel.ui.details.tree.MessageTypeTreeNode@1167d36 | |
// org.eclipse.bpel.ui.details.tree.PartTreeNode@33910a | |
// org.eclipse.bpel.ui.details.tree.XSDElementDeclarationTreeNode@1e96ffd | |
// | |
// https://issues.jboss.org/browse/JBIDE-7861 | |
if (ignoreQuickPickSelection) | |
return; | |
EObject input = getInput(); | |
List cmdList = basicCommandList( input , null, null); | |
PartnerLink pl = null; | |
Operation op = null; | |
Part part = null; | |
SetCommand setCommand = null; | |
for (int i=0,j=path.getSegmentCount(); i < j; i++) { | |
Object model = null; | |
try { | |
model = ((ITreeNode) path.getSegment(i)).getModelObject(); | |
} catch (Exception ex) { | |
// should not happen | |
BPELUIPlugin.log(ex); | |
break; | |
} | |
if (model instanceof PartnerLink) { | |
pl = (PartnerLink) model; | |
setCommand = (SetCommand) ListMap.Find ( cmdList, new ListMap.Visitor() { | |
public Object visit(Object obj) { | |
return (obj instanceof SetPartnerLinkCommand ? obj : ListMap.IGNORE); | |
} | |
}); | |
setCommand.setNewValue( pl ); | |
} else if (model instanceof PortType) { | |
// we don't do anything here ... | |
} else if (model instanceof Operation) { | |
op = (Operation) model; | |
setCommand = (SetCommand) ListMap.Find ( cmdList, new ListMap.Visitor() { | |
public Object visit(Object obj) { | |
return (obj instanceof SetOperationCommand ? obj : ListMap.IGNORE); | |
} | |
}); | |
setCommand.setNewValue( op ); | |
// attempt to locate a variable matching the type | |
alterCommands (cmdList,input,pl,op,(Input) op.getInput() ); | |
alterCommands (cmdList,input,pl,op,(Output)op.getOutput() ); | |
} else if (model instanceof Part) { | |
// https://issues.jboss.org/browse/JBIDE-8305 | |
// if a message part was selected, set the OnEvent "element" attribute | |
part = (Part) model; | |
setCommand = (SetCommand) ListMap.Find ( cmdList, new ListMap.Visitor() { | |
public Object visit(Object obj) { | |
return (obj instanceof SetOnEventVariableTypeCommand ? obj : ListMap.IGNORE); | |
} | |
}); | |
if (setCommand!=null) | |
setCommand.setNewValue( part.getElementDeclaration() ); | |
} | |
// System.out.println( "segment[" + i + "]=" + path.getSegment( i )); | |
} | |
CompoundCommand cmd = new CompoundCommand (); | |
cmd.getCommands().addAll (cmdList) ; | |
getCommandFramework().execute( cmd ); | |
} | |
private void alterCommands (List<Command> list, EObject input, PartnerLink pl , Operation op, Input msg ) { | |
if (input instanceof Receive || input instanceof OnMessage || | |
input instanceof OnEvent) | |
{ | |
if (pl.getMyRole() == null || msg == null) { | |
return ; | |
} | |
alterCommands(list, input, msg.getEMessage() , pl); | |
} | |
if (input instanceof Invoke) { | |
if (pl.getPartnerRole() == null || msg == null) { | |
return ; | |
} | |
alterCommands(list, input,msg.getEMessage(),pl); | |
} | |
} | |
private void alterCommands (List<Command> cmds, EObject input, PartnerLink pl, Operation op, Output msg) { | |
if (input instanceof Reply) { | |
if (pl.getMyRole() == null || msg == null) { | |
return ; | |
} | |
alterCommands(cmds,input,msg.getEMessage(),pl); | |
} | |
if (input instanceof Invoke) { | |
if (pl.getPartnerRole() == null || msg == null) { | |
return; | |
} | |
alterCommands(cmds,input,msg.getEMessage(),pl,ModelHelper.INCOMING); | |
} | |
} | |
private void alterCommands ( List<Command> cmds, EObject input, Message msg, PartnerLink pl) { | |
alterCommands ( cmds, input,msg,pl, ModelHelper.NOT_SPECIFIED); | |
} | |
private void alterCommands (List<Command> cmds, EObject input, Message msg, PartnerLink pl, final int direction) { | |
Variable variable = findVariable(input, msg, pl); | |
if (variable == null) { | |
// no such variable, create one | |
variable = BPELFactory.eINSTANCE.createVariable(); | |
String name = pl.getName() + plainLabelWordFor(input, direction); | |
List<String> variablesNamesInUse = getVariablesNamesInUse(input); | |
if (variablesNamesInUse.contains(name)) { | |
int index = 1; | |
while (variablesNamesInUse.contains(name + index)) { | |
index++; | |
} | |
name = name + index; | |
} | |
variable.setName ( name ); | |
variable.setMessageType( msg ); | |
// https://issues.jboss.org/browse/JBIDE-8305 | |
// don't create a new variable for OnEvent - this is an "implicit" variable | |
if (input instanceof OnEvent == false) | |
cmds.add(0, new AddVariableCommand(input, variable)); | |
} | |
SetVariableCommand cmd = (SetVariableCommand) ListMap.Find(cmds, new ListMap.Visitor() { | |
public Object visit(Object obj) { | |
if (obj instanceof SetVariableCommand) { | |
SetVariableCommand svc = (SetVariableCommand) obj; | |
if (svc.getDirection() == direction) { | |
return svc; | |
} | |
} | |
return ListMap.IGNORE; | |
} | |
}); | |
cmd.setNewValue( variable ); | |
} | |
/** | |
* Find and select an appropriate variable based on the Message type passed. | |
* The partner link is passed to be used a heuristic in the name search to decided | |
* between several variables that match the requested type. | |
* | |
* @param input the input element | |
* @param msg the message whose variable type we have to find. | |
* @param pl partner link, optional | |
* @return the chosen variable or null | |
*/ | |
private Variable findVariable ( EObject input, Message msg , PartnerLink pl ) { | |
Variable list[] = null; | |
// https://issues.jboss.org/browse/JBIDE-8048 | |
// this property section is also used by OnEvent | |
if (input instanceof OnEvent) { | |
OnEvent oe = (OnEvent)input; | |
list = new Variable[] { oe.getVariable() }; | |
} | |
else | |
list = ModelHelper.getVariablesOfType( input, msg ); | |
if ( list.length == 1 ) { | |
return list[0]; | |
} | |
if ( list.length > 0 ) { | |
if (pl == null) { | |
return list[0]; | |
} | |
// apply a simple heuristic based on having the partner link in the name. | |
String plName = pl.getName(); | |
for(int i=0; i < list.length; i++) { | |
if ( list[i].getName().indexOf( plName ) >= 0) { | |
return list[i]; | |
} | |
} | |
// nothing matched better on name | |
return list[0]; | |
} | |
// can't find anything matching. | |
return null; | |
} | |
/** | |
* Return the basic command list for attempting to manipulate the partner activity. | |
* The list returned must be ordered, in the sense that the commands with the most | |
* significance are done first. All the commands will generally be executed, the idea | |
* being that if only partner link is selected, then the reset of the attributes of the | |
* partner activity will be reset. | |
* | |
* @param input | |
* @return the list of basic commands that are used to manipulate the partner activity | |
*/ | |
private List<Command> basicCommandList (EObject input, PartnerLink pl, Operation op) { | |
List<Command> list = new ArrayList<Command>(8); | |
if (pl != IGNORE_PARTNER_LINK) { | |
list.add ( new SetPartnerLinkCommand(input, pl) ); | |
} | |
if (op != IGNORE_OPERATION) { | |
list.add ( new SetOperationCommand(input, op) ); | |
} | |
// These are leaf commands, that can be executed on their own | |
list.add ( new SetVariableCommand(input,null) ); | |
if (input instanceof OnEvent) { | |
list.add( new SetOnEventVariableTypeCommand((OnEvent)input) ); | |
} else if (input instanceof Reply) { | |
list.add ( new SetWSDLFaultCommand (input, null) ); | |
} else if (input instanceof Invoke) { | |
list.add ( new SetVariableCommand (input, null, ModelHelper.INCOMING) ); | |
} | |
return list; | |
} | |
/** | |
* This shows up in a couple of places, so we share it. | |
* @return the runnable proposal for WSDL editing. | |
*/ | |
private RunnableProposal getWSDLEdit ( ) { | |
if (fWSDLEditRunnableProposal == null) { | |
fWSDLEditRunnableProposal = new RunnableProposal() { | |
@Override | |
public String getLabel() { | |
return Messages.InvokeImplSection_24; | |
} | |
public void run() { | |
PortType pt = ModelHelper.getPortType(getInput()); | |
if (pt != null) { | |
BPELUtil.openEditor( pt, getBPELEditor() ); | |
} | |
} | |
}; | |
} | |
return fWSDLEditRunnableProposal; | |
} | |
} |