Пример #1
0
        /// <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;
        }
Пример #2
0
 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);
     }
 }
Пример #3
0
        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();
            }
        }