예제 #1
0
        public ExportedTable Export(ResultsListReport report)
        {
            var table = new ExportedTable();

            table.Title = report.Metadata.Title;
            foreach (var athleteField in athleteFields)
            {
                table.Groups.Add("Athlete");
                table.Headers.Add(athleteField.Title);
            }
            var fieldSets = new List <List <IExportedTableColumn <ResultsListReportEntrySubresult> > >();

            foreach (var reportColumn in report.Metadata.Columns)
            {
                var fieldSet = GetFieldSet(reportColumn.PrimaryComponent != null, reportColumn.HasFinalPoints);
                if (fieldSet == null)
                {
                    continue;
                }
                foreach (var field in fieldSet)
                {
                    table.Groups.Add(reportColumn.Title);
                    table.Headers.Add(field.Title);
                }
                fieldSets.Add(fieldSet);
            }
            foreach (var entry in report.Results)
            {
                var row = new List <string>();
                foreach (var athleteField in athleteFields)
                {
                    row.Add(athleteField.Extract(entry.Athlete));
                }
                for (var i = 0; i < fieldSets.Count; i++)
                {
                    var subresult = entry.Subresults[i];
                    var fieldSet  = fieldSets[i];
                    foreach (var field in fieldSet)
                    {
                        row.Add(field.Extract(subresult));
                    }
                }
                table.Rows.Add(row);
            }
            return(table);
        }
예제 #2
0
        public HttpResponseMessage ExportTable(ExportedTable table)
        {
            XElement htmlTitle      = string.IsNullOrEmpty(table.Title) ? null : new XElement("title", table.Title);
            XElement htmlPageHeader = string.IsNullOrEmpty(table.Title) ? null : new XElement("h1", table.Title);
            XElement htmlTableHead  = new XElement("thead");

            if (table.Groups.Count > 0)
            {
                htmlTableHead.Add(BuildHeaderRow(table.Groups));
            }
            htmlTableHead.Add(BuildHeaderRow(table.Headers));
            XElement htmlTableBody = new XElement("tbody");

            foreach (var row in table.Rows)
            {
                htmlTableBody.Add(BuildDataRow(row));
            }

            XDocument document = new XDocument(
                new XDocumentType("html", null, null, null),
                new XElement(
                    "html",
                    new XElement("head", htmlTitle),
                    new XElement(
                        "body",
                        htmlPageHeader,
                        new XElement("table", htmlTableHead, htmlTableBody))));

            var xmlSettings = new XmlWriterSettings {
                Indent = true, IndentChars = "  ", OmitXmlDeclaration = true, NewLineHandling = NewLineHandling.None
            };

            using (var stream = new MemoryStream())
            {
                using (var xmlWriter = XmlWriter.Create(stream, xmlSettings))
                {
                    document.WriteTo(xmlWriter);
                }
                var message = new HttpResponseMessage(HttpStatusCode.OK);
                message.Content = new ByteArrayContent(stream.ToArray());
                message.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
                return(message);
            }
        }
예제 #3
0
        public ExportedTable Export(StartingListReport report)
        {
            ExportedTable table = new ExportedTable();

            table.Title = report.Title;
            foreach (var column in columns)
            {
                table.Headers.Add(column.Title);
            }
            foreach (var entry in report.Entries)
            {
                var row = new List <string>();
                foreach (var column in columns)
                {
                    row.Add(column.Extract(entry));
                }
                table.Rows.Add(row);
            }
            return(table);
        }
예제 #4
0
 public HttpResponseMessage ExportTable(ExportedTable table)
 {
     using (var stream = new MemoryStream())
     {
         using (var writer = new StreamWriter(stream, Encoding.UTF8, 4096, true))
         {
             ExportRow(writer, table.Headers);
             foreach (var row in table.Rows)
             {
                 ExportRow(writer, row);
             }
         }
         var message = new HttpResponseMessage(HttpStatusCode.OK);
         message.Content = new ByteArrayContent(stream.ToArray());
         message.Content.Headers.ContentType        = new MediaTypeHeaderValue("text/csv");
         message.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
         {
             FileName = table.Title + ".csv"
         };
         return(message);
     }
 }