equals method

  1. @override
bool equals(
  1. Object? n2, [
  2. bool ignoreTimestamp = true
])
override

Checks if two NodeValue are equivalent in values.

Implementation

@override
bool equals(Object? n2, [bool ignoreTimestamp = true]) {
  if (n2 == null || n2 is! NodeImpl) {
    if (_debug) {
      print('## Equals: #1');
    }
    return false;
  }
  // check if both are in same skeletonized state
  if (skeleton != n2.skeleton) {
    return false;
  }

  if (!skeleton) {
    // check ordinals
    if (_ordinals.length != n2._ordinals.length) {
      if (_debug) {
        print('## Equals: #5');
      }
      return false;
    }
    List<Field> lf = Field.values;
    if (ignoreTimestamp) {
      lf.remove(Field.lastModified);
    }
    for (Field e in lf) {
      try {
        if (n2._ordinals[e] != _ordinals[e]) {
          if (_debug) {
            print('## Equals: #6');
          }
          return false;
        }
      } on Exception {
        if (_debug) {
          print('## Equals: #7');
        }
        throw Exception(
            'Oops.... this should not happen... contact developer');
      }
    }

    //check values
    if (_values.length != n2._values.length) {
      if (_debug) {
        print('## Equals: #8');
      }
      return false;
    }
    for (var e in _values.entries) {
      try {
        if (!(e.value.equals(n2._values[e.key]))) {
          if (_debug) {
            print('## Equals: #9');
          }
          return false;
        }
      } on StorageException {
        if (_debug) {
          print('## Equals: #10');
        }
        return false;
      }
    }

    //check child nodes
    if (_childNodes.length != n2._childNodes.length) {
      if (_debug) {
        print(
            '## Equals: #11 difference in child nodes (local: ${_childNodes.length}; remote:${n2._childNodes.length})');
      }
      return false;
    }
    for (var n in _childNodes.keys) {
      if (n2._childNodes[n] == null) {
        if (_debug) {
          print('## Equals: #12');
        }
        return false;
      }
    }
  } else {
    if (path != n2.path) {
      if (_debug) {
        print('## Equals: #3');
      }
      return false;
    }
    if (controller != n2.controller) {
      if (_debug) {
        print('## Equals: #14');
      }
      return false;
    }
  }
  return true;
}