/// <summary> /// takes an existing atomentry object and either copies it into this feed collection, /// or moves it by creating a source element and copying it in here if the value is actually /// already part of a collection /// </summary> /// <param name="value"></param> /// <returns></returns> public AtomEntry CopyOrMove(AtomEntry value) { if (value != null) { if (value.Feed == null) { value.setFeed(_feed); } else { if (_feed != null && value.Feed == _feed) { // same object, already in here. throw new ArgumentException("The entry is already part of this collection"); } // now we need to see if this is the same feed. If not, copy if (!AtomFeed.IsFeedIdentical(value.Feed, _feed)) { AtomEntry newEntry = AtomEntry.ImportFromFeed(value); newEntry.setFeed(_feed); value = newEntry; } } value.ProtocolMajor = _feed.ProtocolMajor; value.ProtocolMinor = _feed.ProtocolMinor; } base.Add(value); return(value); }
///////////////////////////////////////////////////////////////////////////// #endregion #region Editing APIs ////////////////////////////////////////////////////////////////////// /// <summary>uses the set service to insert a new entry. </summary> /// <param name="newEntry">the atomEntry to insert into the feed</param> /// <returns>the entry as echoed back from the server. The entry is NOT added /// to the feeds collection</returns> ////////////////////////////////////////////////////////////////////// public TEntry Insert <TEntry>(TEntry newEntry) where TEntry : AtomEntry { Tracing.Assert(newEntry != null, "newEntry should not be null"); if (newEntry == null) { throw new ArgumentNullException("newEntry"); } AtomEntry echoedEntry = null; if (newEntry.Feed == this) { // same object, already in here. throw new ArgumentException("The entry is already part of this colleciton"); } // now we need to see if this is the same feed. If not, copy if (newEntry.Feed == null) { newEntry.setFeed(this); } else if (!AtomFeed.IsFeedIdentical(newEntry.Feed, this)) { newEntry = AtomEntry.ImportFromFeed(newEntry) as TEntry; newEntry.setFeed(this); } if (Service != null) { echoedEntry = Service.Insert(this, newEntry); } return(echoedEntry as TEntry); }