Exemple #1
0
        public void TestPauseResume2()
        {
            var stopwatch     = new Stopwatch();
            var stageProvider = new StageProvider(new Stage {
                Duration = 1000
            }, new Stage {
                Marker = 1
            }, new Stage {
                Duration = 1000
            });
            var program = new StageProgram(Clock.SystemTicksClock, stageProvider);

            program.Started      += (sender, e) => stopwatch.Restart();
            program.StageChanged += (sender, e) => e.Action = (e.Stage?.Marker ?? 0) == 1 ? StageAction.Pause : e.Action;
            var evt = new ManualResetEvent(false);

            program.Stopped += (sender, e) =>
            {
                stopwatch.Stop();
                evt.Set();
            };
            program.Start();
            Thread.Sleep(5000);
            Assert.IsTrue(program.Resume());
            evt.WaitOne();
            const int estimatedSeconds = 6;
            var       elapsedTime      = stopwatch.Elapsed;

            Assert.IsTrue(Math.Abs(elapsedTime.TotalSeconds - estimatedSeconds) < 1);
        }
Exemple #2
0
        public void TestPauseResume()
        {
            var stopwatch     = new Stopwatch();
            var stageProvider = new StageProvider(new Stage {
                Duration = 2000
            }, new Stage {
                Duration = 2000
            });
            var program = new StageProgram(Clock.SystemTicksClock, stageProvider);

            program.Started += (sender, e) => stopwatch.Restart();
            var evt = new ManualResetEvent(false);

            program.Stopped += (sender, e) =>
            {
                stopwatch.Stop();
                evt.Set();
            };
            program.Start();
            Thread.Sleep(2500);
            Assert.IsTrue(program.Pause());
            Thread.Sleep(2500);
            Assert.IsTrue(program.Resume());
            evt.WaitOne();
            const double estimatedSeconds = 6.5;
            var          elapsedTime      = stopwatch.Elapsed;

            Assert.IsTrue(Math.Abs(elapsedTime.TotalSeconds - estimatedSeconds) < 1);
        }
            public int CompareTo(IEntityWorkflowStageProvider other)
            {
                StageProvider provider = (StageProvider)other;

                if (_item == null || provider._item == null)
                {
                    return(((IComparable)Id).CompareTo(provider.Id));
                }
                return(_item.Index.CompareTo(provider._item.Index));
            }
        public EntityWorkflow CreateWorkflow()
        {
            WorkflowProvider workflowProvider = new WorkflowProvider
            {
                Guid                 = _guid,
                Name                 = _name,
                PropertyName         = _propertyName,
                EntitySet            = _entitySet,
                StageListGuid        = _stageListGuid,
                StagePropertyGuid    = _stagePropertyGuid,
                Types                = _types.ToArray(),
                ShowInLinks          = new HashSet <Guid>(_showInLinks),
                HistoryConfiguration = _historyCofiguration
            };

            EntityWorkflow result = new EntityWorkflow(workflowProvider);

            ValueList valueList;

            if (_stageListGuid == Guid.Empty)
            {
                EntitySetScheme scheme = _entitySet.GetScheme();
                if (_types.Count == 0)
                {
                    valueList = (scheme.Properties.Find(_stagePropertyGuid)?.Format as ValueListPropertyFormat)?.ValueList?.GetList();
                }
                else
                {
                    EntityType type = _types.SelectMany(t => t.GetTypes(scheme.Types)).FirstOrDefault();
                    valueList = (type?.Properties.Find(_stagePropertyGuid)?.Format as ValueListPropertyFormat)?.ValueList?.GetList();
                }
            }
            else
            {
                valueList = ValueList.GetValueList(_entitySet.Connection, _stageListGuid);
                if (valueList == null)
                {
                    throw new ModelException(ErrorLevel.Warning, "Не найден список значений {0}", _stageListGuid);
                }
            }

            ILookup <object, ValueListItem> items = valueList?.ToLookup(i => i.WorkflowValue);

            List <EntityWorkflowStage> stages = new List <EntityWorkflowStage>();

            foreach (KeyValuePair <object, IEntityWorkflowStage> source in _stages)
            {
                StageProvider stageProvider = new StageProvider
                {
                    Id   = source.Key,
                    Item = items?[source.Key].FirstOrDefault()
                };
                stages.Add(new EntityWorkflowStage(result, stageProvider));
            }
            result.Stages = stages;

            Dictionary <object, List <EntityWorkflowTransition> > transitionsTo   = stages.ToDictionary(s => s.Id, s => new List <EntityWorkflowTransition>());
            Dictionary <object, List <EntityWorkflowTransition> > transitionsFrom = stages.ToDictionary(s => s.Id, s => new List <EntityWorkflowTransition>());

            result.Transitions = _transitions.OfType <TransitionInfo>().Select(
                t => t.CreateTransition(result, workflowProvider, transitionsTo, transitionsFrom)).ToList();

            foreach (EntityWorkflowStage stage in stages)
            {
                stage.SetTransitionsTo(transitionsTo[stage.Id]);
                stage.SetTransitionsFrom(transitionsFrom[stage.Id]);
            }

            return(result);
        }
        public void TestEnumerable()
        {
            var stageProvider = new StageProvider(new Stage(), new Stage(), new Stage());

            Assert.AreEqual(stageProvider.Count, stageProvider.AsEnumerable().Count());
        }