/// <summary> /// Resetting all progress of handling events /// </summary> /// <returns>true value if successful resetted</returns> public bool reset() { if (!IsAllowActions) { return(false); } projects.Clear(); current = new ExecutionOrder(); Status._.flush(); return(true); }
/// <summary> /// Checking state with current range of order. /// /// In general, this checking for multiple the event-action like a EW/OWP: /// * Before1 -> After1|Cancel /// * After1 -> POST/Cancel /// </summary> /// <param name="evt"></param> /// <param name="incoming">Current incoming project</param> /// <returns>true value if it's allowed to execute for current state</returns> protected bool isExecute(ISolutionEvent evt, IExecutionOrder incoming) { if (!hasExecutionOrder(evt)) { return(true); } Log.Debug("hasExecutionOrder(->isExecute) for '{0}' is true", evt.Caption); foreach (IExecutionOrder eo in evt.ExecutionOrder) { if (!projects.ContainsKey(eo.Project)) { continue; } // The 'Before' base: if (eo.Order == ExecutionOrderType.Before) { // Before1 -> After1 return(projects[eo.Project].Order == ExecutionOrderType.Before); } // The 'After' base: if (projects[eo.Project].Order != ExecutionOrderType.After) { return(false); // waiting for 'After' state.. } if (incoming.Project != eo.Project) { return(true); // After1 -> POST/Cancel } return(incoming.Order == ExecutionOrderType.After); // 'After' is reached ? } return(false); }
/// <summary> /// Checking state with current range of order. /// /// In general, this checking for multiple the event-action like a EW/OWP: /// * Before1 -> After1|Cancel /// * After1 -> POST/Cancel /// </summary> /// <param name="evt"></param> /// <param name="incoming">Current incoming project</param> /// <returns>true value if it's allowed to execute for current state</returns> protected bool isExecute(ISolutionEvent evt, IExecutionOrder incoming) { if(!hasExecutionOrder(evt)) { return true; } Log.Debug("hasExecutionOrder(->isExecute) for '{0}' is true", evt.Caption); foreach(IExecutionOrder eo in evt.ExecutionOrder) { if(!projects.ContainsKey(eo.Project)) { continue; } // The 'Before' base: if(eo.Order == ExecutionOrderType.Before) { // Before1 -> After1 return (projects[eo.Project] == ExecutionOrderType.Before); } // The 'After' base: if(projects[eo.Project] != ExecutionOrderType.After) { return false; // waiting for 'After' state.. } if(incoming.Project != eo.Project) { return true; // After1 -> POST/Cancel } return (incoming.Order == ExecutionOrderType.After); // 'After' is reached ? } return false; }
/// <summary> /// Resetting all progress of handling events /// </summary> /// <returns>true value if successful resetted</returns> public bool reset() { if(!IsAllowActions) { return false; } projects.Clear(); current = new ExecutionOrder(); Status._.flush(); return true; }