/// <summary> /// Add WorkflowProcess based on pools /// </summary> public void SetProcesses() { WorkflowProcesses processes = new WorkflowProcesses(); processes.WorkflowProcess = new ProcessType[_document.Pools.Count + 1]; processes.WorkflowProcess[0] = GetProcess(_document.MainPoolElement); for (int i = 0; i < _document.Pools.Count; i++) { var pool = _document.Pools[i]; var processType = GetProcess(pool); processes.WorkflowProcess[i + 1] = processType; } Package.WorkflowProcesses = processes; }
private void ReadProcesses(WorkflowProcesses workflowProcesses) { foreach (ProcessType processType in workflowProcesses.WorkflowProcess) { Guid processGuid = Guid.Parse(processType.Id); PoolElement poolElement = null; if (_poolByProcessDictionary.TryGetValue(processGuid, out poolElement)) { ReadHeader(processType.ProcessHeader, poolElement); ReadActivities(processType.Activities, poolElement); } ReadTransitions(processType); } }
static void Main(string[] args) { try { if (args.Length == 0) { throw new InvalidOperationException(); } if (args[0].Equals("-a")) { string[] filePaths = Directory.GetFiles(@"models\", "*.xpdl", SearchOption.TopDirectoryOnly); foreach (string filePath in filePaths) { WorkflowProcesses workflowProcesses = new WorkflowProcesses() { Document = filePath }; workflowProcesses.ReadDocument(); workflowProcesses.SaveAsRDFTriplesSet(filePath); } } else if (args[0].Equals("-f")) { string xpdlDocument = @"models\" + args[1]; WorkflowProcesses workflowProcesses = new WorkflowProcesses() { Document = xpdlDocument }; workflowProcesses.ReadDocument(); workflowProcesses.SaveAsRDFTriplesSet(xpdlDocument); int tasks = 0; int gateways = 0; int start = 0; int intermediate = 0; int end = 0; int issuesCount = 0; double csc = 0; string issues = ""; foreach (WorkflowProcess process in workflowProcesses.Processes) { if (process.Activities != null && process.Transitions != null) { WorkflowProcessAnalysis analysis = new WorkflowProcessAnalysis(); analysis.Process = process; analysis.CheckProcess(); tasks += analysis.Tasks; gateways += analysis.Gateways; start += analysis.StartEvents; intermediate += analysis.IntermediateEvents; end += analysis.EndEvents; csc += analysis.CSC; issuesCount += analysis.Issues.Count; issues += analysis.IssuesToString(); } } Console.WriteLine("{0};{1};{2};{3};{4};{5};{6};{7}", tasks, gateways, start, intermediate, end, issuesCount, csc, issues); } } catch (Exception e) { Console.WriteLine(e.Message); } }
private void DragDropHandler(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string filePath = ((string[])(e.Data.GetData(DataFormats.FileDrop)))[0]; filePathBox.Text = filePath; processesTab.TabPages.Clear(); WorkflowProcesses workflowProcesses = new WorkflowProcesses() { Document = filePath }; workflowProcesses.ReadDocument(); workflowProcesses.SaveAsRDFTriplesSet(filePath); foreach (WorkflowProcess workflowProcess in workflowProcesses.Processes) { if (workflowProcess.Activities != null) { WorkflowProcessAnalysis analysis = new WorkflowProcessAnalysis() { Process = workflowProcess }; analysis.CheckProcess(); Tasks += analysis.Tasks; Gateways += analysis.Gateways; Start += analysis.StartEvents; Intermediate += analysis.IntermediateEvents; End += analysis.EndEvents; Coefficient += analysis.CalcIntegratedCSC(); Shortcomings += analysis.Issues.Count; DataGridView resultGrid = new DataGridView(); resultGrid.Dock = DockStyle.Fill; resultGrid.ReadOnly = true; resultGrid.AllowUserToAddRows = false; resultGrid.Columns.Add("Name", "Имя элемента"); resultGrid.Columns.Add("Type", "Тип элемента"); resultGrid.Columns.Add("Message", "Описание ошибки"); resultGrid.Columns["Name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; resultGrid.Columns["Type"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; resultGrid.Columns["Message"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; Font defaultFont = new Font("Times New Roman", 14F, GraphicsUnit.Pixel); foreach (DataGridViewColumn column in resultGrid.Columns) { column.DefaultCellStyle.Font = defaultFont; column.HeaderCell.Style.Font = defaultFont; column.DefaultCellStyle.WrapMode = DataGridViewTriState.True; } resultGrid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; foreach (Issue issue in analysis.Issues) { resultGrid.Rows.Add(new object[] { issue.Element.Name, localeActivity[issue.Element.Type.ToString()], issue.Message }); } TabPage processPage = new TabPage(workflowProcess.Name + " (CSC = " + Math.Round(analysis.CSC, 4) + ")"); processesTab.TabPages.Add(processPage); processPage.Controls.Add(resultGrid); } } tasksField.Text = Tasks.ToString(); gatewaysField.Text = Gateways.ToString(); startField.Text = Start.ToString(); intermediateField.Text = Intermediate.ToString(); endField.Text = End.ToString(); shortcomingsField.Text = Shortcomings.ToString(); coefficientField.Text = Math.Round(Coefficient, 4).ToString(); ClearMetrics(); } }