Beispiel #1
0
        private void ExecuteLoadDiagramCommand(object parameter)
        {
            IsBusy = true;
            DiagramItem wholeDiagramToLoad = null;

            if (SavedDiagramId == null)
            {
                messageBoxService.ShowError("You need to select a diagram to load");
                return;
            }

            Task <DiagramViewModel> task = Task.Factory.StartNew <DiagramViewModel>(() =>
            {
                //ensure that itemsToRemove is cleared ready for any new changes within a session
                itemsToRemove = new List <SelectableDesignerItemViewModelBase>();
                DiagramViewModel diagramViewModel = new DiagramViewModel();

                wholeDiagramToLoad = storageService.FetchDiagram((int)SavedDiagramId.Value);

                //load diagram items
                foreach (DiagramItemData diagramItemData in wholeDiagramToLoad.DesignerItems)
                {
                    var designerItem = storageService.FetchDiagram(diagramItemData.ItemId);
                    var viewModel    = Activator.CreateInstance(diagramItemData.ItemType) as DesignerItemViewModelBase;
                    viewModel.Id     = designerItem.Id;
                    viewModel.Parent = diagramViewModel;
                    //viewModel.Left = designerItem.l
                    //viewModel.Top = designerItem.t
                    diagramViewModel.Items.Add(viewModel);
                }
                //load connection items
                foreach (int connectionId in wholeDiagramToLoad.ConnectionIds)
                {
                    Connection connection = storageService.FetchConnection(connectionId);
                    DesignerItemViewModelBase sourceItem            = GetConnectorDataItem(diagramViewModel, connection.SourceId, connection.SourceType);
                    ConnectorOrientation sourceConnectorOrientation = GetOrientationForConnector(connection.SourceOrientation);
                    FullyCreatedConnectorInfo sourceConnectorInfo   = GetFullConnectorInfo(connection.Id, sourceItem, sourceConnectorOrientation);

                    DesignerItemViewModelBase sinkItem            = GetConnectorDataItem(diagramViewModel, connection.SinkId, connection.SinkType);
                    ConnectorOrientation sinkConnectorOrientation = GetOrientationForConnector(connection.SinkOrientation);
                    FullyCreatedConnectorInfo sinkConnectorInfo   = GetFullConnectorInfo(connection.Id, sinkItem, sinkConnectorOrientation);

                    ConnectorViewModel connectionVM = new ConnectorViewModel(connection.Id, diagramViewModel, sourceConnectorInfo, sinkConnectorInfo);
                    diagramViewModel.Items.Add(connectionVM);
                }

                return(diagramViewModel);
            });

            task.ContinueWith((ant) =>
            {
                this.DiagramViewModel = ant.Result;
                IsBusy = false;
                messageBoxService.ShowInformation(string.Format("Finished loading Diagram Id : {0}", wholeDiagramToLoad.Id));
            }, TaskContinuationOptions.OnlyOnRanToCompletion);
        }
Beispiel #2
0
        private void LoadPerstistDesignerItems(IDiagramItem wholeDiagramToLoad, IDiagramViewModel diagramViewModel)
        {
            //load diagram items
            foreach (DiagramItemData diagramItemData in wholeDiagramToLoad.DesignerItems)
            {
                if (diagramItemData.ItemType == typeof(PersistDesignerItem))
                {
                    PersistDesignerItem          persistedDesignerItem        = databaseAccessService.FetchPersistDesignerItem(diagramItemData.ItemId);
                    PersistDesignerItemViewModel persistDesignerItemViewModel =
                        new PersistDesignerItemViewModel(persistedDesignerItem.Id, diagramViewModel, persistedDesignerItem.Left, persistedDesignerItem.Top, persistedDesignerItem.ItemWidth, persistedDesignerItem.ItemHeight, persistedDesignerItem.HostUrl);
                    diagramViewModel.Items.Add(persistDesignerItemViewModel);
                }
                if (diagramItemData.ItemType == typeof(SettingsDesignerItem))
                {
                    SettingsDesignerItem          settingsDesignerItem          = databaseAccessService.FetchSettingsDesignerItem(diagramItemData.ItemId);
                    SettingsDesignerItemViewModel settingsDesignerItemViewModel =
                        new SettingsDesignerItemViewModel(settingsDesignerItem.Id, diagramViewModel, settingsDesignerItem.Left, settingsDesignerItem.Top, settingsDesignerItem.ItemWidth, settingsDesignerItem.ItemHeight, settingsDesignerItem.Setting1);
                    diagramViewModel.Items.Add(settingsDesignerItemViewModel);
                }
                if (diagramItemData.ItemType == typeof(GroupDesignerItem))
                {
                    GroupDesignerItem             groupDesignerItem             = databaseAccessService.FetchGroupingDesignerItem(diagramItemData.ItemId);
                    GroupingDesignerItemViewModel groupingDesignerItemViewModel =
                        new GroupingDesignerItemViewModel(groupDesignerItem.Id, diagramViewModel, groupDesignerItem.Left, groupDesignerItem.Top, groupDesignerItem.ItemWidth, groupDesignerItem.ItemHeight);
                    if (groupDesignerItem.DesignerItems != null && groupDesignerItem.DesignerItems.Count > 0)
                    {
                        LoadPerstistDesignerItems(groupDesignerItem, groupingDesignerItemViewModel);
                    }
                    diagramViewModel.Items.Add(groupingDesignerItemViewModel);
                }
            }
            //load connection items
            foreach (int connectionId in wholeDiagramToLoad.ConnectionIds)
            {
                Connection connection = databaseAccessService.FetchConnection(connectionId);

                DesignerItemViewModelBase sourceItem = GetConnectorDataItem(diagramViewModel, connection.SourceId, connection.SourceType);
                ConnectorOrientation      sourceConnectorOrientation = GetOrientationForConnector(connection.SourceOrientation);
                FullyCreatedConnectorInfo sourceConnectorInfo        = GetFullConnectorInfo(connection.Id, sourceItem, sourceConnectorOrientation);

                DesignerItemViewModelBase sinkItem = GetConnectorDataItem(diagramViewModel, connection.SinkId, connection.SinkType);
                ConnectorOrientation      sinkConnectorOrientation = GetOrientationForConnector(connection.SinkOrientation);
                FullyCreatedConnectorInfo sinkConnectorInfo        = GetFullConnectorInfo(connection.Id, sinkItem, sinkConnectorOrientation);

                ConnectorViewModel connectionVM = new ConnectorViewModel(connection.Id, diagramViewModel, sourceConnectorInfo, sinkConnectorInfo);
                diagramViewModel.Items.Add(connectionVM);
            }
        }
Beispiel #3
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);
            }
        }
Beispiel #4
0
 private bool ItemsToDeleteHasConnector(List <SelectableDesignerItemViewModelBase> itemsToRemove, FullyCreatedConnectorInfo connector)
 {
     return(itemsToRemove.Contains(connector.DataItem));
 }
Beispiel #5
0
        public (IEnumerable <DesignerItemViewModelBase> items, IEnumerable <ConnectorViewModel> connectors) ToVM(DiagramViewModel dvm)
        {
            var dataItems = ActivityItems.Select(ai =>
            {
                Enum.TryParse <ActivityGuardType>(Workflow.Activities.First(adef => adef.Id == ai.ActivityId).Guard, out var selectedGuard);
                var avm = new ActivityItemViewModel(ai.ActivityId, dvm, ai.X, ai.Y)
                {
                    ActivityName = ai.ActivityName,
                    IconPath     = ai.IconPath,
                    SelectedActivityGuardType = selectedGuard,
                    Settings = (Workflow.Activities.First(a => a.Id == ai.ActivityId).Settings == null) ? (new System.Collections.ObjectModel.ObservableCollection <SettingInfo>()) : (new System.Collections.ObjectModel.ObservableCollection <SettingInfo>(Workflow.Activities.First(a => a.Id == ai.ActivityId).Settings?.Select(s => new SettingInfo()
                    {
                        Key = s.Name,
                        Value = s.Value
                    })))
                };
                return(avm);
            }).ToArray();

            dvm.WorkflowName = Workflow.Name;
            //dvm.WorkflowId = Workflow.Id;
            int.TryParse(Workflow.Id, out var wfId);
            dvm.WorkflowId          = wfId;
            dvm.WorkflowDescription = Workflow.Description;

            dvm.WorkflowSettings = new System.Collections.ObjectModel.ObservableCollection <SettingInfo>(Workflow.Settings.Select(s => new SettingInfo()
            {
                Key   = s.Name,
                Value = s.Value
            }));
            var connectors = new List <ConnectorViewModel>();

            foreach (var c in ConnectorItems)
            {
                if (c.SourceId == -1)
                {
                    continue;                   // start transition, specially handled
                }
                if (c.TargetId == -999)
                {
                    continue;                     //unfinished transition, ignore
                }
                var fcciSrc = new FullyCreatedConnectorInfo(dataItems.Where(di => di.Id == c.SourceId).FirstOrDefault(), c.SourceOrientation);
                var fcciTgt = new FullyCreatedConnectorInfo(dataItems.Where(di => di.Id == c.TargetId).FirstOrDefault(), c.TargetOrientation);
                var cvm     = new ConnectorViewModel(c.ConnectorId, fcciSrc.DataItem.Parent, fcciSrc, fcciTgt)
                {
                    SourceA          = c.SourceA,
                    SourceB          = c.SourceB,
                    EndPoint         = c.EndPoint,
                    Area             = c.Area,
                    ConnectionPoints = c.Points,
                    ConditionText    = Workflow.Transitions.FirstOrDefault(t => t.Id == c.ConnectorId)?.ConditionText
                };
                connectors.Add(cvm);
            }
            var vm = (dataItems, connectors);

            foreach (var di in dataItems)
            {
                foreach (var connector in connectors)
                {
                    var src = connector.SourceConnectorInfo;
                    var tgt = connector.SinkConnectorInfo as FullyCreatedConnectorInfo;

                    if (src.DataItem == di)
                    {
                        var orientation = src.Orientation;
                        switch (orientation)
                        {
                        case ConnectorOrientation.None:
                            throw new Exception("Bad Orientation found on connector source");

                        case ConnectorOrientation.Left:
                            di.LeftConnector = src;
                            break;

                        case ConnectorOrientation.Top:
                            di.TopConnector = src;
                            break;

                        case ConnectorOrientation.Right:
                            di.RightConnector = src;
                            break;

                        case ConnectorOrientation.Bottom:
                            di.BottomConnector = src;
                            break;

                        default:
                            break;
                        }
                    }
                    if (tgt.DataItem.Id == di.Id)
                    {
                        var orientation = tgt.Orientation;
                        switch (orientation)
                        {
                        case ConnectorOrientation.None:
                            throw new Exception("Bad Orientation found on connector target");

                        case ConnectorOrientation.Left:
                            di.LeftConnector = tgt;
                            break;

                        case ConnectorOrientation.Top:
                            di.TopConnector = tgt;
                            break;

                        case ConnectorOrientation.Right:
                            di.RightConnector = tgt;
                            break;

                        case ConnectorOrientation.Bottom:
                            di.BottomConnector = tgt;
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
            return(vm);
        }
Beispiel #6
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        = storageService.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>();

                foreach (var model in DiagramViewModel.Items)
                {
                    DiagramItemData item = new DiagramItemData(model.Id, model.GetType());
                    storageService.SaveDiagramItem(item);
                    wholeDiagramToSave.DesignerItems.Add(item);
                }
                //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 = storageService.SaveConnection(connection);
                    wholeDiagramToSave.ConnectionIds.Add(connectionVM.Id);
                }

                wholeDiagramToSave.Id = storageService.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);
        }