update method
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]!;
}