org.eclipse.viatra.query.runtime.rete.matcher

## Class ReteEngine

- java.lang.Object
- - org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine

- All Implemented Interfaces:
    IQueryBackend

      public class ReteEngine
      extends java.lang.Object
      implements IQueryBackend

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected ReteBoundary` | `boundary`
    `protected ReteRecipeCompiler` | `compiler`
    `protected boolean` | `deleteAndRederiveEvaluation`
    `protected java.util.Collection<Disconnectable>` | `disconnectables`
    `protected java.util.Map<PQuery,RetePatternMatcher>` | `matchers`
    `protected boolean` | `parallelExecutionEnabled`
    `protected Network` | `reteNet`
    `protected int` | `reteThreads`
    `protected IQueryRuntimeContext` | `runtimeContext`
    `protected TimelyConfiguration` | `timelyConfiguration`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ReteEngine(IQueryBackendContext context, int reteThreads)`
    `ReteEngine(IQueryBackendContext context, int reteThreads, boolean deleteAndRederiveEvaluation, TimelyConfiguration timelyConfiguration)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `RetePatternMatcher` | `accessMatcher(PQuery query)` Accesses the patternmatcher for a given pattern, constructs one if a matcher is not available yet.
    `void` | `addDisconnectable(Disconnectable disc)`
    `void` | `buildMatchersCoalesced(java.util.Collection<PQuery> specifications)` Constructs RETE pattern matchers for a collection of patterns, if they are not available yet.
    `<T> T` | `constructionWrapper(java.util.concurrent.Callable<T> payload)`
    `void` | `dispose()` Disposes the query backend.
    `void` | `executeDelayedCommands()`
    `void` | `flushUpdates()` Propagates all pending updates in this query backend.
    `IQueryBackendContext` | `getBackendContext()`
    `ReteBoundary` | `getBoundary()`
    `ReteRecipeCompiler` | `getCompiler()`
    `IQueryBackendFactory` | `getFactory()`
    `IQueryBackendHintProvider` | `getHintConfiguration()`
    `org.apache.log4j.Logger` | `getLogger()`
    `IQueryResultProvider` | `getResultProvider(PQuery query)` Returns a result provider for a given query.
    `IQueryResultProvider` | `getResultProvider(PQuery query, QueryEvaluationHint hints)` Returns a result provider for a given query.
    `Network` | `getReteNet()`
    `IQueryRuntimeContext` | `getRuntimeContext()`
    `TimelyConfiguration` | `getTimelyConfiguration()`
    `boolean` | `isCaching()`
    `boolean` | `isDeleteAndRederiveEvaluation()`
    `boolean` | `isParallelExecutionEnabled()`
    `void` | `killEngine()` Deconstructs the engine to get rid of it finally
    `IQueryResultProvider` | `peekExistingResultProvider(PQuery query)` Returns an existing result provider for a given query, if it was previously constructed, returns null otherwise.
    `void` | `reset()` Resets the engine to an after-initialization phase
    `void` | `setCompiler(ReteRecipeCompiler builder)`
    `void` | `settle()` Waits until the pattern matcher is in a steady state and output can be retrieved.
    `void` | `settle(java.lang.Runnable action)` Waits until the pattern matcher is in a steady state and output can be retrieved.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### reteNet

          protected Network reteNet

    - #### reteThreads

          protected final int reteThreads

    - #### boundary

          protected ReteBoundary boundary

    - #### deleteAndRederiveEvaluation

          protected final boolean deleteAndRederiveEvaluation

      Since:
        2.2

    - #### timelyConfiguration

          protected final TimelyConfiguration timelyConfiguration

      Since:
        2.4

    - #### runtimeContext

          protected IQueryRuntimeContext runtimeContext

    - #### disconnectables

          protected java.util.Collection<Disconnectable> disconnectables

    - #### matchers

          protected java.util.Map<PQuery,RetePatternMatcher> matchers

    - #### compiler

          protected ReteRecipeCompiler compiler

    - #### parallelExecutionEnabled

          protected final boolean parallelExecutionEnabled

  - ### Constructor Detail

    - #### ReteEngine

          public ReteEngine(IQueryBackendContext context,
                            int reteThreads)

      Parameters:
        `context` - the context of the pattern matcher, conveying all information from the outside world.
        `reteThreads` - the number of threads to operate the RETE network with; 0 means single-threaded operation, 1 starts an asynchronous thread to operate the RETE net, >1 uses multiple RETE containers.

    - #### ReteEngine

          public ReteEngine(IQueryBackendContext context,
                            int reteThreads,
                            boolean deleteAndRederiveEvaluation,
                            TimelyConfiguration timelyConfiguration)

      Since:
        2.4

  - ### Method Detail

    - #### getBackendContext

          public IQueryBackendContext getBackendContext()

      Since:
        1.6

    - #### isDeleteAndRederiveEvaluation

          public boolean isDeleteAndRederiveEvaluation()

      Since:
        2.2

    - #### getTimelyConfiguration

          public TimelyConfiguration getTimelyConfiguration()

      Since:
        2.4

    - #### flushUpdates

          public void flushUpdates()

      Description copied from interface: `IQueryBackend`
      Propagates all pending updates in this query backend. The implementation of this method is optional, and it can be ignored entirely if the backend does not delay updates.
      Specified by:
        `flushUpdates` in interface `IQueryBackend`

    - #### killEngine

          public void killEngine()

      Deconstructs the engine to get rid of it finally

    - #### reset

          public void reset()

      Resets the engine to an after-initialization phase

    - #### accessMatcher

          public RetePatternMatcher accessMatcher(PQuery query)

      Accesses the patternmatcher for a given pattern, constructs one if a matcher is not available yet.
      Parameters:
        `query` - the pattern to be matched.
      Returns:
        a patternmatcher object that can match occurences of the given pattern.
      Throws:
        `ViatraQueryRuntimeException` - if construction fails.

    - #### buildMatchersCoalesced

          public void buildMatchersCoalesced(java.util.Collection<PQuery> specifications)

      Constructs RETE pattern matchers for a collection of patterns, if they are not available yet. Model traversal during the whole construction period is coalesced (which may have an effect on performance, depending on the matcher context).
      Parameters:
        `specifications` - the patterns to be matched.
      Throws:
        `ViatraQueryRuntimeException` - if construction fails.

    - #### constructionWrapper

          public <T> T constructionWrapper(java.util.concurrent.Callable<T> payload)

      Since:
        2.4

    - #### executeDelayedCommands

          public void executeDelayedCommands()

      Since:
        2.3

    - #### settle

          public void settle()

      Waits until the pattern matcher is in a steady state and output can be retrieved.

    - #### settle

          public void settle(java.lang.Runnable action)

      Waits until the pattern matcher is in a steady state and output can be retrieved. When steady state is reached, a retrieval action is executed before the steady state ceases.
      Parameters:
        `action` - the action to be run when reaching the steady-state.

    - #### getReteNet

          public Network getReteNet()

      Returns:
        the reteNet

    - #### getBoundary

          public ReteBoundary getBoundary()

      Returns:
        the boundary

    - #### setCompiler

          public void setCompiler(ReteRecipeCompiler builder)

      Parameters:
        `builder` - the pattern matcher builder to set

    - #### addDisconnectable

          public void addDisconnectable(Disconnectable disc)

      Parameters:
        `disc` - the new Disconnectable adapter.

    - #### isParallelExecutionEnabled

          public boolean isParallelExecutionEnabled()

      Returns:
        the parallelExecutionEnabled

    - #### getLogger

          public org.apache.log4j.Logger getLogger()

    - #### getRuntimeContext

          public IQueryRuntimeContext getRuntimeContext()

    - #### getCompiler

          public ReteRecipeCompiler getCompiler()

    - #### getResultProvider

          public IQueryResultProvider getResultProvider(PQuery query)

      Description copied from interface: `IQueryBackend`
      Returns a result provider for a given query. Repeated calls may return the same instance.
      Specified by:
        `getResultProvider` in interface `IQueryBackend`

    - #### getResultProvider

          public IQueryResultProvider getResultProvider(PQuery query,
                                                        QueryEvaluationHint hints)

      Description copied from interface: `IQueryBackend`
      Returns a result provider for a given query. Repeated calls may return the same instance.
      Specified by:
        `getResultProvider` in interface `IQueryBackend`
      Since:
        1.4

    - #### peekExistingResultProvider

          public IQueryResultProvider peekExistingResultProvider(PQuery query)

      Description copied from interface: `IQueryBackend`
      Returns an existing result provider for a given query, if it was previously constructed, returns null otherwise. Will not construct and initialize new result providers.
      Specified by:
        `peekExistingResultProvider` in interface `IQueryBackend`

    - #### dispose

          public void dispose()

      Description copied from interface: `IQueryBackend`
      Disposes the query backend.
      Specified by:
        `dispose` in interface `IQueryBackend`

    - #### isCaching

          public boolean isCaching()

      Specified by:
        `isCaching` in interface `IQueryBackend`
      Returns:
        true iff this backend is incremental, i.e. it caches the results of queries for quick retrieval, and can provide update notifications on result set changes.

    - #### getHintConfiguration

          public IQueryBackendHintProvider getHintConfiguration()

      Since:
        1.5
      No Reference:
        Internal API, subject to change

    - #### getFactory

          public IQueryBackendFactory getFactory()

      Specified by:
        `getFactory` in interface `IQueryBackend`
      Returns:
        the factory that created this backend, if this functionality is supported