/******************************************************************************* | |
* 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 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.Variable; | |
import org.eclipse.bpel.ui.adapters.AdapterNotification; | |
import org.eclipse.bpel.ui.commands.CompoundCommand; | |
import org.eclipse.bpel.ui.commands.SetVariableKindCommand; | |
import org.eclipse.bpel.ui.commands.SetVariableTypeCommand; | |
import org.eclipse.bpel.ui.dialogs.TypeSelectorDialog; | |
import org.eclipse.bpel.ui.uiextensionmodel.VariableExtension; | |
import org.eclipse.bpel.ui.util.BPELUtil; | |
import org.eclipse.bpel.ui.util.BatchedMultiObjectAdapter; | |
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.gef.commands.Command; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.wst.wsdl.Message; | |
import org.eclipse.xsd.XSDElementDeclaration; | |
import org.eclipse.xsd.XSDTypeDefinition; | |
/** | |
* 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). | |
*/ | |
public class VariableTypeSection extends BPELPropertySection { | |
/** | |
* Make this section use all the vertical space it can get. | |
* | |
*/ | |
@Override | |
public boolean shouldUseExtraSpace() { | |
return true; | |
} | |
protected VariableTypeSelector variableTypeSelector; | |
protected Composite parentComposite; | |
protected boolean isMessageTypeAffected(Notification n) { | |
return (n.getFeatureID(Variable.class) == BPELPackage.VARIABLE__MESSAGE_TYPE); | |
} | |
protected boolean isTypeAffected(Notification n) { | |
return (n.getFeatureID(Variable.class) == BPELPackage.VARIABLE__TYPE); | |
} | |
protected boolean isElementAffected(Notification n) { | |
return (n.getFeatureID(Variable.class) == BPELPackage.VARIABLE__ELEMENT); | |
} | |
@Override | |
protected MultiObjectAdapter[] createAdapters() { | |
return new MultiObjectAdapter[] { | |
/* model object */ | |
new BatchedMultiObjectAdapter() { | |
boolean update = false; | |
@Override | |
public void notify (Notification n) { | |
if (update) { | |
return ; | |
} | |
int eventGroup = n.getEventType() / 100; | |
if (eventGroup == AdapterNotification.NOTIFICATION_MARKERS_CHANGED_GROUP) { | |
update = true; | |
return; | |
} | |
if (isMessageTypeAffected(n)) { | |
update = true; | |
return; | |
} | |
if (isTypeAffected(n)) { | |
update = true; | |
return ; | |
} | |
if (isElementAffected(n)) { | |
update = true; | |
return; | |
} | |
if (n.getNotifier() instanceof VariableExtension) { | |
update = true; | |
return ; | |
} | |
} | |
@Override | |
public void finish() { | |
if (update) { | |
updateVariableTypeSelector(); | |
} | |
update = false; | |
} | |
} | |
}; | |
} | |
@Override | |
protected void addAllAdapters() { | |
super.addAllAdapters(); | |
VariableExtension varExt = (VariableExtension)ModelHelper.getExtension(getInput()); | |
if (varExt != null) fAdapters[0].addToObject(varExt); | |
} | |
/** | |
* @author IBM | |
* @author Michal Chmielewski (michal.chmielewski@oracle.com) | |
* @date May 15, 2007 | |
*/ | |
public class VariableTypeCallback implements VariableTypeSelector.Callback { | |
/** | |
* @see org.eclipse.bpel.ui.properties.VariableTypeSelector.Callback#selectRadioButton(int) | |
*/ | |
public void selectRadioButton(int index) { | |
Variable var = (Variable)getInput(); | |
VariableExtension varExt = (VariableExtension)ModelHelper.getExtension(var); | |
CompoundCommand command = new CompoundCommand(); | |
if ((var.getMessageType() != null) || (var.getType() != null) || (var.getXSDElement()) != null) { | |
command.add(new SetVariableTypeCommand(var, (Message)null)); | |
} | |
if ((varExt.getVariableKind() != index)) { | |
command.add(new SetVariableKindCommand(varExt, index)); | |
} | |
if (!command.isEmpty()) getCommandFramework().execute(wrapInShowContextCommand(command)); | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.VariableTypeSelector.Callback#selectXSDType(org.eclipse.xsd.XSDTypeDefinition) | |
*/ | |
public void selectXSDType(XSDTypeDefinition xsdType) { | |
Variable variable = (Variable)getInput(); | |
Command cmd = new SetVariableTypeCommand(variable, xsdType); | |
getCommandFramework().execute(wrapInShowContextCommand(cmd)); | |
} | |
/** (non-Javadoc) | |
* @see org.eclipse.bpel.ui.properties.VariableTypeSelector.Callback#selectXSDElement(org.eclipse.xsd.XSDElementDeclaration) | |
*/ | |
public void selectXSDElement(XSDElementDeclaration xsdElement) { | |
Variable variable = (Variable)getInput(); | |
Command cmd = new SetVariableTypeCommand(variable, xsdElement); | |
getCommandFramework().execute(wrapInShowContextCommand(cmd)); | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.VariableTypeSelector.Callback#selectMessageType(org.eclipse.wst.wsdl.Message) | |
*/ | |
public void selectMessageType(Message message) { | |
Variable variable = (Variable)getInput(); | |
Command cmd = new SetVariableTypeCommand(variable, message); | |
getCommandFramework().execute(wrapInShowContextCommand(cmd)); | |
} | |
} | |
@Override | |
protected void createClient(Composite parent) { | |
Composite composite = parentComposite = createFlatFormComposite(parent); | |
// https://issues.jboss.org/browse/JBIDE-8045 | |
variableTypeSelector = new VariableTypeSelector(composite, SWT.NONE, getBPELEditor(), | |
fWidgetFactory, new VariableTypeCallback(), false, | |
TypeSelectorDialog.INCLUDE_ALL); | |
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); | |
variableTypeSelector.setLayoutData(data); | |
} | |
/** | |
* | |
*/ | |
public void updateVariableTypeSelector() { | |
variableTypeSelector.setVariable((Variable)getInput()); | |
updateMarkers(); | |
} | |
@Override | |
protected void basicSetInput(EObject newInput) { | |
super.basicSetInput(newInput); | |
updateVariableTypeSelector(); | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#getUserContext() | |
*/ | |
@Override | |
public Object getUserContext() { | |
return variableTypeSelector.getUserContext(); | |
} | |
/** | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#restoreUserContext(java.lang.Object) | |
*/ | |
@Override | |
public void restoreUserContext(Object userContext) { | |
variableTypeSelector.restoreUserContext(userContext); | |
} | |
/** | |
* | |
* @see org.eclipse.bpel.ui.properties.BPELPropertySection#isValidMarker(org.eclipse.core.resources.IMarker) | |
*/ | |
@SuppressWarnings("nls") | |
@Override | |
public boolean isValidMarker (IMarker marker) { | |
String context = null; | |
try { | |
context = (String) marker.getAttribute("href.context"); | |
} catch (Exception ex) { | |
return false; | |
} | |
return "name".equals (context) == false; | |
} | |
@Override | |
protected void updateMarkers () { | |
variableTypeSelector.dataTypeLabel.clear(); | |
for(IMarker m : getMarkers(getInput())) { | |
variableTypeSelector.dataTypeLabel.addStatus(BPELUtil.adapt(m, IStatus.class)); | |
} | |
} | |
} |