update method

  1. @override
Future<void> update(
  1. Node n2, {
  2. bool deepClone = true,
})
override

Update all data of the node with the data of the given node.

@param n2 the node whose values should be copied @throws StorageException if the storage backend encounters a problem

Implementation

@override
Future<void> update(Node n2, {bool deepClone = true}) async {
  // clone all fields available in skeletonized state
  _controller = n2.controller;
  _skeleton.set(n2.skeleton);
  for (Field so in _skeletonOrdinals) {
    if ((n2 as NodeImpl)._ordinals[so] != null) {
      _ordinals[so] = n2._ordinals[so]!;
    }
  }
  if (!n2.skeleton) {
    // clone all ordinals
    _ordinals.clear();
    for (MapEntry<Field, String> e in (n2 as NodeImpl)._ordinals.entries) {
      _ordinals[e.key] = e.value;
    }

    //clone all values
    _values.clear();
    for (MapEntry<String, NodeValue> e in n2._values.entries) {
      _values[e.key] = e.value.deepClone();
    }

    // clone child nodes
    Map<String, Node> _newChildNodes = <String, Node>{};
    Map<String, Node> l = await n2.getChildren();
    for (String key in l.keys) {
      if (deepClone) {
        _newChildNodes[key] = await l[key]!.deepClone();
      } else {
        _newChildNodes[key] =
            NodeImpl.createSkeleton(l[key]!.path, n2.owner, controller);
      }
    }
    _childNodes.clear();
    _childNodes.addAll(_newChildNodes);
  }

  // make sure that lastModified is not altered by updates
  _ordinals[Field.lastModified] =
      (n2 as NodeImpl)._ordinals[Field.lastModified]!;
}