コード例 #1
0
        public ActionResult Actigraphy(ResearchAccelerometerViewModel model)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.Users = _service.GetUserNames().OrderBy(s => s);
                return(View("Index"));
            }

            ModelState.Clear();
            if (model._From > model._To)
            {
                ModelState.AddModelError("_From", @"The first date must be less than second");
                ModelState.AddModelError("To", @"The first date must be less than second");
                ViewBag.Users = _service.GetUserNames().OrderBy(s => s);
                return(View());
            }

            string fileName, report;
            string exportedUserId = _service.GetUserId(model._UserName);
            var    activities     = BulkCommands.GetActivities(exportedUserId, model._From, model._To);
            List <ActivityPerMinute> activityPerMinute = null;

            switch (model._ActivityOptions)
            {
            case AcceptableActivityOptions.Export:
                model._ExportOptions = AcceptableExportOptions.Text;
                fileName             = "Report";
                report = ReportHelper.GetAccelerometerData(activities);
                break;

            case AcceptableActivityOptions.StandardDeviation:
                model._ExportOptions = AcceptableExportOptions.Text;
                fileName             = "StdDev";
                double devX = StandardDeviation.CalculateStdDev(activities.Select(m => (double)m.X).ToList());
                double devY = StandardDeviation.CalculateStdDev(activities.Select(m => (double)m.Y).ToList());
                double devZ = StandardDeviation.CalculateStdDev(activities.Select(m => (double)m.Z).ToList());
                report = ReportHelper.ExportStdDev(devX, devY, devZ);
                break;

            case AcceptableActivityOptions.EnergyExpenditure:
            case AcceptableActivityOptions.ZeroCrossing:
                activityPerMinute = CalculateActivity.BeginAnalyzation(model._ActivityOptions, activities);
                report            = ReportHelper.ExportProcessedData(activityPerMinute);
                fileName          = string.Concat("Processed-", model._ActivityOptions);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            activities.Clear();
            GC.Collect();

            switch (model._ExportOptions)
            {
            case AcceptableExportOptions.Chart:
                var chart = ReportHelper.CreateChart(activityPerMinute);

                // ReSharper disable once PossibleNullReferenceException
                activityPerMinute.Clear();
                GC.Collect();

                return(File(chart.GetBytes(), "jpeg",
                            string.Concat(fileName, "-accelerometer - ", model._UserName, " - ", DateTime.Now, ".jpeg")));

            case AcceptableExportOptions.Text:
                return(File(Encoding.UTF8.GetBytes(report), "text/plain",
                            string.Concat(fileName, "-accelerometer - ", model._UserName, " - ", DateTime.Now, ".txt")));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }