Exemple #1
0
        public IEnumerable <PD_TransitionDTO> GetAllTransitions(int id, int sid)
        {
            PD_Subject i = _db.PD_Subjects.Find(id, sid);
            List <PD_TransitionDTO> t = new List <PD_TransitionDTO>();

            foreach (var tr in i.Transitions)
            {
                var temp = new PD_TransitionDTO()
                {
                    Id = tr.Id, Source = tr.Source, Target = tr.Target, Type = tr.Type, LabelPosition = tr.LabelPosition
                };

                if (tr.Type == PD_TransitionTypes.RegularTransition)
                {
                    temp.Label = ((PD_RegularTransition)tr).Name;
                }
                if (tr.Type == PD_TransitionTypes.ReceiveTransition)
                {
                    try
                    {
                        PD_Message     m  = _db.PD_Messages.Find(id, ((PD_ReceiveTransition)tr).Message);
                        PD_MessageType mt = m.PD_MessageType;
                        PD_Subject     s  = _db.PD_Subjects.Find(id, m.From);
                        temp.Label = s.Name + "|" + mt.Name;
                    }
                    catch (Exception e)
                    {
                        temp.Label = "Receive";
                    }
                }
                if (tr.Type == PD_TransitionTypes.TimeoutTransition)
                {
                    temp.Label = ((PD_TimeoutTransition)tr).TimeSpan;
                }
                if (temp.Label == null)
                {
                    temp.Label = "EMPTY";
                }
                t.Add(temp);
            }
            return(t.ToArray());
        }
Exemple #2
0
        public void PutTransition(PD_TransitionDTO item, int id, int sid, int tid)
        {
            var _p = _db.PD_Processes.Find(id);

            if (User.Identity.Name.Equals(_p.LockedBy))
            {
                var transition = _db.PD_Transitions.Find(id, sid, tid);

                if (transition != null)
                {
                    transition.Source        = item.Source;
                    transition.Target        = item.Target;
                    transition.LabelPosition = item.LabelPosition;
                    _db.SaveChanges();
                }
                else
                {
                    throw new HttpResponseException(HttpStatusCode.NotFound);
                }
            }
        }
Exemple #3
0
        public HttpResponseMessage PostTransition(PD_TransitionDTO item, int id, int sid)
        {
            var _p = _db.PD_Processes.Find(id);

            if (User.Identity.Name.Equals(_p.LockedBy))
            {
                var           subject       = _db.PD_Subjects.Find(id, sid);
                PD_Transition newTransition = null;
                if (item.Type == PD_TransitionTypes.RegularTransition)
                {
                    var from = _db.PD_States.Find(id, sid, item.Source);
                    var to   = _db.PD_States.Find(id, sid, item.Target);
                    if (from.Type == PD_StateTypes.SendState && to.Type == PD_StateTypes.ReceiveState)
                    {
                        var state    = _db.PD_SendStates.Find(id, sid, item.Source);
                        var messages = _db.PD_Messages.Where(result => result.PD_Process_Id == id && result.From == sid).ToList();
                        foreach (var message in messages)
                        {
                            if (state.Message == message.Id)
                            {
                                newTransition = new PD_RegularTransition()
                                {
                                    Name = message.PD_MessageType.Name.ToString()
                                };
                            }
                        }
                        if (newTransition == null)
                        {
                            newTransition = new PD_RegularTransition()
                            {
                                Name = "No message used"
                            };
                        }
                    }
                    else
                    {
                        PD_State s = _db.PD_States.Find(id, sid, item.Source);
                        if (s.Type == PD_StateTypes.SendState)
                        {
                            var state = _db.PD_SendStates.Find(id, sid, item.Source);

                            var messages = _db.PD_Messages.Where(result => result.PD_Process_Id == id && result.From == sid).ToList();
                            if (messages.Count() > 0)
                            {
                                var name = messages.Find(result => result.Id == state.Message).PD_MessageType.Name;
                                newTransition = new PD_RegularTransition()
                                {
                                    Name = name
                                };
                            }
                            else
                            {
                                newTransition = new PD_RegularTransition()
                                {
                                    Name = "Transition"
                                };
                            }
                        }
                        else
                        {
                            newTransition = new PD_RegularTransition()
                            {
                                Name = "Transition"
                            };
                        }
                    }
                }
                if (item.Type == PD_TransitionTypes.ReceiveTransition)
                {
                    newTransition = new PD_ReceiveTransition()
                    {
                        Message = -1
                    };
                }
                if (item.Type == PD_TransitionTypes.TimeoutTransition)
                {
                    newTransition = new PD_TimeoutTransition()
                    {
                        TimeSpan = "dd:hh:mm"
                    };
                }

                newTransition.Id = IdHelper.getTransitionId(_db, id, sid);

                newTransition.Source        = item.Source;
                newTransition.Target        = item.Target;
                newTransition.LabelPosition = item.LabelPosition;
                subject.Transitions.Add(newTransition);
                _db.SaveChanges();
                var response = Request.CreateResponse <PD_TransitionDTO>(HttpStatusCode.Created, new PD_TransitionDTO()
                {
                    Id = newTransition.Id, Source = newTransition.Source, Target = newTransition.Target, Type = newTransition.Type, Label = "Transition" + newTransition.Type
                });

                string uri = Url.Content("Designer" + id + "/Subjects/" + sid + "/States/" + newTransition.Id);
                response.Headers.Location = new Uri(uri);
                return(response);
            }
            else
            {
                return(null);
            }
        }