private void SavePersistDesignerItem(IDiagramItem wholeDiagramToSave, IDiagramViewModel diagramViewModel) { //Save all PersistDesignerItemViewModel foreach (var persistItemVM in diagramViewModel.Items.OfType <PersistDesignerItemViewModel>()) { PersistDesignerItem persistDesignerItem = new PersistDesignerItem(persistItemVM.Id, persistItemVM.Left, persistItemVM.Top, persistItemVM.ItemWidth, persistItemVM.ItemHeight, persistItemVM.HostUrl); persistItemVM.Id = databaseAccessService.SavePersistDesignerItem(persistDesignerItem); wholeDiagramToSave.DesignerItems.Add(new DiagramItemData(persistDesignerItem.Id, typeof(PersistDesignerItem))); } //Save all SettingsDesignerItemViewModel foreach (var settingsItemVM in diagramViewModel.Items.OfType <SettingsDesignerItemViewModel>()) { SettingsDesignerItem settingsDesignerItem = new SettingsDesignerItem(settingsItemVM.Id, settingsItemVM.Left, settingsItemVM.Top, settingsItemVM.ItemWidth, settingsItemVM.ItemHeight, settingsItemVM.Setting1); settingsItemVM.Id = databaseAccessService.SaveSettingDesignerItem(settingsDesignerItem); wholeDiagramToSave.DesignerItems.Add(new DiagramItemData(settingsDesignerItem.Id, typeof(SettingsDesignerItem))); } //Save all GroupingDesignerItemViewModel foreach (var groupingItemVM in diagramViewModel.Items.OfType <GroupingDesignerItemViewModel>()) { GroupDesignerItem groupDesignerItem = new GroupDesignerItem(groupingItemVM.Id, groupingItemVM.Left, groupingItemVM.Top, groupingItemVM.ItemWidth, groupingItemVM.ItemHeight); if (groupingItemVM.Items != null && groupingItemVM.Items.Count > 0) { SavePersistDesignerItem(groupDesignerItem, groupingItemVM); } groupingItemVM.Id = databaseAccessService.SaveGroupingDesignerItem(groupDesignerItem); wholeDiagramToSave.DesignerItems.Add(new DiagramItemData(groupDesignerItem.Id, typeof(GroupDesignerItem))); } //Save all connections which should now have their Connection.DataItems filled in with correct Ids foreach (var connectionVM in diagramViewModel.Items.OfType <ConnectorViewModel>()) { FullyCreatedConnectorInfo sinkConnector = connectionVM.SinkConnectorInfo as FullyCreatedConnectorInfo; Connection connection = new Connection( connectionVM.Id, connectionVM.SourceConnectorInfo.DataItem.Id, GetOrientationFromConnector(connectionVM.SourceConnectorInfo.Orientation), GetTypeOfDiagramItem(connectionVM.SourceConnectorInfo.DataItem), sinkConnector.DataItem.Id, GetOrientationFromConnector(sinkConnector.Orientation), GetTypeOfDiagramItem(sinkConnector.DataItem)); connectionVM.Id = databaseAccessService.SaveConnection(connection); wholeDiagramToSave.ConnectionIds.Add(connectionVM.Id); } }
private void ExecuteSaveDiagramCommand(object parameter) { if (!DiagramViewModel.Items.Any()) { messageBoxService.ShowError("There must be at least one item in order save a diagram"); return; } IsBusy = true; DiagramItem wholeDiagramToSave = null; Task <int> task = Task.Factory.StartNew <int>(() => { if (SavedDiagramId != null) { int currentSavedDiagramId = (int)SavedDiagramId.Value; wholeDiagramToSave = databaseAccessService.FetchDiagram(currentSavedDiagramId); //If we have a saved diagram, we need to make sure we clear out all the removed items that //the user deleted as part of this work sesssion foreach (var itemToRemove in itemsToRemove) { DeleteFromDatabase(wholeDiagramToSave, itemToRemove); } //start with empty collections of connections and items, which will be populated based on current diagram wholeDiagramToSave.ConnectionIds = new List <int>(); wholeDiagramToSave.DesignerItems = new List <DiagramItemData>(); } else { wholeDiagramToSave = new DiagramItem(); } //ensure that itemsToRemove is cleared ready for any new changes within a session itemsToRemove = new List <SelectableDesignerItemViewModelBase>(); //Save all PersistDesignerItemViewModel foreach (var persistItemVM in DiagramViewModel.Items.OfType <PersistDesignerItemViewModel>()) { PersistDesignerItem persistDesignerItem = new PersistDesignerItem(persistItemVM.Id, persistItemVM.Left, persistItemVM.Top, persistItemVM.HostUrl); persistItemVM.Id = databaseAccessService.SavePersistDesignerItem(persistDesignerItem); wholeDiagramToSave.DesignerItems.Add(new DiagramItemData(persistDesignerItem.Id, typeof(PersistDesignerItem))); } //Save all PersistDesignerItemViewModel foreach (var settingsItemVM in DiagramViewModel.Items.OfType <SettingsDesignerItemViewModel>()) { SettingsDesignerItem settingsDesignerItem = new SettingsDesignerItem(settingsItemVM.Id, settingsItemVM.Left, settingsItemVM.Top, settingsItemVM.Setting1); settingsItemVM.Id = databaseAccessService.SaveSettingDesignerItem(settingsDesignerItem); wholeDiagramToSave.DesignerItems.Add(new DiagramItemData(settingsDesignerItem.Id, typeof(SettingsDesignerItem))); } //Save all connections which should now have their Connection.DataItems filled in with correct Ids foreach (var connectionVM in DiagramViewModel.Items.OfType <ConnectorViewModel>()) { FullyCreatedConnectorInfo sinkConnector = connectionVM.SinkConnectorInfo as FullyCreatedConnectorInfo; Connection connection = new Connection( connectionVM.Id, connectionVM.SourceConnectorInfo.DataItem.Id, GetOrientationFromConnector(connectionVM.SourceConnectorInfo.Orientation), GetTypeOfDiagramItem(connectionVM.SourceConnectorInfo.DataItem), sinkConnector.DataItem.Id, GetOrientationFromConnector(sinkConnector.Orientation), GetTypeOfDiagramItem(sinkConnector.DataItem)); connectionVM.Id = databaseAccessService.SaveConnection(connection); wholeDiagramToSave.ConnectionIds.Add(connectionVM.Id); } wholeDiagramToSave.Id = databaseAccessService.SaveDiagram(wholeDiagramToSave); return(wholeDiagramToSave.Id); }); task.ContinueWith((ant) => { int wholeDiagramToSaveId = ant.Result; if (!savedDiagrams.Contains(wholeDiagramToSaveId)) { List <int> newDiagrams = new List <int>(savedDiagrams); newDiagrams.Add(wholeDiagramToSaveId); SavedDiagrams = newDiagrams; } IsBusy = false; messageBoxService.ShowInformation(string.Format("Finished saving Diagram Id : {0}", wholeDiagramToSaveId)); }, TaskContinuationOptions.OnlyOnRanToCompletion); }