public class EcoreEvaluationEnvironment extends AbstractEvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject> implements EvaluationEnvironment.Enumerations<org.eclipse.emf.ecore.EEnumLiteral>, EvaluationEnvironmentWithHiddenOpposites
EvaluationEnvironment
for evaluation of OCL
expressions on instances of Ecore models (i.e., on M0 models).AbstractEvaluationEnvironment.AbstractTuple<O,P>
EvaluationEnvironment.Enumerations<EL>
Constructor and Description |
---|
EcoreEvaluationEnvironment()
Deprecated.
A root evaluation environment should be created through the correspondent
EcoreEnvironmentFactory |
EcoreEvaluationEnvironment(EcoreEnvironmentFactory factory)
Initializes me.
|
EcoreEvaluationEnvironment(EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject> parent)
Initializes me with my parent evaluation environment (nesting scope).
|
Modifier and Type | Method and Description |
---|---|
java.lang.Object |
callOperation(org.eclipse.emf.ecore.EOperation operation,
int opcode,
java.lang.Object source,
java.lang.Object[] args)
Implements the inherited method by attempting to find an appropriate
Java method in the actual type of the source object and invoking
it.
|
protected java.lang.Exception |
checkOperationReflectionConsistency(java.lang.Object source)
Check if the provided source object has support for a delegated invocation
of an OCL expression body.
|
protected java.lang.Object |
coerceValue(org.eclipse.emf.ecore.ETypedElement element,
java.lang.Object value,
boolean copy)
Coerces the value of the specified typed element into the appropriate
representation, derived from the supplied
value template. |
java.util.Map<org.eclipse.emf.ecore.EClass,java.util.Set<org.eclipse.emf.ecore.EObject>> |
createExtentMap(java.lang.Object object)
Creates an extent map for invocation of OclType.allInstances()
using the specified
object as a context from which to find
the scope in which OCL classifier extents are defined. |
Tuple<org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature> |
createTuple(org.eclipse.emf.ecore.EClassifier type,
java.util.Map<org.eclipse.emf.ecore.EStructuralFeature,java.lang.Object> values)
Creates a new tuple instance.
|
protected static CollectionKind |
getCollectionKind(org.eclipse.emf.ecore.ETypedElement element)
Obtains the collection kind appropriate for representing the values of
the specified typed element.
|
protected java.lang.Object |
getInvalidResult()
Obtains the language-binding-specific representation of the predefined
OclInvalid object.
|
protected java.lang.reflect.Method |
getJavaMethodFor(org.eclipse.emf.ecore.EOperation operation,
java.lang.Object receiver)
Returns the java method that corresponds to the supplied
EOperation |
org.eclipse.emf.ecore.EClassifier |
getType(java.lang.Object object)
Queries the type of the specified object.
|
org.eclipse.emf.common.util.Enumerator |
getValue(org.eclipse.emf.ecore.EEnumLiteral enumerationLiteral)
Ecore implementation of the enumeration literal value.
|
boolean |
isKindOf(java.lang.Object object,
org.eclipse.emf.ecore.EClassifier classifier)
Queries whether an object is an instance of the specified classifier or
some specialization thereof.
|
boolean |
isTypeOf(java.lang.Object object,
org.eclipse.emf.ecore.EClassifier classifier)
Queries whether an object's type is the specified classifier.
|
java.lang.Object |
navigateAssociationClass(org.eclipse.emf.ecore.EClassifier associationClass,
org.eclipse.emf.ecore.EStructuralFeature navigationSource,
java.lang.Object target)
Obtains the instance of the specified association class that links the
specified source element, optionally via the specified property.
|
java.lang.Object |
navigateOppositeProperty(org.eclipse.emf.ecore.EReference property,
java.lang.Object target)
Obtains the value of the specified operation, for the given source element,
according to the particular metamodel semantics.
|
java.lang.Object |
navigateProperty(org.eclipse.emf.ecore.EStructuralFeature property,
java.util.List<?> qualifiers,
java.lang.Object target)
Obtains the value of the specified operation, for the given source element,
according to the particular metamodel semantics.
|
void |
setOperationReflectionCheckDisabled(boolean checkDisabled)
Configure the check that an incorrect usage of "Operation Reflection"
false in a genmodel has omitted the eInvoke override.
|
add, basicGetOptions, clear, clearOptions, getAdapter, getOptions, getParent, getValue, getValueOf, isEnabled, overrides, putOptions, remove, removeOption, removeOptions, replace, setOption, toString
public EcoreEvaluationEnvironment()
EcoreEnvironmentFactory
public EcoreEvaluationEnvironment(EcoreEnvironmentFactory factory)
public EcoreEvaluationEnvironment(EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject> parent)
parent
- my parent (nesting scope); must not be null
public java.lang.Object callOperation(org.eclipse.emf.ecore.EOperation operation, int opcode, java.lang.Object source, java.lang.Object[] args) throws java.lang.IllegalArgumentException
AbstractEvaluationEnvironment
callOperation
in interface EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
callOperation
in class AbstractEvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
operation
- the operation to invokeopcode
- the operation code, if this is an OCL Standard Library
operation (which this environment overrides)source
- the source element on which the operation is invokedargs
- the arguments, or an empty array if nonejava.lang.IllegalArgumentException
- if the operation is not supported
by this environmentprotected java.lang.reflect.Method getJavaMethodFor(org.eclipse.emf.ecore.EOperation operation, java.lang.Object receiver)
AbstractEvaluationEnvironment
EOperation
getJavaMethodFor
in class AbstractEvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
operation
- the operationprotected java.lang.Object getInvalidResult()
AbstractEvaluationEnvironment
getInvalidResult
in class AbstractEvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
public java.lang.Object navigateProperty(org.eclipse.emf.ecore.EStructuralFeature property, java.util.List<?> qualifiers, java.lang.Object target) throws java.lang.IllegalArgumentException
EvaluationEnvironment
navigateProperty
in interface EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
property
- the property to navigatequalifiers
- the association-end qualifier values, or an empty list
if nonetarget
- the source element owning the property valuejava.lang.IllegalArgumentException
- if the property is not supported by the
element or by this environmentprotected static CollectionKind getCollectionKind(org.eclipse.emf.ecore.ETypedElement element)
element
- a typed element (property, operation, etc.)null
if it is not
manyprotected java.lang.Object coerceValue(org.eclipse.emf.ecore.ETypedElement element, java.lang.Object value, boolean copy)
value
template.
The value
is coerced to the appropriate collection kind for
this element (or scalar if not multi-valued). The original value may
either be used as is where possible or, optionally, copied into the new
collection (if multi-valued).element
- a typed element (property, operation, etc.)value
- the computed value of the elementcopy
- whether to copy the specified value into the resulting
collection/scalar valuegetCollectionKind(ETypedElement)
public java.lang.Object navigateAssociationClass(org.eclipse.emf.ecore.EClassifier associationClass, org.eclipse.emf.ecore.EStructuralFeature navigationSource, java.lang.Object target) throws java.lang.IllegalArgumentException
EvaluationEnvironment
navigateAssociationClass
in interface EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
associationClass
- the association class to navigate tonavigationSource
- in case of ambiguity, the property of the
source element's classifier through which to navigate to the
association classtarget
- the source element from which to navigatejava.lang.IllegalArgumentException
- if the association class is not
associated with the source element, or is not supported by this
environmentpublic Tuple<org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature> createTuple(org.eclipse.emf.ecore.EClassifier type, java.util.Map<org.eclipse.emf.ecore.EStructuralFeature,java.lang.Object> values)
EvaluationEnvironment
createTuple
in interface EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
type
- the type (a TupleType
) of the tuple to be createdvalues
- a mapping of the tuple partspublic java.util.Map<org.eclipse.emf.ecore.EClass,java.util.Set<org.eclipse.emf.ecore.EObject>> createExtentMap(java.lang.Object object)
EvaluationEnvironment
object
as a context from which to find
the scope in which OCL classifier extents are defined. This scope may
be a resource, resource set, or some metamodel-specific scope. Note that
in the case that the object
is not an
EObject
but is, instead, some primitive
type, then this may be difficult to determine.
Clients are encouraged to do what they can to optimize this mapping, by
lazy initialization of key-value pairs, workspace indices, or whatever
means is available. Note that the map will only ever be accessed by
key (Map.get(java.lang.Object)
); it will never be queried for
all entries, all keys, all values, etc. This knowledge could help
optimization.
createExtentMap
in interface EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
object
- a context object in the scope that covers the OCL
classifier extentspublic boolean isKindOf(java.lang.Object object, org.eclipse.emf.ecore.EClassifier classifier)
EvaluationEnvironment
isKindOf
in interface EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
object
- an objectclassifier
- a classifiertrue
if the specified classifier is the object's
type or some supertype thereof; false
, otherwisepublic boolean isTypeOf(java.lang.Object object, org.eclipse.emf.ecore.EClassifier classifier)
EvaluationEnvironment
isTypeOf
in interface EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
object
- an objectclassifier
- a classifiertrue
if ths specified classifier is the object's
type; false
, otherwisepublic org.eclipse.emf.ecore.EClassifier getType(java.lang.Object object)
EvaluationEnvironment
getType
in interface EvaluationEnvironment<org.eclipse.emf.ecore.EClassifier,org.eclipse.emf.ecore.EOperation,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EClass,org.eclipse.emf.ecore.EObject>
object
- an objectpublic org.eclipse.emf.common.util.Enumerator getValue(org.eclipse.emf.ecore.EEnumLiteral enumerationLiteral)
getValue
in interface EvaluationEnvironment.Enumerations<org.eclipse.emf.ecore.EEnumLiteral>
enumerationLiteral
- the enumeration literal model elementpublic void setOperationReflectionCheckDisabled(boolean checkDisabled)
The check is enabled by default.
checkDisabled
- true to disable the checkprotected java.lang.Exception checkOperationReflectionConsistency(java.lang.Object source)
Missing support is the result of a failure to change the default genmodel 'Operation Reflection' setting to true.
Lack of support is tested by checking for a missing override of
EOperationImpl.eInvoke(int, EList)
.
source
- the object to checkpublic java.lang.Object navigateOppositeProperty(org.eclipse.emf.ecore.EReference property, java.lang.Object target) throws java.lang.IllegalArgumentException
EvaluationEnvironmentWithHiddenOpposites
navigateOppositeProperty
in interface EvaluationEnvironmentWithHiddenOpposites
property
- the property to navigate in reverse directiontarget
- the source element from where to start navigating / queryingjava.lang.IllegalArgumentException
- if the property is not supported by the
element or by this environment