Ejemplo n.º 1
0
        /////////////////////////////////////////////////////////////////////////////

        #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 (this.Service != null)
            {
                echoedEntry = Service.Insert(this, newEntry);
            }
            return(echoedEntry as TEntry);
        }
 /// <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(this.feed);
         }
         else
         {
             if (this.feed != null && value.Feed == this.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, this.feed))
             {
                 AtomEntry newEntry = AtomEntry.ImportFromFeed(value);
                 newEntry.setFeed(this.feed);
                 value = newEntry;
             }
         }
         value.ProtocolMajor = this.feed.ProtocolMajor;
         value.ProtocolMinor = this.feed.ProtocolMinor;
     }
     base.Add(value);
     return(value);
 }