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));
            }
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
 public CodingStateMachine(StateMachineModel model)
 {
     this.currentState = StateMachineModel.Start;
     this.model        = model;
 }
Exemplo n.º 6
0
 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();
        }