public bool Load(string toLoadDataCheckerFile)
        {
            if (!IsValidAndExistingFile(toLoadDataCheckerFile))
            {
                return(false);
            }

            var readerResult = new XmlDataCheckItemsReader().Read(toLoadDataCheckerFile, DataCheckerContext);

            if (!readerResult.HasErrorMessage())
            {
                CurrentXDocument = readerResult.DataChecksDocument;

                try
                {
                    RootViewModel =
                        DataCheckItemViewModel.Create(readerResult.DataCheckItems, System.IO.Path.GetFileName(toLoadDataCheckerFile));
                }
                catch (ArgumentOutOfRangeException e)
                {
                    AppendSystemMessage($"Problem beim lesen der Datei {toLoadDataCheckerFile}:{Environment.NewLine}");
                    AppendSystemMessage($"{e.Message}{Environment.NewLine}");
                    return(false);
                }
                catch (Exception ex)
                {
                    AppendSystemMessage($"Problem aufgetretten:{Environment.NewLine}");
                    AppendSystemMessage($"{ex.Message}{Environment.NewLine}");
                }
            }
            return(!readerResult.HasErrorMessage());
        }
        public void Execute(object parameter)
        {
            var fileName = dataCheckerViewModel.GetSaveFile();

            if (String.IsNullOrEmpty(fileName) ||
                !Directory.Exists(Path.GetDirectoryName(fileName)))
            {
                dataCheckerViewModel.InformUser(new UserInformation("Speichervorgang abgebrochen", "Keine gültige Datei für die Speicherung gewählt.", UserInformation.UserInformationTypeError));
                return;
            }
            try
            {
                int        idCounter = -2;
                Func <int> nextId    = () => idCounter++;
                var        dataItems = DataCheckItemViewModel.FlattenRenumberedDatacheckItems(dataCheckerViewModel.RootViewModel, -2, nextId)
                                       .Where(IsSavableDataItem);
                using (var destinationStream = new FileStream(fileName, FileMode.Create))
                {
                    new XmlDataCheckItemsWriter().Write(dataItems, dataCheckerViewModel.CurrentXDocument, destinationStream, dataCheckerViewModel.DataCheckerContext);
                }
                dataCheckerViewModel.InformUser(new UserInformation("Datei speichern", "Datei wurde erfolgreich erstellt.", UserInformation.UserInformationTypeInformation));
            }
            catch (Exception exception)
            {
                dataCheckerViewModel.InformUser(new UserInformation("Fehler beim Speichern", exception.Message, UserInformation.UserInformationTypeError));
                throw;
            }
        }
        public static IEnumerable <DataCheckItem> FlattenRenumberedDatacheckItems(DataCheckItemViewModel dataCheckItemViewModel, int newParentId, Func <int> getNextId)
        {
            //return parent
            if (dataCheckItemViewModel == null)
            {
                yield break; //return empty result
            }

            var newId = getNextId();

            if (newId == 0)//it starts with 1 :(!
            {
                newId = getNextId();
            }
            if (dataCheckItemViewModel.DataCheckItem.Id > 0) //root objects are not returned (-2, -1)
            {
                yield return(dataCheckItemViewModel.DataCheckItem.CorrectPosition(newId, newParentId));
            }

            newParentId = newId;
            foreach (var childDataViewModel in dataCheckItemViewModel.Children
                     .OfType <DataCheckItemViewModel>())
            {
                foreach (var dataCheckItem in FlattenRenumberedDatacheckItems(childDataViewModel, newParentId, getNextId))
                {
                    yield return(dataCheckItem);
                }
            }
        }
 public void CreateEmptyRootViewModel()
 {
     try
     {
         RootViewModel = DataCheckItemViewModel.Create(/*dataCheckItems*/ null, String.Empty);
     }
     catch (Exception ex)
     {
         AppendSystemMessage($"Problem aufgetretten:{Environment.NewLine}");
         AppendSystemMessage($"{ex.Message}{Environment.NewLine}");
     }
 }
        private static void AddDataCheckItems(DataCheckItemViewModel viewModel, DataCheckItem dataCheckItem, ILookup <int, DataCheckItem> groupedDataCheckItems, IOrderedEnumerable <int> parentIds)
        {
            var newViewModel = new DataCheckItemViewModel(dataCheckItem, viewModel);

            if (IsParent(dataCheckItem, parentIds))
            {
                var newParentId = dataCheckItem.Id;
                foreach (var childItem in groupedDataCheckItems[newParentId])
                {   //child assigns parent --> automatically added to parent.Children!
                    AddDataCheckItems(newViewModel, childItem, groupedDataCheckItems, parentIds);
                }
            }
        }
        public static DataCheckItemViewModel Create(IEnumerable <DataCheckItem> dataCheckItems, string rootName)
        {
            var viewModel = new DataCheckItemViewModel(new DataCheckItem(-2, "viewModelRoot", false), null);

            if (dataCheckItems == null)
            {
                return(viewModel);
            }

            var groupedDataCheckItems = dataCheckItems.ToLookup(dataCheckItem => dataCheckItem.ParentDataCheckId);
            var parentIds             = groupedDataCheckItems.Select(group => group.Key).OrderBy(key => key);

            // Check has Parent
            if (!IsParent(-1, parentIds))
            {
                throw new ArgumentOutOfRangeException("RootElement", "Kein Übergeordnetes Eleement gefunden.");
            }

            AddDataCheckItems(viewModel, new DataCheckItem(-1, rootName, /*isSqlCheckItem*/ false, /*supportsSortAll*/ true), groupedDataCheckItems, parentIds);

            return(viewModel);
        }
 public DataCheckItemViewModel(DataCheckItem dataCheckItem, DataCheckItemViewModel parent)
     : base(parent, /*lazyLoadChildren*/ false)
 {
     DataCheckItem = dataCheckItem;
 }
        public static IEnumerable <DataCheckItem> FlattenDatacheckItemsWithParentCorrection(DataCheckItemViewModel dataCheckItemViewModel, int newParentId)
        {
            //return parent
            if (dataCheckItemViewModel == null)
            {
                yield break; //return empty result
            }

            var newId = dataCheckItemViewModel.DataCheckItem.Id;

            if (dataCheckItemViewModel.DataCheckItem.Id > 0) //root objects are not returned (-2, -1)
            {
                yield return(dataCheckItemViewModel.DataCheckItem.CorrectPosition(dataCheckItemViewModel.DataCheckItem.Id, newParentId));
            }

            newParentId = newId;
            foreach (var childDataViewModel in dataCheckItemViewModel.Children
                     .OfType <DataCheckItemViewModel>())
            {
                foreach (var dataCheckItem in FlattenDatacheckItemsWithParentCorrection(childDataViewModel, newParentId))
                {
                    yield return(dataCheckItem);
                }
            }
        }
Beispiel #9
0
 public SortAllDataCheckerChildrenCommand(DataCheckItemViewModel dataCheckItemViewModel, bool sortDescending)
 {
     this.dataCheckItemViewModel = dataCheckItemViewModel;
     this.sortDescending         = sortDescending;
     CanExecuteChanged?.Invoke(this, EventArgs.Empty);
 }