/////////////////////////////////////////////////////////////////////////////

        //////////////////////////////////////////////////////////////////////
        /// <summary>compares 2 source objects</summary>
        /// <param name="theOne">the One source</param>
        /// <param name="theOther">the Other source</param>
        /// <returns>true if identical </returns>
        //////////////////////////////////////////////////////////////////////
        public static bool IsSourceIdentical(AtomSource theOne, AtomSource theOther)
        {
            Tracing.TraceInfo("Comparing source objects");
            if (theOne == null && theOther == null)
            {
                return(true);
            }

            if (!ObjectModelHelper.IsBaseIdentical(theOne, theOther))
            {
                return(false);
            }

            Tracing.TraceInfo("Source: comparing Authors collections");
            if (!ObjectModelHelper.IsPersonCollectionIdentical(theOne.Authors, theOther.Authors))
            {
                return(false);
            }

            Tracing.TraceInfo("Source: comparing Contributors collections");
            if (!ObjectModelHelper.IsPersonCollectionIdentical(theOne.Contributors, theOther.Contributors))
            {
                return(false);
            }
            Tracing.TraceInfo("Source: comparing categories collections");
            if (!ObjectModelHelper.IsCategoryCollectionIdentical(theOne.Categories, theOther.Categories))
            {
                return(false);
            }
            Tracing.TraceInfo("Source: comparing links collections");
            if (!ObjectModelHelper.IsLinkCollectionIdentical(theOne.Links, theOther.Links))
            {
                return(false);
            }

            if (!ObjectModelHelper.IsTextConstructIdentical(theOne.Title, theOther.Title))
            {
                return(false);
            }
            if (!ObjectModelHelper.IsTextConstructIdentical(theOne.Rights, theOther.Rights))
            {
                return(false);
            }
            if (!ObjectModelHelper.IsTextConstructIdentical(theOne.Subtitle, theOther.Subtitle))
            {
                return(false);
            }
            if (!ObjectModelHelper.IsBaseLinkIdentical(theOne.Id, theOther.Id))
            {
                return(false);
            }
            if (!ObjectModelHelper.IsGeneratorIdentical(theOne.Generator, theOther.Generator))
            {
                return(false);
            }
            if (!ObjectModelHelper.IsBaseLinkIdentical(theOne.Icon, theOther.Icon))
            {
                return(false);
            }
            if (!ObjectModelHelper.IsBaseLinkIdentical(theOne.Logo, theOther.Logo))
            {
                return(false);
            }



            return(true);
        }