public void UpdateStateMachine(StateMachineModel model) { var stateMachineToUpdate = _context.SMDefinition.FirstOrDefault(x => x.Name.Equals(model.Name) && x.Agenda.Equals(model.Agenda)); stateMachineToUpdate.Version = model.Version; stateMachineToUpdate.Definition = model.Definition.ToString(Formatting.None); _context.SaveChanges(); }
public IActionResult AddStateMachine([FromBody] StateMachineModel stateMachine) { try { _stateMachineRepository.AddStateMachine(stateMachine); return(Ok()); } catch (Exception ex) { _loggerService.Log("StateMachineController.AddStateMachine", ex.Message); return(StatusCode(500, ex.Message)); } }
public IActionResult ValidateStateMachine([FromBody] StateMachineModel stateMachine) { try { var result = _stateMachineService.ValidateStateMachine(stateMachine); return(Ok(result)); } catch (Exception ex) { _loggerService.Log("StateMachineController.ValidateStateMachine", ex.Message); return(StatusCode(500, ex.Message)); } }
public bool ValidateStateMachine(StateMachineModel model) { string myschemaJson = @"{ 'description': 'An employee', 'type': 'object', 'properties': { 'name': {'type':'string'}, 'id': {'type':'string'}, 'company': {'type':'string'}, 'role': {'type':'string'}, 'skill': {'type': 'array', 'items': {'type':'string'} } }"; JsonSchema schema = JsonSchema.Parse(myschemaJson); return(model.Definition.IsValid(schema)); }
public CodingStateMachine(StateMachineModel model) { this.currentState = StateMachineModel.Start; this.model = model; }
public CodingStateMachine(StateMachineModel model) { this.currentState = StateMachineModel.Start; this.model = model; }
public CodingStateMachine(StateMachineModel model) { currentState = StateMachineModel.START; this.model = model; }
public void AddStateMachine(StateMachineModel model) { var addedTriggers = new List <string>(); var addedStates = new List <string>(); var stateMachineDefinition = new SMDefinition { Name = model.Name, Agenda = model.Agenda, Version = model.Version, Definition = model.Definition.ToString(Formatting.None), }; _context.SMDefinition.Add(stateMachineDefinition); _context.SaveChanges(); var initialStateName = (string)model.Definition["initial"]; var allObjects = model.Definition.DescendantsAndSelf().OfType <JObject>(); var stateTokens = allObjects.Where(x => x.ContainsKey("kind")); var transitionTokens = allObjects.Where(x => x.ContainsKey("target")); var stateTypeId = _context.ElementType.FirstOrDefault(x => x.Name.Equals("state")).Id; var transitionTypeId = _context.ElementType.FirstOrDefault(x => x.Name.Equals("transition")).Id; foreach (var transition in transitionTokens) { if (!addedTriggers.Contains((string)transition["event"])) { var newTrigger = new TransitionTrigger { Name = (string)transition["event"] }; addedTriggers.Add(newTrigger.Name); _context.TransitionTrigger.Add(newTrigger); } } foreach (var state in stateTokens) { if (!addedStates.Contains((string)state["id"])) { var newState = new Element { SMDefinitionId = stateMachineDefinition.Id, ElementTypeId = stateTypeId, Name = (string)state["id"] }; addedStates.Add(newState.Name); _context.Element.Add(newState); } } _context.SaveChanges(); foreach (var state in stateTokens) { var childTransitionTokens = state["states"] == null ? state.DescendantsAndSelf().OfType <JObject>().Where(x => x.ContainsKey("target")) : state.SelectToken("transitions").Children().OfType <JObject>().Where(x => x.ContainsKey("target")); foreach (var childTransition in childTransitionTokens) { var newTransition = new Element { ElementTypeId = transitionTypeId, SMDefinitionId = stateMachineDefinition.Id, OldStateId = _context.Element.FirstOrDefault(x => x.ElementTypeId == stateTypeId && x.Name.Equals((string)state["id"])).Id, NewStateId = _context.Element.FirstOrDefault(x => x.ElementTypeId == stateTypeId && x.Name.Equals((string)childTransition["target"])).Id, TransitionTriggerId = _context.TransitionTrigger.FirstOrDefault(x => x.Name.Equals((string)childTransition["event"])).Id }; _context.Element.Add(newTransition); } } stateMachineDefinition.InitialStateId = _context.Element.FirstOrDefault(x => x.ElementTypeId == stateTypeId && x.Name.Equals(initialStateName)).Id; _context.SaveChanges(); }