Exemplo n.º 1
0
        public HttpResponseMessage PostMessage(PD_MessageDTO item, int id)
        {
            //if (item.EndPoints[0] == 0.0 && item.EndPoints[1] == 0.0) return null; //older versions
            //else if (item.EndPoints.Length == 2) return null;
            var _p = _db.PD_Processes.Find(id);

            if (User.Identity.Name.Equals(_p.LockedBy))
            {
                foreach (var i in _p.Messages) //this foreach shouldnt be necessary, by doing a simple update via javascript, but doesn't seem to be working
                {
                    if (i.EndPoints != null)   //for older versions
                    {
                        var source1 = Convert.ToDouble(i.EndPoints.Split('|')[0]);
                        var source2 = Convert.ToDouble(i.EndPoints.Split('|')[1]);
                        if (source1 == item.EndPoints[0] && source2 == item.EndPoints[1])
                        {
                            i.EndPoints = (item.EndPoints[0]).ToString() + "|" + (item.EndPoints[1]).ToString() + "|" + (item.EndPoints[2]).ToString() + "|" + (item.EndPoints[3]).ToString();
                            i.To        = item.To;
                            _db.SaveChanges();
                            return(null);
                        }
                    }
                }


                PD_Message m = new PD_Message()
                {
                    From = item.From, To = item.To
                };
                m.Id = IdHelper.getMessageId(_db, id);
                if (item.EndPoints.Length == 2)  //si me da igual, algo hay q guardar simplemente
                {
                    m.EndPoints = (item.EndPoints[0]).ToString() + "|" + (item.EndPoints[1]).ToString() + "|0|0";
                }
                else
                {
                    m.EndPoints = (item.EndPoints[0]).ToString() + "|" + (item.EndPoints[1]).ToString() + "|" + (item.EndPoints[2]).ToString() + "|" + (item.EndPoints[3]).ToString();
                }
                //m.EndPoints = item.EndPoints;
                _p.Messages.Add(m);
                _db.SaveChanges();
                var response = Request.CreateResponse <PD_MessageDTO>(HttpStatusCode.Created, new PD_MessageDTO()
                {
                    Id = m.Id, From = m.From, To = m.To, TypeName = "newMessage", EndPoints = item.EndPoints
                });

                string uri = Url.Content("Designer" + id + "/Messages/" + m.Id);
                response.Headers.Location = new Uri(uri);
                return(response);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 2
0
        public void DeleteTransition(int id, int mid)
        {
            var _p = _db.PD_Processes.Find(id);

            if (User.Identity.Name.Equals(_p.LockedBy))
            {
                PD_Message m = _db.PD_Messages.Find(id, mid);

                if (m != null)
                {
                    _p.Messages.Remove(m);
                    //_db.PD_States.Where(result => result.PD_Process_Id == id && result.Message == mid).ToList(); must be deleted too or exceptions will appear
                    if (m.PD_MessageType_Id != null)
                    {
                        var mesName = _db.PD_MessageTypes.Find(id, m.PD_MessageType_Id);

                        var subj  = _db.PD_Subjects.Find(id, m.From);
                        var subj2 = _db.PD_Subjects.Find(id, m.To);

                        var outgoing = _db.PD_Messages.Where(a => a.From == subj.Id && a.PD_Process_Id == id && a.PD_MessageType_Id == mesName.Id).Count();
                        var incoming = _db.PD_Messages.Where(a => a.To == subj.Id && a.PD_Process_Id == id && a.PD_MessageType_Id == mesName.Id).Count();
                        if (outgoing == 1 && incoming == 0)  //for the strange case the user makes 2 or more messages with the very same type from the very same subject
                        {
                            foreach (string x in mesName.Parameters.ToList())
                            {
                                subj.GlobalParameters.Remove(x);         //with this, the function states will not load the parameters from the deleted message
                            }
                        }
                        outgoing = _db.PD_Messages.Where(a => a.From == subj2.Id && a.PD_Process_Id == id && a.PD_MessageType_Id == mesName.Id).Count();
                        incoming = _db.PD_Messages.Where(a => a.To == subj2.Id && a.PD_Process_Id == id && a.PD_MessageType_Id == mesName.Id).Count();
                        if (outgoing == 0 && incoming == 1)  //for the strange case the user makes 2 or more messages with the very same type from the very same subject
                        {
                            foreach (string x in mesName.Parameters.ToList())
                            {
                                subj2.GlobalParameters.Remove(x);         //with this, the function states will not load the parameters from the deleted message
                            }
                        } /*
                           * var outgoing = _db.PD_Messages.Where(a => a.From == subj.Id && a.PD_Process_Id == id && a.PD_MessageType_Id == mesName.Id).Count();
                           * var incoming = _db.PD_Messages.Where(a => a.To == subj.Id && a.PD_Process_Id == id && a.PD_MessageType_Id == mesName.Id).Count();
                           * if (outgoing == 1 && incoming == 0 || outgoing == 0 && incoming == 1) //for the strange case the user makes 2 or more messages with the very same type from the very same subject
                           * {
                           * foreach (string x in mesName.Parameters.ToList())
                           * {
                           *     subj.GlobalParameters.Remove(x);        //with this, the function states will not load the parameters from the deleted message
                           * }
                           * }*/
                    }
                    _db.SaveChanges();
                }
            }
        }
Exemplo n.º 3
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());
        }
Exemplo n.º 4
0
        public void PutMessage(PD_MessageDTO item, int id, int mid)
        {
            var _p = _db.PD_Processes.Find(id);

            if (User.Identity.Name.Equals(_p.LockedBy))
            {
                PD_Message m = _db.PD_Messages.Find(id, mid);

                if (m != null)
                {
                    m.From = item.From;
                    m.To   = item.To;
                    _db.SaveChanges();
                }
                else
                {
                    throw new HttpResponseException(HttpStatusCode.NotFound);
                }
            }
        }
Exemplo n.º 5
0
        public int copyModel(int PD_ProcessId)
        {
            var process = _pdesignerDB.PD_Processes.Find(PD_ProcessId);

            PD_Process newProcess = new PD_Process()
            {
                Name = process.Name
            };

            _pdesignerDB.PD_Processes.Add(newProcess);
            _pdesignerDB.SaveChanges();

            foreach (var p in process.Parameters)
            {
                PD_Parameter par = new PD_Parameter()
                {
                    PD_Process_Id = newProcess.Id, Name = p.Name, Config = p.Config
                };
                _pdesignerDB.PD_Parameters.Add(par);
                _pdesignerDB.SaveChanges();
            }

            foreach (var mt in process.MessageTypes)
            {
                PD_MessageType newMessageType = new PD_MessageType()
                {
                    Id = mt.Id, Name = mt.Name, Parameters = mt.Parameters, PD_Process_Id = newProcess.Id
                };
                _pdesignerDB.PD_MessageTypes.Add(newMessageType);
                _pdesignerDB.SaveChanges();
            }

            foreach (var m in process.Messages)
            {
                PD_Message newMessage = new PD_Message()
                {
                    Id = m.Id, From = m.From, To = m.To, PD_MessageType_Id = m.PD_MessageType_Id, PD_MessageType_Process_Id = newProcess.Id, PD_Process_Id = newProcess.Id
                };
                _pdesignerDB.PD_Messages.Add(newMessage);
                _pdesignerDB.SaveChanges();
            }

            foreach (var s in process.Subjects)
            {
                PD_Subject newSubject = new PD_Subject()
                {
                    Id = s.Id, CanBeStarted = s.CanBeStarted, ExternalSubject = s.ExternalSubject, GlobalParameters = s.GlobalParameters, MultiSubject = s.MultiSubject, Name = s.Name, PD_Process_Id = newProcess.Id, PositionLeft = s.PositionLeft, PositionTop = s.PositionTop
                };
                _pdesignerDB.PD_Subjects.Add(newSubject);
                _pdesignerDB.SaveChanges();

                foreach (var st in s.States)
                {
                    if (st.Type == PD_StateTypes.FunctionState)
                    {
                        var oS = (PD_FunctionState)st;
                        PD_FunctionState newS = new PD_FunctionState()
                        {
                            EditableParameters = oS.EditableParameters, EndState = oS.EndState, Id = oS.Id, Name = oS.Name, PD_Process_Id = newProcess.Id, PD_Subject_Id = newSubject.Id, PositionLeft = oS.PositionLeft, PositionTop = oS.PositionTop, ReadableParameters = oS.ReadableParameters, StartState = oS.StartState, Type = oS.Type
                        };
                        _pdesignerDB.PD_FunctionStates.Add(newS);
                        _pdesignerDB.SaveChanges();
                    }
                    if (st.Type == PD_StateTypes.SendState)
                    {
                        var          oS   = (PD_SendState)st;
                        PD_SendState newS = new PD_SendState()
                        {
                            EditableParameters = oS.EditableParameters, EndState = oS.EndState, Id = oS.Id, Name = oS.Name, PD_Process_Id = newProcess.Id, PD_Subject_Id = newSubject.Id, PositionLeft = oS.PositionLeft, PositionTop = oS.PositionTop, ReadableParameters = oS.ReadableParameters, StartState = oS.StartState, Type = oS.Type, Message = oS.Message
                        };
                        _pdesignerDB.PD_SendStates.Add(newS);
                        _pdesignerDB.SaveChanges();
                    }
                    if (st.Type == PD_StateTypes.ReceiveState)
                    {
                        var             oS   = (PD_ReceiveState)st;
                        PD_ReceiveState newS = new PD_ReceiveState()
                        {
                            EndState = oS.EndState, Id = oS.Id, Name = oS.Name, PD_Process_Id = newProcess.Id, PD_Subject_Id = newSubject.Id, PositionLeft = oS.PositionLeft, PositionTop = oS.PositionTop, StartState = oS.StartState, Type = oS.Type
                        };
                        _pdesignerDB.PD_ReceiveStates.Add(newS);
                        _pdesignerDB.SaveChanges();
                    }
                }

                foreach (var t in s.Transitions)
                {
                    if (t.Type == PD_TransitionTypes.RegularTransition)
                    {
                        var oT = (PD_RegularTransition)t;
                        PD_RegularTransition newT = new PD_RegularTransition()
                        {
                            Id = oT.Id, Name = oT.Name, PD_Process_Id = newProcess.Id, PD_Subject_Id = newSubject.Id, Source = oT.Source, Target = oT.Target, Type = oT.Type
                        };
                        _pdesignerDB.PD_RegularTransitions.Add(newT);
                        _pdesignerDB.SaveChanges();
                    }
                    if (t.Type == PD_TransitionTypes.ReceiveTransition)
                    {
                        var oT = (PD_ReceiveTransition)t;
                        PD_ReceiveTransition newT = new PD_ReceiveTransition()
                        {
                            Id = oT.Id, PD_Process_Id = newProcess.Id, PD_Subject_Id = newSubject.Id, Source = oT.Source, Target = oT.Target, Type = oT.Type, Message = oT.Message
                        };
                        _pdesignerDB.PD_ReceiveTransitions.Add(newT);
                        _pdesignerDB.SaveChanges();
                    }
                    if (t.Type == PD_TransitionTypes.TimeoutTransition)
                    {
                        var oT = (PD_TimeoutTransition)t;
                        PD_TimeoutTransition newT = new PD_TimeoutTransition()
                        {
                            Id = oT.Id, PD_Process_Id = newProcess.Id, PD_Subject_Id = newSubject.Id, Source = oT.Source, Target = oT.Target, Type = oT.Type, TimeSpan = oT.TimeSpan
                        };
                        _pdesignerDB.PD_TimeoutTransitions.Add(newT);
                    }
                }
            }

            _pdesignerDB.SaveChanges();

            return(newProcess.Id);
        }