Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }