/// <summary>
        /// Builds the Permissions report to export to an HTML file
        /// </summary>
        /// <param name="writer">The StreamWriter to write the report to</param>
        protected virtual void BuildExportReport(StreamWriter writer)
        {
            var application = CurrentApplication;
            var report = new PermissionReport();

            while (application != null)
            {
                var appPermissions = PermissionService.GetApplicationPermisisons(application);

                report.AddApplicationTitle(application)
                        .AddPermissionGrid(appPermissions);

                if (application.GroupId.HasValue)
                    application = GroupApplicationService.GetGroup(application.GroupId.Value);
                else
                    application = null;
            }

            var sitePermissions = PermissionService.GetSitePermisisons();
            report.AddTitle("Overall Site Permissions")
                    .AddPermissionGrid(sitePermissions);

            writer.Write(report.WriteReport());
        }
        /// <summary>
        /// Updates the Permission Display to show permissions
        /// for the CurrentApplication
        /// </summary>
        protected virtual void UpdatePermissionDisplay()
        {
            IEnumerable<PermissionEntry> permissions;
            var report = new PermissionReport();
            try
            {
                if (CurrentApplication == null)
                {
                    permissions = PermissionService.GetSitePermisisons();
                    report.AddTitle("Overall Site Permissions");
                }
                else
                {
                    permissions = PermissionService.GetApplicationPermisisons(CurrentApplication);
                    report.AddApplicationTitle(CurrentApplication);
                }

                // Convert permissions to array to prevent LINQ queries hitting the permissions
                // endpoint multiple times
                report.AddPermissionGrid(permissions.ToArray());

                permissionDisplayBrowser.DocumentText = report.WriteReport();
            }
            catch (WebException ex)
            {
                StringBuilder b = new StringBuilder("<h1>An error occured obtaining permissions</h1>");
                b.Append("<p>");
                b.Append(ex.GetType().ToString());
                b.Append("<br />");
                b.Append(ex.Message);
                b.Append("</p>");
                var reader = new StreamReader(ex.Response.GetResponseStream());
                b.Append(reader.ReadToEnd());

                permissionDisplayBrowser.DocumentText = b.ToString();
            }
        }