Class TransposePathElement

java.lang.Object
com.bazaarvoice.jolt.common.pathelement.BasePathElement
com.bazaarvoice.jolt.common.pathelement.TransposePathElement
All Implemented Interfaces:
EvaluatablePathElement, MatchablePathElement, PathElement

public class TransposePathElement extends BasePathElement implements MatchablePathElement, EvaluatablePathElement
This PathElement is used by Shiftr to Transpose data. It can be used on the Left and Right hand sides of the spec. Input { "author" : "Stephen Hawking", "book" : "A Brief History of Time" } Wanted { "Stephen Hawking" : "A Brief History of Time" } The first part of the process is to allow a CompositeShiftr node to look down the input JSON tree. Spec { "@author" : "@book" } Secondly, we can look up the tree, and come down a different path to locate data. For example of this see the following ShiftrUnit tests : LHS Lookup : json/shiftr/filterParents.json RHS Lookup : json/shiftr/transposeComplex6_rhs-complex-at.json CanonicalForm Expansion Sugar "@2 -> "@(2,) "@(2) -> "@(2,) "@author" -> "@(0,author)" "@(author)" -> "@(0,author)" Splenda "@(a.b)" -> "@(0,a.b)" "@(a.invalid input: '&'2.c)" -> "@(0,a.invalid input: '&'(2,0).c)"
  • Field Details

    • upLevel

      private final int upLevel
    • subPathReader

      private final TransposeReader subPathReader
    • canonicalForm

      private final String canonicalForm
  • Constructor Details

    • TransposePathElement

      private TransposePathElement(String originalKey, int upLevel, String subPath)
      Private constructor used after parsing is done.
      Parameters:
      originalKey - for reference
      upLevel - How far up the tree to go
      subPath - Where to go down the tree
  • Method Details

    • parse

      public static TransposePathElement parse(String key)
      Parse a text value from a Spec, into a TransposePathElement.
      Parameters:
      key - rawKey from a Jolt Spec file
      Returns:
      a TransposePathElement
    • innerParse

      private static TransposePathElement innerParse(String originalKey, String meat)
      Parse the core of the TransposePathElement key, once basic errors have been checked and syntax has been handled.
      Parameters:
      originalKey - The original text for reference.
      meat - The string to actually parse into a TransposePathElement
      Returns:
      TransposePathElement
    • objectEvaluate

      public Optional<Object> objectEvaluate(WalkedPath walkedPath)
      This method is used when the TransposePathElement is used on the LFH as data. Aka, normal "evaluate" returns either a Number or a String.
      Parameters:
      walkedPath - WalkedPath to evaluate against
      Returns:
      The data specified by this TransposePathElement.
    • evaluate

      public String evaluate(WalkedPath walkedPath)
      Description copied from interface: EvaluatablePathElement
      Evaluate this key as if it is an write path element.
      Specified by:
      evaluate in interface EvaluatablePathElement
      Parameters:
      walkedPath - "up the tree" list of LiteralPathElements, that may be used by this key as it is computing
      Returns:
      String path element to use for write tree building
    • match

      public MatchedElement match(String dataKey, WalkedPath walkedPath)
      Description copied from interface: MatchablePathElement
      See if this PathElement matches the given dataKey. If it does not match, this method returns null. If this PathElement does match, it returns a LiteralPathElement with subKeys filled in.
      Specified by:
      match in interface MatchablePathElement
      Parameters:
      dataKey - String key value from the input data
      walkedPath - "up the tree" list of LiteralPathElements, that may be used by this key as it is computing its match
      Returns:
      null or a matched LiteralPathElement
    • getCanonicalForm

      public String getCanonicalForm()
      Description copied from interface: PathElement
      Get the canonical form of this PathElement. Really only interesting for the Reference Path element, where it will expand "invalid input: '&'" to "invalid input: '&'0(0)".
      Specified by:
      getCanonicalForm in interface PathElement
      Returns:
      canonical String version of this PathElement