internal object Run(AtomMaterializer materializer, AtomEntry entry, Type expectedType) { Debug.Assert(materializer != null, "materializer != null"); Debug.Assert(entry != null, "entry != null"); return this.Plan(materializer, entry, expectedType); }
internal void AddedLink(AtomEntry source, string propertyName, object target) { Debug.Assert(source != null, "source != null"); Debug.Assert(propertyName != null, "propertyName != null"); if (!this.Tracking) { return; } if (ShouldTrackWithContext(source) && ShouldTrackWithContext(target)) { LinkDescriptor item = new LinkDescriptor(source.ResolvedObject, propertyName, target, EntityStates.Added); this.links.Add(item); } }
private static bool ShouldTrackWithContext(AtomEntry entry) { Debug.Assert(entry.ActualType != null, "Entry with no type added to log"); return entry.ActualType.IsEntityType; }
private void ApplyMediaEntryInformation(AtomEntry entry, EntityDescriptor descriptor) { Debug.Assert(entry != null, "entry != null"); Debug.Assert(descriptor != null, "descriptor != null"); if (entry.MediaEditUri != null || entry.MediaContentUri != null) { if (entry.MediaEditUri != null) { descriptor.EditStreamUri = new Uri(this.context.BaseUriWithSlash, entry.MediaEditUri); } if (entry.MediaContentUri != null) { descriptor.ReadStreamUri = new Uri(this.context.BaseUriWithSlash, entry.MediaContentUri); } descriptor.StreamETag = entry.StreamETagText; } }
internal bool TryResolve(AtomEntry entry, out AtomEntry existingEntry) { Debug.Assert(entry != null, "entry != null"); Debug.Assert(entry.Identity != null, "entry.Identity != null"); if (this.identityStack.TryGetValue(entry.Identity, out existingEntry)) { return true; } if (this.appendOnlyEntries.TryGetValue(entry.Identity, out existingEntry)) { EntityStates state; this.context.TryGetEntity(entry.Identity, entry.ETagText, this.mergeOption, out state); if (state == EntityStates.Unchanged) { return true; } else { this.appendOnlyEntries.Remove(entry.Identity); } } existingEntry = null; return false; }
internal void SetLink(AtomEntry source, string propertyName, object target) { Debug.Assert(source != null, "source != null"); Debug.Assert(propertyName != null, "propertyName != null"); if (!this.Tracking) { return; } if (ShouldTrackWithContext(source) && ShouldTrackWithContext(target)) { Debug.Assert(this.Tracking, "this.Tracking -- otherwise there's an 'if' missing (it happens to be that the assert holds for all current callers"); LinkDescriptor item = new LinkDescriptor(source.ResolvedObject, propertyName, target, EntityStates.Modified); this.links.Add(item); } }
internal void FoundTargetInstance(AtomEntry entry) { Debug.Assert(entry != null, "entry != null"); Debug.Assert(entry.ResolvedObject != null, "entry.ResolvedObject != null -- otherwise this is not a target"); if (ShouldTrackWithContext(entry)) { this.context.AttachIdentity(entry.Identity, entry.QueryLink, entry.EditLink, entry.ResolvedObject, entry.ETagText); this.identityStack.Add(entry.Identity, entry); this.insertRefreshObject = entry.ResolvedObject; } }
internal void FoundExistingInstance(AtomEntry entry) { Debug.Assert(entry != null, "entry != null"); Debug.Assert(ShouldTrackWithContext(entry), "Existing entries should be entity"); if (this.mergeOption == MergeOption.OverwriteChanges) { this.identityStack[entry.Identity] = entry; } else if (this.Tracking && entry.MediaLinkEntry == true) { this.foundEntriesWithMedia[entry.Identity] = entry; } }
internal void CreatedInstance(AtomEntry entry) { Debug.Assert(entry != null, "entry != null"); Debug.Assert(entry.ResolvedObject != null, "entry.ResolvedObject != null -- otherwise, what did we create?"); Debug.Assert(entry.CreatedByMaterializer, "entry.CreatedByMaterializer -- otherwise we shouldn't be calling this"); if (ShouldTrackWithContext(entry)) { this.identityStack.Add(entry.Identity, entry); if (this.mergeOption == MergeOption.AppendOnly) { this.appendOnlyEntries.Add(entry.Identity, entry); } } }