private FileInfoModel GetFileInfoModel(ExcelFileReaderInfo info, string extention)
        {
            FileInfoModel FileReaderInfo = new FileInfoModel();

            FileReaderInfo.Data        = info.Data;
            FileReaderInfo.Dateformat  = info.Dateformat;
            FileReaderInfo.Decimal     = info.Decimal;
            FileReaderInfo.Offset      = info.Offset;
            FileReaderInfo.Orientation = info.Orientation;
            FileReaderInfo.Variables   = info.Variables;

            //Use the given file and the given sheet format to create a json-table
            string     filePath  = TaskManager.Bus[EasyUploadTaskManager.FILEPATH].ToString();
            string     jsonTable = "[]";
            FileStream fis       = null;

            //FileStream for the users file
            fis = new FileStream(filePath, FileMode.Open, FileAccess.Read);

            UploadUIHelper uploadUIHelper = new UploadUIHelper(fis);

            string activeWorksheet;

            if (!TaskManager.Bus.ContainsKey(TaskManager.ACTIVE_WOKSHEET_URI))
            {
                activeWorksheet = uploadUIHelper.GetFirstWorksheetUri().ToString();
                TaskManager.AddToBus(TaskManager.ACTIVE_WOKSHEET_URI, activeWorksheet);
            }
            else
            {
                activeWorksheet = TaskManager.Bus[EasyUploadTaskManager.ACTIVE_WOKSHEET_URI].ToString();
            }

            FileReaderInfo.activeSheetUri     = activeWorksheet;
            FileReaderInfo.SheetUriDictionary = uploadUIHelper.GetWorksheetUris();
            // Check if the areas have already been selected, if yes, use them (Important when jumping back to this step)
            if (TaskManager.Bus.ContainsKey(TaskManager.SHEET_DATA_AREA))
            {
                FileReaderInfo.DataArea = (List <string>)TaskManager.Bus[TaskManager.SHEET_DATA_AREA];
            }
            if (TaskManager.Bus.ContainsKey(TaskManager.SHEET_HEADER_AREA))
            {
                FileReaderInfo.HeaderArea = TaskManager.Bus[TaskManager.SHEET_HEADER_AREA].ToString();
            }

            //Generate the table for the active worksheet
            jsonTable = uploadUIHelper.GenerateJsonTable(activeWorksheet);

            if (!String.IsNullOrEmpty(jsonTable))
            {
                TaskManager.AddToBus(EasyUploadTaskManager.SHEET_JSON_DATA, jsonTable);
            }

            fis.Close();

            return(FileReaderInfo);
        }
        public ActionResult ChangeWorksheet(string sheetIdentifier)
        {
            TaskManager = (TaskManager)Session["TaskManager"];

            #region Generate table for selected sheet

            string     filePath  = TaskManager.Bus[EasyUploadTaskManager.FILEPATH].ToString();
            FileStream fis       = null;
            string     jsonTable = "[]";

            try
            {
                //FileStream for the users file
                fis = new FileStream(filePath, FileMode.Open, FileAccess.Read);

                //Transforms the content of the file into a 2d-json-array
                UploadUIHelper uploadUIHelper = new UploadUIHelper(fis);
                jsonTable = uploadUIHelper.GenerateJsonTable(sheetIdentifier);

                if (!String.IsNullOrEmpty(jsonTable))
                {
                    TaskManager.AddToBus(TaskManager.SHEET_JSON_DATA, jsonTable);
                }

                TaskManager.AddToBus(TaskManager.ACTIVE_WOKSHEET_URI, sheetIdentifier);
            }
            catch (Exception ex)
            {
                LoggerFactory.LogCustom(ex.Message);
            }
            finally
            {
                if (fis != null)
                {
                    fis.Close();
                }
            }

            #endregion Generate table for selected sheet

            //Send back the table-data
            return(Content(jsonTable, "application/json"));
        }
        public ActionResult SelectedAreaToBus()
        {
            string      headerArea   = null;
            string      dataArea     = null;
            string      worksheeturi = "";
            TaskManager TaskManager  = (TaskManager)Session["TaskManager"];

            foreach (string key in Request.Form.AllKeys)
            {
                if ("dataArea" == key)
                {
                    dataArea = Request.Form[key];
                }
                if ("headerArea" == key)
                {
                    headerArea = Request.Form[key];
                }
            }

            FileInfoModel model = new FileInfoModel();

            //read data area from request
            if (dataArea != null)
            {
                if (TaskManager.Bus.ContainsKey(TaskManager.SHEET_DATA_AREA))
                {
                    model.DataArea = (List <string>)TaskManager.Bus[TaskManager.SHEET_DATA_AREA];
                }

                //dataArea == "" means the resetButton was clicked
                if (model.DataArea == null || dataArea == "")
                {
                    model.DataArea = new List <string>();
                }
                if (dataArea != "")
                {
                    int[]   newArea  = JsonConvert.DeserializeObject <int[]>(dataArea);
                    Boolean contains = false;
                    foreach (string area in model.DataArea)
                    {
                        int[] oldArea = JsonConvert.DeserializeObject <int[]>(area);
                        //If one of the already selected areas contains the new one, don't add the new one to the selection (prevents duplicate selection)
                        if (oldArea[0] <= newArea[0] && oldArea[2] >= newArea[2] &&
                            oldArea[1] <= newArea[1] && oldArea[3] >= newArea[3])
                        {
                            contains = true;
                        }
                    }
                    if (!contains)
                    {
                        //If the new area contains one (or several) of the already selected areas, remove the old ones
                        for (int i = model.DataArea.Count - 1; i >= 0; i--)
                        {
                            int[] oldArea = JsonConvert.DeserializeObject <int[]>(model.DataArea[i]);

                            if (newArea[0] <= oldArea[0] && newArea[2] >= oldArea[2] &&
                                newArea[1] <= oldArea[1] && newArea[3] >= oldArea[3])
                            {
                                model.DataArea.RemoveAt(i);
                            }
                        }

                        //Insert the new area
                        model.DataArea.Add(dataArea);
                    }
                }

                TaskManager.AddToBus(TaskManager.SHEET_DATA_AREA, model.DataArea);
            }

            //read header area from request
            if (headerArea != null)
            {
                TaskManager.AddToBus(TaskManager.SHEET_HEADER_AREA, headerArea);
                model.HeaderArea = headerArea;
            }

            string     filePath = TaskManager.Bus[TaskManager.FILEPATH].ToString();
            FileStream fis      = null;

            //get worksheets
            try
            {
                //FileStream for the users file
                fis = new FileStream(filePath, FileMode.Open, FileAccess.Read);

                UploadUIHelper uploadUiHelper = new UploadUIHelper(fis);

                //Get the worksheet uris and save them to the model
                model.SheetUriDictionary = uploadUiHelper.GetWorksheetUris();
            }
            catch (Exception ex)
            {
                LoggerFactory.LogCustom(ex.Message);
            }
            finally
            {
                if (fis != null)
                {
                    fis.Close();
                }
            }

            if (TaskManager.Bus.ContainsKey(TaskManager.ACTIVE_WOKSHEET_URI))
            {
                worksheeturi = TaskManager.Bus[TaskManager.ACTIVE_WOKSHEET_URI].ToString();
            }

            // STore in the excelfilereader info

            int[] areaDataValues   = null;
            int[] areaHeaderValues = null;

            //load or create FILE_READER_INFO
            ExcelFileReaderInfo excelFileReaderInfo = new ExcelFileReaderInfo();

            if (TaskManager.Bus.ContainsKey(TaskManager.FILE_READER_INFO))
            {
                excelFileReaderInfo = (ExcelFileReaderInfo)TaskManager.Bus[TaskManager.FILE_READER_INFO];
            }

            if (TaskManager.Bus.ContainsKey(TaskManager.SHEET_DATA_AREA))
            {
                List <string> selectedDataAreaJsonArray = (List <string>)TaskManager.Bus[TaskManager.SHEET_DATA_AREA];
                List <int[]>  areaDataValuesList        = new List <int[]>();
                foreach (string area in selectedDataAreaJsonArray)
                {
                    areaDataValuesList.Add(JsonConvert.DeserializeObject <int[]>(area));
                }

                if (areaDataValuesList != null && areaDataValuesList.Count > 0)
                {
                    areaDataValues = areaDataValuesList[0];
                    if (areaDataValues != null)
                    {
                        excelFileReaderInfo.DataStartRow = areaDataValues[0] + 1;
                        //End row is either at the end of the batch or the end of the marked area
                        //DataEndRow = (currentBatchEndRow > areaDataValuesList[0][2] + 1) ? areaDataValues[2] + 1 : currentBatchEndRow,
                        excelFileReaderInfo.DataEndRow = areaDataValues[2] + 1;
                        //Column indices as marked in a previous step
                        excelFileReaderInfo.DataStartColumn = areaDataValues[1] + 1;
                        excelFileReaderInfo.DataEndColumn   = areaDataValues[3] + 1;
                        excelFileReaderInfo.Offset          = areaDataValues[1];
                    }
                }
            }

            if (TaskManager.Bus.ContainsKey(TaskManager.SHEET_HEADER_AREA))
            {
                string selectedHeaderAreaJsonArray = TaskManager.Bus[TaskManager.SHEET_HEADER_AREA].ToString();

                if (!string.IsNullOrEmpty(selectedHeaderAreaJsonArray))
                {
                    areaHeaderValues = JsonConvert.DeserializeObject <int[]>(selectedHeaderAreaJsonArray);
                    if (areaHeaderValues != null)
                    {
                        //Header area as marked in a previous step
                        excelFileReaderInfo.VariablesStartRow    = areaHeaderValues[0] + 1;
                        excelFileReaderInfo.VariablesStartColumn = areaHeaderValues[1] + 1;
                        excelFileReaderInfo.VariablesEndRow      = areaHeaderValues[2] + 1;
                        excelFileReaderInfo.VariablesEndColumn   = areaHeaderValues[3] + 1;
                    }
                }
            }

            excelFileReaderInfo.Orientation  = Orientation.columnwise;
            excelFileReaderInfo.WorksheetUri = worksheeturi;

            //reset
            if (string.IsNullOrEmpty(dataArea) && string.IsNullOrEmpty(headerArea))
            {
                excelFileReaderInfo = new ExcelFileReaderInfo();

                if (TaskManager.Bus.ContainsKey(TaskManager.SHEET_HEADER_AREA))
                {
                    TaskManager.Bus.Remove(TaskManager.SHEET_HEADER_AREA);
                }

                if (TaskManager.Bus.ContainsKey(TaskManager.SHEET_DATA_AREA))
                {
                    TaskManager.Bus.Remove(TaskManager.SHEET_DATA_AREA);
                }
            }

            TaskManager.AddToBus(TaskManager.FILE_READER_INFO, excelFileReaderInfo);

            Session["TaskManager"] = TaskManager;

            return(PartialView("_xlsFormularView", model));
        }