Class RuleImpl

java.lang.Object
org.eclipse.emf.common.notify.impl.BasicNotifierImpl
org.eclipse.emf.ecore.impl.BasicEObjectImpl
org.eclipse.emf.ecore.impl.EObjectImpl
org.eclipse.m2m.atl.emftvm.impl.NamedElementImpl
org.eclipse.m2m.atl.emftvm.impl.RuleImpl
All Implemented Interfaces:
org.eclipse.emf.common.notify.Notifier, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.InternalEObject, NamedElement, Rule

public class RuleImpl extends NamedElementImpl implements Rule
An implementation of the model object 'Rule'.
  • Field Details

  • Constructor Details

    • RuleImpl

      protected RuleImpl()
      Creates a new RuleImpl.
  • Method Details

    • eStaticClass

      protected org.eclipse.emf.ecore.EClass eStaticClass()
      Returns the EClass that correspond to this metaclass.
      Overrides:
      eStaticClass in class NamedElementImpl
      Returns:
      the EClass that correspond to this metaclass.
    • getModule

      public Module getModule()
      Returns the value of the 'Module' container reference. It is bidirectional and its opposite is 'Rules'.

      If the meaning of the 'Module' container reference isn't clear, there really should be more of a description here...

      Specified by:
      getModule in interface Rule
      Returns:
      the value of the 'Module' container reference.
      See Also:
    • basicSetModule

      public org.eclipse.emf.common.notify.NotificationChain basicSetModule(Module newModule, org.eclipse.emf.common.notify.NotificationChain msgs)
      See Also:
    • setModule

      public void setModule(Module newModule)
      Sets the value of the 'Module' container reference.
      Specified by:
      setModule in interface Rule
      Parameters:
      newModule - the new value of the 'Module' container reference.
      See Also:
    • getMode

      public RuleMode getMode()
      Returns the value of the 'Mode' attribute. The literals are from the enumeration RuleMode.

      If the meaning of the 'Mode' attribute isn't clear, there really should be more of a description here...

      Specified by:
      getMode in interface Rule
      Returns:
      the value of the 'Mode' attribute.
      See Also:
    • setMode

      public void setMode(RuleMode newMode)
      Sets the value of the 'Mode' attribute.
      Specified by:
      setMode in interface Rule
      Parameters:
      newMode - the new value of the 'Mode' attribute.
      See Also:
    • getInputElements

      public org.eclipse.emf.common.util.EList<InputRuleElement> getInputElements()
      Returns the value of the 'Input Elements' containment reference list. The list contents are of type InputRuleElement. It is bidirectional and its opposite is 'Input For'.

      If the meaning of the 'Input Elements' containment reference list isn't clear, there really should be more of a description here...

      Specified by:
      getInputElements in interface Rule
      Returns:
      the value of the 'Input Elements' containment reference list.
      See Also:
    • getOutputElements

      public org.eclipse.emf.common.util.EList<OutputRuleElement> getOutputElements()
      Returns the value of the 'Output Elements' containment reference list. The list contents are of type OutputRuleElement. It is bidirectional and its opposite is 'Output For'.

      If the meaning of the 'Output Elements' containment reference list isn't clear, there really should be more of a description here...

      Specified by:
      getOutputElements in interface Rule
      Returns:
      the value of the 'Output Elements' containment reference list.
      See Also:
    • getESuperRules

      public org.eclipse.emf.common.util.EList<Rule> getESuperRules()
      Returns the value of the 'ESuper Rules' reference list. The list contents are of type Rule. It is bidirectional and its opposite is 'ESub Rules'.

      If the meaning of the 'ESuper Rules' reference list isn't clear, there really should be more of a description here...

      Specified by:
      getESuperRules in interface Rule
      Returns:
      the value of the 'ESuper Rules' reference list.
      See Also:
    • getESubRules

      public org.eclipse.emf.common.util.EList<Rule> getESubRules()
      Returns the value of the 'ESub Rules' reference list. The list contents are of type Rule. It is bidirectional and its opposite is 'ESuper Rules'.

      If the meaning of the 'ESub Rules' reference list isn't clear, there really should be more of a description here...

      Specified by:
      getESubRules in interface Rule
      Returns:
      the value of the 'ESub Rules' reference list.
      See Also:
    • getMatcher

      public CodeBlock getMatcher()
      Returns the value of the 'Matcher' containment reference. It is bidirectional and its opposite is 'Matcher For'.

      If the meaning of the 'Matcher' containment reference isn't clear, there really should be more of a description here...

      Specified by:
      getMatcher in interface Rule
      Returns:
      the value of the 'Matcher' containment reference.
      See Also:
    • basicSetMatcher

      public org.eclipse.emf.common.notify.NotificationChain basicSetMatcher(CodeBlock newMatcher, org.eclipse.emf.common.notify.NotificationChain msgs)
      See Also:
    • setMatcher

      public void setMatcher(CodeBlock newMatcher)
      Sets the value of the 'Matcher' containment reference.
      Specified by:
      setMatcher in interface Rule
      Parameters:
      newMatcher - the new value of the 'Matcher' containment reference.
      See Also:
    • getApplier

      public CodeBlock getApplier()
      Returns the value of the 'Applier' containment reference. It is bidirectional and its opposite is 'Applier For'.

      If the meaning of the 'Applier' containment reference isn't clear, there really should be more of a description here...

      Specified by:
      getApplier in interface Rule
      Returns:
      the value of the 'Applier' containment reference.
      See Also:
    • basicSetApplier

      public org.eclipse.emf.common.notify.NotificationChain basicSetApplier(CodeBlock newApplier, org.eclipse.emf.common.notify.NotificationChain msgs)
      See Also:
    • setApplier

      public void setApplier(CodeBlock newApplier)
      Sets the value of the 'Applier' containment reference.
      Specified by:
      setApplier in interface Rule
      Parameters:
      newApplier - the new value of the 'Applier' containment reference.
      See Also:
    • getPostApply

      public CodeBlock getPostApply()
      Returns the value of the 'Post Apply' containment reference. It is bidirectional and its opposite is 'Post Apply For'.

      If the meaning of the 'Post Apply' containment reference isn't clear, there really should be more of a description here...

      Specified by:
      getPostApply in interface Rule
      Returns:
      the value of the 'Post Apply' containment reference.
      See Also:
    • basicSetPostApply

      public org.eclipse.emf.common.notify.NotificationChain basicSetPostApply(CodeBlock newPostApply, org.eclipse.emf.common.notify.NotificationChain msgs)
      See Also:
    • setPostApply

      public void setPostApply(CodeBlock newPostApply)
      Sets the value of the 'Post Apply' containment reference.
      Specified by:
      setPostApply in interface Rule
      Parameters:
      newPostApply - the new value of the 'Post Apply' containment reference.
      See Also:
    • getSuperRules

      public org.eclipse.emf.common.util.EList<String> getSuperRules()
      Returns the value of the 'Super Rules' attribute list. The list contents are of type String.

      If the meaning of the 'Super Rules' reference list isn't clear, there really should be more of a description here...

      Specified by:
      getSuperRules in interface Rule
      Returns:
      the value of the 'Super Rules' attribute list.
      See Also:
    • isAbstract

      public boolean isAbstract()
      Returns the value of the 'Abstract' attribute.

      If the meaning of the 'Abstract' attribute isn't clear, there really should be more of a description here...

      Specified by:
      isAbstract in interface Rule
      Returns:
      the value of the 'Abstract' attribute.
      See Also:
    • setAbstract

      public void setAbstract(boolean newAbstract)
      Sets the value of the 'Abstract' attribute.
      Specified by:
      setAbstract in interface Rule
      Parameters:
      newAbstract - the new value of the 'Abstract' attribute.
      See Also:
    • getFields

      public org.eclipse.emf.common.util.EList<Field> getFields()
      Returns the value of the 'Fields' containment reference list. The list contents are of type Field. It is bidirectional and its opposite is 'Rule'.

      If the meaning of the 'Fields' containment reference list isn't clear, there really should be more of a description here...

      Specified by:
      getFields in interface Rule
      Returns:
      the value of the 'Fields' containment reference list.
      See Also:
    • isDefault

      public boolean isDefault()
      Returns the value of the 'Default' attribute.

      If the meaning of the 'Default' attribute isn't clear, there really should be more of a description here...

      Specified by:
      isDefault in interface Rule
      Returns:
      the value of the 'Default' attribute.
      See Also:
    • setDefault

      public void setDefault(boolean newDefault)
      Sets the value of the 'Default' attribute.
      Specified by:
      setDefault in interface Rule
      Parameters:
      newDefault - the new value of the 'Default' attribute.
      See Also:
    • isDistinctElements

      public boolean isDistinctElements()
      Returns the value of the 'Distinct Elements' attribute.

      If the meaning of the 'Distinct Elements' attribute isn't clear, there really should be more of a description here...

      Specified by:
      isDistinctElements in interface Rule
      Returns:
      the value of the 'Distinct Elements' attribute.
      See Also:
    • setDistinctElements

      public void setDistinctElements(boolean newDistinctElements)
      Sets the value of the 'Distinct Elements' attribute.
      Specified by:
      setDistinctElements in interface Rule
      Parameters:
      newDistinctElements - the new value of the 'Distinct Elements' attribute.
      See Also:
    • isUnique

      public boolean isUnique()
      Returns the value of the 'Unique' attribute.

      A unique rule matches at most once against a unique (list of) source value(s). Traces created by a unique rule can also be efficiently lookup up, because each (list of) source value(s) maps to at most one (list of) target value(s).

      Specified by:
      isUnique in interface Rule
      Returns:
      the value of the 'Unique' attribute.
      See Also:
    • setUnique

      public void setUnique(boolean newUnique)
      Sets the value of the 'Unique' attribute.
      Specified by:
      setUnique in interface Rule
      Parameters:
      newUnique - the new value of the 'Unique' attribute.
      See Also:
    • isLeaf

      public boolean isLeaf()
      Returns the value of the 'Leaf' attribute.

      A rule is a leaf rule when it is not abstract, and it has no leaf sub-rules. Call #compileState() before calling this method.

      Specified by:
      isLeaf in interface Rule
      Returns:
      the value of the 'Leaf' attribute.
      See Also:
    • isWithLeaves

      public boolean isWithLeaves()
      Returns the value of the 'With Leaves' attribute.

      A rule is with leaves if it has leaf sub-rules. Call #compileState() before calling this method.

      Specified by:
      isWithLeaves in interface Rule
      Returns:
      the value of the 'With Leaves' attribute.
      See Also:
    • findField

      public Field findField(Object context, String name)
      Finds a Field registered within this Rule.
      Specified by:
      findField in interface Rule
      Parameters:
      context - the context type of the field
      name - the operation name
      Returns:
      the Field with the given properties, or null if none registered
    • hasField

      public boolean hasField(String name)
      Returns true iff this rule has any registered fields with the given name.
      Specified by:
      hasField in interface Rule
      Parameters:
      name - the field name
      Returns:
      true iff this rule has any registered fields with the given name
    • findStaticField

      public Field findStaticField(Object context, String name)
      Finds a static Field registered within this Rule.
      Specified by:
      findStaticField in interface Rule
      Parameters:
      context - the context type of the field
      name - the operation name
      Returns:
      the static Field with the given properties, or null if none registered
    • hasStaticField

      public boolean hasStaticField(String name)
      Returns true iff this rule has any registered static fields with the given name.
      Specified by:
      hasStaticField in interface Rule
      Parameters:
      name - the field name
      Returns:
      true iff this rule has any registered static fields with the given name
    • registerField

      public void registerField(Field field)
      Registers a Field into this Rule.
      Specified by:
      registerField in interface Rule
      Parameters:
      field - the Field to register
    • matchSingle

      public boolean matchSingle(StackFrame frame)
      Matches this rule for the automatic single stage, if applicable. Call #compileState() before calling this method.
      Specified by:
      matchSingle in interface Rule
      Parameters:
      frame - the stack frame in which to execute the matcher
      Returns:
      true iff the rule has any matches
    • matchRecursive

      public boolean[] matchRecursive(StackFrame frame)
      Matches this rule for the automatic recursive stage, if applicable. Call #compileState() before calling this method.
      Specified by:
      matchRecursive in interface Rule
      Parameters:
      frame - the stack frame in which to execute the matcher
      Returns:
      [true iff the rule has any matches, true iff there was a guaranteed final match]
    • matchManual

      public Object matchManual(StackFrame frame, Object[] values)
      Matches this rule manually, if applicable. Call #compileState() before calling this method.
      Specified by:
      matchManual in interface Rule
      Parameters:
      frame - the stack frame in which to execute the matcher
      values - the values to match against
      Returns:
      the rule application result, or null if the rule did not match
    • matchOne

      public boolean matchOne(StackFrame frame, Map<String,Object> valuesMap)
      Matches rule for valuesMap. Call #compileState() before calling this method.
      Specified by:
      matchOne in interface Rule
      Parameters:
      frame - the stack frame in which to execute the matcher
      valuesMap - the values to match against
      Returns:
      true iff the rule matches
    • matchOneOnly

      public boolean matchOneOnly(StackFrame frame, Map<String,Object> valuesMap)
      Matches this rule only (without super-rules) for valuesMap. Call #compileState() before calling this method.
      Specified by:
      matchOneOnly in interface Rule
      Parameters:
      frame - the stack frame in which to execute the matcher
      valuesMap - the values to match against
      Returns:
      true iff the rule matches
    • createTraces

      public void createTraces(StackFrame frame)
      Creates trace elements for the recorded matches for this rule. Call #compileState() before calling this method.
      Specified by:
      createTraces in interface Rule
      Parameters:
      frame - the stack frame context
    • completeTraceFor

      public boolean completeTraceFor(StackFrame frame, TraceLink trace)
      Completes trace for this rule by creating the output elements. Will create default/unique trace iff mapsTo information exists. Call #compileState() before calling this method.
      Specified by:
      completeTraceFor in interface Rule
      Parameters:
      frame - the stack frame context
      trace - the trace to complete
      Returns:
      true iff default/unique mappings were defined for the complete list of source elements
    • apply

      public void apply(StackFrame frame)
      Applies this rule for the created traces. Call #compileState() before calling this method.
      Specified by:
      apply in interface Rule
      Parameters:
      frame - the stack frame in which to execute the applier
    • postApply

      public void postApply(StackFrame frame)
      Runs post-applier for this rule for the created traces. Call #compileState() before calling this method.
      Specified by:
      postApply in interface Rule
      Parameters:
      frame - the stack frame in which to execute the post-applier
    • applyFirst

      public boolean applyFirst(StackFrame frame)
      Applies and post-applies this rule for the first recorded match. Call #compileState() before calling this method.
      Specified by:
      applyFirst in interface Rule
      Parameters:
      frame - the stack frame in which to execute the applier and post-applier
      Returns:
      true iff this rule was applied
    • applyOne

      public Object applyOne(StackFrame frame, Map<String,Object> valuesMap)
      Applies this rule to trace
      Specified by:
      applyOne in interface Rule
      Parameters:
      frame - the stack frame in which to execute the applier and post-apply
      valuesMap - the source and target values to which to apply the rule
      Returns:
      the rule application result
    • applyFor

      public Object applyFor(StackFrame frame, TraceLink trace)
      Applies this rule for the given trace. Call #compileState() before calling this method.
      Specified by:
      applyFor in interface Rule
      Parameters:
      frame - the stack frame context
      trace - the trace link to apply the rule for
      Returns:
      the application result
    • postApplyFor

      public Object postApplyFor(StackFrame frame, TraceLink trace)
      Post-applies this rule for the given trace. Call #compileState() before calling this method.
      Specified by:
      postApplyFor in interface Rule
      Parameters:
      frame - the stack frame context
      trace - the trace link to post-apply the rule for
      Returns:
      the post-application result
    • getAllESuperRules

      public LazySet<Rule> getAllESuperRules()
      Returns the transitive closure of super-rules, root rule first (LazySet's have a fixed iteration order). Call #compileState() before calling this method.
      Specified by:
      getAllESuperRules in interface Rule
      Returns:
      the transitive closure of super-rules.
    • createUniqueMapping

      public void createUniqueMapping(TraceLink trace)
      Creates a unique trace mapping entry for the source values in trace, if applicable.
      Specified by:
      createUniqueMapping in interface Rule
      Parameters:
      trace - the trace element with source values
    • compileState

      public void compileState(ExecEnv env)
      Compiles the internal state of this rule for optimised matching. Call this method whenever any properties of this rule or any sub-rules have changed.
      Specified by:
      compileState in interface Rule
      Parameters:
      env - the execution environment context
    • resetState

      public void resetState()
      Resets the internal state of this rule. Call this method before calling Rule.compileState(ExecEnv) on all rules.
      Specified by:
      resetState in interface Rule
    • compileIterables

      public void compileIterables(ExecEnv env)
      Compiles the model element iterables for this rule. Call this method whenever any input or in/out model has changed.
      Specified by:
      compileIterables in interface Rule
      Parameters:
      env - the execution environment context
    • clearFields

      public void clearFields()
      Clears the values of all registered fields within this rule.
      Specified by:
      clearFields in interface Rule
    • findInputElement

      public InputRuleElement findInputElement(String name)
      Finds the InputRuleElement with the given name within the rule inheritance hierarchy depth-first.
      Specified by:
      findInputElement in interface Rule
      Parameters:
      name - the input element name
      Returns:
      the InputRuleElement with the given name or null
    • getUniqueTrace

      public TraceLink getUniqueTrace(StackFrame frame, Object[] values)
      Returns the unique rule application trace for values, if applicable.
      Specified by:
      getUniqueTrace in interface Rule
      Parameters:
      frame - the stack frame context
      values - the source values for the trace
      Returns:
      the unique rule application trace, or null
    • eInverseAdd

      public org.eclipse.emf.common.notify.NotificationChain eInverseAdd(org.eclipse.emf.ecore.InternalEObject otherEnd, int featureID, org.eclipse.emf.common.notify.NotificationChain msgs)
      Overrides:
      eInverseAdd in class org.eclipse.emf.ecore.impl.BasicEObjectImpl
    • eInverseRemove

      public org.eclipse.emf.common.notify.NotificationChain eInverseRemove(org.eclipse.emf.ecore.InternalEObject otherEnd, int featureID, org.eclipse.emf.common.notify.NotificationChain msgs)
      Overrides:
      eInverseRemove in class org.eclipse.emf.ecore.impl.BasicEObjectImpl
    • eBasicRemoveFromContainerFeature

      public org.eclipse.emf.common.notify.NotificationChain eBasicRemoveFromContainerFeature(org.eclipse.emf.common.notify.NotificationChain msgs)
      Overrides:
      eBasicRemoveFromContainerFeature in class org.eclipse.emf.ecore.impl.BasicEObjectImpl
    • eGet

      public Object eGet(int featureID, boolean resolve, boolean coreType)
      Specified by:
      eGet in interface org.eclipse.emf.ecore.InternalEObject
      Overrides:
      eGet in class NamedElementImpl
    • eSet

      public void eSet(int featureID, Object newValue)
      Specified by:
      eSet in interface org.eclipse.emf.ecore.InternalEObject
      Overrides:
      eSet in class NamedElementImpl
    • eUnset

      public void eUnset(int featureID)
      Specified by:
      eUnset in interface org.eclipse.emf.ecore.InternalEObject
      Overrides:
      eUnset in class NamedElementImpl
    • eIsSet

      public boolean eIsSet(int featureID)
      Specified by:
      eIsSet in interface org.eclipse.emf.ecore.InternalEObject
      Overrides:
      eIsSet in class NamedElementImpl
    • toString

      public String toString()
      Overrides:
      toString in class NamedElementImpl
    • updateDefaultState

      protected void updateDefaultState()
      Updates defaultState.
    • updateUniqueState

      protected void updateUniqueState()
      Updates uniqueState.
    • updateSuperRulesState

      protected void updateSuperRulesState()
    • updateRuleModeState

      protected void updateRuleModeState()
      Updates ruleModeState.
    • updateLeafState

      protected void updateLeafState()
      Updates leafState.
    • updateAbstractState

      protected void updateAbstractState()
      Updates abstractState.
    • updateMatcherCbState

      protected void updateMatcherCbState()
    • updateApplierCbState

      protected void updateApplierCbState()
    • updateDistinctState

      protected void updateDistinctState()
      Updates distinctState.