Package org.jbpm.casemgmt.api.generator

## Interface CaseIdGenerator

- All Known Implementing Classes:
    `InMemoryCaseIdGenerator`, `NoneCaseIdGenerator`, `TableCaseIdGenerator`

      public interface CaseIdGenerator

  Responsible for generating and keeping track of generated case identifiers. Identifiers are always prefixed (and by that registered) by constant - default is CASE.
  In addition, it's up to generator to to return fixed size generated string to keep the IDs in similar format. Recommended is to have it set to at least 10 items as part of the generated value:
  Generators should return following: `0000000001`, `0000000010`, `0000000100` instead of `1`, `10`, `100`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `String` | `generate​(String prefix, Map<String,​Object> optionalParameters)` | Generates next value for given prefix.
    `String` | `getIdentifier()` | Identifier of the generator so it can be found and registered at runtime
    `void` | `register​(String prefix)` | Should be called only one time per given prefix.
    `default String` | `resolveCaseIdPrefix​(String prefix, Map<String,​Object> optionalParameters)` | Evaluates the current prefix expression to generate the sequence name given the parameters passed
    `void` | `unregister​(String prefix)` | Unregisters given prefix from the generator.

- - ### Method Detail

    - #### getIdentifier

          String getIdentifier()

      Identifier of the generator so it can be found and registered at runtime
      Returns:
        unique identifier

    - #### register

          void register​(String prefix)

      Should be called only one time per given prefix. Subsequent calls with same prefix do not affect the generator state.
      Parameters:
        `prefix` - unique prefix that should be used for generating case identifiers

    - #### unregister

          void unregister​(String prefix)

      Unregisters given prefix from the generator. It's up to generator implementation to either remove the prefix and its latest value permanently or resume it in case of further registration of the same prefix.
      Parameters:
        `prefix` - unique prefix that should be used for generating case identifiers

    - #### generate

          String generate​(String prefix,
                          Map<String,​Object> optionalParameters)

      Generates next value for given prefix. Returned value should include the prefix as part of the returned value.
      Parameters:
        `prefix` - unique prefix that should be used for generating case identifiers
        `optionalParameters` - map of optionalParameters that might be helpful for implementation
      Returns:
        complete case id in format (PREFIX-GENERATED_VALUE)
      Throws:
        `CasePrefixNotFoundException` - in case given prefix was not registered

    - #### resolveCaseIdPrefix

          default String resolveCaseIdPrefix​(String prefix,
                                             Map<String,​Object> optionalParameters)

      Evaluates the current prefix expression to generate the sequence name given the parameters passed
      Parameters:
        `identifierPrefix` - expression to be evaluated
        `optionalParameters` - parameters needed to evaluate the expression
      Returns:
        returns the sequence name
      Throws:
        `CasePrefixCannotBeGeneratedException` - when it is not possible to generate the case prefix expression