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); }
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); }