コード例 #1
0
        public ActionResult SaveExcelFileInfos(FileInfoModel info)
        {
            TaskManager TaskManager = (TaskManager)Session["TaskManager"];

            ExcelFileReaderInfo excelFileReaderInfo = new ExcelFileReaderInfo();

            excelFileReaderInfo.Data        = info.Data;
            excelFileReaderInfo.Dateformat  = "";//info.Dateformat;
            excelFileReaderInfo.Decimal     = info.Decimal;
            excelFileReaderInfo.Offset      = info.Offset;
            excelFileReaderInfo.Orientation = info.Orientation;
            excelFileReaderInfo.Variables   = info.Variables;

            TaskManager.AddToBus(TaskManager.FILE_READER_INFO, excelFileReaderInfo);

            GetFileInformationModel model = new GetFileInformationModel();

            model.StepInfo                = TaskManager.Current();
            model.Extention               = TaskManager.Bus[TaskManager.EXTENTION].ToString();
            model.FileInfoModel           = info;
            model.FileInfoModel.Extention = TaskManager.Bus[TaskManager.EXTENTION].ToString();
            model.IsSaved = true;

            return(RedirectToAction("ReloadUploadWizard", new { restart = false }));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public ActionResult GetFileInformation()
        {
            IOUtility iOUtility = new IOUtility();

            TaskManager = (TaskManager)Session["TaskManager"];
            TaskManager.Current().SetValid(false);

            GetFileInformationModel model = new GetFileInformationModel();

            if (TaskManager.Bus[TaskManager.IS_TEMPLATE].ToString().Equals("true"))
            {
                TaskManager.Current().SetValid(true);
            }

            if (TaskManager.Bus.ContainsKey(TaskManager.FILE_READER_INFO))
            {
                FileReaderInfo fri = (FileReaderInfo)TaskManager.Bus[TaskManager.FILE_READER_INFO];

                if (fri is ExcelFileReaderInfo)
                {
                    ExcelFileReaderInfo efri = (ExcelFileReaderInfo)fri;
                    if (efri.VariablesStartRow == 0)
                    {
                        TaskManager.Current().SetValid(false);
                        model.ErrorList.Add(new Error(ErrorType.Other, "Header is not set."));
                    }

                    if (efri.DataStartRow == 0)
                    {
                        TaskManager.Current().SetValid(false);
                        model.ErrorList.Add(new Error(ErrorType.Other, "Data is not set."));
                    }

                    if (model.ErrorList.Count == 0)
                    {
                        TaskManager.Current().SetValid(true);
                    }
                }
                else
                {
                    TaskManager.Current().SetValid(true);
                }
            }

            if (!TaskManager.Current().IsValid())
            {
                model.StepInfo  = TaskManager.Current();
                model.Extention = TaskManager.Bus[TaskManager.EXTENTION].ToString();
                model.FileInfoModel.Extention = TaskManager.Bus[TaskManager.EXTENTION].ToString();
                model.ErrorList.Add(new Error(ErrorType.Other, "File Information not saved."));

                if (TaskManager.Bus.ContainsKey(TaskManager.FILE_READER_INFO))
                {
                    if (iOUtility.IsSupportedAsciiFile(model.Extention))
                    {
                        model.FileInfoModel = GetFileInfoModel((AsciiFileReaderInfo)TaskManager.Bus[TaskManager.FILE_READER_INFO], TaskManager.Bus[TaskManager.EXTENTION].ToString());
                    }

                    if (iOUtility.IsSupportedExcelFile(model.Extention))
                    {
                        model.FileInfoModel = GetFileInfoModel((ExcelFileReaderInfo)TaskManager.Bus[TaskManager.FILE_READER_INFO], TaskManager.Bus[TaskManager.EXTENTION].ToString());
                    }
                }

                model.FileInfoModel.Extention = TaskManager.Bus[TaskManager.EXTENTION].ToString();

                return(PartialView(model));
            }
            else
            {
                TaskManager.AddExecutedStep(TaskManager.Current());
                TaskManager.GoToNext();
                Session["TaskManager"] = TaskManager;
                ActionInfo actionInfo = TaskManager.Current().GetActionInfo;
                return(RedirectToAction(actionInfo.ActionName, actionInfo.ControllerName, new RouteValueDictionary {
                    { "area", actionInfo.AreaName }, { "index", TaskManager.GetCurrentStepInfoIndex() }
                }));
            }
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        //temporary solution: norman :FinishUpload2
        public async Task <List <Error> > FinishUpload()
        {
            DataStructureManager dsm       = new DataStructureManager();
            DatasetManager       dm        = new DatasetManager();
            IOUtility            iOUtility = new IOUtility();
            List <Error>         temp      = new List <Error>();
            long   id                  = 0;
            string title               = "";
            int    numberOfRows        = 0;
            int    numberOfSkippedRows = 0;

            try
            {
                DatasetVersion workingCopy = new DatasetVersion();
                //datatuple list
                List <DataTuple> rows = new List <DataTuple>();
                //Dataset ds = null;
                bool inputWasAltered = false;

                if (Bus.ContainsKey(TaskManager.DATASET_ID) && Bus.ContainsKey(TaskManager.DATASTRUCTURE_ID))
                {
                    id = Convert.ToInt32(Bus[TaskManager.DATASET_ID]);
                    long iddsd = Convert.ToInt32(Bus[TaskManager.DATASTRUCTURE_ID]);

                    //GetValues from the previus version
                    // Status
                    DatasetVersion latestVersion = dm.GetDatasetLatestVersion(id);
                    title = latestVersion.Title;
                    string status = DatasetStateInfo.NotValid.ToString();
                    if (latestVersion.StateInfo != null)
                    {
                        status = latestVersion.StateInfo.State;
                    }

                    #region Progress Informations

                    if (Bus.ContainsKey(TaskManager.CURRENTPACKAGESIZE))
                    {
                        Bus[TaskManager.CURRENTPACKAGESIZE] = 0;
                    }
                    else
                    {
                        Bus.Add(TaskManager.CURRENTPACKAGESIZE, 0);
                    }

                    if (Bus.ContainsKey(TaskManager.CURRENTPACKAGE))
                    {
                        Bus[TaskManager.CURRENTPACKAGE] = 0;
                    }
                    else
                    {
                        Bus.Add(TaskManager.CURRENTPACKAGE, 0);
                    }

                    #endregion Progress Informations

                    #region structured data

                    if (Bus.ContainsKey(TaskManager.DATASTRUCTURE_TYPE) && Bus[TaskManager.DATASTRUCTURE_TYPE].Equals(DataStructureType.Structured))
                    {
                        long             datasetid        = id;
                        XmlDatasetHelper xmlDatasetHelper = new XmlDatasetHelper();



                        try
                        {
                            // load all data tuple ids from the latest version
                            List <long> datatupleFromDatabaseIds = dm.GetDatasetVersionEffectiveTupleIds(dm.GetDatasetLatestVersion(id));

                            // load structured data structure
                            StructuredDataStructure sds = dsm.StructuredDataStructureRepo.Get(iddsd);
                            dsm.StructuredDataStructureRepo.LoadIfNot(sds.Variables);

                            #region excel reader

                            if (Bus[TaskManager.EXTENTION].ToString().Equals(".xlsm") ||
                                iOUtility.IsSupportedExcelFile(Bus[TaskManager.EXTENTION].ToString()))
                            {
                                int packageSize = 100000;

                                Bus[TaskManager.CURRENTPACKAGESIZE] = packageSize;

                                int counter = 0;

                                //schleife
                                dm.CheckOutDatasetIfNot(id, User.Name); // there are cases, the dataset does not get checked out!!
                                if (!dm.IsDatasetCheckedOutFor(id, User.Name))
                                {
                                    throw new Exception(string.Format("Not able to checkout dataset '{0}' for  user '{1}'!", id, User.Name));
                                }

                                workingCopy = dm.GetDatasetWorkingCopy(id);

                                //set StateInfo of the previus version
                                if (workingCopy.StateInfo == null)
                                {
                                    workingCopy.StateInfo = new Vaiona.Entities.Common.EntityStateInfo()
                                    {
                                        State = status
                                    };
                                }
                                else
                                {
                                    workingCopy.StateInfo.State = status;
                                }

                                ExcelReader         reader = null;
                                ExcelFileReaderInfo excelFileReaderInfo = null;

                                if (iOUtility.IsSupportedExcelFile(Bus[TaskManager.EXTENTION].ToString()))
                                {
                                    excelFileReaderInfo = (ExcelFileReaderInfo)Bus[TaskManager.FILE_READER_INFO];
                                }

                                reader = new ExcelReader(sds, excelFileReaderInfo);

                                do
                                {
                                    counter++;
                                    Bus[TaskManager.CURRENTPACKAGE] = counter;

                                    //open stream
                                    Stream = reader.Open(Bus[TaskManager.FILEPATH].ToString());
                                    rows   = new List <DataTuple>();

                                    if (iOUtility.IsSupportedExcelFile(Bus[TaskManager.EXTENTION].ToString()))
                                    {
                                        if (reader.Position < excelFileReaderInfo.DataEndRow)
                                        {
                                            rows = reader.ReadFile(Stream, Bus[TaskManager.FILENAME].ToString(), (int)id, packageSize);
                                        }
                                    }
                                    else
                                    {
                                        rows = reader.ReadTemplateFile(Stream, Bus[TaskManager.FILENAME].ToString(), (int)id, packageSize);
                                    }

                                    //Debug.WriteLine("ReadFile: " + counter + "  Time " + upload.Elapsed.TotalSeconds.ToString());

                                    if (reader.ErrorMessages.Count > 0)
                                    {
                                        //model.ErrorList = reader.errorMessages;
                                    }
                                    else
                                    {
                                        //XXX Add packagesize to excel read function
                                        if (Bus.ContainsKey(TaskManager.DATASET_STATUS))
                                        {
                                            if (Bus[TaskManager.DATASET_STATUS].ToString().Equals("new") || ((UploadMethod)Bus[TaskManager.UPLOAD_METHOD]).Equals(UploadMethod.Append))
                                            {
                                                dm.EditDatasetVersion(workingCopy, rows, null, null);
                                                //Debug.WriteLine("EditDatasetVersion: " + counter + "  Time " + upload.Elapsed.TotalSeconds.ToString());
                                                //Debug.WriteLine("----");
                                            }
                                            else
                                            if (Bus[TaskManager.DATASET_STATUS].ToString().Equals("edit"))
                                            {
                                                if (rows.Count() > 0)
                                                {
                                                    Dictionary <string, List <DataTuple> > splittedDatatuples = new Dictionary <string, List <DataTuple> >();
                                                    splittedDatatuples = uploadWizardHelper.GetSplitDatatuples(rows, (List <long>)Bus[TaskManager.PRIMARY_KEYS], workingCopy, ref datatupleFromDatabaseIds);

                                                    dm.EditDatasetVersion(workingCopy, splittedDatatuples["new"], splittedDatatuples["edit"], null);
                                                }
                                            }
                                        }
                                        else
                                        {
                                        }
                                    }
                                    Stream?.Close();

                                    //count rows
                                    numberOfRows += rows.Count();
                                } while (rows.Count() > 0 && rows.Count() <= packageSize);

                                numberOfSkippedRows = reader.NumberOSkippedfRows;
                            }

                            #endregion excel reader

                            #region ascii reader

                            if (iOUtility.IsSupportedAsciiFile(Bus[TaskManager.EXTENTION].ToString()))
                            {
                                // open file
                                AsciiReader reader = new AsciiReader(sds, (AsciiFileReaderInfo)Bus[TaskManager.FILE_READER_INFO]);

                                if (dm.IsDatasetCheckedOutFor(id, User.Name) || dm.CheckOutDataset(id, User.Name))
                                {
                                    workingCopy = dm.GetDatasetWorkingCopy(id);

                                    //set packagsize for one loop
                                    int packageSize = 100000;
                                    Bus[TaskManager.CURRENTPACKAGESIZE] = packageSize;

                                    //schleife
                                    int counter = 0;

                                    //set StateInfo of the previus version
                                    if (workingCopy.StateInfo == null)
                                    {
                                        workingCopy.StateInfo = new Vaiona.Entities.Common.EntityStateInfo()
                                        {
                                            State = status
                                        };
                                    }
                                    else
                                    {
                                        workingCopy.StateInfo.State = status;
                                    }

                                    do
                                    {
                                        counter++;
                                        inputWasAltered = false;
                                        Bus[TaskManager.CURRENTPACKAGE] = counter;

                                        Stream = reader.Open(Bus[TaskManager.FILEPATH].ToString());
                                        rows   = reader.ReadFile(Stream, Bus[TaskManager.FILENAME].ToString(), id, packageSize);
                                        Stream.Close();

                                        if (reader.ErrorMessages.Count > 0)
                                        {
                                            foreach (var err in reader.ErrorMessages)
                                            {
                                                temp.Add(new Error(ErrorType.Dataset, err.GetMessage()));
                                            }
                                            //return temp;
                                        }

                                        if (Bus.ContainsKey(TaskManager.DATASET_STATUS)) //check wheter there is a dataset status in the upload wizard bus
                                        {
                                            // based the dataset status and/ or the upload method
                                            if (Bus[TaskManager.DATASET_STATUS].ToString().Equals("new") || ((UploadMethod)Bus[TaskManager.UPLOAD_METHOD]).Equals(UploadMethod.Append))
                                            {
                                                dm.EditDatasetVersion(workingCopy, rows, null, null); // add all datatuples to the datasetversion
                                            }
                                            else
                                            if (Bus[TaskManager.DATASET_STATUS].ToString().Equals("edit")) // datatuples allready exist
                                            {
                                                if (rows.Count() > 0)
                                                {
                                                    //split the incoming datatuples to (new|edit) based on the primary keys
                                                    var splittedDatatuples = uploadWizardHelper.GetSplitDatatuples(rows, (List <long>)Bus[TaskManager.PRIMARY_KEYS], workingCopy, ref datatupleFromDatabaseIds);
                                                    dm.EditDatasetVersion(workingCopy, splittedDatatuples["new"], splittedDatatuples["edit"], null);
                                                    inputWasAltered = true;
                                                }
                                            }
                                        }
                                        else // if there is no dataset status in the bus, use dataset status edit
                                        {
                                            if (rows.Count() > 0)
                                            {
                                                //split the incoming datatuples to (new|edit) based on the primary keys
                                                Dictionary <string, List <DataTuple> > splittedDatatuples = new Dictionary <string, List <DataTuple> >();
                                                splittedDatatuples = uploadWizardHelper.GetSplitDatatuples(rows, (List <long>)Bus[TaskManager.PRIMARY_KEYS], workingCopy, ref datatupleFromDatabaseIds);
                                                dm.EditDatasetVersion(workingCopy, splittedDatatuples["new"], splittedDatatuples["edit"], null);
                                                inputWasAltered = true;
                                            }
                                        }

                                        //count rows
                                        numberOfRows += rows.Count();
                                    } while ((rows.Count() > 0 && rows.Count() <= packageSize) || inputWasAltered == true);

                                    numberOfSkippedRows = reader.NumberOSkippedfRows;
                                }

                                //Stream.Close();
                            }

                            #endregion ascii reader

                            #region contentdescriptors

                            //remove all contentdescriptors from the old version
                            //generatedTXT
                            if (workingCopy.ContentDescriptors.Any(c => c.Name.Equals("generatedTXT")))
                            {
                                ContentDescriptor tmp =
                                    workingCopy.ContentDescriptors.Where(c => c.Name.Equals("generatedTXT"))
                                    .FirstOrDefault();
                                dm.DeleteContentDescriptor(tmp);
                            }

                            //generatedCSV
                            if (workingCopy.ContentDescriptors.Any(c => c.Name.Equals("generatedCSV")))
                            {
                                ContentDescriptor tmp =
                                    workingCopy.ContentDescriptors.Where(c => c.Name.Equals("generatedCSV"))
                                    .FirstOrDefault();
                                dm.DeleteContentDescriptor(tmp);
                            }
                            //generated
                            if (workingCopy.ContentDescriptors.Any(c => c.Name.Equals("generated")))
                            {
                                ContentDescriptor tmp =
                                    workingCopy.ContentDescriptors.Where(c => c.Name.Equals("generated"))
                                    .FirstOrDefault();
                                dm.DeleteContentDescriptor(tmp);
                            }

                            #endregion contentdescriptors

                            #region set System value into metadata

                            if (Bus.ContainsKey(TaskManager.DATASET_STATUS))
                            {
                                bool newdataset = Bus[TaskManager.DATASET_STATUS].ToString().Equals("new");
                                int  v          = 1;
                                if (workingCopy.Dataset.Versions != null && workingCopy.Dataset.Versions.Count > 1)
                                {
                                    v = workingCopy.Dataset.Versions.Count();
                                }

                                //set modification
                                workingCopy.ModificationInfo = new EntityAuditInfo()
                                {
                                    Performer  = User.Name,
                                    Comment    = "Data",
                                    ActionType = newdataset ? AuditActionType.Create : AuditActionType.Edit
                                };

                                setSystemValuesToMetadata(id, v, workingCopy.Dataset.MetadataStructure.Id, workingCopy.Metadata, newdataset);
                                dm.EditDatasetVersion(workingCopy, null, null, null);
                            }

                            #endregion set System value into metadata

                            // ToDo: Get Comment from ui and users
                            MoveAndSaveOriginalFileInContentDiscriptor(workingCopy);
                            dm.CheckInDataset(id, numberOfRows + " rows", User.Name);

                            //send email
                            var es = new EmailService();
                            es.Send(MessageHelper.GetUpdateDatasetHeader(datasetid),
                                    MessageHelper.GetUpdateDatasetMessage(datasetid, title, User.DisplayName),
                                    ConfigurationManager.AppSettings["SystemEmail"]
                                    );
                        }
                        catch (Exception e)
                        {
                            temp.Add(new Error(ErrorType.Other, "Can not upload. : " + e.Message));
                            var es = new EmailService();
                            es.Send(MessageHelper.GetErrorHeader(),
                                    "Can not upload. : " + e.Message,
                                    ConfigurationManager.AppSettings["SystemEmail"]
                                    );
                        }
                        finally
                        {
                        }
                    }

                    #endregion structured data

                    #region unstructured data

                    if (Bus.ContainsKey(TaskManager.DATASTRUCTURE_TYPE) && Bus[TaskManager.DATASTRUCTURE_TYPE].Equals(DataStructureType.Unstructured))
                    {
                        // checkout the dataset, apply the changes, and check it in.
                        if (dm.IsDatasetCheckedOutFor(id, User.Name) || dm.CheckOutDataset(id, User.Name))
                        {
                            try
                            {
                                workingCopy = dm.GetDatasetWorkingCopy(id);

                                using (var unitOfWork = this.GetUnitOfWork())
                                {
                                    workingCopy.VersionNo += 1;

                                    //set StateInfo of the previus version
                                    if (workingCopy.StateInfo == null)
                                    {
                                        workingCopy.StateInfo = new Vaiona.Entities.Common.EntityStateInfo()
                                        {
                                            State = status
                                        };
                                    }
                                    else
                                    {
                                        workingCopy.StateInfo.State = status;
                                    }

                                    unitOfWork.GetReadOnlyRepository <DatasetVersion>().Load(workingCopy.ContentDescriptors);

                                    SaveFileInContentDiscriptor(workingCopy);
                                }

                                if (Bus.ContainsKey(TaskManager.DATASET_STATUS))
                                {
                                    bool newdataset = Bus[TaskManager.DATASET_STATUS].ToString().Equals("new");
                                    int  v          = 1;
                                    if (workingCopy.Dataset.Versions != null && workingCopy.Dataset.Versions.Count > 1)
                                    {
                                        v = workingCopy.Dataset.Versions.Count();
                                    }

                                    //set modification
                                    workingCopy.ModificationInfo = new EntityAuditInfo()
                                    {
                                        Performer  = User.Name,
                                        Comment    = "File",
                                        ActionType = AuditActionType.Create
                                    };

                                    setSystemValuesToMetadata(id, v, workingCopy.Dataset.MetadataStructure.Id, workingCopy.Metadata, newdataset);

                                    dm.EditDatasetVersion(workingCopy, null, null, null);
                                }

                                //filename
                                string filename = "";
                                if (Bus.ContainsKey(TaskManager.FILENAME))
                                {
                                    filename = Bus[TaskManager.FILENAME]?.ToString();
                                }

                                // ToDo: Get Comment from ui and users
                                dm.CheckInDataset(id, filename, User.Name, ViewCreationBehavior.None);
                            }
                            catch (Exception ex)
                            {
                                throw ex;
                            }
                        }
                    }

                    #endregion unstructured data
                }
                else
                {
                    temp.Add(new Error(ErrorType.Dataset, "Dataset is not selected."));
                }

                if (temp.Count <= 0)
                {
                    dm.CheckInDataset(id, "no update on data tuples", User.Name, ViewCreationBehavior.None);
                }
                else
                {
                    dm.UndoCheckoutDataset(id, User.Name);
                }
            }
            catch (Exception ex)
            {
                temp.Add(new Error(ErrorType.Dataset, ex.Message));

                dm.CheckInDataset(id, "no update on data tuples", User.Name, ViewCreationBehavior.None);
            }
            finally
            {
                if (RunningASync)
                {
                    var user = User;

                    if (temp.Any())
                    {
                        var es = new EmailService();
                        es.Send(MessageHelper.GetPushApiUploadFailHeader(id, title),
                                MessageHelper.GetPushApiUploadFailMessage(id, user.Name, temp.Select(e => e.ToString()).ToArray()),
                                new List <string> {
                            user.Email
                        }, null, new List <string> {
                            ConfigurationManager.AppSettings["SystemEmail"]
                        });
                    }
                    else
                    {
                        var es = new EmailService();
                        es.Send(MessageHelper.GetASyncFinishUploadHeader(id, title),
                                MessageHelper.GetASyncFinishUploadMessage(id, title, numberOfRows, numberOfSkippedRows),
                                new List <string> {
                            user.Email
                        }, null, new List <string> {
                            ConfigurationManager.AppSettings["SystemEmail"]
                        });
                    }
                }

                dm.Dispose();
                dsm.Dispose();
            }

            return(temp);
        }