Class CardinalityCompositeSpec

  • All Implemented Interfaces:
    BaseSpec

    public class CardinalityCompositeSpec
    extends CardinalitySpec
    CardinalitySpec that has children, which it builds and then manages during Transforms.
    • Field Detail

      • orderMap

        private static final java.util.HashMap<java.lang.Class,​java.lang.Integer> orderMap
      • literalChildren

        private final java.util.Map<java.lang.String,​CardinalitySpec> literalChildren
      • computedChildren

        private final java.util.List<CardinalitySpec> computedChildren
    • Constructor Detail

      • CardinalityCompositeSpec

        public CardinalityCompositeSpec​(java.lang.String rawKey,
                                        java.util.Map<java.lang.String,​java.lang.Object> spec)
    • Method Detail

      • createChildren

        private static java.util.List<CardinalitySpec> createChildren​(java.util.Map<java.lang.String,​java.lang.Object> rawSpec)
        Recursively walk the spec input tree.
      • applyCardinality

        public boolean applyCardinality​(java.lang.String inputKey,
                                        java.lang.Object input,
                                        WalkedPath walkedPath,
                                        java.lang.Object parentContainer)
        If this Spec matches the inputkey, then perform one step in the parallel treewalk.

        Step one level down the input "tree" by carefully handling the List/Map nature the input to get the "one level down" data.

        Step one level down the Spec tree by carefully and efficiently applying our children to the "one level down" data.

        Specified by:
        applyCardinality in class CardinalitySpec
        Returns:
        true if this this spec "handles" the inputkey such that no sibling specs need to see it
      • process

        private void process​(java.lang.Object input,
                             WalkedPath walkedPath)
      • applyKeyToLiteralAndComputed

        private static void applyKeyToLiteralAndComputed​(CardinalityCompositeSpec spec,
                                                         java.lang.String subKeyStr,
                                                         java.lang.Object subInput,
                                                         WalkedPath walkedPath,
                                                         java.lang.Object input)
        This method implements the Cardinality matching behavior when we have both literal and computed children.

        For each input key, we see if it matches a literal, and it not, try to match the key with every computed child.