Example #1
0
 private void OnConnectionAdded(object sender, BpmnElementEvent e)
 {
     if (e.Element.Type == "bpmn:SequenceFlow")
     {
         _processModelManager.AddSequenceFlow(e.Element.Id, e.Element.Target, e.Element.Source, e.Element.ProcessId);
     }
 }
Example #2
0
        private void OnShapeAdded(object sender, BpmnElementEvent e)
        {
            //New process is being added (along with a participant/pool)
            if (e.Element.Type == "bpmn:Participant")
            {
                _processModelManager.AddNewProcess(e.Element.ProcessId, e.Element.Id);

                if (_processModelManager.TryGetProcess(e.Element.ProcessId, out var process))
                {
                    if (_editElementService.EditElement == process)
                    {
                        _editElementService.EditedElementModified();
                    }
                    else
                    {
                        _editElementService.EditElement = process;
                    }
                }
            }
            //Process element is being added
            else
            {
                OnElementAdded(e);
            }
        }
Example #3
0
 private void OnRootRemoved(object sender, BpmnElementEvent e)
 {
     if (e.Element.Type == "bpmn:Process")
     {
         _processModelManager.RemoveProcess(e.Element.Id);
     }
 }
Example #4
0
        private void OnElementAdded(BpmnElementEvent e)
        {
            var element = _processModelManager.AddElement(e.Element.Type, e.Element.Id, e.Element.ProcessId);

            if (element != null)
            {
                _editElementService.EditElement = element;
            }
        }
Example #5
0
 private void OnConnectionRemoved(object sender, BpmnElementEvent e)
 {
     if (e.Element.Type == "bpmn:SequenceFlow")
     {
         if (_editElementService.EditElement?.Id == e.Element.Id)
         {
             _editElementService.EditElement = null;
         }
         _processModelManager.RemoveSequenceFlow(e.Element.Id);
     }
 }
Example #6
0
 private void OnElementIdUpdated(object sender, BpmnElementEvent e)
 {
     _processModelManager.UpdateId(e.Element.Id, e.NewId, e.Element.ProcessId);
     if (_processModelManager.TryRetrieveElementById(e.NewId, e.Element.ProcessId, out var element))
     {
         if (_editElementService.EditElement == element)
         {
             _editElementService.EditedElementModified();
         }
     }
 }
Example #7
0
        public void HandleBpmnElementEvent(BpmnElementEvent e)
        {
            TranslateProcessId(e);
            switch (e.Type)
            {
            case BpmnConstants.BPMN_EVENT_CLICK:
                ElementClick?.Invoke(this, e);
                break;

            case BpmnConstants.BPMN_EVENT_ELEMENT_CHANGED:
                ElementChanged?.Invoke(this, e);
                break;

            case BpmnConstants.BPMN_EVENT_SHAPE_ADDED:
                ShapeAdded?.Invoke(this, e);
                break;

            case BpmnConstants.BPMN_EVENT_SHAPE_REMOVED:
                ShapeRemoved?.Invoke(this, e);
                break;

            case BpmnConstants.BPMN_EVENT_UPDATE_ID:
                ElementIdUpdated?.Invoke(this, e);
                break;

            case BpmnConstants.BPMN_EVENT_CONNECTION_REMOVED:
                ConnectionRemoved?.Invoke(this, e);
                break;

            case BpmnConstants.BPMN_EVENT_CONNECTION_ADDED:
                ConnectionAdded?.Invoke(this, e);
                break;

            case BpmnConstants.BPMN_EVENT_ROOT_ADDED:
                RootAdded?.Invoke(this, e);
                break;

            case BpmnConstants.BPMN_EVENT_ROOT_REMOVED:
                RootRemoved?.Invoke(this, e);
                break;
            }
        }
Example #8
0
        public void HandleBpmnElementEvent(BpmnElementEvent e)
        {
            switch (e.Type)
            {
            case "element.click":
                ElementClick?.Invoke(this, e);
                break;

            case "element.changed":
                ElementChanged?.Invoke(this, e);
                break;

            case "shape.added":
                ShapeAdded?.Invoke(this, e);
                break;

            case "shape.removed":
                ShapeRemoved?.Invoke(this, e);
                break;

            case "element.updateId":
                ElementIdUpdated?.Invoke(this, e);
                break;

            case "connection.removed":
                ConnectionRemoved?.Invoke(this, e);
                break;

            case "connection.added":
                ConnectionAdded?.Invoke(this, e);
                break;

            case "root.added":
                RootAdded?.Invoke(this, e);
                break;

            case "root.removed":
                RootRemoved?.Invoke(this, e);
                break;
            }
        }
Example #9
0
        private void OnElementClicked(object sender, BpmnElementEvent e)
        {
            if (e.Element.Type == "bpmn:Collaboration" || e.Element.Type == "bpmn:Association" || e.Element.Type == "bpmn:TextAnnotation")
            {
                return;
            }

            string elementId;

            //Extract the represented element id if the element is of type label
            if (e.Element?.Type == "label")
            {
                elementId = e.Element.Id.Substring(0, e.Element.Id.Length - "_label".Length);
            }
            else
            {
                elementId = e.Element.Id;
            }

            if (e.Element.Type == "bpmn:Process")
            {
                _processModelManager.TryGetProcess(e.Element.Id, out var process);
                _editElementService.EditElement = process;
            }
            else if (e.Element.Type == "bpmn:Participant")
            {
                _processModelManager.TryGetProcess(e.Element.ProcessId, out var process);
                _editElementService.EditElement = process;
            }
            else if (_processModelManager.TryRetrieveIElementById(elementId, e.Element.ProcessId, out var element))
            {
                _editElementService.EditElement = element;
            }
            else
            {
                _editElementService.EditElement = null;
            }
        }
Example #10
0
        private void TranslateProcessId(BpmnElementEvent e)
        {
            string procId;

            if (e.Element.Type == BpmnConstants.BPMN_ELEMENT_PROCESS)
            {
                procId = _processModelManager.TranslateBpmnProcessId(e.Element.Id);
                if (procId != null)
                {
                    e.Element.Id = procId;
                }
            }

            if (string.IsNullOrEmpty(e.Element.ProcessId))
            {
                return;
            }

            procId = _processModelManager.TranslateBpmnProcessId(e.Element.ProcessId);
            if (procId != null)
            {
                e.Element.ProcessId = procId;
            }
        }
Example #11
0
        private void OnShapeRemoved(object sender, BpmnElementEvent e)
        {
            if (e.Element.Type == "label" || e.Element.Type == "bpmn:TextAnnotation")
            {
                return;
            }

            //Process is being removed
            if (e.Element.Type == "bpmn:Participant")
            {
                var processId = _processModelManager.GetProcessIdFromParticipantId(e.Element.Id);
                _processModelManager.RemoveProcess(processId);
            }
            //Process element is being removed
            else
            {
                _processModelManager.RemoveElement(e.Element?.Id);
            }
            //Close the sidebar if the deleted element is currently selected
            if (_editElementService.EditElement?.Id == e.Element.Id || _editElementService.EditElement?.Id == e.Element.ProcessId)
            {
                _editElementService.EditElement = null;
            }
        }
Example #12
0
        private void OnElementChanged(object sender, BpmnElementEvent e)
        {
            //No process id is defined, or the process does not exist -- the element is in the phase of deletion
            if (string.IsNullOrEmpty(e.Element.ProcessId) || !_processModelManager.ProcessExists(e.Element.ProcessId))
            {
                return;
            }

            IContractElement contractElement = null;

            if (e.Element.Type == "bpmn:Participant")
            {
                _processModelManager.TryGetProcess(e.Element.ProcessId, out var process);
                process.Name    = e.Element.Name;
                contractElement = process;
            }

            if (_processModelManager.TryRetrieveIElementById(e.Element.Id, out var element))
            {
                //Parse element name
                element.Name = e.Element.Name;
                //Parse element loop type
                if (element is Abstraction.Processes.Tasks.Task)
                {
                    var taskElement = element as Abstraction.Processes.Tasks.Task;
                    if (e.Element.LoopType == "bpmn:MultiInstanceLoopCharacteristics")
                    {
                        if (e.Element.IsSequential)
                        {
                            taskElement.InstanceType = Abstraction.Processes.Tasks.InstanceType.Sequential;
                        }
                        else
                        {
                            taskElement.InstanceType = Abstraction.Processes.Tasks.InstanceType.Parallel;
                        }
                    }
                    else
                    {
                        taskElement.InstanceType = Abstraction.Processes.Tasks.InstanceType.Single;
                    }
                }
                if (element is BoundaryEvent)
                {
                    var boundaryEvent = element as BoundaryEvent;
                    boundaryEvent.AttachedTo = e.Element.AttachedTo;
                }

                //Parse incoming and outgoing if processElement
                if (element is ProcessElement)
                {
                    var processElement = element as ProcessElement;
                    processElement.Incoming = new List <string>(e.Element.Incoming);
                    processElement.Outgoing = new List <string>(e.Element.Outgoing);
                }

                //Parse sequence flow information
                if (element is SequenceFlow)
                {
                    var sequenceFlow = element as SequenceFlow;
                    _processModelManager.UpdateSequenceFlowSourceAndTarget(sequenceFlow, e.Element.Source, e.Element.Target, e.Element.ProcessId);
                }

                //Check if parent process of the element has changed
                if (_processModelManager.TryRetrieveProcessOfElement(element.Id, out var process))
                {
                    if (process.Id != e.Element.ProcessId)
                    {
                        _processModelManager.ChangeProcessOfElement(element, process.Id, e.Element.ProcessId);
                    }
                }
                contractElement = element;
            }
            //Notify about element modification if currently selected
            if (_editElementService.EditElement == contractElement)
            {
                _editElementService.EditedElementModified();
            }
        }