Skip to content
  • Schuhbaeck, Stefan's avatar
    Rework MigraionAssistant · d2b3758a
    Schuhbaeck, Stefan authored
    MigrationAssistant
      |
      +-- IncidentMigrationAssistant (Deprecated)
      |
      +-- JsonMigrationAssistant
          |
          +--using JsonTransformation Interface
    
    The JsonTransformation interface is implemented by in two
    different ways:
    AbstractJsonTransformation
      |              implements JsonTransformation, JsonNodeExplorer
      |
      +-- JoltTransformation --> relying on Jolt [1]
      |
      +-- SimpleJsonTransformation --> relying on Jackson JsonNode
    
    The JsonTransformation interface provides a three step process
    of to transform a given scenario File were each consumes a JsonNode
    and returns the changed JsonNode.
    1) preHooks
    2) transformation
    3) postHooks
    
    The MigrationAssistant selects the correct implementation by
    using the JsonTransformationFactory which map a given Version
    to the corresponding implementation of some JsonTransformation.
    
    1. Subclass either JoltTransformation or SimpeJsonTransformation.
      (a) If JoltTransformation is used, a specialized transformation syntax
          must be used. See [1] for Doc.
      (b) If SimpleJsonTransformation is used no additional input is needed.
           The transformation is done by manually manipulating the Jackson
           JsonNode-Tree
    2. add annotation where X.X resembles the Version label i.e. "0.8"
       @MigrationTransformation(targetVersionLabel = "X.X")
    3. add the default constructor with no arguments and the
       call super constructor passing the Version
    4. Implement initDefaultHooks() and add the pre- and postHook
       LinkedList with JsonTransformationHooks
       (a) use add[Post|Pre][First|Last] methods.
       (b) add addPostHookLast(AbstractJsonTransformation::sort) to ensure
           the right sorting order within the scenario file.
    5. (optional) overwrite any of applyPreHooks, applyTransformation,
       applyPostHooks if needed.
    6. (optional) add generic JsonNode manipulations to JsonNodeExplorer
    
    This interface contains useful default implementation to navigate a
    JsonNode-Tree such as:
    
    path(jsonNode, "some/path/within/the/json") <-- will return empty nodes
                                                with path das not exist
    pathMustExist(jsonNode, "some/path/within/the/json") <-- will throw
                                                         MigrationException
    renameField(node, "release", "version")  <-- rename keys
    
    iteratorProcessorsByType(jsonRoot, "org...PedestrianVelocityProcessor )
      <-- returns an iterator of JsonNodes representing a
      PedestrianVelocityProcessor
    
    [1]: https://github.com/bazaarvoice/joltSigned-off-by: hm-schuhba1's avatarhm-schuhba1 <stefan.schuhbaeck@hm.edu>
    d2b3758a