Package org.optaplanner.core.api.score.calculator

## Interface ConstraintMatchAwareIncrementalScoreCalculator<Solution_,​Score_ extends Score<Score_>>

- Type Parameters:
    `Solution_` - the solution type, the class with the `PlanningSolution` annotation
    `Score_` - the `Score` type
  All Superinterfaces:
    `IncrementalScoreCalculator<Solution_,​Score_>`

      public interface ConstraintMatchAwareIncrementalScoreCalculator<Solution_,​Score_ extends Score<Score_>>
      extends IncrementalScoreCalculator<Solution_,​Score_>

  Allows a `IncrementalScoreCalculator` to report `ConstraintMatchTotal`s for explaining a score (= which score constraints match for how much) and also for score corruption analysis.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Collection<ConstraintMatchTotal<Score_>>` | `getConstraintMatchTotals()` |
    `Map<Object,​Indictment<Score_>>` | `getIndictmentMap()` |
    `void` | `resetWorkingSolution​(Solution_ workingSolution, boolean constraintMatchEnabled)` | Allows for increased performance because it only tracks if constraintMatchEnabled is true.

    - ### Methods inherited from interface org.optaplanner.core.api.score.calculator.IncrementalScoreCalculator

      `afterEntityAdded, afterEntityRemoved, afterVariableChanged, beforeEntityAdded, beforeEntityRemoved, beforeVariableChanged, calculateScore, resetWorkingSolution`

- - ### Method Detail

    - #### resetWorkingSolution

          void resetWorkingSolution​(Solution_ workingSolution,
                                    boolean constraintMatchEnabled)

      Allows for increased performance because it only tracks if constraintMatchEnabled is true.

      Every implementation should call `resetWorkingSolution(Solution_, boolean)` and only handle the constraintMatchEnabled parameter specifically (or ignore it).

      Parameters:
        `workingSolution` - never null, to pass to `resetWorkingSolution(Solution_, boolean)`.
        `constraintMatchEnabled` - true if `getConstraintMatchTotals()` or `getIndictmentMap()` might be called.

    - #### getConstraintMatchTotals

          Collection<ConstraintMatchTotal<Score_>> getConstraintMatchTotals()

      Returns:
        never null
      Throws:
        `IllegalStateException` - if `resetWorkingSolution(Solution_, boolean)`'s constraintMatchEnabled parameter was false
      See Also:
        `ScoreExplanation.getConstraintMatchTotalMap()`

    - #### getIndictmentMap

          Map<Object,​Indictment<Score_>> getIndictmentMap()

      Returns:
        null if it should to be calculated non-incrementally from `getConstraintMatchTotals()`
      Throws:
        `IllegalStateException` - if `resetWorkingSolution(Solution_, boolean)`'s constraintMatchEnabled parameter was false
      See Also:
        `ScoreExplanation.getIndictmentMap()`