Пример #1
0
        public ActionResult ValidateFile()
        {
            ViewData["SortedErrors"] = null;

            DataStructureManager dsm       = new DataStructureManager();
            IOUtility            iOUtility = new IOUtility();

            try
            {
                BExIS.Dcm.UploadWizard.TaskManager TaskManager = (BExIS.Dcm.UploadWizard.TaskManager)Session["TaskManager"];
                ValidationModel model = new ValidationModel();
                model.StepInfo = TaskManager.Current();

                if (TaskManager.Bus.ContainsKey(TaskManager.DATASET_ID) && TaskManager.Bus.ContainsKey(TaskManager.DATASTRUCTURE_ID))
                {
                    try
                    {
                        long id    = (long)Convert.ToInt32(TaskManager.Bus[TaskManager.DATASET_ID]);
                        long iddsd = (long)Convert.ToInt32(TaskManager.Bus[TaskManager.DATASTRUCTURE_ID]);
                        StructuredDataStructure sds = dsm.StructuredDataStructureRepo.Get(iddsd);
                        dsm.StructuredDataStructureRepo.LoadIfNot(sds.Variables);

                        // Add Number of Variables to the BUS
                        if (sds != null)
                        {
                            TaskManager.AddToBus(TaskManager.NUMBERSOFVARIABLES, sds.Variables.Count);
                        }


                        if (TaskManager.Bus[TaskManager.EXTENTION].ToString().Equals(".xlsm"))
                        {
                            // open FileStream
                            ExcelReader reader = new ExcelReader(sds, new ExcelFileReaderInfo());
                            Stream = reader.Open(TaskManager.Bus[TaskManager.FILEPATH].ToString());
                            reader.ValidateTemplateFile(Stream, TaskManager.Bus[TaskManager.FILENAME].ToString(), id);
                            model.ErrorList = reader.ErrorMessages;

                            TaskManager.AddToBus(TaskManager.NUMBERSOFROWS, reader.NumberOfRows);
                        }

                        if (iOUtility.IsSupportedExcelFile(TaskManager.Bus[TaskManager.EXTENTION].ToString()))
                        {
                            // open FileStream
                            ExcelReader reader = new ExcelReader(sds, (ExcelFileReaderInfo)TaskManager.Bus[TaskManager.FILE_READER_INFO]);
                            Stream = reader.Open(TaskManager.Bus[TaskManager.FILEPATH].ToString());
                            reader.ValidateFile(Stream, TaskManager.Bus[TaskManager.FILENAME].ToString(), id);
                            model.ErrorList = reader.ErrorMessages;

                            TaskManager.AddToBus(TaskManager.NUMBERSOFROWS, reader.NumberOfRows);
                        }


                        if (iOUtility.IsSupportedAsciiFile(TaskManager.Bus[TaskManager.EXTENTION].ToString()))
                        {
                            AsciiReader reader = new AsciiReader(sds, (AsciiFileReaderInfo)TaskManager.Bus[TaskManager.FILE_READER_INFO]);
                            Stream = reader.Open(TaskManager.Bus[TaskManager.FILEPATH].ToString());
                            reader.ValidateFile(Stream, TaskManager.Bus[TaskManager.FILENAME].ToString(), id);
                            model.ErrorList = reader.ErrorMessages;

                            TaskManager.AddToBus(TaskManager.NUMBERSOFROWS, reader.NumberOfRows);
                        }
                    }
                    catch (Exception ex)
                    {
                        model.ErrorList.Add(new Error(ErrorType.Other, "Can not valid. :  " + ex.Message));
                        TaskManager.AddToBus(TaskManager.VALID, false);
                    }
                    finally
                    {
                        Stream.Close();
                    }
                }
                else
                {
                    model.ErrorList.Add(new Error(ErrorType.Dataset, "Dataset is not selected."));
                    TaskManager.AddToBus(TaskManager.VALID, false);
                }

                if (model.ErrorList.Count() == 0)
                {
                    model.Validated = true;
                    TaskManager.AddToBus(TaskManager.VALID, true);
                }

                List <Error> errorList = new List <Error>();
                for (int i = 0; i < model.ErrorList.Count; i++)
                {
                    // Assume not duplicate.
                    bool duplicate = false;
                    for (int z = 0; z < i; z++)
                    {
                        if (model.ErrorList[z].ToString() == model.ErrorList[i].ToString())
                        {
                            // This is a duplicate.
                            duplicate = true;
                            break;
                        }
                    }
                    // If not duplicate, add to result.
                    if (!duplicate)
                    {
                        errorList.Add(model.ErrorList[i]);
                    }
                }

                model.ErrorList = errorList;

                if (errorList.Count > 0)
                {
                    // split up the error messages for a btter overview-- >
                    // set all value error with the same var name, datatypoe and issue-- >
                    // create a dictionary for error messages

                    // variable issues
                    var varNames  = errorList.Where(e => e.GetType().Equals(ErrorType.Value)).Select(e => e.getName()).Distinct();
                    var varIssues = errorList.Where(e => e.GetType().Equals(ErrorType.Value)).Select(e => e.GetMessage()).Distinct();

                    List <Tuple <string, int, string> > sortedErrors = new List <Tuple <string, int, string> >();

                    foreach (string vn in varNames)
                    {
                        foreach (string i in varIssues)
                        {
                            int c = errorList.Where(e => e.getName().Equals(vn) && e.GetMessage().Equals(i)).Count();

                            if (c > 0)
                            {
                                sortedErrors.Add(new Tuple <string, int, string>(vn, c, i));
                            }
                        }
                    }

                    if (sortedErrors.Count > 0)
                    {
                        ViewData["SortedValueErrors"] = sortedErrors;
                    }
                }

                return(PartialView(TaskManager.Current().GetActionInfo.ActionName, model));
            }
            finally
            {
                dsm.Dispose();
            }
        }
Пример #2
0
        public ActionResult ValidateFile()
        {
            DataStructureManager dsm = new DataStructureManager();

            try
            {
                BExIS.Dcm.UploadWizard.TaskManager TaskManager = (BExIS.Dcm.UploadWizard.TaskManager)Session["TaskManager"];
                ValidationModel model = new ValidationModel();
                model.StepInfo = TaskManager.Current();

                if (TaskManager.Bus.ContainsKey(TaskManager.DATASET_ID) && TaskManager.Bus.ContainsKey(TaskManager.DATASTRUCTURE_ID))
                {
                    try
                    {
                        long id    = (long)Convert.ToInt32(TaskManager.Bus[TaskManager.DATASET_ID]);
                        long iddsd = (long)Convert.ToInt32(TaskManager.Bus[TaskManager.DATASTRUCTURE_ID]);
                        StructuredDataStructure sds = dsm.StructuredDataStructureRepo.Get(iddsd);
                        dsm.StructuredDataStructureRepo.LoadIfNot(sds.Variables);


                        if (TaskManager.Bus[TaskManager.EXTENTION].ToString().Equals(".xlsm"))
                        {
                            // open FileStream
                            ExcelReader reader = new ExcelReader();
                            Stream = reader.Open(TaskManager.Bus[TaskManager.FILEPATH].ToString());
                            reader.ValidateFile(Stream, TaskManager.Bus[TaskManager.FILENAME].ToString(), sds, id);
                            model.ErrorList = reader.ErrorMessages;

                            if (TaskManager.Bus.ContainsKey(TaskManager.NUMBERSOFROWS))
                            {
                                TaskManager.Bus[TaskManager.NUMBERSOFROWS] = reader.NumberOfRows;
                            }
                            else
                            {
                                TaskManager.Bus.Add(TaskManager.NUMBERSOFROWS, reader.NumberOfRows);
                            }
                        }

                        if (TaskManager.Bus[TaskManager.EXTENTION].ToString().Equals(".csv") ||
                            TaskManager.Bus[TaskManager.EXTENTION].ToString().Equals(".txt"))
                        {
                            AsciiReader reader = new AsciiReader();
                            Stream = reader.Open(TaskManager.Bus[TaskManager.FILEPATH].ToString());
                            reader.ValidateFile(Stream, TaskManager.Bus[TaskManager.FILENAME].ToString(), (AsciiFileReaderInfo)TaskManager.Bus[TaskManager.FILE_READER_INFO], sds, id);
                            model.ErrorList = reader.ErrorMessages;

                            if (TaskManager.Bus.ContainsKey(TaskManager.NUMBERSOFROWS))
                            {
                                TaskManager.Bus[TaskManager.NUMBERSOFROWS] = reader.NumberOfRows;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        model.ErrorList.Add(new Error(ErrorType.Other, "Can not valid. :  " + ex.Message));
                        TaskManager.AddToBus(TaskManager.VALID, false);
                    }
                    finally
                    {
                        Stream.Close();
                    }
                }
                else
                {
                    model.ErrorList.Add(new Error(ErrorType.Dataset, "Dataset is not selected."));
                    TaskManager.AddToBus(TaskManager.VALID, false);
                }

                if (model.ErrorList.Count() == 0)
                {
                    model.Validated = true;
                    TaskManager.AddToBus(TaskManager.VALID, true);
                }

                return(PartialView(TaskManager.Current().GetActionInfo.ActionName, model));
            }
            finally
            {
                dsm.Dispose();
            }
        }
Пример #3
0
        public async Task <bool> Validate()
        {
            Debug.WriteLine("start validate data");

            string error = "";

            //load strutcured data structure

            if (_dataStructure == null)
            {
                // send email to user ("failed to load datatructure");
                return(false);
            }

            // validate file
            Stream = reader.Open(_filepath);
            reader.ValidateFile(Stream, Path.GetFileName(_filepath), _dataset.Id);
            List <Error> errors = reader.ErrorMessages;

            // if errors exist -> send messages back
            if (errors.Count > 0)
            {
                List <string> errorArray = new List <string>();

                foreach (var e in errors)
                {
                    errorArray.Add(e.GetMessage());
                }

                var es = new EmailService();
                es.Send(MessageHelper.GetPushApiValidateHeader(_dataset.Id, _title),
                        MessageHelper.GetPushApiValidateMessage(_dataset.Id, _user.UserName, errorArray.ToArray()),
                        new List <string>()
                {
                    _user.Email
                },
                        new List <string>()
                {
                    ConfigurationManager.AppSettings["SystemEmail"]
                }
                        );

                return(false);
            }
            else
            {
                var es = new EmailService();
                es.Send(MessageHelper.GetPushApiValidateHeader(_dataset.Id, _title),
                        MessageHelper.GetPushApiValidateMessage(_dataset.Id, _user.UserName),
                        new List <string>()
                {
                    _user.Email
                },
                        new List <string>()
                {
                    ConfigurationManager.AppSettings["SystemEmail"]
                }
                        );
            }
            Debug.WriteLine("end validate data");

            return(await Upload());
        }