blob: 4c11968e54b0c36ca6c2c5628ebe877f093c600d [file] [log] [blame]
/*******************************************************************************
* 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.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;
}
}