org.apache.tinkerpop.gremlin.server.op

## Class AbstractEvalOpProcessor

- java.lang.Object
- - org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor
  - - org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor

- All Implemented Interfaces:
    AutoCloseable, OpProcessor
  Direct Known Subclasses:
    SessionOpProcessor, StandardOpProcessor

      public abstract class AbstractEvalOpProcessor
      extends AbstractOpProcessor

  A base `OpProcessor` implementation that helps with operations that deal with script evaluation functions.
  Author:
    Stephen Mallette (http://stephen.genoprime.com)

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static interface` | `AbstractEvalOpProcessor.BindingSupplier`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `CONFIG_MAX_PARAMETERS` The maximum number of parameters that can be passed on a script evaluation request.
    `static int` | `DEFAULT_MAX_PARAMETERS` Default number of parameters allowed on a script evaluation request.
    `static Timer` | `evalOpTimer`
    `protected static Set<String>` | `INVALID_BINDINGS_KEYS` This may or may not be the full set of invalid binding keys.
    `protected int` | `maxParameters`

    - ### Fields inherited from class org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor

      `manageTransactions`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `AbstractEvalOpProcessor(boolean manageTransactions)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `evalOpInternal(Context ctx, Supplier<GremlinExecutor> gremlinExecutorSupplier, AbstractEvalOpProcessor.BindingSupplier bindingsSupplier)` A generalized implementation of the "eval" operation.
    `abstract ThrowingConsumer<Context>` | `getEvalOp()` Provides an operation for evaluating a Gremlin script.
    `ThrowingConsumer<Context>` | `select(Context ctx)` Given the context (which contains the RequestMessage), return back a Consumer function that will be executed with the context.
    `abstract Optional<ThrowingConsumer<Context>>` | `selectOther(Context ctx)` A sub-class may have additional "ops" that it will service.
    `protected Optional<ThrowingConsumer<Context>>` | `validateEvalMessage(RequestMessage message)`

    - ### Methods inherited from class org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor

      `attemptCommit, attemptRollback, determineIfTemporaryException, generateResultMetaData, generateStatusAttributes, handleIterator, isForceFlushed, iterateComplete, makeFrame`

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

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

    - ### Methods inherited from interface org.apache.tinkerpop.gremlin.server.OpProcessor

      `getName, init`

    - ### Methods inherited from interface java.lang.AutoCloseable

      `close`

- - ### Field Detail

    - #### evalOpTimer

          public static final Timer evalOpTimer

    - #### CONFIG_MAX_PARAMETERS

          public static final String CONFIG_MAX_PARAMETERS

      The maximum number of parameters that can be passed on a script evaluation request.
      See Also:
        Constant Field Values

    - #### DEFAULT_MAX_PARAMETERS

          public static final int DEFAULT_MAX_PARAMETERS

      Default number of parameters allowed on a script evaluation request.
      See Also:
        Constant Field Values

    - #### maxParameters

          protected int maxParameters

    - #### INVALID_BINDINGS_KEYS

          protected static final Set<String> INVALID_BINDINGS_KEYS

      This may or may not be the full set of invalid binding keys. It is dependent on the static imports made to Gremlin Server. This should get rid of the worst offenders though and provide a good message back to the calling client.

      Use of `toUpperCase()` on the accessor values of `T` solves an issue where the `ScriptEngine` ignores private scope on `T` and imports static fields.

  - ### Constructor Detail

    - #### AbstractEvalOpProcessor

          protected AbstractEvalOpProcessor(boolean manageTransactions)

  - ### Method Detail

    - #### getEvalOp

          public abstract ThrowingConsumer<Context> getEvalOp()

      Provides an operation for evaluating a Gremlin script.
      Returns:

    - #### selectOther

          public abstract Optional<ThrowingConsumer<Context>> selectOther(Context ctx)
                                                                   throws OpProcessorException

      A sub-class may have additional "ops" that it will service. Calls to `OpProcessor.select(Context)` that are not handled will be passed to this method to see if the sub-class can service the requested op code.
      Returns:
      Throws:
        `OpProcessorException`

    - #### select

          public ThrowingConsumer<Context> select(Context ctx)
                                           throws OpProcessorException

      Description copied from interface: `OpProcessor`
      Given the context (which contains the RequestMessage), return back a Consumer function that will be executed with the context. A typical implementation will simply check the "op" field on the RequestMessage and return the Consumer function for that particular operation.
      Returns:
      Throws:
        `OpProcessorException`

    - #### validateEvalMessage

          protected Optional<ThrowingConsumer<Context>> validateEvalMessage(RequestMessage message)
                                                                     throws OpProcessorException

      Throws:
        `OpProcessorException`

    - #### evalOpInternal

          protected void evalOpInternal(Context ctx,
                                        Supplier<GremlinExecutor> gremlinExecutorSupplier,
                                        AbstractEvalOpProcessor.BindingSupplier bindingsSupplier)

      A generalized implementation of the "eval" operation. It handles script evaluation and iteration of results so as to write `ResponseMessage` objects down the Netty pipeline. It also handles script timeouts, iteration timeouts, metrics and building bindings. Note that result iteration is delegated to the `AbstractOpProcessor.handleIterator(Context, Iterator)` method, so those extending this class could override that method for better control over result iteration.
      Parameters:
        `ctx` - The current Gremlin Server `Context`. This handler ensures that only a single final response is sent to the client.
        `gremlinExecutorSupplier` - A function that returns the `GremlinExecutor` to use in executing the script evaluation.
        `bindingsSupplier` - A function that returns the `Bindings` to provide to the `GremlinExecutor.eval(java.lang.String)` method.

Copyright © 2013–2021 Apache Software Foundation. All rights reserved.