org.optaplanner.core.api.domain.variable

## Interface VariableListener<Entity_>

- Type Parameters:
    `Entity_` - @`PlanningEntity` on which the variable is declared
  All Superinterfaces:
    AutoCloseable, Closeable
  All Known Subinterfaces:
    CustomShadowVariable.NullVariableListener, SourcedVariableListener<Entity_>, StatefulVariableListener<Entity_>, VariableListener<Entity_>
  All Known Implementing Classes:
    AnchorVariableListener, CollectionInverseVariableListener, ExternalizedAnchorVariableSupply, ExternalizedCollectionInverseVariableSupply, ExternalizedSingletonInverseVariableSupply, SingletonInverseVariableListener, VariableListenerAdapter

      public interface VariableListener<Entity_>
      extends Closeable

  Changes shadow variables when a genuine planning variable changes.

  Important: it must only change the shadow variable(s) for which it's configured! It should never change a genuine variable or a problem fact. It can change its shadow variable(s) on multiple entity instances (for example: an arrivalTime change affects all trailing entities too).

  It is recommended that implementations be kept stateless. If state must be implemented, implementations may need to override the default methods (`resetWorkingSolution(ScoreDirector)`, `close()`).

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterEntityAdded(ScoreDirector scoreDirector, Entity_ entity)`
    `void` | `afterEntityRemoved(ScoreDirector scoreDirector, Entity_ entity)`
    `void` | `afterVariableChanged(ScoreDirector scoreDirector, Entity_ entity)`
    `void` | `beforeEntityAdded(ScoreDirector scoreDirector, Entity_ entity)`
    `void` | `beforeEntityRemoved(ScoreDirector scoreDirector, Entity_ entity)`
    `void` | `beforeVariableChanged(ScoreDirector scoreDirector, Entity_ entity)`
    `default void` | `close()`
    `default boolean` | `requiresUniqueEntityEvents()` When set to `true`, this has a slight performance loss in Planner.
    `default void` | `resetWorkingSolution(ScoreDirector scoreDirector)` Called when the entire working solution changes.

- - ### Method Detail

    - #### requiresUniqueEntityEvents

          default boolean requiresUniqueEntityEvents()

      When set to `true`, this has a slight performance loss in Planner. When set to `false`, it's often easier to make the listener implementation correct and fast.
      Returns:
        true to guarantee that each of the before/after methods will only be called once per entity instance per operation type (add, change or remove).

    - #### beforeEntityAdded

          void beforeEntityAdded(ScoreDirector scoreDirector,
                                 Entity_ entity)

      Parameters:
        `scoreDirector` - never null
        `entity` - never null

    - #### afterEntityAdded

          void afterEntityAdded(ScoreDirector scoreDirector,
                                Entity_ entity)

      Parameters:
        `scoreDirector` - never null
        `entity` - never null

    - #### beforeVariableChanged

          void beforeVariableChanged(ScoreDirector scoreDirector,
                                     Entity_ entity)

      Parameters:
        `scoreDirector` - never null
        `entity` - never null

    - #### afterVariableChanged

          void afterVariableChanged(ScoreDirector scoreDirector,
                                    Entity_ entity)

      Parameters:
        `scoreDirector` - never null
        `entity` - never null

    - #### beforeEntityRemoved

          void beforeEntityRemoved(ScoreDirector scoreDirector,
                                   Entity_ entity)

      Parameters:
        `scoreDirector` - never null
        `entity` - never null

    - #### afterEntityRemoved

          void afterEntityRemoved(ScoreDirector scoreDirector,
                                  Entity_ entity)

      Parameters:
        `scoreDirector` - never null
        `entity` - never null

    - #### resetWorkingSolution

          default void resetWorkingSolution(ScoreDirector scoreDirector)

      Called when the entire working solution changes. In this event, the other before..()/after...() methods will not be called. At this point, implementations should clear state, if any.
      Parameters:
        `scoreDirector` - never null

    - #### close

          default void close()

      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `Closeable`

Copyright © 2006–2021 JBoss by Red Hat. All rights reserved.