예제 #1
0
        private void ReturnPrintCache(HttpContext context, CTSPrintManager manager)
        {
            HttpRequest  request  = context.Request;
            HttpResponse response = context.Response;

            //Set our output to be HTML
            response.ContentType     = "text/HTML";
            response.ContentEncoding = Encoding.UTF8;

            Guid printID = new Guid();

            // Validate if the printID passed in through the URL is a valid Guid
            try
            {
                printID = Guid.Parse(request.QueryString["printid"]);
            }
            catch
            {
                // Incorrect parameter for printid (not guid)
                ErrorPageDisplayer.RaisePageByCode(this.GetType().ToString(), 400);
                throw new InvalidPrintIDException("Invalid PrintID parameter for CTS Print");
            }


            // If there is no error, send the printID to the manager to retrieve the cached print content
            string printContent = manager.GetPrintContent(printID);

            printContent = printContent.Replace("${generatePrintURL}", GetEmailUrl(printID));

            response.Write(printContent);
            response.End();
        }
예제 #2
0
        /// <summary>
        /// Connects to the database , and executes the stored proc with the required parameters. The
        /// resulting content is the print page HTML.
        /// </summary>
        /// <param name="printId"></param>
        /// <param name="isLive"></param>
        /// <returns>A string.</returns>
        public static string RetrieveResult(Guid printID, bool isLive)
        {
            string printPageHtml = null;

            try
            {
                string connString = ConfigurationManager.ConnectionStrings["DbConnectionString"].ConnectionString;

                if (!string.IsNullOrEmpty(connString))
                {
                    using (SqlConnection conn = SqlHelper.CreateConnection(connString))
                    {
                        using (SqlDataReader reader =
                                   SqlHelper.ExecuteReader(conn, CommandType.StoredProcedure, "dbo.ct_getPrintResultCache",
                                                           new SqlParameter("@PrintId ", printID),
                                                           new SqlParameter("@isLive", isLive ? 1 : 0)
                                                           ))
                        {
                            if (reader.Read())
                            {
                                SqlFieldValueReader sqlFVReader = new SqlFieldValueReader(reader);
                                printPageHtml = sqlFVReader.GetString("content");
                            }
                            else
                            {
                                ErrorPageDisplayer.RaisePageByCode("CTSPrintDataManager", 404);
                                throw new PrintIDNotFoundException("The given printID did not match any cache values in the database");
                            }
                        }
                    }
                }
                else
                {
                    ErrorPageDisplayer.RaisePageByCode("CTSPrintDataManager", 500);
                    throw new DbConnectionException("Configuration Missing: Connection string is null, update the web config with connection string");
                }

                if (!string.IsNullOrWhiteSpace(printPageHtml))
                {
                    return(printPageHtml);
                }
                else
                {
                    throw new PrintFetchFailureException("Failed in CTSPrintDataManager - Cannot return null page HTML");
                }
            }
            catch
            {
                throw new PrintFetchFailureException("Failed in CTSPrintDataManager");
            }
        }
예제 #3
0
        public void ProcessRequest(HttpContext context)
        {
            HttpRequest request = context.Request;

            CTSPrintManager manager = new CTSPrintManager(_config);

            if (request.HttpMethod == "POST")
            {
                GeneratePrintCacheAndRedirect(context, manager);
            }
            else if (request.HttpMethod == "GET")
            {
                ReturnPrintCache(context, manager);
            }
            else
            {
                ErrorPageDisplayer.RaisePageByCode(this.GetType().ToString(), 400);
            }
        }
예제 #4
0
        public Guid StorePrintContent(List <String> trialIDs, DateTime date, CTSSearchParams searchTerms)
        {
            // Retrieve the collections given the ID's
            //TODO: THese dependencies should be passed in!
            BasicCTSManager manager = new BasicCTSManager(APIClientHelper.GetV1ClientInstance());

            List <ClinicalTrial> results = manager.GetMultipleTrials(trialIDs).ToList();

            // Send results to Velocity template
            var formattedPrintContent = FormatPrintResults(results, date, searchTerms);

            // Save result to cache table
            Guid guid = CTSPrintResultsDataManager.SavePrintResult(formattedPrintContent, trialIDs, searchTerms, Settings.IsLive);

            if (guid == Guid.Empty)
            {
                // Something went wrong with the save/return from the DB
                ErrorPageDisplayer.RaisePageByCode(this.GetType().ToString(), 500);
                throw new DbConnectionException("Unable to connect to the database. ");
            }

            return(guid);
        }
예제 #5
0
        private void GeneratePrintCacheAndRedirect(HttpContext context, CTSPrintManager manager)
        {
            HttpRequest  request  = context.Request;
            HttpResponse response = context.Response;

            NciUrl parsedReqUrlParams = new NciUrl(true, true, true);  //We need this to be lowercase and collapse duplicate params. (Or not use an NCI URL)

            parsedReqUrlParams.SetUrl(request.Url.Query);


            ClinicalTrialsAPIClient apiClient = APIClientHelper.GetV1ClientInstance();

            CTSSearchParams searchParams = null;

            try
            {
                // Get mapping file names from configuration
                TrialTermLookupConfig mappingConfig = new TrialTermLookupConfig();
                mappingConfig.MappingFiles.AddRange(_config.MappingFiles.Select(fp => HttpContext.Current.Server.MapPath(fp)));

                CTSSearchParamFactory factory = new CTSSearchParamFactory(new TrialTermLookupService(mappingConfig, apiClient), new ZipCodeGeoLookup());
                searchParams = factory.Create(parsedReqUrlParams);
            }
            catch (Exception ex)
            {
                ErrorPageDisplayer.RaisePageByCode(this.GetType().ToString(), 400); //Anything here is just a bad request.
            }

            //Set our output to be JSON
            response.ContentType     = "application/json";
            response.ContentEncoding = Encoding.UTF8;

            //Try and get the request.
            Request req = null;

            try
            {
                req = GetRequestAndValidate(context);
            }
            catch (Exception)
            {
                ErrorPageDisplayer.RaisePageByCode(this.GetType().ToString(), 400); //Anything here is just a bad request.
                return;
            }

            // Store the cached print content
            Guid printCacheID = manager.StorePrintContent(req.TrialIDs, DateTime.Now, searchParams);

            //Add in debugging helper param to make debugging templates easier.
            //TODO: Refactor so get content and render is a single function.
            if (parsedReqUrlParams.QueryParameters.ContainsKey("debug") && parsedReqUrlParams.QueryParameters["debug"] == "true")
            {
                response.ContentType     = "text/HTML";
                response.ContentEncoding = Encoding.UTF8;
                // If there is no error, send the printID to the manager to retrieve the cached print content
                string printContent = manager.GetPrintContent(printCacheID);

                printContent = printContent.Replace("${generatePrintURL}", GetEmailUrl(printCacheID));

                response.Write(printContent);
                response.End();
            }
            else
            {
                // Format our return as JSON
                var resp = JsonConvert.SerializeObject(new
                {
                    printID = printCacheID
                });

                response.Write(resp);
                response.End();
            }
        }