blob: 547d8e66dfbbb0ebce2d057da1647821312021f5 [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.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.wsdl.Input;
import javax.wsdl.Output;
import javax.xml.namespace.QName;
import org.eclipse.bpel.common.extension.model.ExtensionMap;
import org.eclipse.bpel.common.extension.model.ExtensionmodelFactory;
import org.eclipse.bpel.common.extension.model.adapters.ExtendedObjectUserAdapter;
import org.eclipse.bpel.model.Activity;
import org.eclipse.bpel.model.Assign;
import org.eclipse.bpel.model.BPELFactory;
import org.eclipse.bpel.model.BPELPackage;
import org.eclipse.bpel.model.Catch;
import org.eclipse.bpel.model.CatchAll;
import org.eclipse.bpel.model.CompensationHandler;
import org.eclipse.bpel.model.CorrelationSet;
import org.eclipse.bpel.model.Correlations;
import org.eclipse.bpel.model.Else;
import org.eclipse.bpel.model.ElseIf;
import org.eclipse.bpel.model.EventHandler;
import org.eclipse.bpel.model.FaultHandler;
import org.eclipse.bpel.model.ForEach;
import org.eclipse.bpel.model.FromParts;
import org.eclipse.bpel.model.If;
import org.eclipse.bpel.model.Import;
import org.eclipse.bpel.model.Invoke;
import org.eclipse.bpel.model.MessageExchange;
import org.eclipse.bpel.model.OnAlarm;
import org.eclipse.bpel.model.OnEvent;
import org.eclipse.bpel.model.OnMessage;
import org.eclipse.bpel.model.PartnerActivity;
import org.eclipse.bpel.model.PartnerLink;
import org.eclipse.bpel.model.Pick;
import org.eclipse.bpel.model.Process;
import org.eclipse.bpel.model.Receive;
import org.eclipse.bpel.model.RepeatUntil;
import org.eclipse.bpel.model.Reply;
import org.eclipse.bpel.model.Scope;
import org.eclipse.bpel.model.TerminationHandler;
import org.eclipse.bpel.model.Throw;
import org.eclipse.bpel.model.ToParts;
import org.eclipse.bpel.model.Validate;
import org.eclipse.bpel.model.Variable;
import org.eclipse.bpel.model.Variables;
import org.eclipse.bpel.model.While;
import org.eclipse.bpel.model.messageproperties.Property;
import org.eclipse.bpel.model.messageproperties.PropertyAlias;
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.model.util.BPELUtils;
import org.eclipse.bpel.model.util.ImportResolver;
import org.eclipse.bpel.model.util.ImportResolverRegistry;
import org.eclipse.bpel.ui.BPELEditor;
import org.eclipse.bpel.ui.IBPELUIConstants;
import org.eclipse.bpel.ui.Policy;
import org.eclipse.bpel.ui.adapters.IContainer;
import org.eclipse.bpel.ui.adapters.IExtensionFactory;
import org.eclipse.bpel.ui.adapters.INamedElement;
import org.eclipse.bpel.ui.commands.AddRoleCommand;
import org.eclipse.bpel.ui.commands.CompoundCommand;
import org.eclipse.bpel.ui.commands.CreatePartnerLinkTypeCommand;
import org.eclipse.bpel.ui.commands.SetPartnerLinkTypeCommand;
import org.eclipse.bpel.ui.commands.SetRoleCommand;
import org.eclipse.bpel.ui.commands.SetUniqueNameCommand;
import org.eclipse.bpel.ui.uiextensionmodel.ActivityExtension;
import org.eclipse.bpel.ui.uiextensionmodel.CaseExtension;
import org.eclipse.bpel.ui.uiextensionmodel.OnAlarmExtension;
import org.eclipse.bpel.ui.uiextensionmodel.OnEventExtension;
import org.eclipse.bpel.ui.uiextensionmodel.OnMessageExtension;
import org.eclipse.bpel.ui.uiextensionmodel.ProcessExtension;
import org.eclipse.bpel.ui.uiextensionmodel.StartNode;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.gef.commands.Command;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.ExtensibilityElement;
import org.eclipse.wst.wsdl.ExtensibleElement;
import org.eclipse.wst.wsdl.Fault;
import org.eclipse.wst.wsdl.Message;
import org.eclipse.wst.wsdl.Operation;
import org.eclipse.wst.wsdl.Part;
import org.eclipse.wst.wsdl.PortType;
import org.eclipse.wst.wsdl.WSDLPackage;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDTypeDefinition;
import org.eclipse.xsd.impl.XSDSchemaImpl;
import org.eclipse.xsd.util.XSDConstants;
/**
* This class provides a common interface (i.e. setXX/getXX/isXXAffected) to certain
* properties which exist across several model object types.
*
* Generally, you should only call the interfaces methods on model objects which
* support the particular property; generally, these helpers will throw
* IllegalArgumentException on objects which don't support the property in question.
* This is analogous to the way casting an object to an interface type would throw
* a ClassCastException if the object didn't support (implement) that interface.
*/
@SuppressWarnings("nls")
public class ModelHelper {
public static Object[] EMPTY_ARRAY = new Object[0];
// These constants are used by getVariable() and setVariable().
public static final int OUTGOING = 0;
public static final int INCOMING = 1;
public static final int NOT_SPECIFIED = 4;
// These constants are used by getRole() and setRole().
public static final int MY_ROLE = 0;
public static final int PARTNER_ROLE = 1;
public static String getDisplayName(Object context) {
if (context instanceof ElseIf) {
CaseExtension extension = (CaseExtension)getExtension((ElseIf)context);
return extension==null? null : extension.getDisplayName();
}
if (context instanceof OnMessage) {
OnMessageExtension extension = (OnMessageExtension)getExtension((OnMessage)context);
return extension==null? null : extension.getDisplayName();
}
if (context instanceof OnEvent) {
OnEventExtension extension = (OnEventExtension)getExtension((OnEvent)context);
return extension==null? null : extension.getDisplayName();
}
if (context instanceof OnAlarm) {
OnAlarmExtension extension = (OnAlarmExtension)getExtension((OnAlarm)context);
return extension==null? null : extension.getDisplayName();
}
return null;
}
public static boolean supportsJoinFailure(Object context) {
if (context instanceof Activity) return true;
if (context instanceof Process) return true;
return false;
}
public static boolean isSetSuppressJoinFailure(Object context) {
if (context instanceof Activity) return ((Activity)context).isSetSuppressJoinFailure();
if (context instanceof Process) return ((Process)context).isSetSuppressJoinFailure();
throw new IllegalArgumentException();
}
public static Boolean getSuppressJoinFailure2(Object context) {
if (context instanceof Activity) return ((Activity)context).getSuppressJoinFailure();
if (context instanceof Process) return ((Process)context).getSuppressJoinFailure();
throw new IllegalArgumentException();
}
// Hack to hide the fact that null is not the same as unset.
public static Boolean getSuppressJoinFailure(Object context) {
return isSetSuppressJoinFailure(context)? getSuppressJoinFailure2(context) : null;
}
public static void setSuppressJoinFailure(Object context, Boolean value) {
if (context instanceof Activity) {
if (value == null) {
((Activity)context).unsetSuppressJoinFailure(); return;
} else {
((Activity)context).setSuppressJoinFailure(value); return;
}
}
if (context instanceof Process) {
if (value == null) {
((Process)context).unsetSuppressJoinFailure(); return;
} else {
((Process)context).setSuppressJoinFailure(value); return;
}
}
throw new IllegalArgumentException();
}
public static boolean isSuppressJoinFailureAffected(Object context, Notification n) {
if (context instanceof Activity) {
return (n.getFeatureID(Activity.class) == BPELPackage.ACTIVITY__SUPPRESS_JOIN_FAILURE);
}
if (context instanceof Process) {
return (n.getFeatureID(Process.class) == BPELPackage.PROCESS__SUPPRESS_JOIN_FAILURE);
}
throw new IllegalArgumentException();
}
public static boolean isMessageActivity(Object context, int direction) {
switch (direction) {
case OUTGOING:
if (context instanceof Reply) return true;
if (context instanceof Invoke) return true;
break;
case INCOMING:
if (context instanceof Receive) return true;
if (context instanceof OnMessage) return true;
if (context instanceof OnEvent) return true;
if (context instanceof Invoke) {
// check if our operation exists and is two way!
// If it doesn't exist, return true anyways.
Operation op = ModelHelper.getOperation(context);
if (op != null)
if (op.getOutput() == null) return false;
return true;
}
break;
}
return false;
}
public static Variable getVariable(Object context, int direction) {
// This is the only activity that has 2 variables at this point.
if (context instanceof Invoke) {
if (direction == INCOMING) {
return ((Invoke)context).getOutputVariable();
}
return ((Invoke)context).getInputVariable();
}
if (context instanceof Reply) {
return ((Reply)context).getVariable();
}
if (context instanceof Throw) {
return ((Throw)context).getFaultVariable();
}
if (context instanceof Reply) {
return ((Reply)context).getVariable();
}
if (context instanceof Throw) {
return ((Throw)context).getFaultVariable();
}
if (context instanceof Receive) {
return ((Receive)context).getVariable();
}
if (context instanceof OnMessage) {
return ((OnMessage)context).getVariable();
}
if (context instanceof OnEvent) {
return ((OnEvent)context).getVariable();
}
if (context instanceof Catch) {
return ((Catch)context).getFaultVariable();
}
if (context instanceof ForEach) {
return ((ForEach)context).getCounterName();
}
throw new IllegalArgumentException("This model object has no variable to get"); //$NON-NLS-1$
}
public static void setVariable(Object context, Variable v, int direction) {
if (context instanceof Invoke) {
if (direction == INCOMING) {
((Invoke)context).setOutputVariable(v);
} else {
((Invoke)context).setInputVariable(v); return;
}
} else if (context instanceof Reply) {
((Reply)context).setVariable(v);
} else if (context instanceof Invoke) {
((Invoke)context).setInputVariable(v);
} else if (context instanceof Throw) {
((Throw)context).setFaultVariable(v);
} else if (context instanceof Receive) {
((Receive)context).setVariable(v);
} else if (context instanceof OnMessage) {
((OnMessage)context).setVariable(v);
} else if (context instanceof OnEvent) {
((OnEvent)context).setVariable(v);
} else if (context instanceof Invoke) {
((Invoke)context).setOutputVariable(v);
} else if (context instanceof Catch) {
((Catch)context).setFaultVariable(v);
} else if (context instanceof ForEach) {
((ForEach)context).setCounterName(v);
} else {
throw new IllegalArgumentException("This model object has no variable to set"); //$NON-NLS-1$
}
}
public static boolean isVariableAffected (Object context, Notification n, int direction) {
if (context instanceof Invoke) {
if (direction == INCOMING) {
return (n.getFeatureID(Invoke.class) == BPELPackage.INVOKE__OUTPUT_VARIABLE);
}
return (n.getFeatureID(Invoke.class) == BPELPackage.INVOKE__INPUT_VARIABLE);
}
if (context instanceof Reply) {
return (n.getFeatureID(Reply.class) == BPELPackage.REPLY__VARIABLE);
}
if (context instanceof Throw) {
return (n.getFeatureID(Throw.class) == BPELPackage.THROW__FAULT_VARIABLE);
}
if (context instanceof Receive) {
return (n.getFeatureID(Receive.class) == BPELPackage.RECEIVE__VARIABLE);
}
if (context instanceof OnMessage) {
return (n.getFeatureID(OnMessage.class) == BPELPackage.ON_MESSAGE__VARIABLE);
}
if (context instanceof OnEvent) {
return (n.getFeatureID(OnEvent.class) == BPELPackage.ON_EVENT__VARIABLE);
}
if (context instanceof Catch) {
return (n.getFeatureID(Catch.class) == BPELPackage.CATCH__FAULT_VARIABLE);
}
return false;
}
public static MessageExchange getMessageExchange(Object context) {
if (context instanceof Receive) {
return ((Receive)context).getMessageExchange();
}
if (context instanceof OnMessage) {
return ((OnMessage)context).getMessageExchange();
}
if (context instanceof OnEvent) {
return ((OnEvent)context).getMessageExchange();
}
if (context instanceof Reply) {
return ((Reply)context).getMessageExchange();
}
throw new IllegalArgumentException("Object has no message exchange."); //$NON-NLS-1$
}
public static void setMessageExchange(Object context, MessageExchange messageExchange) {
if (context instanceof Receive) {
((Receive)context).setMessageExchange(messageExchange); return;
}
if (context instanceof OnMessage) {
((OnMessage)context).setMessageExchange(messageExchange); return;
}
if (context instanceof OnEvent) {
((OnEvent)context).setMessageExchange(messageExchange); return;
}
if (context instanceof Reply) {
((Reply)context).setMessageExchange(messageExchange); return;
}
throw new IllegalArgumentException();
}
public static PartnerLink getPartnerLink(Object context) {
if (context instanceof Invoke) {
return ((Invoke)context).getPartnerLink();
}
if (context instanceof Receive) {
return ((Receive)context).getPartnerLink();
}
if (context instanceof OnMessage) {
return ((OnMessage)context).getPartnerLink();
}
if (context instanceof OnEvent) {
return ((OnEvent)context).getPartnerLink();
}
if (context instanceof Reply) {
return ((Reply)context).getPartnerLink();
}
throw new IllegalArgumentException("Object has no partner link."); //$NON-NLS-1$
}
public static void setPartnerLink(Object context, PartnerLink partner) {
if (context instanceof Invoke) {
((Invoke)context).setPartnerLink(partner); return;
}
if (context instanceof Receive) {
((Receive)context).setPartnerLink(partner); return;
}
if (context instanceof OnMessage) {
((OnMessage)context).setPartnerLink(partner); return;
}
if (context instanceof OnEvent) {
((OnEvent)context).setPartnerLink(partner); return;
}
if (context instanceof Reply) {
((Reply)context).setPartnerLink(partner); return;
}
throw new IllegalArgumentException();
}
public static boolean isPartnerAffected(Object context, Notification n) {
if (context instanceof Invoke) {
return (n.getFeatureID(Invoke.class) == BPELPackage.INVOKE__PARTNER_LINK);
}
if (context instanceof Receive) {
return (n.getFeatureID(Receive.class) == BPELPackage.RECEIVE__PARTNER_LINK);
}
if (context instanceof OnMessage) {
return (n.getFeatureID(OnMessage.class) == BPELPackage.ON_MESSAGE__PARTNER_LINK);
}
if (context instanceof OnEvent) {
return (n.getFeatureID(OnEvent.class) == BPELPackage.ON_EVENT__PARTNER_LINK);
}
if (context instanceof Reply) {
return (n.getFeatureID(Reply.class) == BPELPackage.REPLY__PARTNER_LINK);
}
throw new IllegalArgumentException();
}
public static boolean isMessageExchangeAffected(Object context, Notification n) {
if (context instanceof Receive) {
return (n.getFeatureID(Receive.class) == BPELPackage.RECEIVE__MESSAGE_EXCHANGE);
}
if (context instanceof OnMessage) {
return (n.getFeatureID(OnMessage.class) == BPELPackage.ON_MESSAGE__MESSAGE_EXCHANGE);
}
if (context instanceof OnEvent) {
return (n.getFeatureID(OnEvent.class) == BPELPackage.ON_EVENT__MESSAGE_EXCHANGE);
}
if (context instanceof Reply) {
return (n.getFeatureID(Reply.class) == BPELPackage.REPLY__MESSAGE_EXCHANGE);
}
throw new IllegalArgumentException();
}
public static PortType getPortType(Object context) {
if (context instanceof Invoke) return ((Invoke)context).getPortType();
if (context instanceof Receive) return ((Receive)context).getPortType();
if (context instanceof OnMessage) return ((OnMessage)context).getPortType();
if (context instanceof OnEvent) return ((OnEvent)context).getPortType();
if (context instanceof Reply) return ((Reply)context).getPortType();
if (context instanceof Role) return (PortType)((Role)context).getPortType();
throw new IllegalArgumentException();
}
public static void setPortType(Object context, PortType portType) {
if (context instanceof Invoke) {
((Invoke)context).setPortType(portType); return;
}
if (context instanceof Receive) {
((Receive)context).setPortType(portType); return;
}
if (context instanceof OnMessage) {
((OnMessage)context).setPortType(portType); return;
}
if (context instanceof OnEvent) {
((OnEvent)context).setPortType(portType); return;
}
if (context instanceof Reply) {
((Reply)context).setPortType(portType); return;
}
if (context instanceof Role) {
((Role)context).setPortType(portType); return;
}
throw new IllegalArgumentException();
}
public static boolean isPortTypeAffected(Object context, Notification n) {
if (context instanceof Invoke) {
return (n.getFeatureID(Invoke.class) == BPELPackage.INVOKE__PORT_TYPE);
}
if (context instanceof Receive) {
return (n.getFeatureID(Receive.class) == BPELPackage.RECEIVE__PORT_TYPE);
}
if (context instanceof OnMessage) {
return (n.getFeatureID(OnMessage.class) == BPELPackage.ON_MESSAGE__PORT_TYPE);
}
if (context instanceof OnEvent) {
return (n.getFeatureID(OnEvent.class) == BPELPackage.ON_EVENT__PORT_TYPE);
}
if (context instanceof Reply) {
return (n.getFeatureID(Reply.class) == BPELPackage.REPLY__PORT_TYPE);
}
if (context instanceof Role) {
return (n.getFeatureID(Role.class) == PartnerlinktypePackage.ROLE__PORT_TYPE);
}
throw new IllegalArgumentException();
}
public static Operation getOperation(Object context) {
if (context instanceof Invoke) return ((Invoke)context).getOperation();
if (context instanceof Receive) return ((Receive)context).getOperation();
if (context instanceof OnMessage) return ((OnMessage)context).getOperation();
if (context instanceof OnEvent) return ((OnEvent)context).getOperation();
if (context instanceof Reply) return ((Reply)context).getOperation();
throw new IllegalArgumentException();
}
public static void setOperation(Object context, Operation operation) {
if (context instanceof Invoke) {
((Invoke)context).setOperation(operation); return;
}
if (context instanceof Receive) {
((Receive)context).setOperation(operation); return;
}
if (context instanceof OnMessage) {
((OnMessage)context).setOperation(operation); return;
}
if (context instanceof OnEvent) {
((OnEvent)context).setOperation(operation); return;
}
if (context instanceof Reply) {
((Reply)context).setOperation(operation); return;
}
throw new IllegalArgumentException();
}
public static boolean isOperationAffected(Object context, Notification n) {
if (context instanceof Invoke) {
return (n.getFeatureID(Invoke.class) == BPELPackage.INVOKE__OPERATION);
}
if (context instanceof Receive) {
return (n.getFeatureID(Receive.class) == BPELPackage.RECEIVE__OPERATION);
}
if (context instanceof OnMessage) {
return (n.getFeatureID(OnMessage.class) == BPELPackage.ON_MESSAGE__OPERATION);
}
if (context instanceof OnEvent) {
return (n.getFeatureID(OnEvent.class) == BPELPackage.ON_EVENT__OPERATION);
}
if (context instanceof Reply) {
return (n.getFeatureID(Reply.class) == BPELPackage.REPLY__OPERATION);
}
throw new IllegalArgumentException();
}
public static Boolean getCreateInstance(Object context) {
if (context instanceof Receive) return ((Receive)context).getCreateInstance();
if (context instanceof Pick) return ((Pick)context).getCreateInstance();
throw new IllegalArgumentException();
}
public static Boolean getValidate(Object context) {
if (context instanceof Assign) return ((Assign)context).getValidate();
throw new IllegalArgumentException();
}
public static void setCreateInstance(Object context, Boolean createInstance) {
if (context instanceof Receive) {
((Receive)context).setCreateInstance(createInstance); return;
}
if (context instanceof Pick) {
((Pick)context).setCreateInstance(createInstance); return;
}
throw new IllegalArgumentException();
}
public static void setValidate(Object context, Boolean validateXML) {
if (context instanceof Assign) {
((Assign)context).setValidate(validateXML); return;
}
throw new IllegalArgumentException();
}
public static boolean isCreateInstanceAffected(Object context, Notification n) {
if (context instanceof Receive) {
return (n.getFeatureID(Receive.class) == BPELPackage.RECEIVE__CREATE_INSTANCE);
}
if (context instanceof Pick) {
return (n.getFeatureID(Pick.class) == BPELPackage.PICK__CREATE_INSTANCE);
}
throw new IllegalArgumentException();
}
public static String getFaultName(Object context) {
QName qname = getFaultQName(context);
return (qname == null)? null : qname.getLocalPart();
}
public static QName getFaultQName(Object context) {
if (context instanceof Throw) {
return ((Throw)context).getFaultName();
}
if (context instanceof Catch) {
return ((Catch)context).getFaultName();
}
if (context instanceof Reply) {
return ((Reply)context).getFaultName();
}
throw new IllegalArgumentException();
}
public static void setFaultName(Object context, String faultName) {
if (context instanceof Throw) {
String oldNS = getFaultNamespace(context);
QName newQName = null;
newQName = new QName(oldNS, faultName == null || faultName.equals("") ? ((Throw)context).getName() + "DefaultFaultName" : faultName);
((Throw)context).setFaultName(newQName); return;
}
if (context instanceof Catch) {
String oldNS = getFaultNamespace(context);
QName newQName = null;
if (faultName != null) newQName = new QName(oldNS, faultName);
((Catch)context).setFaultName(newQName); return;
}
if (context instanceof Reply) {
String oldNS = getFaultNamespace(context);
QName newQName = null;
if (faultName != null) newQName = new QName(oldNS, faultName);
((Reply)context).setFaultName(newQName); return;
}
throw new IllegalArgumentException();
}
public static boolean isFaultNameAffected(Object context, Notification n) {
if (context instanceof Throw) {
return (n.getFeatureID(Throw.class) == BPELPackage.THROW__FAULT_NAME);
}
if (context instanceof Catch) {
return (n.getFeatureID(Catch.class) == BPELPackage.CATCH__FAULT_NAME);
}
if (context instanceof Reply) {
return (n.getFeatureID(Reply.class) == BPELPackage.REPLY__FAULT_NAME);
}
throw new IllegalArgumentException();
}
public static String getFaultNamespace(Object context) {
if (context instanceof Throw) {
QName qname = ((Throw)context).getFaultName();
return (qname == null)? null : qname.getNamespaceURI();
}
if (context instanceof Catch) {
QName qname = ((Catch)context).getFaultName();
return (qname == null)? null : qname.getNamespaceURI();
}
if (context instanceof Reply) {
QName qname = ((Reply)context).getFaultName();
return (qname == null)? null : qname.getNamespaceURI();
}
throw new IllegalArgumentException();
}
public static void setFaultNamespace(Object context, String faultNS) {
if (context instanceof Throw) {
String oldName = getFaultName(context);
QName newQName = null;
newQName = new QName(faultNS, oldName == null || oldName.equals("") ? ((Throw)context).getName() + "DefaultFaultName" : oldName);
((Throw)context).setFaultName(newQName); return;
}
if (context instanceof Catch) {
String oldName = getFaultName(context);
QName newQName = null;
if (oldName != null) newQName = new QName(faultNS, oldName);
((Catch)context).setFaultName(newQName); return;
}
if (context instanceof Reply) {
String oldName = getFaultName(context);
QName newQName = null;
if (oldName != null) newQName = new QName(faultNS, oldName);
((Reply)context).setFaultName(newQName); return;
}
throw new IllegalArgumentException();
}
public static boolean isFaultNamespaceAffected(Object context, Notification n) {
return isFaultNameAffected(context, n);
}
public static boolean isSingleActivityContainer(Object context) {
if (context instanceof ElseIf) return true;
if (context instanceof Else) return true;
if (context instanceof Catch) return true;
if (context instanceof CatchAll) return true;
if (context instanceof OnAlarm) return true;
if (context instanceof OnMessage) return true;
if (context instanceof OnEvent) return true;
if (context instanceof Process) return true;
if (context instanceof While) return true;
if (context instanceof RepeatUntil) return true;
return false;
}
public static Activity getActivity(Object context) {
if (context instanceof ElseIf) return ((ElseIf)context).getActivity();
if (context instanceof Else) return ((Else)context).getActivity();
if (context instanceof Catch) return ((Catch)context).getActivity();
if (context instanceof CatchAll) return ((CatchAll)context).getActivity();
if (context instanceof OnAlarm) return ((OnAlarm)context).getActivity();
if (context instanceof OnMessage) return ((OnMessage)context).getActivity();
if (context instanceof OnEvent) return ((OnEvent)context).getActivity();
if (context instanceof Process) return ((Process)context).getActivity();
if (context instanceof While) return ((While)context).getActivity();
if (context instanceof RepeatUntil) return ((RepeatUntil)context).getActivity();
if (context instanceof Scope) return ((Scope)context).getActivity();
if (context instanceof FaultHandler) return getCatchAll((FaultHandler)context);
if (context instanceof CompensationHandler) return ((CompensationHandler)context).getActivity();
if (context instanceof TerminationHandler) return ((TerminationHandler)context).getActivity();
if (context instanceof If) return ((If) context).getActivity();
if (context instanceof ForEach) {
return ((ForEach)context).getActivity();
}
throw new IllegalArgumentException("ModelHelper.getActivity() - no activity for this context");
}
// TODO: this method is never called - remove it???
public static void setActivity(Object context, Activity activity) {
if (context instanceof ElseIf) {
((ElseIf)context).setActivity(activity); return;
}
if (context instanceof Else) {
((Else)context).setActivity(activity); return;
}
if (context instanceof Catch) {
((Catch)context).setActivity(activity); return;
}
if (context instanceof CatchAll) {
((CatchAll)context).setActivity(activity); return;
}
if (context instanceof OnAlarm) {
((OnAlarm)context).setActivity(activity); return;
}
if (context instanceof OnMessage) {
((OnMessage)context).setActivity(activity); return;
}
if (context instanceof OnEvent) {
((OnEvent)context).setActivity(activity); return;
}
if (context instanceof Process) {
((Process)context).setActivity(activity); return;
}
if (context instanceof While) {
((While)context).setActivity(activity); return;
}
if (context instanceof RepeatUntil) {
((RepeatUntil)context).setActivity(activity); return;
}
if (context instanceof Scope) {
((Scope)context).setActivity(activity); return;
}
if (context instanceof FaultHandler) {
setCatchAll((FaultHandler)context, activity); return;
}
if (context instanceof CompensationHandler) {
((CompensationHandler)context).setActivity(activity); return;
}
if (context instanceof TerminationHandler) {
((TerminationHandler)context).setActivity(activity); return;
}
if (context instanceof If) {
setElse((If)context, activity); return;
}
if (context instanceof ForEach) {
((ForEach)context).setActivity(activity);
return;
}
//TODO: ELSEIF ???
throw new IllegalArgumentException("ModelHelper.setActivity() - cannot set activity in this context");
}
// TODO: this method is never called - remove it???
public static boolean isActivityAffected(Object context, Notification n) {
if (context instanceof ElseIf) {
return (n.getFeatureID(ElseIf.class) == BPELPackage.ELSE_IF__ACTIVITY);
}
if (context instanceof Catch) {
return (n.getFeatureID(Catch.class) == BPELPackage.CATCH__ACTIVITY);
}
if (context instanceof OnAlarm) {
return (n.getFeatureID(OnAlarm.class) == BPELPackage.ON_ALARM__ACTIVITY);
}
if (context instanceof OnMessage) {
return (n.getFeatureID(OnMessage.class) == BPELPackage.ON_MESSAGE__ACTIVITY);
}
if (context instanceof OnEvent) {
return (n.getFeatureID(OnEvent.class) == BPELPackage.ON_EVENT__ACTIVITY);
}
if (context instanceof Process) {
return (n.getFeatureID(Process.class) == BPELPackage.PROCESS__ACTIVITY);
}
if (context instanceof While) {
return (n.getFeatureID(While.class) == BPELPackage.WHILE__ACTIVITY);
}
if (context instanceof RepeatUntil) {
return (n.getFeatureID(RepeatUntil.class) == BPELPackage.REPEAT_UNTIL__ACTIVITY);
}
if (context instanceof Scope) {
return (n.getFeatureID(Scope.class) == BPELPackage.SCOPE__ACTIVITY);
}
if (context instanceof CompensationHandler) {
return (n.getFeatureID(CompensationHandler.class) == BPELPackage.COMPENSATION_HANDLER__ACTIVITY);
}
if (context instanceof TerminationHandler) {
return (n.getFeatureID(TerminationHandler.class) == BPELPackage.TERMINATION_HANDLER__ACTIVITY);
}
if (context instanceof FaultHandler) {
return isCatchAllAffected((FaultHandler)context, n);
}
if (context instanceof If) {
return isElseAffected((If)context, n);
}
throw new IllegalArgumentException();
}
public static Activity getCatchAll(FaultHandler faultHandler) {
CatchAll catchAll = faultHandler.getCatchAll();
return (catchAll == null)? null : catchAll.getActivity();
}
public static void setCatchAll(FaultHandler faultHandler, Activity activity) {
if (activity == null) {
faultHandler.setCatchAll(null);
} else if (faultHandler.getCatchAll() == null) {
CatchAll catchAll = BPELFactory.eINSTANCE.createCatchAll();
faultHandler.setCatchAll(catchAll);
catchAll.setActivity(activity);
} else {
faultHandler.getCatchAll().setActivity(activity);
}
}
public static boolean isCatchAllAffected(FaultHandler faultHandler, Notification n) {
if ((n.getNewValue() instanceof FaultHandler) || (n.getOldValue() instanceof FaultHandler)) {
return (n.getFeatureID(FaultHandler.class) == BPELPackage.FAULT_HANDLER__CATCH_ALL);
}
return (n.getFeatureID(CatchAll.class) == BPELPackage.CATCH_ALL__ACTIVITY);
}
// TODO: this method is never called - remove it???
public static Activity getElse(If _if) {
Else _else = _if.getElse();
return (_else == null)? null : _else.getActivity();
}
//TODO: this method is never called - remove it???
public static void setElse(If _if, Activity activity) {
if (activity == null) {
_if.setElse(null);
} else if (_if.getElse() == null) {
Else _else = BPELFactory.eINSTANCE.createElse();
_if.setElse(_else);
_else.setActivity(activity);
} else {
_if.getElse().setActivity(activity);
}
}
// TODO: this method is never called - remove it???
public static boolean isElseAffected(If _if, Notification n) {
if ((n.getNewValue() instanceof If) || (n.getOldValue() instanceof If)) {
return (n.getFeatureID(If.class) == BPELPackage.IF__ELSE);
}
return (n.getFeatureID(Else.class) == BPELPackage.ELSE__ACTIVITY);
}
public static boolean isRoleAffected(Object context, Notification n, int who) {
if (context instanceof PartnerLink) {
switch (who) {
case MY_ROLE:
return (n.getFeatureID(PartnerLink.class) == BPELPackage.PARTNER_LINK__MY_ROLE);
case PARTNER_ROLE:
return (n.getFeatureID(PartnerLink.class) == BPELPackage.PARTNER_LINK__PARTNER_ROLE);
}
}
throw new IllegalArgumentException();
}
public static Message getMessageType(Object context) {
if (context instanceof Variable) {
return ((Variable)context).getMessageType();
}
if (context instanceof PropertyAlias) {
return (Message)((PropertyAlias)context).getMessageType();
}
// https://issues.jboss.org/browse/JBIDE-8305
if (context instanceof OnEvent) {
return (Message)((OnEvent)context).getMessageType();
}
if (context instanceof org.eclipse.wst.wsdl.Input) {
return (Message)((org.eclipse.wst.wsdl.Input)context).getMessage();
}
throw new IllegalArgumentException();
}
public static void setMessageType(Object context, Message messageType) {
if (context instanceof Variable) {
((Variable)context).setMessageType(messageType); return;
}
if (context instanceof PropertyAlias) {
((PropertyAlias)context).setMessageType(messageType); return;
}
throw new IllegalArgumentException();
}
public static Correlations getCorrelations(Object context) {
if (context instanceof Receive) return ((Receive)context).getCorrelations();
if (context instanceof Invoke) return ((Invoke)context).getCorrelations();
if (context instanceof Reply) return ((Reply)context).getCorrelations();
if (context instanceof OnMessage) return ((OnMessage)context).getCorrelations();
if (context instanceof OnEvent) return ((OnEvent)context).getCorrelations();
throw new IllegalArgumentException();
}
static final Variable[] EMPTY_VARIABLE_LIST = new Variable[] {};
/**
*
* @param msg
* @return
*/
public static Variable[] getVariablesOfType (EObject context, final Message msg) {
return (Variable[]) ListMap.Map(
// List of visible variables
getVisibleVariables ( context ),
// select the ones that match the message type
new ListMap.Visitor() {
public Object visit(Object obj) {
Variable v = (Variable) obj;
return (v.getMessageType() == msg ? v : ListMap.IGNORE);
}
},
// make the return as (Variable[])
EMPTY_VARIABLE_LIST);
}
/**
*
* @param msg
* @return
*/
public static Variable[] getVariablesOfType (EObject context, final XSDElementDeclaration decl) {
return (Variable[]) ListMap.Map(
// Visible variables
getVisibleVariables ( context ),
// only the ones of the type requested
new ListMap.Visitor() {
public Object visit(Object obj) {
Variable v = (Variable) obj;
return (v.getXSDElement() == decl ? v : ListMap.IGNORE);
}
},
// make sure that the return of the type passed here
EMPTY_VARIABLE_LIST);
}
public static Variable[] getVisibleVariables ( EObject context ) {
List<Variable> list = new LinkedList<Variable>();
EObject refObj = context;
while (refObj != null) {
List<Variable> refList = null;
if (refObj instanceof Process) {
Process process = (Process) refObj;
Variables variables = process.getVariables();
refList = variables == null ? null : variables.getChildren();
} else if (refObj instanceof Scope) {
Scope scope = (Scope) refObj;
Variables variables = scope.getVariables();
refList = variables == null ? null : variables.getChildren();
}
// If there are variables at this level, then check for
// make sure that you only add the ones that are visible
// (no name hiding).
if (refList != null) {
Iterator<Variable> it = refList.iterator();
while (it.hasNext()) {
Variable next = it.next();
Object elm = ListMap.findElement(list,next,
new Comparator<Object>() {
public int compare(Object o1, Object o2) {
Variable v1 = (Variable)o1;
Variable v2 = (Variable)o2;
return v1.getName().compareTo( v2.getName() );
}
});
if (elm == null) {
list.add(next);
}
}
}
refObj = refObj.eContainer();
}
return list.toArray( EMPTY_VARIABLE_LIST );
}
public static Variables getVariables(Object context) {
if (context instanceof Process) return ((Process)context).getVariables();
if (context instanceof Scope) return ((Scope)context).getVariables();
throw new IllegalArgumentException();
}
public static EList<Variable> getValidateVariables(Object context) {
if (context instanceof Validate) return ((Validate)context).getVariables();
throw new IllegalArgumentException();
}
public static void setCorrelations(Object context, Correlations correlations) {
if (context instanceof Receive) {
((Receive)context).setCorrelations(correlations); return;
}
if (context instanceof Invoke) {
((Invoke)context).setCorrelations(correlations); return;
}
if (context instanceof Reply) {
((Reply)context).setCorrelations(correlations); return;
}
if (context instanceof OnMessage) {
((OnMessage)context).setCorrelations(correlations); return;
}
if (context instanceof OnEvent) {
((OnEvent)context).setCorrelations(correlations); return;
}
throw new IllegalArgumentException();
}
public static PortType getRolePortType(Role role) {
if (role == null) return null;
return (PortType)role.getPortType();
}
public static PortType getPartnerPortType(PartnerLink partner, int direction) {
if (partner != null) {
if (direction == ModelHelper.INCOMING) {
return getRolePortType(partner.getMyRole());
} else if (direction == ModelHelper.OUTGOING) {
return getRolePortType(partner.getPartnerRole());
}
}
return null;
}
public static Fault getWSDLFault(Object context) {
Operation operation = getOperation(context);
if (operation == null) return null;
String operationNS = operation.getEnclosingDefinition() != null?
operation.getEnclosingDefinition().getTargetNamespace() : null;
if (operationNS == null) return null;
if (!operationNS.equals(ModelHelper.getFaultNamespace(context))) return null;
String faultName = ModelHelper.getFaultName(context);
if (faultName == null || "".equals(faultName)) return null; //$NON-NLS-1$
for (Iterator<Fault> it = operation.getEFaults().iterator(); it.hasNext(); ) {
Fault fault = it.next();
if (faultName.equals(fault.getName())) return fault;
}
return null;
}
public static void setWSDLFault(Object context, Fault fault) {
QName newQName = fault==null? null : new QName(
fault.getEnclosingDefinition().getTargetNamespace(), fault.getName());
if (context instanceof Throw) {
((Throw)context).setFaultName(newQName); return;
}
if (context instanceof Catch) {
((Catch)context).setFaultName(newQName); return;
}
if (context instanceof Reply) {
((Reply)context).setFaultName(newQName); return;
}
throw new IllegalArgumentException();
}
/**
* Helper to get model extensions for a model object (e.g. BPEL Plus extensions).
*/
public static ExtensibilityElement getExtensibilityElement(Object input, Class clazz) {
if (!(input instanceof ExtensibleElement)) throw new IllegalArgumentException();
ExtensibleElement element = (ExtensibleElement)input;
for (Iterator<ExtensibilityElement> it = element.getExtensibilityElements().iterator(); it.hasNext(); ) {
ExtensibilityElement extension = it.next();
if (clazz.isInstance(extension)) return extension;
}
return null;
}
/**
* Another helper to get model extensions for a model object (e.g. BPEL Plus extensions).
* This one accepts an EClass instead of a Class.
*/
public static ExtensibilityElement getExtensibilityElement(Object input, EClass clazz) {
if (!(input instanceof ExtensibleElement)) throw new IllegalArgumentException();
ExtensibleElement element = (ExtensibleElement)input;
for (Iterator<ExtensibilityElement> it = element.getExtensibilityElements().iterator(); it.hasNext(); ) {
ExtensibilityElement extension = it.next();
if (clazz.isSuperTypeOf(extension.eClass())) return extension;
}
return null;
}
public static boolean isExtensionListAffected(Notification n) {
return (n.getFeatureID(ExtensibleElement.class) ==
WSDLPackage.EXTENSIBLE_ELEMENT__EEXTENSIBILITY_ELEMENTS);
}
/**
* Helper to create an extension (if necessary) and add it to the ExtensionMap.
* The ModelAutoUndoRecorder will do this automatically for any object that is
* inserted into the ResourceSet, so you should only need to call this if you
* have created new model objects and not yet added them to the ResourceSet and
* you want to do things to the extension.
*/
public static void createExtensionIfNecessary (ExtensionMap extensionMap, EObject input) {
if (extensionMap == null || input == null || input.eIsProxy()) return;
try {
if (extensionMap.get(input) != null) return;
} catch (NullPointerException e) {
// this is a bug in the ExtensionMapImpl.
// Just assume there is no extension (fall through)
}
// https://jira.jboss.org/browse/JBIDE-7520
extensionMap.remove(input);
// If it supports IExtensionFactory, create an extension and add it to the map.
IExtensionFactory extensionFactory = BPELUtil.adapt( input, IExtensionFactory.class);
if (extensionFactory != null) {
if (Policy.DEBUG) System.out.println("creating extension for: "+input); //$NON-NLS-1$
EObject extension = extensionFactory.createExtension(input);
if (extension != null) {
extensionMap.put(input, extension);
}
}
}
/**
* Helper to return the UIExtensionModel object (i.e. from our ExtensionMap) for a
* given object, without requiring the ExtensionMap as a parameter. If the object
* does not have a UIExtension, null is returned.
*/
public static EObject getExtension(EObject input) {
ExtendedObjectUserAdapter adapter = (ExtendedObjectUserAdapter)
ExtensionmodelFactory.eINSTANCE.getExtensionAdapter(input,
IBPELUIConstants.MODEL_EXTENSIONS_NAMESPACE);
return (adapter==null)? null : (EObject)adapter.get(input);
}
// TODO: is this unused?
public static FaultHandler getContainingFaultHandler(Object object) {
if (object instanceof Process) return null;
if (object instanceof FaultHandler) return (FaultHandler)object;
if (object instanceof EObject) {
return getContainingFaultHandler(((EObject)object).eContainer());
}
// Don't know what it is, probably not in a fault handler.
return null;
}
// TODO: is this unused?
public static CompensationHandler getContainingCompensationHandler(Object object) {
if (object instanceof Process) return null;
if (object instanceof CompensationHandler) return (CompensationHandler)object;
if (object instanceof EObject) {
return getContainingCompensationHandler(((EObject)object).eContainer());
}
// Don't know what it is, probably not in a compensation handler.
return null;
}
// TODO: is this unused?
public static EventHandler getContainingEventHandler(Object object) {
if (object instanceof Process) return null;
if (object instanceof EventHandler) return (EventHandler)object;
if (object instanceof EObject) {
return getContainingEventHandler(((EObject)object).eContainer());
}
// Don't know what it is, probably not in an event handler.
return null;
}
public static EObject getContainingScope(Object object) {
if (object instanceof Process) return (EObject)object;
if (object instanceof Scope) return (EObject)object;
if (object instanceof EObject) {
return getContainingScope(((EObject)object).eContainer());
}
return null;
}
// /**
// * Returns the root process for any model object
// **/
// public static Process getProcess(Object object) {
// if (object instanceof EObject) {
// // check if *this* is already the process object
// if (object instanceof Process)
// return (Process)object;
// EObject cont = ((EObject)object).eContainer();
// while (cont != null) {
// if (cont.eClass() == BPELPackage.eINSTANCE.getProcess())
// return (Process)cont;
// cont = cont.eContainer();
// }
// }
// return null;
// }
/**
* Checks to see if an object is contained by a specified parent
*/
public static boolean isChildContainedBy(Object modelParent, Object object) {
EObject cont = ((EObject)object).eContainer();
while (cont != null) {
if (modelParent == cont)
return true;
cont = cont.eContainer();
}
return false;
}
/**
* Adds the given modelObject and all of its contained objects to the given collection
* (where containment is determined by the IContainer heirarchy).
*/
public static void addSubtreeToCollection(Object modelObject, Collection<Object> collection) {
collection.add(modelObject);
IContainer container = BPELUtil.adapt(modelObject, IContainer.class);
if (container != null) {
for (Iterator it = container.getChildren(modelObject).iterator(); it.hasNext(); ) {
addSubtreeToCollection(it.next(), collection);
}
}
}
public static void setLocation(Activity activity, Point pos) {
ActivityExtension extension = (ActivityExtension)getExtension(activity);
if (extension != null) {
extension.setX(pos.x);
extension.setY(pos.y);
}
}
public static Point getLocation(Activity activity) {
ActivityExtension extension = (ActivityExtension)getExtension(activity);
// HACK! Sometimes we are refreshing the appearance in a batched adapter
// after the extension has been removed (when Undoing its creation for example).
if (extension == null) return new Point(0,0);
return new Point(extension.getX(), extension.getY());
}
public static void setSize(Activity activity, Dimension size) {
ActivityExtension extension = (ActivityExtension)getExtension(activity);
extension.setWidth(size.width);
extension.setHeight(size.height);
}
public static Dimension getSize(Activity activity) {
ActivityExtension extension = (ActivityExtension)getExtension(activity);
// HACK! Sometimes we are refreshing the appearance in a batched adapter
// after the extension has been removed (when Undoing its creation for example).
if (extension == null) return new Dimension(1,1);
return new Dimension(extension.getWidth(), extension.getHeight());
}
/**
* Given a model object (or Resource or ResourceSet), return the BPELEditor
* that this model belongs to.
*
* @throws IllegalArgumentException if modelObject is not EObject, Resource or ResourceSet.
*/
public static BPELEditor getBPELEditor(Object modelObject) {
if (modelObject instanceof StartNode) {
modelObject = ((StartNode)modelObject).getProcess();
}
if (modelObject instanceof EObject) {
Resource r = ((EObject)modelObject).eResource();
if (r != null) {
return BPELEditor.getBPELEditor(r.getResourceSet());
}
throw new IllegalArgumentException("EObject does not have an eResource()");
} else if (modelObject instanceof Resource) {
return BPELEditor.getBPELEditor(((Resource)modelObject).getResourceSet());
} else if (modelObject instanceof ResourceSet) {
return BPELEditor.getBPELEditor((ResourceSet)modelObject);
}
throw new IllegalArgumentException("Not an EObject/Resource/ResourceSet");
}
public static boolean isHorizontalLayout(Object modelObject) {
BPELEditor bpelEditor = ModelHelper.getBPELEditor(modelObject);
if (bpelEditor != null) {
return bpelEditor.isHorizontalLayout();
} else {
return false;
}
}
public static TreeIterator getAllContents(Object modelObject) {
if (modelObject instanceof EObject) {
return ((EObject)modelObject).eAllContents();
} else if (modelObject instanceof Resource) {
return ((Resource)modelObject).getAllContents();
} else if (modelObject instanceof ResourceSet) {
return ((ResourceSet)modelObject).getAllContents();
}
throw new IllegalArgumentException();
}
/**
* Searches the specified modelObject for a contained element with the
* specified name and of the specified type. Candidates are matched by
* using the INamedElement adapter.
*
* @param modelObject
* the object to search, must not be <code>null</code>
* @param name
* the name to look for, must not be <code>null</code>
* @param type
* the type to look for, may be <code>null</code> which
* matches any type
* @return the matching object or <code>null</code> if not found.
*/
static public Object findElementByName(EObject modelObject, String name, Class type)
{
Object result = null;
if (modelObject != null && name != null)
{
for (Iterator<EObject> i = modelObject.eAllContents(); result == null && i.hasNext();)
{
EObject model = i.next();
// Check type.
if (type == null || type.isInstance(model))
{
// Check name.
INamedElement namedElement = BPELUtil.adapt(model, INamedElement.class);
if (namedElement != null && name.equals(namedElement.getName(model)))
{
result = model;
}
}
}
}
return result;
}
/**
* Gets the variable type from the model object. The direction can be INCOMING or OUTGOING.
*/
public static EObject getVariableType(EObject container, int direction) {
if (container instanceof Invoke) {
Operation operation = ModelHelper.getOperation(container);
if (operation == null) return null;
if (direction == INCOMING) {
Output output = operation.getOutput();
return (output != null) ? (EObject)output.getMessage() : null;
} else if (direction == OUTGOING) {
Input input = operation.getInput();
return (input != null) ? (EObject)input.getMessage() : null;
} else {
return null;
}
}
if (container instanceof PartnerActivity
|| container instanceof OnMessage
|| container instanceof OnEvent) {
Operation operation = ModelHelper.getOperation(container);
if (operation == null) return null;
if (direction == INCOMING) {
Input input = operation.getInput();
return (input != null) ? (EObject)input.getMessage() : null;
} else if (direction == OUTGOING) {
Output output = operation.getOutput();
return (output != null) ? (EObject)output.getMessage() : null;
} else {
return null;
}
}
return null;
}
/**
* Given a Part or XSDElementDeclaration we figure out what would be a
* good type for a bundled/unbundled variable.
*/
public static Object getVariableTypeFrom(Object target) {
if (target instanceof Part) {
// A part can be typed as an element or a type
Part part = (Part)target;
if (part.getElementDeclaration() != null) {
return part.getElementDeclaration();
} else if (part.getTypeDefinition() != null) {
return part.getTypeDefinition();
}
} else if (target instanceof XSDElementDeclaration) {
XSDElementDeclaration element = (XSDElementDeclaration) BPELUtil.resolveXSDObject(target);
XSDTypeDefinition type = element.getTypeDefinition();
if (isAnonymousType(type)) {
return element;
}
return element.getTypeDefinition();
}
return null;
}
public static boolean isAnonymousType(XSDTypeDefinition type) {
return type.getName() == null || "".equals(type.getName()); //$NON-NLS-1$
}
/**
* Given a model object returns whether the process is supposed to be spec-compliant.
*/
public static boolean isSpecCompliant(EObject model) {
return ((ProcessExtension)getExtension(BPELUtils.getProcess(model))).isSpecCompliant();
}
public static boolean isReferencePartnerLink(PartnerLink partner) {
return partner.getPartnerRole() != null;
}
public static boolean isInterfacePartnerLink(PartnerLink partner) {
return partner.getMyRole() != null;
}
public static CompoundCommand getCreatePartnerLinkTypeCommand(Process process, PartnerLink partner, PartnerLinkType plt, Definition artifactsDefinition, int whichRole) {
CompoundCommand compound = new CompoundCommand();
compound.add(new SetUniqueNameCommand(process, partner));
compound.add(new CreatePartnerLinkTypeCommand(artifactsDefinition, plt, partner));
compound.add(new SetPartnerLinkTypeCommand(partner, plt));
compound.add(createSetRoleCommand(partner, plt, whichRole));
return compound;
}
public static Command createSetRoleCommand(PartnerLink partnerLink, PartnerLinkType plt, int whichRole) {
CompoundCommand cmd = new CompoundCommand();
Role role = PartnerlinktypeFactory.eINSTANCE.createRole();
role.setName((whichRole == ModelHelper.MY_ROLE) ? IBPELUIConstants.ROLE_NAME_MYROLE : IBPELUIConstants.ROLE_NAME_PARTNERROLE);
cmd.add(new AddRoleCommand(plt, role));
cmd.add(new SetRoleCommand(partnerLink, role, whichRole));
return cmd;
}
public static Set<Property> getAvailableProperties(Process process) {
Set<Property> properties = new HashSet<Property>();
// search in current process
// TODO: This doesn't work for Scoped correlation sets or those on OnEvents
List<CorrelationSet> sets = process.getCorrelationSets().getChildren();
for (Iterator<CorrelationSet> iter = sets.iterator(); iter.hasNext();) {
CorrelationSet set = iter.next();
for (Iterator<Property> iterator = set.getProperties().iterator(); iterator.hasNext();) {
properties.add(iterator.next());
}
}
// search in artifacts wsdl
BPELEditor bpelEditor = ModelHelper.getBPELEditor(process);
for (Iterator<EObject> iter = bpelEditor.getArtifactsDefinition().eAllContents(); iter.hasNext();) {
EObject element = iter.next();
if (element instanceof Property) {
properties.add((Property) element);
}
}
return properties;
}
/**
* Return the imported document, based on the import passed.
*
* @param imp
* @return the imported document model or null, if it cannot be constructed.
*/
static public EObject getImportedDocument ( Import imp ) {
ImportResolver[] resolvers = ImportResolverRegistry.INSTANCE.getResolvers(imp.getImportType());
for (int i = 0; i < resolvers.length ; i++)
{
EObject result = resolvers[i].resolve(imp, null, null, null );
if (result != null) {
return result;
}
}
return null;
}
/**
* Return the list of schemas that are imported in this BPEL resource.
* This includes XSD imports and schemas present in WSDLs as well.
*
* @param context object within the BPEL object model hierarchy
* @param bIncludeXSD whether the XSD standard schemas ought to be included
* regardless of import.
*
* @return a list of XSDScheme objects
*/
static public List getSchemas ( Object context, boolean bIncludeXSD )
{
ArrayList al = new ArrayList(8);
// Try the BPEL imports if any exist.
Process process = BPELUtils.getProcess(context);
if (process == null) {
return al;
}
Iterator<Import> it = process.getImports().iterator();
while ( it.hasNext() )
{
Import imp = it.next();
if (imp.getLocation() == null ) {
continue;
}
ImportResolver[] resolvers = ImportResolverRegistry.INSTANCE.getResolvers(imp.getImportType());
for (int i = 0; i < resolvers.length; i++)
{
al.addAll( resolvers[i].resolve (imp, ImportResolver.RESOLVE_SCHEMA ) );
}
// next import
}
if (bIncludeXSD) {
al.add ( XSDSchemaImpl.getSchemaForSchema( XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001 ) );
}
return al;
}
/**
* Get the definitions that are included in this BPEL (via the WSDL imports)
*
* @return
*/
static public List<Definition> getDefinitions ( Object context ) {
ArrayList<Definition> al = new ArrayList<Definition>(8);
// Try the BPEL imports if any exist.
Process process = BPELUtils.getProcess( context );
if (process == null) {
return al;
}
Iterator<Import> it = process.getImports().iterator();
while ( it.hasNext() )
{
Import imp = it.next();
if (imp.getLocation() == null ) {
continue;
}
ImportResolver[] resolvers = ImportResolverRegistry.INSTANCE.getResolvers(imp.getImportType());
for (int i = 0; i < resolvers.length; i++)
{
al.addAll( (Collection<? extends Definition>) resolvers[i].resolve (imp, ImportResolver.RESOLVE_DEFINITION ) );
}
// next import
}
// If the artifacts are not imported yet, then add them to the list here as well.
Definition artifacts = ModelHelper.getBPELEditor(process).getArtifactsDefinition();
if (al.contains(artifacts) == false) {
al.add(artifacts);
}
return al;
}
/**
* Answer if the process already contains an import specified by this import object.
*
* @param modelObject a context object from the model
* @param imp the import in question
* @return true if yes, false if no
*/
public static boolean containsImport (Object modelObject, Import imp) {
Process process = BPELUtils.getProcess(modelObject);
if (process == null) {
return false;
}
EList<Import> imports = process.getImports();
// this checks for identity
if (imports.contains( imp )) {
return true;
}
// Don't add the import if it already exists ...
Iterator<Import> i = imports.iterator();
boolean bExists = false;
while (i.hasNext() && !bExists) {
Import n = i.next();
bExists = isEqual ( n.getImportType(), imp.getImportType() ) &&
isEqual ( n.getLocation(), imp.getLocation() ) &&
isEqual ( n.getNamespace(), imp.getNamespace() ) ;
}
return bExists;
}
/**
* Return true of both strings are the same or null.
*
* @param s1
* @param s2
* @return
*/
static public boolean isEqual ( String s1, String s2 ) {
return s1 != null ? s1.equals(s2) : s2 == null;
}
public static ToParts getToParts(EObject model) {
if (model instanceof Invoke) {
return ((Invoke) model).getToParts();
}
if (model instanceof Reply) {
return ((Reply) model).getToParts();
}
throw new IllegalArgumentException("This model object has no toParts to get"); //$NON-NLS-1$
}
public static void setToParts(EObject context, ToParts toParts) {
if (context instanceof Reply) {
((Reply) context).setToParts(toParts);
return;
}
if (context instanceof Invoke) {
((Invoke) context).setToParts(toParts);
return;
}
throw new IllegalArgumentException("toParts cannot be set to this model object"); //$NON-NLS-1$
}
public static FromParts getFromParts(EObject model) {
if (model instanceof Invoke) {
return ((Invoke) model).getFromParts();
}
if (model instanceof Receive) {
return ((Receive) model).getFromParts();
}
if (model instanceof OnMessage) {
return ((OnMessage) model).getFromParts();
}
if (model instanceof OnEvent) {
return ((OnEvent) model).getFromParts();
}
throw new IllegalArgumentException("This model object has no fromParts to get"); //$NON-NLS-1$
}
public static void setFromParts(EObject context, FromParts fromParts) {
if (context instanceof Receive) {
((Receive) context).setFromParts(fromParts);
return;
}
if (context instanceof Invoke) {
((Invoke) context).setFromParts(fromParts);
return;
}
if (context instanceof OnMessage) {
((OnMessage) context).setFromParts(fromParts);
return;
}
if (context instanceof OnEvent) {
((OnEvent) context).setFromParts(fromParts);
return;
}
throw new IllegalArgumentException("fromParts cannot be set to this model object"); //$NON-NLS-1$
}
}