initialize method

Relationship<E, N> initialize({
  1. required DataModelMixin<DataModelMixin> owner,
  2. required String name,
  3. String? inverseName,
  4. Set<String>? overrideKeys,
})

Initializes this relationship (typically when initializing the owner in DataModelMixin) by supplying the owner, and related metadata. overrideKeys ignores if the relationship was previously initialized.

Implementation

Relationship<E, N> initialize(
    {required final DataModelMixin owner,
    required final String name,
    final String? inverseName,
    Set<String>? overrideKeys}) {
  if (overrideKeys == null && isInitialized) return this;

  _ownerKey = owner._key;
  _name = name;
  _inverseName = inverseName;

  if (overrideKeys != null) {
    _uninitializedKeys = overrideKeys;
  } else if (_uninitializedKeys == null) {
    // means it was omitted (remote-omitted, or loaded locally), so skip
    return this;
  }

  // setting up from scratch, remove all and add keys

  _graph._removeEdges(_ownerKey!,
      metadata: _name!, inverseMetadata: _inverseName, notify: false);

  // in case node was removed during removeEdges
  _graph._addNode(_ownerKey!);

  _graph._addEdges(
    _ownerKey!,
    tos: _uninitializedKeys!,
    metadata: _name!,
    inverseMetadata: _inverseName,
    notify: false,
  );
  _graph.box!.flush();

  _uninitializedKeys!.clear();

  return this;
}