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); } } }
public SortAllDataCheckerChildrenCommand(DataCheckItemViewModel dataCheckItemViewModel, bool sortDescending) { this.dataCheckItemViewModel = dataCheckItemViewModel; this.sortDescending = sortDescending; CanExecuteChanged?.Invoke(this, EventArgs.Empty); }