Esempio n. 1
0
        private XDoc GetFileXml(IList <ResourceBE> files, bool verbose, bool list, string fileSuffix, bool?explicitRevisionInfo, int?totalCount, XUri listUri)
        {
            Dictionary <uint, UserBE>  users = new Dictionary <uint, UserBE>();
            Dictionary <ulong, PageBE> pages = new Dictionary <ulong, PageBE>();
            List <uint> parentIds            = new List <uint>();

            //Collect related entity id's
            foreach (ResourceBE f in files)
            {
                users[f.UserId]             = null;
                pages[f.ParentPageId.Value] = null;
                parentIds.Add(f.ResourceId);
            }

            //Perform batch lookups of related entities
            users = _session.Users_GetByIds(users.Keys.ToArray()).AsHash(e => e.ID);
            if (verbose)
            {
                pages = PageBL.GetPagesByIdsPreserveOrder(pages.Keys.ToArray()).AsHash(e => e.ID);
            }

            //Associate properties with the given attachments
            files = _resourceBL.PopulateChildren(files.ToArray(), new[] { ResourceBE.Type.PROPERTY }, explicitRevisionInfo ?? false);

            XDoc ret = XDoc.Empty;

            if (list)
            {
                List <ResourceBE> sortedFiles = new List <ResourceBE>(files);
                files = SortFileListByNameAndRevision(sortedFiles).ToArray();
                ret   = new XDoc(string.IsNullOrEmpty(fileSuffix) ? "files" : "files." + fileSuffix);
                ret.Attr("count", files.Count);
                if (totalCount != null)
                {
                    ret.Attr("totalcount", totalCount.Value);
                }
                if (listUri != null)
                {
                    ret.Attr("href", listUri);
                }
            }
            foreach (ResourceBE f in files)
            {
                UserBE updatedByUser;
                PageBE parentPage;
                users.TryGetValue(f.UserId, out updatedByUser);
                pages.TryGetValue(f.ParentPageId.Value, out parentPage);
                ret = AppendFileXml(ret, f, fileSuffix, explicitRevisionInfo, updatedByUser, parentPage);
            }

            return(ret);
        }