public void Init(
     SchedulerTaskScriptDependencies dependencies,
     ITaskSettings settings,
     ScriptFlow flow,
     ScriptUtility utils
     )
 {
     this.x = utils;
     this.Settings = settings;
     this.Flow = flow;
     this.Dependencies = dependencies;
     if (dependencies!=null && dependencies.GetType() != DependencyClassType) throw new InvalidOperationException("Wrong dependency class provided");
 }
 protected FlowAssertion(ScriptFlow root, bool assert)
 {
     IsPositive = assert;
     this.root  = root;
 }
 public static FlowAssertion Create(ScriptFlow root, bool assert)
 {
     return(new FlowAssertion(root, assert));
 }
        protected Tuple<DateTime, ScheduleMessageState> ExecuteScript(string scriptName, IComponentContext context)
        {
            var script = Scripts[scriptName];
            if (script == null) throw new Exception("Script not found");
            RunningScriptName = scriptName;

            var flow = new ScriptFlow(this);
            flow.OnNewMessage +=
                (m) =>
                {
                    if (m.Type == ScheduleMessageState.Error)
                    {
                        log.Error(String.Format("{0}: {1}", m.Type, m.Message));
                    }
                    else
                    {
                        log.Info(String.Format("{0}: {1}", m.Type, m.Message));
                    }
                    Progress.SetProgress(m.Message);
                };
            scriptUtility.Flow = flow;

            flow.AddMessage(String.Format("Starting {1} for {0}", TaskName, scriptName));
            OnScriptStarted(script);
            //init
            try
            {
                flow.AddMessage(String.Format("Initializing {0}", scriptName), ScheduleMessageState.Debug);
                var dependency = ResolveScriptDependency(script, context);
                ValidateDependencies(dependency);
                script.Init(dependency, Settings, flow, scriptUtility);
            }
            catch (Exception ex)
            {
                flow.AddMessage("Script init failed", ScheduleMessageState.Error);
                flow.Dump(ex);
            }
            //execution
            if (flow.MessagesState < ScheduleMessageState.Error)
            {
                try
                {
                    script.Execute();
                }
                catch (FlowException ex)
                {
                    if (ex.ExceptionType == FlowExceptionType.Fail)
                    {
                        flow.AddMessage(ex.Message, ScheduleMessageState.Error);
                    }
                    else if (!String.IsNullOrEmpty(ex.Message))
                    {
                        flow.AddMessage(ex.Message);
                    }
                }
                catch (Exception ex)
                {
                    flow.AddMessage("Script failed with exception", ScheduleMessageState.Error);
                    flow.Dump(ex);
                }
            }
            //execution done - changing and saving settings
            Settings.Set(SETTING_LAST_STATE, flow.MessagesState);

            var currentTime = DateTime.Now;
            if (flow.MessagesState < ScheduleMessageState.Error)
            {
                //update schedules
                ScheduledScripts = ScheduledScripts.Skip(1).ToList();
                flow.ScheduledScripts.ForEach(x =>
                {
                    if (Scripts.Any(s => s.Key == x.Key))
                    {
                        ScheduledScripts.Add(new BrowsingGoalScriptSchedule() { ScriptName = x.Key, Date = currentTime.AddSeconds(x.Value) });
                    }
                    else
                    {
                        flow.AddMessage(String.Format("Script {0} not found for schedule.", x.Key), ScheduleMessageState.Error);
                    }
                });
                ScheduledScripts = ScheduledScripts.OrderBy(x => x.Date).ToList();
                flow.AddMessage(String.Format("{0} scripts in queue", ScheduledScripts.Count), ScheduleMessageState.Debug);
            }
            flow.AddMessage(String.Format("Script {0}.{1} finished", TaskName, RunningScriptName), flow.MessagesState);
            Settings.Set(SETTING_PREFIX_MESSAGES + scriptName, flow.Messages);

            Progress.SetProgressRemaining(RunningScriptName + " complete",
                (int)((0.0 + ProgressStatus.PROGRESS_MAX) * (Math.Min(ScheduledScripts.Count, Scripts.Count) / (0.0+Scripts.Count))));

            OnScriptFinished(script);
            if (ScheduledScripts.Count == 0 || flow.MessagesState >= ScheduleMessageState.Error)
            {
                flow.AddMessage(String.Format("Task '{0}' finished", TaskName));
                OnTaskFinished();
            }
            RunningScriptName = null;
            return new Tuple<DateTime, ScheduleMessageState>(
                (ScheduledScripts.Count == 0) ? DateTime.MaxValue :
                ScheduledScripts.First().Date, flow.MessagesState);
        }
 protected FlowAssertion(ScriptFlow root, bool assert)
 {
     IsPositive = assert;
     this.root = root;
 }
 public static FlowAssertion Create(ScriptFlow root, bool assert)
 {
     return new FlowAssertion(root, assert);
 }