resolveValue<V> method

V? resolveValue<V>(
  1. Object? value, {
  2. EntityHandler<T>? entityHandler,
  3. EntityProvider? entityProvider,
  4. EntityHandlerProvider? entityHandlerProvider,
  5. EntityFetcher<T>? entityFetcher,
  6. EntityCache? entityCache,
})

Implementation

V? resolveValue<V>(Object? value,
    {EntityHandler<T>? entityHandler,
    EntityProvider? entityProvider,
    EntityHandlerProvider? entityHandlerProvider,
    EntityFetcher<T>? entityFetcher,
    EntityCache? entityCache}) {
  Object? resolvedValue = value;

  var forceToEntityReference = false;
  var forceToEntityReferenceList = false;

  if (value is EntityReference) {
    if (isEntityReferenceType) {
      if (genericType != value.genericType &&
          genericType != Object &&
          genericType != dynamic) {
        forceToEntityReference = true;
      }
    } else {
      if (value.isNull) {
        resolvedValue = null;
      } else if (value.isEntitySet && value.entity is V) {
        resolvedValue = value.entity;
      } else if (value.isIdSet && value.id is V) {
        resolvedValue = value.id;
      }
    }
  } else if (value is EntityReferenceList) {
    if (isEntityReferenceListType || isEntityReferenceType) {
      if (genericType != value.genericType &&
          genericType != Object &&
          genericType != dynamic) {
        forceToEntityReferenceList = true;
      }
    } else {
      if (value.isNull) {
        resolvedValue = null;
      } else if (value.isEntitiesSet && value.entities is V) {
        resolvedValue = value.entities;
      } else if (value.isIDsSet && value.ids is V) {
        resolvedValue = value.ids;
      }
    }
  } else if (isEntityReferenceListType) {
    forceToEntityReferenceList = true;
  } else if (isEntityReferenceType) {
    forceToEntityReference = true;
  }

  if (forceToEntityReferenceList) {
    var t = isEntityReferenceListType ? arguments0! : this;

    resolvedValue = t.toEntityReferenceList(value,
        entityHandler: entityHandler,
        entityProvider: entityProvider,
        entityHandlerProvider: entityHandlerProvider,
        entityFetcher: entityFetcher,
        entityCache: entityCache);
  } else if (forceToEntityReference) {
    var t = isEntityReferenceType ? arguments0! : this;

    resolvedValue = t.toEntityReference(value,
        entityHandler: entityHandler,
        entityProvider: entityProvider,
        entityHandlerProvider: entityHandlerProvider,
        entityFetcher: entityFetcher,
        entityCache: entityCache);
  }

  return resolvedValue as V?;
}