Esempio n. 1
0
 /// <summary>
 /// Custom constructor using a status, a code, a name and an abandon flag.
 /// </summary>
 /// <param name="status">The FlowExecutionStatus to end with</param>
 /// <param name="code"></param>
 /// <param name="name">The name of the state</param>
 /// <param name="abandon">flag to indicate that previous step execution can be marked as abandoned (if there is one)</param>
 public EndState(FlowExecutionStatus status, string code, string name, bool abandon)
     : this(name)
 {
     Status  = status;
     Code    = code;
     Abandon = abandon;
 }
 public void FlowExecutionStatusTest()
 {
     FlowExecutionStatus status1 = FlowExecutionStatus.Completed;
     Assert.IsNotNull(status1);
     FlowExecutionStatus status2 = new FlowExecutionStatus("COMPLETED");
     Assert.IsNotNull(status2);
     Assert.AreEqual(status1,status2);
 }
        public void ToStringTest()
        {
            FlowExecutionStatus status = new FlowExecutionStatus("Completed");

            Assert.AreEqual("Completed", status.ToString());
            FlowExecutionStatus status2 = FlowExecutionStatus.Completed;

            Assert.AreEqual("COMPLETED", status2.ToString());
        }
        public void EqualsTest()
        {
            FlowExecutionStatus status1 = FlowExecutionStatus.Completed;

            Assert.IsNotNull(status1);
            FlowExecutionStatus status2 = new FlowExecutionStatus("COMPLETED");

            Assert.IsNotNull(status2);
            Assert.IsTrue(status1.Equals(status2));
        }
        public void FlowExecutionStatusTest()
        {
            FlowExecutionStatus status1 = FlowExecutionStatus.Completed;

            Assert.IsNotNull(status1);
            FlowExecutionStatus status2 = new FlowExecutionStatus("COMPLETED");

            Assert.IsNotNull(status2);
            Assert.AreEqual(status1, status2);
        }
        public void CompareToTest()
        {
            FlowExecutionStatus status  = new FlowExecutionStatus("COMPLETED");
            FlowExecutionStatus status2 = FlowExecutionStatus.Completed;
            FlowExecutionStatus status3 = new FlowExecutionStatus("COMPLETEDBYFORCE");

            Assert.AreEqual(0, status.CompareTo(status2));
            Assert.AreNotEqual(0, status2.CompareTo(status3));
            Assert.AreEqual(string.Compare("COMPLETED", "COMPLETEDBYFORCE", StringComparison.Ordinal),
                            status2.CompareTo(status3));
        }
 public void IsStopTest()
 {
     FlowExecutionStatus status = FlowExecutionStatus.Stopped;
     Assert.IsTrue(status.IsStop());
     FlowExecutionStatus status5 = new FlowExecutionStatus("STOPPEDBYBUS");
     Assert.IsTrue(status5.IsStop());
     FlowExecutionStatus status2 = FlowExecutionStatus.Completed;
     Assert.IsFalse(status2.IsStop());
     FlowExecutionStatus status3 = FlowExecutionStatus.Failed;
     Assert.IsFalse(status3.IsStop());
     FlowExecutionStatus status4= FlowExecutionStatus.Unkown;
     Assert.IsFalse(status4.IsStop());
 }
 public void IsFailTest()
 {
     FlowExecutionStatus status = FlowExecutionStatus.Stopped;
     Assert.IsFalse(status.IsFail());
     FlowExecutionStatus status2 = FlowExecutionStatus.Completed;
     Assert.IsFalse(status2.IsFail());
     FlowExecutionStatus status3 = FlowExecutionStatus.Failed;
     Assert.IsTrue(status3.IsFail());
     FlowExecutionStatus status5 = new FlowExecutionStatus("FAILEDBYMISTAKE");
     Assert.IsTrue(status5.IsFail());
     FlowExecutionStatus status4 = FlowExecutionStatus.Unkown;
     Assert.IsFalse(status4.IsFail());
 }
Esempio n. 9
0
        /// <summary>
        ///  @see IFlow#Resume .
        /// </summary>
        /// <param name="stateName"></param>
        /// <param name="executor"></param>
        /// <returns></returns>
        /// <exception cref="FlowExecutionException">&nbsp;</exception>
        public FlowExecution Resume(string stateName, IFlowExecutor executor)
        {
            FlowExecutionStatus status = FlowExecutionStatus.Unkown;
            IState state;

            _stateMap.TryGetValue(stateName, out state);

            if (Logger.IsDebugEnabled)
            {
                Logger.Debug("Resuming state={0} with status={1}", stateName, status);
            }
            StepExecution stepExecution = null;

            String currentStateName = stateName;

            // Terminate if there are no more states
            while (IsFlowContinued(state, status, stepExecution))
            {
                currentStateName = state.GetName();
                try
                {
                    if (Logger.IsDebugEnabled)
                    {
                        Logger.Debug("Handling state={0}", currentStateName);
                    }
                    status        = state.Handle(executor);
                    stepExecution = executor.GetStepExecution();
                }
                catch (FlowExecutionException)
                {
                    executor.Close(new FlowExecution(currentStateName, status));
                    throw;
                }
                catch (Exception e)
                {
                    executor.Close(new FlowExecution(currentStateName, status));
                    throw new FlowExecutionException(
                              string.Format("Ended flow={0} at state={1} with exception", Name, currentStateName), e);
                }
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("Completed state={0} with status={1}", currentStateName, status);
                }
                state = NextState(currentStateName, status, stepExecution);
            }
            FlowExecution result = new FlowExecution(currentStateName, status);

            executor.Close(result);
            return(result);
        }
Esempio n. 10
0
        /// <summary>
        /// Tests if flow is continued.
        /// </summary>
        /// <param name="state"></param>
        /// <param name="status"></param>
        /// <param name="stepExecution"></param>
        /// <returns></returns>
        protected bool IsFlowContinued(IState state, FlowExecutionStatus status, StepExecution stepExecution)
        {
            var continued = state != null && !status.Equals(FlowExecutionStatus.Stopped);

            if (stepExecution != null)
            {
                bool?reRun    = (bool?)stepExecution.ExecutionContext.Get("batch.restart");
                bool?executed = (bool?)stepExecution.ExecutionContext.Get("batch.executed");

                if ((executed == null || !executed.Value) && reRun != null && reRun.Value &&
                    status.Equals(FlowExecutionStatus.Stopped) && !state.GetName().EndsWith(stepExecution.StepName))
                {
                    continued = true;
                }
            }
            return(continued);
        }
Esempio n. 11
0
        /// <summary>
        /// Returns the next <see cref="IStep"/> (or null if this is the end).
        /// </summary>
        /// <param name="stateName"></param>
        /// <param name="status"></param>
        /// <param name="stepExecution"></param>
        /// <returns></returns>
        /// <exception cref="FlowExecutionException">&nbsp;</exception>
        protected IState NextState(string stateName, FlowExecutionStatus status, StepExecution stepExecution)
        {
            ICollection <StateTransition> set;

            _transitionMap.TryGetValue(stateName, out set);

            if (set == null)
            {
                throw new FlowExecutionException(
                          string.Format("No transitions found in flow={0} for state={1}", GetName(), stateName));
            }

            string next     = null;
            string exitCode = status.Name;

            foreach (StateTransition stateTransition in set)
            {
                if (stateTransition.Matches(exitCode) ||
                    (exitCode.Equals("PENDING") && stateTransition.Matches("STOPPED")))
                {
                    if (stateTransition.IsEnd())
                    {
                        // End of job
                        return(null);
                    }
                    next = stateTransition.Next;
                    break;
                }
            }

            if (next == null)
            {
                throw new FlowExecutionException(
                          string.Format("Next state not found in flow={0} for state={1} with exit status={2}",
                                        GetName(), stateName, status.Name));
            }

            if (!_stateMap.ContainsKey(next))
            {
                throw new FlowExecutionException(
                          string.Format("Next state not specified in flow={0} for next={1}", GetName(), next));
            }

            //Getting here ensures the _stateMap contains the next Key (protected by the prior throw)
            return(_stateMap[next]);
        }
 public void IsEndTest()
 {
     FlowExecutionStatus status = FlowExecutionStatus.Stopped;
     Assert.IsTrue(status.IsEnd());
     FlowExecutionStatus status6 = new FlowExecutionStatus("STOPPEDBYBUS");
     Assert.IsTrue(status6.IsEnd());
     FlowExecutionStatus status2 = FlowExecutionStatus.Completed;
     Assert.IsTrue(status2.IsEnd());
     FlowExecutionStatus status7 = new FlowExecutionStatus("COMPLETEDONSCHEDULE");
     Assert.IsTrue(status7.IsEnd());
     FlowExecutionStatus status3 = FlowExecutionStatus.Failed;
     Assert.IsTrue(status3.IsEnd());
     FlowExecutionStatus status5 = new FlowExecutionStatus("FAILEDBYMISTAKE");
     Assert.IsTrue(status5.IsEnd());
     FlowExecutionStatus status4 = FlowExecutionStatus.Unkown;
     Assert.IsFalse(status4.IsEnd());
 }
        public void IsStopTest()
        {
            FlowExecutionStatus status = FlowExecutionStatus.Stopped;

            Assert.IsTrue(status.IsStop());
            FlowExecutionStatus status5 = new FlowExecutionStatus("STOPPEDBYBUS");

            Assert.IsTrue(status5.IsStop());
            FlowExecutionStatus status2 = FlowExecutionStatus.Completed;

            Assert.IsFalse(status2.IsStop());
            FlowExecutionStatus status3 = FlowExecutionStatus.Failed;

            Assert.IsFalse(status3.IsStop());
            FlowExecutionStatus status4 = FlowExecutionStatus.Unkown;

            Assert.IsFalse(status4.IsStop());
        }
        public void IsFailTest()
        {
            FlowExecutionStatus status = FlowExecutionStatus.Stopped;

            Assert.IsFalse(status.IsFail());
            FlowExecutionStatus status2 = FlowExecutionStatus.Completed;

            Assert.IsFalse(status2.IsFail());
            FlowExecutionStatus status3 = FlowExecutionStatus.Failed;

            Assert.IsTrue(status3.IsFail());
            FlowExecutionStatus status5 = new FlowExecutionStatus("FAILEDBYMISTAKE");

            Assert.IsTrue(status5.IsFail());
            FlowExecutionStatus status4 = FlowExecutionStatus.Unkown;

            Assert.IsFalse(status4.IsFail());
        }
        public void IsEndTest()
        {
            FlowExecutionStatus status = FlowExecutionStatus.Stopped;

            Assert.IsTrue(status.IsEnd());
            FlowExecutionStatus status6 = new FlowExecutionStatus("STOPPEDBYBUS");

            Assert.IsTrue(status6.IsEnd());
            FlowExecutionStatus status2 = FlowExecutionStatus.Completed;

            Assert.IsTrue(status2.IsEnd());
            FlowExecutionStatus status7 = new FlowExecutionStatus("COMPLETEDONSCHEDULE");

            Assert.IsTrue(status7.IsEnd());
            FlowExecutionStatus status3 = FlowExecutionStatus.Failed;

            Assert.IsTrue(status3.IsEnd());
            FlowExecutionStatus status5 = new FlowExecutionStatus("FAILEDBYMISTAKE");

            Assert.IsTrue(status5.IsEnd());
            FlowExecutionStatus status4 = FlowExecutionStatus.Unkown;

            Assert.IsFalse(status4.IsEnd());
        }
Esempio n. 16
0
 /// <summary>
 /// Custom constructor using a status, a code, a name and an abandon flag.
 /// </summary>
 /// <param name="status">The FlowExecutionStatus to end with</param>
 /// <param name="code"></param>
 /// <param name="name">The name of the state</param>
 /// <param name="abandon">flag to indicate that previous step execution can be marked as abandoned (if there is one)</param>
 public EndState(FlowExecutionStatus status, string code, string name, bool abandon)
     : this(name)
 {
     Status = status;
     Code = code;
     Abandon = abandon;
 }
Esempio n. 17
0
 /// <summary>
 /// Retrieves batch status.
 /// </summary>
 /// <param name="status"></param>
 /// <returns></returns>
 protected BatchStatus FindBatchStatus(FlowExecutionStatus status)
 {
     foreach (BatchStatus batchStatus in BatchStatus.Values)
     {
         if (status.Name.StartsWith(batchStatus.ToString()))
         {
             return batchStatus;
         }
     }
     return BatchStatus.Unknown;
 }
Esempio n. 18
0
 /// <summary>
 /// @see IFlowExecutor#UpdateJobExecutionStatus .
 /// </summary>
 /// <param name="status"></param>
 public void UpdateJobExecutionStatus(FlowExecutionStatus status)
 {
     _execution.Status = FindBatchStatus(status);
     ExitStatus = ExitStatus.And(new ExitStatus(status.Name));
     _execution.ExitStatus = ExitStatus;
 }
 public void EqualsTest()
 {
     FlowExecutionStatus status1 = FlowExecutionStatus.Completed;
     Assert.IsNotNull(status1);
     FlowExecutionStatus status2 = new FlowExecutionStatus("COMPLETED");
     Assert.IsNotNull(status2);
     Assert.IsTrue(status1.Equals(status2));
 }
 public void GetHashCodeTest()
 {
     FlowExecutionStatus status = new FlowExecutionStatus("Completed");
     Assert.AreEqual(status.Name.GetHashCode(), status.GetHashCode());
 }
Esempio n. 21
0
        /// <summary>
        /// Tests if flow is continued.
        /// </summary>
        /// <param name="state"></param>
        /// <param name="status"></param>
        /// <param name="stepExecution"></param>
        /// <returns></returns>
        protected bool IsFlowContinued(IState state, FlowExecutionStatus status, StepExecution stepExecution)
        {
            var continued = state != null && !status.Equals(FlowExecutionStatus.Stopped);

            if (stepExecution != null)
            {
                bool? reRun = (bool?)stepExecution.ExecutionContext.Get("batch.restart");
                bool? executed = (bool?)stepExecution.ExecutionContext.Get("batch.executed");

                if ((executed == null || !executed.Value) && reRun != null && reRun.Value
                    && status.Equals(FlowExecutionStatus.Stopped) && !state.GetName().EndsWith(stepExecution.StepName))
                {
                    continued = true;
                }
            }
            return continued;
        }
Esempio n. 22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FlowExecutionProgress" /> class.
 /// </summary>
 /// <param name="Id">Id.</param>
 /// <param name="Percentage">Percentage.</param>
 /// <param name="CurrentData">CurrentData.</param>
 /// <param name="Message">Message.</param>
 /// <param name="Status">Status.</param>
 /// <param name="Schema">Schema.</param>
 /// <param name="Model">Model.</param>
 /// <param name="Form">Form.</param>
 public FlowExecutionProgress(string Id = default(string), int?Percentage = default(int?), IdWithName CurrentData = default(IdWithName), string Message = default(string), FlowExecutionStatus Status = default(FlowExecutionStatus), Object Schema = default(Object), Object Model = default(Object), List <Object> Form = default(List <Object>))
 {
     this.Id          = Id;
     this.Percentage  = Percentage;
     this.CurrentData = CurrentData;
     this.Message     = Message;
     this.Status      = Status;
     this.Schema      = Schema;
     this.Model       = Model;
     this.Form        = Form;
 }
Esempio n. 23
0
 /// <summary>
 /// Custom constructor using a status, a code and a name.
 /// </summary>
 /// <param name="status">The FlowExecutionStatus to end with</param>
 /// <param name="code"></param>
 /// <param name="name">The name of the state</param>
 public EndState(FlowExecutionStatus status, string code, string name) : this(status, code, name, false)
 {
 }
Esempio n. 24
0
 /// <summary>
 /// Custom constructor using a status and a name.
 /// </summary>
 /// <param name="status">The FlowExecutionStatus to end with</param>
 /// <param name="name">The name of the state</param>
 public EndState(FlowExecutionStatus status, string name)
     : this(status, status.Name, name)
 {
 }
Esempio n. 25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FlowExecution" /> class.
 /// </summary>
 /// <param name="Id">Id.</param>
 /// <param name="CreatedAt">CreatedAt.</param>
 /// <param name="CreatedBy">CreatedBy.</param>
 /// <param name="ModifiedAt">ModifiedAt.</param>
 /// <param name="ModifiedBy">ModifiedBy.</param>
 /// <param name="Status">Status.</param>
 /// <param name="Flow">Flow.</param>
 /// <param name="State">State.</param>
 public FlowExecution(string Id = default(string), string CreatedAt = default(string), IdWithName CreatedBy = default(IdWithName), string ModifiedAt = default(string), IdWithName ModifiedBy = default(IdWithName), FlowExecutionStatus Status = default(FlowExecutionStatus), IdWithName Flow = default(IdWithName), FlowExecutionState State = default(FlowExecutionState))
 {
     this.Id         = Id;
     this.CreatedAt  = CreatedAt;
     this.CreatedBy  = CreatedBy;
     this.ModifiedAt = ModifiedAt;
     this.ModifiedBy = ModifiedBy;
     this.Status     = Status;
     this.Flow       = Flow;
     this.State      = State;
 }
Esempio n. 26
0
 /// <summary>
 /// Custom constructor using a status and a name.
 /// </summary>
 /// <param name="status">The FlowExecutionStatus to end with</param>
 /// <param name="name">The name of the state</param>
 public EndState(FlowExecutionStatus status, string name)
     : this(status, status.Name, name) { }
 public void ToStringTest()
 {
     FlowExecutionStatus status = new FlowExecutionStatus("Completed");
     Assert.AreEqual("Completed", status.ToString());
     FlowExecutionStatus status2 = FlowExecutionStatus.Completed;
     Assert.AreEqual("COMPLETED", status2.ToString());
 }
Esempio n. 28
0
 /// <summary>
 /// Custom constructor using a status, a code and a name.
 /// </summary>
 /// <param name="status">The FlowExecutionStatus to end with</param>
 /// <param name="code"></param>
 /// <param name="name">The name of the state</param>
 public EndState(FlowExecutionStatus status, string code, string name) : this(status, code, name, false) { }
Esempio n. 29
0
        /// <summary>
        /// Returns the next <see cref="IStep"/> (or null if this is the end).
        /// </summary>
        /// <param name="stateName"></param>
        /// <param name="status"></param>
        /// <param name="stepExecution"></param>
        /// <returns></returns>
        /// <exception cref="FlowExecutionException"></exception>
        protected IState NextState(string stateName, FlowExecutionStatus status, StepExecution stepExecution)
        {
            ICollection<StateTransition> set;
            _transitionMap.TryGetValue(stateName, out set);

            if (set == null)
            {
                throw new FlowExecutionException(
                    string.Format("No transitions found in flow={0} for state={1}", GetName(), stateName));
            }

            string next = null;
            string exitCode = status.Name;

            foreach (StateTransition stateTransition in set)
            {
                if (stateTransition.Matches(exitCode) || 
                    (exitCode.Equals("PENDING") && stateTransition.Matches("STOPPED")))
                {
                    if (stateTransition.IsEnd())
                    {
                        // End of job
                        return null;
                    }
                    next = stateTransition.Next;
                    break;
                }
            }

            if (next == null)
            {
                throw new FlowExecutionException(
                    string.Format("Next state not found in flow={0} for state={1} with exit status={2}",
                    GetName(), stateName, status.Name));
            }

            if (!_stateMap.ContainsKey(next))
            {
                throw new FlowExecutionException(
                    string.Format("Next state not specified in flow={0} for next={1}", GetName(), next));
            }

            //Getting here ensures the _stateMap contains the next Key (protected by the prior throw)
            return _stateMap[next];

        }
 public void CompareToTest()
 {
     FlowExecutionStatus status = new FlowExecutionStatus("COMPLETED");
     FlowExecutionStatus status2 = FlowExecutionStatus.Completed;
     FlowExecutionStatus status3 = new FlowExecutionStatus("COMPLETEDBYFORCE");
     Assert.AreEqual(0, status.CompareTo(status2));
     Assert.AreNotEqual(0, status2.CompareTo(status3));
     Assert.AreEqual(string.Compare("COMPLETED", "COMPLETEDBYFORCE", StringComparison.Ordinal), 
         status2.CompareTo(status3));
 }
        public void GetHashCodeTest()
        {
            FlowExecutionStatus status = new FlowExecutionStatus("Completed");

            Assert.AreEqual(status.Name.GetHashCode(), status.GetHashCode());
        }
Esempio n. 32
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StatisticsPerStatus" /> class.
 /// </summary>
 /// <param name="Status">Status.</param>
 /// <param name="Count">Count.</param>
 public StatisticsPerStatus(FlowExecutionStatus Status = default(FlowExecutionStatus), int?Count = default(int?))
 {
     this.Status = Status;
     this.Count  = Count;
 }
Esempio n. 33
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FlowExecution" /> class.
 /// </summary>
 /// <param name="Id">Id.</param>
 /// <param name="CreatedAt">CreatedAt.</param>
 /// <param name="CreatedBy">CreatedBy.</param>
 /// <param name="CreatedFor">CreatedFor.</param>
 /// <param name="ModifiedAt">ModifiedAt.</param>
 /// <param name="ModifiedBy">ModifiedBy.</param>
 /// <param name="Priority">Priority.</param>
 /// <param name="Status">Status.</param>
 /// <param name="Flow">Flow.</param>
 /// <param name="State">State.</param>
 /// <param name="Mode">Mode.</param>
 /// <param name="Outputs">Outputs.</param>
 public FlowExecution(string Id = default(string), string CreatedAt = default(string), IdWithName CreatedBy = default(IdWithName), IdWithName CreatedFor = default(IdWithName), string ModifiedAt = default(string), IdWithName ModifiedBy = default(IdWithName), int?Priority = default(int?), FlowExecutionStatus Status = default(FlowExecutionStatus), IdWithName Flow = default(IdWithName), FlowExecutionState State = default(FlowExecutionState), ModeEnum?Mode = default(ModeEnum?), List <FlowExecutionOutput> Outputs = default(List <FlowExecutionOutput>))
 {
     this.Id         = Id;
     this.CreatedAt  = CreatedAt;
     this.CreatedBy  = CreatedBy;
     this.CreatedFor = CreatedFor;
     this.ModifiedAt = ModifiedAt;
     this.ModifiedBy = ModifiedBy;
     this.Priority   = Priority;
     this.Status     = Status;
     this.Flow       = Flow;
     this.State      = State;
     this.Mode       = Mode;
     this.Outputs    = Outputs;
 }