private IEntitySyncState <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> CreateInitialSyncState( IEntityRelationData <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> knownEntityRelation, EntityState aState, EntityState bState, TAtypeEntityVersion aRepositoryVersion, TBtypeEntityVersion bRepositoryVersion, VersionDeltaLoginInformation aLogInfo, VersionDeltaLoginInformation bLogInfo) { IEntitySyncState <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> state; switch (aState) { case EntityState.ChangedOrAdded: aLogInfo.IncChanged(); switch (bState) { case EntityState.ChangedOrAdded: bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Changed(knownEntityRelation, aRepositoryVersion, bRepositoryVersion); break; case EntityState.Unchanged: bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Unchanged(knownEntityRelation, aRepositoryVersion); break; case EntityState.Deleted: bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Deleted(knownEntityRelation, aRepositoryVersion); break; default: throw new NotImplementedException($"'{bState}' not implemented"); } break; case EntityState.Unchanged: aLogInfo.IncUnchanged(); switch (bState) { case EntityState.ChangedOrAdded: bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Changed(knownEntityRelation, bRepositoryVersion); break; case EntityState.Unchanged: bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Unchanged(knownEntityRelation); break; case EntityState.Deleted: bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Deleted(knownEntityRelation); break; default: throw new NotImplementedException($"'{bState}' not implemented"); } break; case EntityState.Deleted: aLogInfo.IncDeleted(); switch (bState) { case EntityState.ChangedOrAdded: bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Changed(knownEntityRelation, bRepositoryVersion); break; case EntityState.Unchanged: bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Unchanged(knownEntityRelation); break; case EntityState.Deleted: bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Deleted(knownEntityRelation); break; default: throw new NotImplementedException($"'{bState}' not implemented"); } break; default: throw new NotImplementedException($"'{aState}' not implemented"); } return(state); }
private IEntitySyncState <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity> CreateInitialSyncState( IEntityRelationData <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> knownEntityRelation, bool newAVersionAvailable, TAtypeEntityVersion newAVersion, bool newBVersionAvailable, TBtypeEntityVersion newBVersion, VersionDeltaLoginInformation aLogInfo, VersionDeltaLoginInformation bLogInfo) { IEntitySyncState <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity> state; if (newAVersionAvailable) { var aChanged = !_atypeVersionComparer.Equals(newAVersion, knownEntityRelation.AtypeVersion); if (aChanged) { aLogInfo.IncChanged(); if (newBVersionAvailable) { var bChanged = !_btypeVersionComparer.Equals(newBVersion, knownEntityRelation.BtypeVersion); if (bChanged) { bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Changed(knownEntityRelation, newAVersion, newBVersion); } else { bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Unchanged(knownEntityRelation, newAVersion); } } else { bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Deleted(knownEntityRelation, newAVersion); } } else { aLogInfo.IncUnchanged(); if (newBVersionAvailable) { var bChanged = !_btypeVersionComparer.Equals(newBVersion, knownEntityRelation.BtypeVersion); if (bChanged) { bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Changed(knownEntityRelation, newBVersion); } else { bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Unchanged(knownEntityRelation); } } else { bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Deleted(knownEntityRelation); } } } else { aLogInfo.IncDeleted(); if (newBVersionAvailable) { var bChanged = !_btypeVersionComparer.Equals(newBVersion, knownEntityRelation.BtypeVersion); if (bChanged) { bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Changed(knownEntityRelation, newBVersion); } else { bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Unchanged(knownEntityRelation); } } else { bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Deleted(knownEntityRelation); } } return(state); }
private IEntitySyncState <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity> CreateInitialSyncState( IEntityRelationData <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> cachedData, bool repositoryAVersionAvailable, TAtypeEntityVersion repositoryAVersion, bool repositoryBVersionAvailable, TBtypeEntityVersion repositoryBVersion, VersionDeltaLoginInformation aLogInfo, VersionDeltaLoginInformation bLogInfo) { IEntitySyncState <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity> state; if (repositoryAVersionAvailable) { var aChanged = !_atypeVersionComparer.Equals(repositoryAVersion, cachedData.AtypeVersion); if (aChanged) { aLogInfo.IncChanged(); if (repositoryBVersionAvailable) { var bChanged = !_btypeVersionComparer.Equals(repositoryBVersion, cachedData.BtypeVersion); if (bChanged) { bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Changed(cachedData, repositoryAVersion, repositoryBVersion); } else { bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Unchanged(cachedData, repositoryAVersion); } } else { bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Changed_Deleted(cachedData, repositoryAVersion); } } else { aLogInfo.IncUnchanged(); if (repositoryBVersionAvailable) { var bChanged = !_btypeVersionComparer.Equals(repositoryBVersion, cachedData.BtypeVersion); if (bChanged) { bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Changed(cachedData, repositoryBVersion); } else { bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Unchanged(cachedData); } } else { bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Unchanged_Deleted(cachedData); } } } else { aLogInfo.IncDeleted(); if (repositoryBVersionAvailable) { var bChanged = !_btypeVersionComparer.Equals(repositoryBVersion, cachedData.BtypeVersion); if (bChanged) { bLogInfo.IncChanged(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Changed(cachedData, repositoryBVersion); } else { bLogInfo.IncUnchanged(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Unchanged(cachedData); } } else { bLogInfo.IncDeleted(); state = _initialSyncStateCreationStrategy.CreateFor_Deleted_Deleted(cachedData); } } return(state); }