blob: 1f9becc029decbe21a324a244aeacfca5cd60166 [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 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);
}
}