/// <summary>
        /// Builds the specified report title.
        /// </summary>
        /// <param name="reportTitle">The report title.</param>
        /// <param name="reportSubTitle">The report sub title.</param>
        /// <param name="reportFooter">The report footer.</param>
        /// <param name="cancellationToken">
        /// The cancellation token. The caller can cancel the report building operation using this.</param>
        /// <returns>Report based on the given input in HTML format</returns>
        public override string Build(
            string reportTitle,
            string reportSubTitle,
            string reportFooter,
            CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(string.Empty);
            }
            // form the report
            IReport rpt = new Report(reportTitle, reportSubTitle, reportFooter, this.ReportParts);


            if (cancellationToken.IsCancellationRequested)
            {
                return(string.Empty);
            }
            // get the xml representation of the report object
            IReportXmlConverter objtoXmlConverter = new ReportXmlConverter(this.factory);
            var result = objtoXmlConverter.ConvertToReportXml(rpt, cancellationToken);

            if (cancellationToken.IsCancellationRequested)
            {
                return(string.Empty);
            }

            // either you can use the default xslt or your own xslt file
            var htmlReport = XmlToHtmlTransformer.TransformToHTML(result, cancellationToken, this.xsltPath);

            return(htmlReport);
        }