Exemplo n.º 1
0
        void AssertExampleProcess(ContractProcess process)
        {
            Assert.AreEqual(3, process.Activities.Count());
            Assert.AreEqual(1, process.Gateways.Count());
            Assert.AreEqual(6, process.ProcessElements.Count);
            Assert.AreEqual(7, process.SequenceFlows.Count);

            Assert.AreEqual("Flow_00sski2", process.SequenceFlows.First().Id);
            Assert.AreEqual("Activity_0tsw6mv", process.SequenceFlows.First().SourceId);
            Assert.AreEqual("Gateway_07a4al6", process.SequenceFlows.First().TargetId);
            Assert.AreEqual("Is it General Kenobi?", process.Gateways.First().Name);

            Assert.AreEqual("StartEvent_0q2d5wg", process.StartEvents.First().Id);
            Assert.AreEqual(1, process.StartEvents.First().Outgoing.Count);
            Assert.IsNull(process.StartEvents.First().Name);

            Assert.AreEqual("Keep calm and refactor the whole goddamn shit goddamit dslkfmsldnfosindofni", process.ScriptActivities.SingleOrDefault().Name);
            Assert.AreEqual("Hello there", process.BusinessActivities.SingleOrDefault().Name);
            Assert.AreEqual("GENERAL KENOBI?", process.UserActivities.SingleOrDefault().Name);
        }
Exemplo n.º 2
0
        static ContractProcess FromProcessBPMN(XElement bpmnXElement)
        {
            var process         = new ContractProcess();
            var processElements = bpmnXElement.Descendants().ToList();

            foreach (var element in processElements)
            {
                if (element.Name == BPMNNS + "sequenceFlow")
                {
                    var sequenceFlow = CreateSequenceFlow(element);
                    process.SequenceFlows.Add(sequenceFlow);
                }
                else
                {
                    var processElement = CreateProcessElement(element);
                    if (processElement != null)
                    {
                        process.ProcessElements.Add(processElement);
                    }
                }
            }
            return(process);
        }
        public static void ReplaceSafely(this EditorContract contract, BPMNProcessDiagram newDiagram)
        {
            if (contract == null)
            {
                throw new ArgumentNullException(nameof(contract));
            }

            if (newDiagram == null)
            {
                throw new ArgumentNullException(nameof(newDiagram));
            }

            if (BPMNProcessDiagram.IsNullOrEmpty(newDiagram))
            {
                contract.Processes.Diagram = BPMNProcessDiagram.Default();
                contract.Processes.Main    = ContractProcess.Empty();
                return;
            }

            var newMainProcess = contract.ValidatePotentialDiagram(newDiagram);

            if (contract.Processes.Main != null)
            {
                contract.AnalyzeIntegrityWhenReplacedWith(newDiagram).ResolveDeleteRisks();
            }

            var oldDiagram = contract.Processes.Diagram;

            contract.Processes.Diagram = newDiagram;

            var oldProcess = contract.Processes.Main;
            var newProcess = newMainProcess;

            contract.Processes.Main = newProcess;

            if (newProcess == null || oldProcess == null)
            {
                return;
            }

            //Update activities
            UpdateMainProcessActivities(oldProcess.ScriptActivities, newProcess.ScriptActivities);
            UpdateMainProcessActivities(oldProcess.BusinessActivities, newProcess.BusinessActivities);
            UpdateMainProcessActivities(oldProcess.UserActivities, newProcess.UserActivities);

            //Update start events
            UpdateMainProcessActivities(oldProcess.StartEvents, newProcess.StartEvents);


            //Add migration
            contract.GetMigrator().Notify(
                () => contract.Processes.Diagram,
                () =>
            {
                //Up
                contract.Processes.Diagram = newDiagram;
                contract.Processes.Main    = newProcess;
            },
                () =>
            {
                //Down
                contract.Processes.Diagram = oldDiagram;
                contract.Processes.Main    = oldProcess;
            }, MigratorMode.EveryChange);
        }