Class FieldSelector.Path

    • Field Detail

      • namespacePattern

        final Pattern namespacePattern
      • fieldNodes

        final String[] fieldNodes
    • Constructor Detail

      • Path

        private Path​(Pattern namespacePattern,
                     String[] fieldNodes)
    • Method Detail

      • matches

        public boolean matches​(String namespace)
        Whether this path applies to the given collection namespace or not.
        Parameters:
        namespace - namespace to match
        Returns:
        true if this path applies to the given collection namespace
      • modify

        public void modify​(org.bson.Document doc,
                           org.bson.Document setDoc,
                           org.bson.Document unsetDoc)
        Applies the transformation represented by this path, i.e. removes or renames the represented field.
        Parameters:
        doc - the original document; never null
        setDoc - the value of $set field; may be null
        unsetDoc - the value of $unset field; may be null
      • modifyFields

        private void modifyFields​(org.bson.Document doc,
                                  String[] nodes,
                                  int beginIndex)
        Modifies fields in the document by the given path nodes start with the begin index.

        Note that the path doesn't support modification of fields inside arrays of arrays.

        Parameters:
        doc - the document to modify fields
        nodes - the path nodes
        beginIndex - the begin index
      • modifyFieldsWithDotNotation

        private void modifyFieldsWithDotNotation​(org.bson.Document doc)
        Modifies fields that use the dot notation, like 'a.b' or 'a.0.b'.

        First, we try to modify field that exactly matches the current path. Then, if the field isn't found, we try to find fields that start with the current path or fields that are part of the current path.

        Parameters:
        doc - the document to modify fields
      • modifyFields

        private void modifyFields​(Object value,
                                  String[] fieldNodes,
                                  int length)
      • excludeNumericItems

        private String[] excludeNumericItems​(String[] items)
        Excludes numeric items from the given array.

        If the array has consecutive numeric items, like 'a.0.0.b', then the numeric items aren't excluded. It is necessary because the modification of fields inside arrays of arrays isn't supported.

        Parameters:
        items - the array to exclude numeric items
        Returns:
        filtered items
      • startsWith

        private boolean startsWith​(String[] begin,
                                   String[] source)
        Returns true if the source array starts with the specified array.
        Parameters:
        begin - the array from which the source array begins
        source - the source array to check
        Returns:
        true if the source array starts with the specified array
      • add

        private <T> List<T> add​(List<T> list,
                                T element)
      • checkFieldExists

        String checkFieldExists​(org.bson.Document doc,
                                String field)
      • modifyField

        abstract void modifyField​(org.bson.Document doc,
                                  String field)
        Modifies the field in the document used for read, insert and full update operations.
        Parameters:
        doc - the document to modify field
        field - the modified field
      • modifyFieldWithDotNotation

        abstract void modifyFieldWithDotNotation​(org.bson.Document doc,
                                                 String field)
        Immediately modifies the field that uses the dot notation like 'a.b' in the document used for set and unset update operations.
        Parameters:
        doc - the document to modify field
        field - the modified field
      • generateNewFieldName

        abstract FieldSelector.FieldNameAndValue generateNewFieldName​(String[] fieldNodes,
                                                                      Object value)
        Generates a new field name for the given value.
        Parameters:
        fieldNodes - the field nodes
        value - the field value
        Returns:
        a new field name for the given value