Package org.optaplanner.core.api.score.director

## Interface ScoreDirector<Solution_>

- Type Parameters:
    `Solution_` - the solution type, the class with the `PlanningSolution` annotation
  All Known Subinterfaces:
    `InnerScoreDirector<Solution_,​Score_>`
  All Known Implementing Classes:
    `AbstractScoreDirector`, `ConstraintStreamScoreDirector`, `DroolsScoreDirector`, `EasyScoreDirector`, `IncrementalScoreDirector`, `TestGenDroolsScoreDirector`

      public interface ScoreDirector<Solution_>

  The ScoreDirector holds the `working solution` and calculates the `Score` for it.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `afterEntityAdded​(Object entity)` |
    `void` | `afterEntityRemoved​(Object entity)` |
    `void` | `afterProblemFactAdded​(Object problemFact)` |
    `void` | `afterProblemFactRemoved​(Object problemFact)` |
    `void` | `afterProblemPropertyChanged​(Object problemFactOrEntity)` |
    `void` | `afterVariableChanged​(Object entity, String variableName)` |
    `void` | `beforeEntityAdded​(Object entity)` |
    `void` | `beforeEntityRemoved​(Object entity)` |
    `void` | `beforeProblemFactAdded​(Object problemFact)` |
    `void` | `beforeProblemFactRemoved​(Object problemFact)` |
    `void` | `beforeProblemPropertyChanged​(Object problemFactOrEntity)` |
    `void` | `beforeVariableChanged​(Object entity, String variableName)` |
    `Solution_` | `getWorkingSolution()` | The `PlanningSolution` that is used to calculate the `Score`.
    `<E> E` | `lookUpWorkingObject​(E externalObject)` | Translates an entity or fact instance (often from another `Thread` or JVM) to this `ScoreDirector`'s internal working instance.
    `<E> E` | `lookUpWorkingObjectOrReturnNull​(E externalObject)` | As defined by `lookUpWorkingObject(Object)`, but doesn't fail fast if no workingObject was ever added for the externalObject.
    `void` | `triggerVariableListeners()` |

- - ### Method Detail

    - #### getWorkingSolution

          Solution_ getWorkingSolution()

      The `PlanningSolution` that is used to calculate the `Score`.

      Because a `Score` is best calculated incrementally (by deltas), the `ScoreDirector` needs to be notified when its `working solution` changes.

      Returns:
        never null

    - #### beforeEntityAdded

          void beforeEntityAdded​(Object entity)

    - #### afterEntityAdded

          void afterEntityAdded​(Object entity)

    - #### beforeVariableChanged

          void beforeVariableChanged​(Object entity,
                                     String variableName)

    - #### afterVariableChanged

          void afterVariableChanged​(Object entity,
                                    String variableName)

    - #### triggerVariableListeners

          void triggerVariableListeners()

    - #### beforeEntityRemoved

          void beforeEntityRemoved​(Object entity)

    - #### afterEntityRemoved

          void afterEntityRemoved​(Object entity)

    - #### beforeProblemFactAdded

          void beforeProblemFactAdded​(Object problemFact)

    - #### afterProblemFactAdded

          void afterProblemFactAdded​(Object problemFact)

    - #### beforeProblemPropertyChanged

          void beforeProblemPropertyChanged​(Object problemFactOrEntity)

    - #### afterProblemPropertyChanged

          void afterProblemPropertyChanged​(Object problemFactOrEntity)

    - #### beforeProblemFactRemoved

          void beforeProblemFactRemoved​(Object problemFact)

    - #### afterProblemFactRemoved

          void afterProblemFactRemoved​(Object problemFact)

    - #### lookUpWorkingObject

          <E> E lookUpWorkingObject​(E externalObject)

      Translates an entity or fact instance (often from another `Thread` or JVM) to this `ScoreDirector`'s internal working instance. Useful for `Move.rebase(ScoreDirector)` and in a `ProblemFactChange`.

      Matching is determined by the `LookUpStrategyType` on `PlanningSolution`. Matching uses a `PlanningId` by default.

      Type Parameters:
        `E` - the object type
      Parameters:
        `externalObject` - sometimes null
      Returns:
        null if externalObject is null
      Throws:
        `IllegalArgumentException` - if there is no workingObject for externalObject, if it cannot be looked up or if the externalObject's class is not supported
        `IllegalStateException` - if it cannot be looked up

    - #### lookUpWorkingObjectOrReturnNull

          <E> E lookUpWorkingObjectOrReturnNull​(E externalObject)

      As defined by `lookUpWorkingObject(Object)`, but doesn't fail fast if no workingObject was ever added for the externalObject. It's recommended to use `lookUpWorkingObject(Object)` instead, especially in a `Move.rebase(ScoreDirector)` code.
      Type Parameters:
        `E` - the object type
      Parameters:
        `externalObject` - sometimes null
      Returns:
        null if externalObject is null or if there is no workingObject for externalObject
      Throws:
        `IllegalArgumentException` - if it cannot be looked up or if the externalObject's class is not supported
        `IllegalStateException` - if it cannot be looked up