/******************************************************************************* | |
* 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.HashSet; | |
import java.util.Set; | |
import org.eclipse.bpel.common.ui.details.IDetailsAreaConstants; | |
import org.eclipse.bpel.common.ui.details.viewers.CComboViewer; | |
import org.eclipse.bpel.common.ui.details.widgets.DecoratedLabel; | |
import org.eclipse.bpel.common.ui.details.widgets.StatusLabel2; | |
import org.eclipse.bpel.common.ui.flatui.FlatFormAttachment; | |
import org.eclipse.bpel.common.ui.flatui.FlatFormData; | |
import org.eclipse.bpel.model.BPELPackage; | |
import org.eclipse.bpel.model.PartnerLink; | |
import org.eclipse.bpel.model.partnerlinktype.PartnerLinkType; | |
import org.eclipse.bpel.model.partnerlinktype.PartnerlinktypeFactory; | |
import org.eclipse.bpel.model.partnerlinktype.PartnerlinktypePackage; | |
import org.eclipse.bpel.model.partnerlinktype.Role; | |
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.CompoundCommand; | |
import org.eclipse.bpel.ui.commands.SetCommand; | |
import org.eclipse.bpel.ui.commands.util.AutoUndoCommand; | |
import org.eclipse.bpel.ui.details.providers.AddSelectedObjectFilter; | |
import org.eclipse.bpel.ui.details.providers.ModelTreeLabelProvider; | |
import org.eclipse.bpel.ui.details.providers.OperationsTreeContentProvider; | |
import org.eclipse.bpel.ui.util.BPELUtil; | |
import org.eclipse.bpel.ui.util.BatchedMultiObjectAdapter; | |
import org.eclipse.bpel.ui.util.BrowseUtil; | |
import org.eclipse.bpel.ui.util.ModelHelper; | |
import org.eclipse.bpel.ui.util.MultiObjectAdapter; | |
import org.eclipse.core.resources.IMarker; | |
import org.eclipse.core.runtime.IStatus; | |
import org.eclipse.emf.common.notify.Notification; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.emf.ecore.EStructuralFeature; | |
import org.eclipse.jface.viewers.TreeViewer; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.events.SelectionAdapter; | |
import org.eclipse.swt.events.SelectionEvent; | |
import org.eclipse.swt.events.SelectionListener; | |
import org.eclipse.swt.layout.GridData; | |
import org.eclipse.swt.layout.GridLayout; | |
import org.eclipse.swt.widgets.Button; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Control; | |
import org.eclipse.swt.widgets.Group; | |
import org.eclipse.swt.widgets.Label; | |
import org.eclipse.swt.widgets.Tree; | |
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.Definition; | |
import org.eclipse.wst.wsdl.PortType; | |
/** | |
* VariableTypeSection provides viewing and editing of the type of a BPEL variable | |
* (whether that be an XSD type, WSDL message, or built-in simple type). | |
*/ | |
@SuppressWarnings("boxing") | |
public class PartnerLinkImplSection extends BPELPropertySection { | |
private static final int BID_MY_ROLE_1 = 1; | |
private static final int BID_MY_ROLE_2 = 2; | |
private static final int BID_MY_ROLE_NONE = 3; | |
private static final int BID_PARTNER_ROLE_1 = 101; | |
private static final int BID_PARTNER_ROLE_2 = 102; | |
private static final int BID_PARTNER_ROLE_NONE = 103; | |
private static final int BID_INITIALIZE_PARTNER_ROLE = 201; | |
private static final Role[] NO_ROLES = {}; | |
/** | |
* @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#shouldUseExtraSpace() | |
*/ | |
@Override | |
public boolean shouldUseExtraSpace() { | |
return true; | |
} | |
protected boolean inUpdate = false; | |
protected Composite interfaceComposite, referenceComposite; | |
protected Composite parentComposite; | |
protected Button interfaceBrowseButton; | |
protected AddSelectedObjectFilter interfaceAddSelectedObjectFilter; | |
protected CComboViewer referenceViewer; | |
protected Button referenceBrowseButton; | |
protected AddSelectedObjectFilter referenceAddSelectedObjectFilter; | |
protected int lastChangeContext = -1; | |
private Button partnerLinkTypeBrowseButton; | |
private Button fMyRole1; | |
private Button fMyRole2; | |
private Button fMyRoleNone; | |
private Button fPartnerRole1; | |
private Button fPartnerRole2; | |
private Button fPartnerRoleNone; | |
private Role[] fRoles; | |
private TreeViewer fMyOperationsTreeViewer; | |
private TreeViewer fPartnerOperationsTreeViewer; | |
private Hyperlink fPartnerLinkTypeHref; | |
private StatusLabel2 fPartnerLinkTypeLabel; | |
private Button fInitializePartnerRole; | |
static Set<EStructuralFeature> notificationInterest = new HashSet<EStructuralFeature>(); | |
static { | |
notificationInterest.add ( BPELPackage.eINSTANCE.getPartnerLink_PartnerLinkType() ); | |
notificationInterest.add ( BPELPackage.eINSTANCE.getPartnerLink_MyRole() ); | |
notificationInterest.add ( BPELPackage.eINSTANCE.getPartnerLink_PartnerRole() ); | |
notificationInterest.add ( BPELPackage.eINSTANCE.getPartnerLink_InitializePartnerRole() ); | |
notificationInterest.add ( PartnerlinktypePackage.eINSTANCE.getPartnerLinkType_Role() ); | |
notificationInterest.add ( PartnerlinktypePackage.eINSTANCE.getRole_PortType() ); | |
notificationInterest.add ( PartnerlinktypePackage.eINSTANCE.getRole_Name() ); | |
} | |
@Override | |
protected MultiObjectAdapter[] createAdapters() { | |
return new MultiObjectAdapter[] { | |
/* model object */ | |
new BatchedMultiObjectAdapter() { | |
boolean updateInterface = false; | |
boolean refreshAdapters = false; | |
@Override | |
public void notify(Notification n) { | |
updateInterface = updateInterface || notificationInterest.contains( n.getFeature() ); | |
refreshAdapters = refreshAdapters || updateInterface; | |
} | |
@Override | |
public void finish() { | |
if (updateInterface) { | |
updatePartnerLinkTypeWidgets(); | |
doChildLayout(); | |
updateInterface = false; | |
} | |
if (refreshAdapters) { | |
refreshAdapters(); | |
refreshAdapters = false; | |
} | |
} | |
} | |
}; | |
} | |
@Override | |
protected void addAllAdapters() { | |
super.addAllAdapters(); | |
if (fAdapters.length > 0) { | |
PartnerLink partnerLink = (PartnerLink)getInput(); | |
if (partnerLink.getPartnerLinkType() != null) { | |
fAdapters[0].addToObject(partnerLink.getPartnerLinkType()); | |
} | |
Role[] roles = {partnerLink.getMyRole(), partnerLink.getPartnerRole()}; | |
for (int i = 0; i < roles.length; i++) { | |
Role role = roles[i]; | |
if (role != null) { | |
fAdapters[0].addToObject(role); | |
} | |
} | |
} | |
} | |
protected Composite createPartnerLinkTypeWidgets (Composite top, final Composite parent) { | |
FlatFormData data; | |
Composite composite = createFlatFormComposite(parent); | |
data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VMARGIN); | |
} else { | |
data.top = new FlatFormAttachment(top,IDetailsAreaConstants.VMARGIN); | |
} | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(100, 0); | |
composite.setLayoutData(data); | |
partnerLinkTypeBrowseButton = fWidgetFactory.createButton(composite, Messages.PartnerLinkImplSection_Browse_1, SWT.PUSH); | |
DecoratedLabel label = new DecoratedLabel ( composite, SWT.LEFT ); | |
label.setText( Messages.PartnerLinkImplSection_0 ); | |
fWidgetFactory.adapt(label); | |
fPartnerLinkTypeLabel = new StatusLabel2 ( label ); | |
fPartnerLinkTypeHref = fWidgetFactory.createHyperlink(composite, "", SWT.NONE); //$NON-NLS-1$ | |
fPartnerLinkTypeHref.addHyperlinkListener(new HyperlinkAdapter() { | |
@Override | |
public void linkActivated(HyperlinkEvent e) { | |
PartnerLinkType plt = getPartnerLinkType(); | |
if (plt == null) { | |
return ; | |
} | |
BPELUtil.openEditor(getPartnerLinkType(), getBPELEditor()); | |
} | |
}); | |
fPartnerLinkTypeHref.setToolTipText(Messages.PartnerLinkImplSection_1); | |
partnerLinkTypeBrowseButton.addSelectionListener(new SelectionListener() { | |
public void widgetSelected(SelectionEvent e) { | |
browseForPartnerLink(); | |
} | |
public void widgetDefaultSelected(SelectionEvent e) { } | |
}); | |
data = new FlatFormData(); | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
// data.bottom = new FlatFormAttachment(fPartnerLinkTypeHref, -2, SWT.BOTTOM); | |
data.right = new FlatFormAttachment(100,-IDetailsAreaConstants.HSPACE); | |
partnerLinkTypeBrowseButton.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0,IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE ); | |
fPartnerLinkTypeLabel.setLayoutData(data); | |
// data = new FlatFormData(); | |
// data.left = new FlatFormAttachment(partnerLinkTypeLabel, IDetailsAreaConstants.HSPACE); | |
// data.top = new FlatFormAttachment(partnerLinkTypeLabel, -4 , SWT.TOP); | |
// // data.bottom = new FlatFormAttachment(partnerLinkTypeLabel, 4 , SWT.BOTTOM); | |
// data.right = new FlatFormAttachment( partnerLinkTypeBrowseButton, -30 ); | |
// partnerLinkTypeName.setLayoutData(data); | |
data = new FlatFormData(); | |
data.right = new FlatFormAttachment( 60, 0 ); | |
data.left = new FlatFormAttachment ( fPartnerLinkTypeLabel.getLabel() , 20); | |
data.bottom = new FlatFormAttachment ( fPartnerLinkTypeLabel.getLabel(), -1 , SWT.BOTTOM); | |
fPartnerLinkTypeHref.setLayoutData(data); | |
return composite; | |
} | |
protected void browseForPartnerLink ( ) { | |
Object obj = BrowseUtil.browseForPartnerLinkType( getInput() , | |
partnerLinkTypeBrowseButton.getShell() ); | |
if (obj == null) { | |
return; | |
} | |
if (obj instanceof PartnerLinkType) { | |
setPartnerLinkType ( (PartnerLinkType) obj); | |
} | |
} | |
protected Composite createMyRolePartnerRoleWidgets ( Composite top, Composite parent) { | |
Composite composite = fWidgetFactory.createComposite(parent); | |
FlatFormData data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0,5); | |
} else { | |
data.top = new FlatFormAttachment(top,5); | |
} | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(100, 0); | |
composite.setLayoutData(data); | |
GridLayout layout = new GridLayout(); | |
layout.makeColumnsEqualWidth = true; | |
layout.numColumns = 2; | |
composite.setLayout(layout); | |
GridData gridData; | |
Group myGroup = fWidgetFactory.createGroup(composite,Messages.PartnerLinkImplSection_2); | |
layout = new GridLayout(); | |
layout.makeColumnsEqualWidth = false; | |
layout.numColumns = 3; | |
myGroup.setLayout(layout); | |
gridData = new GridData(); | |
gridData.grabExcessVerticalSpace = false; | |
gridData.grabExcessHorizontalSpace = true; | |
gridData.horizontalAlignment = GridData.FILL; | |
gridData.verticalAlignment = GridData.FILL; | |
gridData.horizontalIndent = 10; | |
gridData.minimumWidth = 150; | |
myGroup.setLayoutData(gridData); | |
fMyRole1 = createButton(myGroup, null, BID_MY_ROLE_1, false, SWT.RADIO ); | |
fMyRole2 = createButton(myGroup, null, BID_MY_ROLE_2, false, SWT.RADIO); | |
fMyRoleNone = createButton(myGroup, Messages.PartnerLinkImplSection_10, BID_MY_ROLE_NONE, true, SWT.RADIO); | |
updateRadio(fMyRole1, null); | |
updateRadio(fMyRole2, null); | |
Group partnerGroup = fWidgetFactory.createGroup(composite, Messages.PartnerLinkImplSection_4); | |
layout = new GridLayout(); | |
layout.makeColumnsEqualWidth = false; | |
layout.numColumns = 3; | |
partnerGroup.setLayout(layout); | |
gridData = new GridData(); | |
gridData.grabExcessVerticalSpace = false; | |
gridData.grabExcessHorizontalSpace = true; | |
gridData.horizontalAlignment = GridData.FILL; | |
gridData.verticalAlignment = GridData.FILL; | |
gridData.horizontalIndent = 10; | |
gridData.minimumWidth = 150; | |
partnerGroup.setLayoutData(gridData); | |
fPartnerRole1 = createButton(partnerGroup, null, BID_PARTNER_ROLE_1, false, SWT.RADIO); | |
fPartnerRole2 = createButton(partnerGroup, null, BID_PARTNER_ROLE_2, false, SWT.RADIO); | |
fPartnerRoleNone = createButton(partnerGroup, Messages.PartnerLinkImplSection_5, BID_PARTNER_ROLE_NONE, true, SWT.RADIO); | |
// The initialize partner role button | |
fInitializePartnerRole = createButton(partnerGroup, Messages.PartnerLinkImplSection_11, BID_INITIALIZE_PARTNER_ROLE, false, SWT.CHECK); | |
updateRadio(fPartnerRole1, null); | |
updateRadio(fPartnerRole2, null); | |
return composite; | |
} | |
protected Composite createRoleWidgets ( Composite top, Composite parent) { | |
return createMyRolePartnerRoleWidgets(top, parent); | |
} | |
protected Composite createPartnerLinkStructureWidgets (Composite top, Composite parent) { | |
Composite composite = createFlatFormComposite(parent); | |
FlatFormData data = new FlatFormData(); | |
if (top == null) { | |
data.top = new FlatFormAttachment(0,5); | |
} else { | |
data.top = new FlatFormAttachment(top,5); | |
} | |
data.left = new FlatFormAttachment(0, 0); | |
data.right = new FlatFormAttachment(100, 0); | |
data.bottom = new FlatFormAttachment(100,0); | |
composite.setLayoutData(data); | |
Label treeLabel = fWidgetFactory.createLabel(composite, Messages.PartnerLinkImplSection_6); | |
// Tree viewer for variable structure ... | |
Tree tree = fWidgetFactory.createTree(composite, SWT.NONE); | |
fMyOperationsTreeViewer = new TreeViewer( tree ); | |
fMyOperationsTreeViewer.setContentProvider( new OperationsTreeContentProvider(true) ); | |
fMyOperationsTreeViewer.setLabelProvider(new ModelTreeLabelProvider()); | |
fMyOperationsTreeViewer.setInput ( null ); | |
fMyOperationsTreeViewer.setAutoExpandLevel(4); | |
// end tree viewer for variable structure | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE + 10 ); | |
data.top = new FlatFormAttachment(treeLabel, IDetailsAreaConstants.VSPACE, SWT.BOTTOM); | |
treeLabel.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, IDetailsAreaConstants.HSPACE + 10 ); | |
data.top = new FlatFormAttachment(treeLabel,IDetailsAreaConstants.HSPACE, SWT.BOTTOM); | |
data.right = new FlatFormAttachment(50, -IDetailsAreaConstants.HSPACE) ; | |
data.bottom = new FlatFormAttachment(100, -IDetailsAreaConstants.HSPACE); | |
tree.setLayoutData(data); | |
treeLabel = fWidgetFactory.createLabel(composite, Messages.PartnerLinkImplSection_7); | |
// Tree viewer for variable structure ... | |
tree = fWidgetFactory.createTree(composite, SWT.NONE); | |
fPartnerOperationsTreeViewer = new TreeViewer( tree ); | |
fPartnerOperationsTreeViewer.setContentProvider(new OperationsTreeContentProvider(true)); | |
fPartnerOperationsTreeViewer.setLabelProvider(new ModelTreeLabelProvider()); | |
fPartnerOperationsTreeViewer.setInput ( null ); | |
fPartnerOperationsTreeViewer.setAutoExpandLevel(4); | |
// end tree viewer for variable structure | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(50, IDetailsAreaConstants.HSPACE + 10 ); | |
data.top = new FlatFormAttachment(treeLabel, IDetailsAreaConstants.VSPACE, SWT.BOTTOM); | |
treeLabel.setLayoutData(data); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(50, IDetailsAreaConstants.HSPACE + 10 ); | |
data.top = new FlatFormAttachment(treeLabel,IDetailsAreaConstants.HSPACE, SWT.BOTTOM); | |
data.right = new FlatFormAttachment(100, -IDetailsAreaConstants.HSPACE) ; | |
data.bottom = new FlatFormAttachment(100, -IDetailsAreaConstants.HSPACE); | |
tree.setLayoutData(data); | |
return null; | |
} | |
@Override | |
protected void createClient(Composite parent) { | |
Composite composite = parentComposite = createFlatFormComposite(parent); | |
// FlatFormData data = new FlatFormData(); | |
// data.top = new FlatFormAttachment(0,0); | |
// data.left = new FlatFormAttachment(0, 0); | |
// data.right = new FlatFormAttachment(100, 0); | |
// data.bottom = new FlatFormAttachment(100,0); | |
// composite.setLayoutData(data); | |
Composite ref = createPartnerLinkTypeWidgets(null,composite); | |
ref = createRoleWidgets ( ref, composite ); | |
createPartnerLinkStructureWidgets( ref, composite ); | |
// createInterfaceWidgets(composite); | |
// createReferenceWidgets(composite); | |
PlatformUI.getWorkbench().getHelpSystem().setHelp( | |
parentComposite, IHelpContextIds.PROPERTY_PAGE_PARTNER_LINK); | |
} | |
protected void doChildLayout() { | |
parentComposite.layout(true,true); | |
} | |
protected void updateMyRolePartnerRoleWidgets ( PartnerLink pl ) { | |
PartnerLinkType plt = pl.getPartnerLinkType(); | |
fRoles = NO_ROLES ; | |
if (plt != null) { | |
fRoles = plt.getRole().toArray( NO_ROLES ); | |
} | |
Role myRole = pl.getMyRole(); | |
Role partnerRole = pl.getPartnerRole(); | |
updateRadio(fMyRole1,null); | |
updateRadio(fMyRole2,null); | |
updateRadio(fPartnerRole1,null); | |
updateRadio(fPartnerRole2,null); | |
select(fPartnerRoleNone); | |
select(fMyRoleNone); | |
select(fInitializePartnerRole); | |
// Roles are 1..2, so technically, this should never happen. | |
// If at least 1 role specified ... | |
if (fRoles.length >= 1) { | |
String role1 = fRoles[0].getName(); | |
updateRadio (fMyRole1, role1); | |
updateRadio (fPartnerRole1,role1); | |
if ( fRoles[0].equals( myRole ) ) { | |
select (fMyRole1); | |
} | |
if (fRoles[0].equals(partnerRole)) { | |
select (fPartnerRole1); | |
} | |
} | |
Boolean ipr = pl.getInitializePartnerRole(); | |
// If at most 2 roles specified ... | |
if (fRoles.length >= 2) { | |
String role2 = fRoles[1].getName(); | |
updateRadio (fMyRole2, role2); | |
updateRadio (fPartnerRole2,role2); | |
if (fRoles[1].equals ( myRole) ) { | |
select(fMyRole2); | |
} | |
if (fRoles[1].equals ( partnerRole )) { | |
select(fPartnerRole2); | |
} | |
fInitializePartnerRole.setEnabled( true ); | |
fInitializePartnerRole.setSelection(ipr != null && ipr ); | |
} else { | |
fInitializePartnerRole.setSelection( false ); | |
fInitializePartnerRole.setEnabled( false ); | |
} | |
} | |
protected void updatePartnerLinkType (PartnerLink pl) { | |
PartnerLinkType plt = pl.getPartnerLinkType(); | |
if (plt == null) { | |
fPartnerLinkTypeHref.setText(Messages.PartnerLinkImplSection_8); | |
// partnerLinkTypeName.setText("(None)"); | |
// added by Grid.Qian | |
fPartnerLinkTypeHref.setEnabled(false); | |
return; | |
} | |
String name = null; | |
ILabeledElement label = BPELUtil.adapt(plt, ILabeledElement.class ); | |
if (label != null) { | |
name = label.getLabel( plt ); | |
} | |
fPartnerLinkTypeHref.setText( name ); | |
// added by Grid.Qian | |
fPartnerLinkTypeHref.setEnabled(true); | |
// partnerLinkTypeName.setText(name); | |
} | |
protected void updatePartnerLinkTypeWidgets() { | |
Object obj = getInput(); | |
if (obj == null) { | |
throw new IllegalStateException(); | |
} | |
PartnerLink pl = (PartnerLink) obj; | |
updateMyRolePartnerRoleWidgets( pl ); | |
updatePartnerLinkType (pl); | |
fMyOperationsTreeViewer.setInput( ModelHelper.getPartnerPortType(pl, ModelHelper.INCOMING) ); | |
fPartnerOperationsTreeViewer.setInput( ModelHelper.getPartnerPortType(pl, ModelHelper.OUTGOING ) ); | |
updateMarkers(); | |
} | |
protected PartnerLinkType getPartnerLinkType () { | |
PartnerLink pl = (PartnerLink) fModelObject; | |
return pl.getPartnerLinkType(); | |
} | |
@Override | |
protected void basicSetInput(EObject newInput) { | |
super.basicSetInput(newInput); | |
updatePartnerLinkTypeWidgets(); | |
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) { | |
} | |
/** | |
* @param portType | |
* @param whichRole | |
*/ | |
public void storeInterface (final PortType portType, final int whichRole) { | |
final PartnerLink partnerLink = (PartnerLink)getInput(); | |
CompoundCommand cmd = new CompoundCommand(); | |
PartnerLinkType plt = partnerLink.getPartnerLinkType(); | |
if (((plt == null) || plt.eIsProxy()) && (portType != null)) { | |
// need a PLT. | |
plt = PartnerlinktypeFactory.eINSTANCE.createPartnerLinkType(); | |
Definition artifactsDefinition = getBPELEditor().getArtifactsDefinition(); | |
cmd.add(ModelHelper.getCreatePartnerLinkTypeCommand(getProcess(), partnerLink, plt, artifactsDefinition, whichRole)); | |
} | |
if (plt != null) { | |
// set port type | |
cmd.add(new AutoUndoCommand(plt) { | |
@Override | |
public void doExecute() { | |
Role role = (whichRole == ModelHelper.MY_ROLE) ? partnerLink.getMyRole() : partnerLink.getPartnerRole(); | |
role.setPortType(portType); | |
} | |
}); | |
} | |
// lastChangeContext is set by caller | |
if (!cmd.isEmpty()) getCommandFramework().execute(wrapInShowContextCommand(cmd)); | |
} | |
Button createButton (Composite parent, String label, int id, boolean checked, int type ) { | |
Button button = fWidgetFactory.createButton(parent, label, type ); | |
button.setData( Integer.valueOf( id )); | |
button.setSelection( checked ); | |
button.addSelectionListener (new SelectionAdapter() { | |
@Override | |
public void widgetSelected (SelectionEvent event) { | |
Button b = (Button) event.widget; | |
buttonPressed(((Integer) b.getData()), b.getSelection(),true); | |
} | |
}); | |
return button; | |
} | |
void updateRadio ( Button button, String text ) { | |
if ( text == null ) { | |
button.setText(Messages.PartnerLinkImplSection_9); | |
button.setEnabled(false); | |
button.setSelection(false); | |
} else { | |
button.setText (text); | |
button.setEnabled (true); | |
} | |
} | |
void select ( Button button ) { | |
if ((button.getStyle() & SWT.RADIO) == SWT.RADIO) { | |
for(Control child : button.getParent().getChildren()) { | |
if (button != child && child instanceof Button) { | |
Button b = (Button)child; | |
if ((b.getStyle() & SWT.RADIO) == SWT.RADIO) { | |
unselect( b ); | |
} | |
} | |
} | |
} | |
button.setSelection(true); | |
int id = ((Integer)button.getData()).intValue(); | |
buttonPressed( id, true, false ) ; | |
} | |
void unselect (Button button) { | |
if (button.getSelection () ) { | |
button.setSelection (false); | |
int id = ((Integer)button.getData()).intValue(); | |
buttonPressed( id, false , false ) ; | |
} | |
} | |
/** | |
* @param id | |
* @param selection | |
*/ | |
protected void buttonPressed(int id, boolean selection, boolean event ) { | |
if (!event || (!selection && id != BID_INITIALIZE_PARTNER_ROLE)) { | |
// only respond to events | |
return ; | |
} | |
PartnerLink pl = (PartnerLink) getInput(); | |
SetCommand cmd = null; | |
// Current myRole or partnerRole may be null | |
Role myRole = pl.getMyRole(); | |
Role partnerRole = pl.getPartnerRole(); | |
switch (id) { | |
case BID_MY_ROLE_1 : | |
if (myRole == null || myRole.equals( fRoles[0]) == false ) { | |
cmd = new SetCommand(pl,fRoles[0],BPELPackage.eINSTANCE.getPartnerLink_MyRole() ); | |
} | |
break; | |
case BID_MY_ROLE_2 : | |
if (myRole == null || myRole.equals( fRoles[1]) == false ) { | |
cmd = new SetCommand(pl,fRoles[1],BPELPackage.eINSTANCE.getPartnerLink_MyRole() ); | |
} | |
break; | |
case BID_MY_ROLE_NONE : | |
if (myRole != null) { | |
cmd = new SetCommand(pl,null,BPELPackage.eINSTANCE.getPartnerLink_MyRole() ); | |
} | |
break; | |
case BID_PARTNER_ROLE_1 : | |
if (partnerRole == null || partnerRole.equals( fRoles[0]) == false) { | |
cmd = new SetCommand(pl,fRoles[0],BPELPackage.eINSTANCE.getPartnerLink_PartnerRole() ); | |
} | |
break; | |
case BID_PARTNER_ROLE_2 : | |
if (partnerRole == null || partnerRole.equals( fRoles[1]) == false) { | |
cmd = new SetCommand(pl,fRoles[1],BPELPackage.eINSTANCE.getPartnerLink_PartnerRole() ); | |
} | |
break; | |
case BID_PARTNER_ROLE_NONE : | |
if (partnerRole != null) { | |
cmd = new SetCommand(pl,null,BPELPackage.eINSTANCE.getPartnerLink_PartnerRole() ); | |
} | |
break; | |
case BID_INITIALIZE_PARTNER_ROLE : | |
cmd = new SetCommand(pl,fInitializePartnerRole.getSelection(),BPELPackage.eINSTANCE.getPartnerLink_InitializePartnerRole() ); | |
break; | |
} | |
if (cmd != null) { | |
getCommandFramework().execute( cmd ); | |
} | |
// System.out.println("ButtonID=" + id + "; selection=" + selection); | |
} | |
private void setPartnerLinkType (PartnerLinkType type) { | |
PartnerLink pl = (PartnerLink) getInput(); | |
CompoundCommand cmd = new CompoundCommand (); | |
cmd.add( new SetCommand(pl, type, BPELPackage.eINSTANCE.getPartnerLink_PartnerLinkType() ) ); | |
cmd.add ( new SetCommand(pl, null, BPELPackage.eINSTANCE.getPartnerLink_MyRole() ) ) ; | |
cmd.add ( new SetCommand(pl, null, BPELPackage.eINSTANCE.getPartnerLink_PartnerRole() ) ); | |
getCommandFramework().execute(cmd); | |
} | |
/** | |
* | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#isValidMarker(org.eclipse.core.resources.IMarker) | |
*/ | |
@Override | |
public boolean isValidMarker (IMarker marker) { | |
boolean isValid = super.isValidMarker(marker); | |
if (!isValid) { | |
return false; | |
} | |
String context = null; | |
try { | |
context = (String) marker.getAttribute("href.context"); | |
} catch (Exception ex) { | |
return false; | |
} | |
return "name".equals (context) == false; | |
} | |
@Override | |
protected void updateMarkers () { | |
fPartnerLinkTypeLabel.clear(); | |
for(IMarker m : getMarkers(getInput())) { | |
fPartnerLinkTypeLabel.addStatus( BPELUtil.adapt(m, IStatus.class)); | |
} | |
} | |
} |