private async Task <IActionResult> RunAnalysis(AnalysisModelBase model, bool ignoreWarnings)
        {
            Dataset dataset = null;
            AnalysisDataModelBase analysisDataModelBase = model as AnalysisDataModelBase;

            if (analysisDataModelBase != null)
            {
                dataset = await repository.GetDatasetByID(analysisDataModelBase.DatasetID);

                analysisDataModelBase.ReInitialize(dataset);
            }

            if (ModelState.IsValid)
            {
                ValidationInfo validationInfo = model.Validate();

                if (!validationInfo.ValidatedOK)
                {
                    foreach (string error in validationInfo.ErrorMessages)
                    {
                        ModelState.AddModelError(String.Empty, error);
                    }

                    return(View(model));
                }
                else if (validationInfo.WarningMessages.Any() && !ignoreWarnings) //display warnings
                {
                    ViewBag.WarningMessages = validationInfo.WarningMessages;

                    return(View(model));
                }
                else //run analysis...
                {
                    //save settings to database
                    Analysis newAnalysis = new Analysis(dataset);
                    newAnalysis.Script = await repository.GetScriptByName(model.ScriptFileName);

                    newAnalysis.DateAnalysed = DateTime.Now;
                    newAnalysis.Arguments.AddRange(model.GetArguments());

                    await repository.AddAnalysis(newAnalysis);

                    backgroundQueue.QueueBackgroundWorkItem(async cancellationToken =>
                    {
                        await rProcessorService.Execute(newAnalysis.AnalysisGuid);
                    });

                    //eventually work out how to return message that analysis complete, but for now...
                    return(RedirectToAction("Processing", new { analysisGuid = newAnalysis.AnalysisGuid }));
                }
            }
            else
            {
                return(View(model));
            }
        }