/******************************************************************************* | |
* 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 org.eclipse.bpel.common.ui.details.FocusContext; | |
import org.eclipse.bpel.common.ui.details.IDetailsAreaConstants; | |
import org.eclipse.bpel.common.ui.details.IValue; | |
import org.eclipse.bpel.common.ui.details.RadioButtonIValue; | |
import org.eclipse.bpel.common.ui.flatui.FlatFormAttachment; | |
import org.eclipse.bpel.common.ui.flatui.FlatFormData; | |
import org.eclipse.bpel.model.Activity; | |
import org.eclipse.bpel.model.BPELPackage; | |
import org.eclipse.bpel.model.Process; | |
import org.eclipse.bpel.ui.IHelpContextIds; | |
import org.eclipse.bpel.ui.Messages; | |
import org.eclipse.bpel.ui.util.BPELUtil; | |
import org.eclipse.bpel.ui.util.MultiObjectAdapter; | |
import org.eclipse.emf.common.notify.Notification; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.widgets.Button; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Label; | |
import org.eclipse.ui.PlatformUI; | |
/** | |
* JoinFailureDetails provides viewing and editing of the suppressJoinFailure | |
* attribute of Process and Activity elements. | |
*/ | |
public class JoinFailureSection extends BPELPropertySection { | |
protected Button yesRadio, noRadio, sameAsParentRadio; | |
Composite fComposite; | |
EditController fRadioController; | |
IValue fContext ; | |
@Override | |
protected MultiObjectAdapter[] createAdapters() { | |
return new MultiObjectAdapter[] { | |
/* model object */ | |
new MultiObjectAdapter() { | |
@Override | |
public void notify (Notification n) { | |
Object notifier = n.getNotifier(); | |
if (notifier instanceof Activity == false || getInput() instanceof Activity == false) { | |
return; | |
} | |
Activity activity = (Activity) notifier; | |
Activity myInput = getModel(); | |
if (n.getFeature() == BPELPackage.eINSTANCE.getActivity_Targets() ) { | |
// Check if our targets have changed. | |
if (myInput == activity) { | |
updateActivity( myInput ); | |
} | |
} else if (n.getFeature() == BPELPackage.eINSTANCE.getActivity_SuppressJoinFailure()) { | |
// if another activit's SuppressJoinFailure feature had changed, we may have to change the label. | |
if (activity != myInput) { | |
updateActivity( myInput ); | |
} | |
} | |
} | |
}, }; | |
} | |
@Override | |
protected void addAllAdapters() { | |
super.addAllAdapters(); | |
// Also add adapter[0] to each object in our eContainer() chain which | |
// supports it. | |
// This is to cover the case where a suppressJoinFailure change in an | |
// ancestor changes the meaning of our default setting. | |
EObject p = getInput(); | |
if (p == null) { | |
return ; | |
} | |
for (p = p.eContainer(); p != null; p = p.eContainer()) { | |
if (p instanceof Activity || p instanceof Process) { | |
fAdapters[0].addToObject(p); | |
} | |
} | |
} | |
protected boolean inheritSuppressed ( Activity activity ) { | |
Boolean result = null; | |
for (EObject p = activity.eContainer(); p != null && result == null ; p = p.eContainer() ) { | |
if (p instanceof Activity) { | |
Activity a = (Activity) p; | |
result = a.getSuppressJoinFailure(); | |
} else if (p instanceof Process) { | |
Process process = (Process) p; | |
result = process.getSuppressJoinFailure(); | |
} | |
} | |
if (result == null) { | |
return false; | |
} | |
return result.booleanValue(); | |
} | |
protected void createSuppressJoinFailureWidgets (Composite composite) { | |
FlatFormData data; | |
Label suppressLabel = fWidgetFactory.createLabel(composite, | |
Messages.JoinFailureDetails_Suppress_Join_Failure__1); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0,IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(0,IDetailsAreaConstants.VSPACE); | |
suppressLabel.setLayoutData(data); | |
yesRadio = fWidgetFactory.createButton(composite, | |
Messages.JoinFailureDetails_Yes_2, SWT.RADIO); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth( | |
suppressLabel, STANDARD_LABEL_WIDTH_LRG)); | |
data.top = new FlatFormAttachment(0, IDetailsAreaConstants.VSPACE); | |
yesRadio.setLayoutData(data); | |
yesRadio.setData(RadioButtonIValue.VALUE, Boolean.TRUE ); | |
noRadio = fWidgetFactory.createButton(composite, | |
Messages.JoinFailureDetails_No_3, SWT.RADIO); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(yesRadio, | |
IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(yesRadio, 0, SWT.CENTER); | |
noRadio.setLayoutData(data); | |
noRadio.setData(RadioButtonIValue.VALUE, Boolean.FALSE ); | |
sameAsParentRadio = fWidgetFactory.createButton(composite, | |
Messages.JoinFailureDetails_Use_Same_Value_as_Parent_4, | |
SWT.RADIO); | |
data = new FlatFormData(); | |
data.left = new FlatFormAttachment(noRadio, | |
IDetailsAreaConstants.HSPACE); | |
data.top = new FlatFormAttachment(yesRadio, 0, SWT.CENTER); | |
sameAsParentRadio.setLayoutData(data); | |
sameAsParentRadio.setData(RadioButtonIValue.VALUE, RadioButtonIValue.UNSET_VALUE ); | |
fContext = new FocusContext(yesRadio,noRadio,sameAsParentRadio); | |
} | |
protected void createControllers () { | |
fRadioController = createEditController(); | |
fRadioController.setViewIValue (new RadioButtonIValue(yesRadio, noRadio,sameAsParentRadio) ); | |
fRadioController.startListeningTo( yesRadio, noRadio,sameAsParentRadio ); | |
} | |
@Override | |
protected void createClient(Composite parent) { | |
fComposite = createFlatFormComposite(parent); | |
createSuppressJoinFailureWidgets(fComposite); | |
createControllers(); | |
PlatformUI.getWorkbench().getHelpSystem().setHelp(fComposite, IHelpContextIds.PROPERTY_PAGE_JOIN_FAILURE); | |
} | |
@Override | |
protected void basicSetInput(EObject newInput) { | |
if (newInput instanceof Process) { | |
fRadioController.setFeature( BPELPackage.eINSTANCE.getProcess_SuppressJoinFailure()); | |
fRadioController.setInput(newInput); | |
sameAsParentRadio.setEnabled(false); | |
} else if (newInput instanceof Activity) { | |
fRadioController.setFeature( BPELPackage.eINSTANCE.getActivity_SuppressJoinFailure()); | |
fRadioController.setInput(newInput); | |
updateActivity( (Activity) newInput ); | |
} | |
} | |
protected void updateActivity ( Activity activity ) { | |
boolean bEnable = activity.getTargets() != null; | |
fComposite.setEnabled( bEnable ) ; | |
yesRadio.setEnabled(bEnable); | |
noRadio.setEnabled(bEnable); | |
sameAsParentRadio.setEnabled(bEnable); | |
String newDefault = inheritSuppressed( activity ) ? Messages.JoinFailureDetails_Use_Same_Value_as_Parent__Yes__5 | |
: Messages.JoinFailureDetails_Use_Same_Value_as_Parent__No__6; | |
if (!sameAsParentRadio.getText().equals(newDefault)) { | |
sameAsParentRadio.setText(newDefault); | |
sameAsParentRadio.getParent().layout(true); | |
} | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#getUserContext() | |
*/ | |
@Override | |
public Object getUserContext() { | |
return fContext.get(); | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#restoreUserContext(java.lang.Object) | |
*/ | |
@Override | |
public void restoreUserContext(Object userContext) { | |
fContext.set(userContext); | |
} | |
} |