예제 #1
0
        /// <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);
        }
예제 #2
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 (Service != null)
            {
                echoedEntry = Service.Insert(this, newEntry);
            }

            return(echoedEntry as TEntry);
        }