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); } }
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(); } } }
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()); }
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); } } }
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); }