public void AddEventLog(EventLog item) { _context.EventLog.Add(item); _context.SaveChanges(); }
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(); }