public ActionResult _EditLoadImportedSubject(int processidNew, int subjId, int processidOld, int edit) { var _p = _db.PD_Processes.Find(processidOld); PD_Subject subject = _db.PD_Subjects.Find(processidNew, subjId); Random rand = new Random(); PD_Subject newSubject = new PD_Subject() { Name = subject.Name, PositionTop = rand.Next(0, 800), PositionLeft = rand.Next(0, 555), ExternalSubject = false, CanvasWidth = subject.CanvasWidth, CanvasHeight = subject.CanvasHeight }; newSubject.Id = IdHelper.getSubjectId(_db, processidOld); _p.Subjects.Add(newSubject); _db.SaveChanges(); //messages var messages = _db.PD_Messages.Where(result => result.PD_Process_Id == processidNew && result.From == subject.Id || result.PD_Process_Id == processidNew && result.To == subject.Id).ToList(); List<int> messageIds = new List<int>(); foreach (var x in messages) { messageIds.Add((int)x.PD_MessageType_Id); } messageIds = messageIds.Distinct().ToList(); foreach (var y in messageIds) { var newMes = new PD_MessageType() { PD_Process_Id = processidOld }; newMes.Id = IdHelper.getMessageTypeId(_db, processidOld); newMes.Name = _db.PD_MessageTypes.Find(processidNew, y).Name; newMes.Parameters = _db.PD_MessageTypes.Find(processidNew, y).Parameters; var Names= _db.PD_MessageTypes.Where(result => result.PD_Process_Id == processidOld && result.Name == newMes.Name); if (Names.Count() == 0) { _db.PD_MessageTypes.Add(newMes); foreach (var z in _db.PD_MessageTypes.Find(processidNew, y).Parameters) //parameters { var param = _db.PD_Parameters.Find(processidNew, z); var checkParamName = _db.PD_Parameters.Find(processidOld, param.Name); //var paramNames = _db.PD_Parameters.Where(result => result.PD_Process_Id == processidNew && result.Name == param.Name); if (checkParamName == null) { PD_Parameter paramNew = new PD_Parameter() { PD_Process_Id = processidOld }; paramNew.Name = param.Name; paramNew.Config = param.Config; _db.PD_Parameters.Add(paramNew); } } } _db.SaveChanges(); } //state && transitions var states = _db.PD_States.Where(result => result.PD_Process_Id == processidNew && result.PD_Subject_Id == subject.Id).ToList(); var i = 1; foreach (var x in states) { PD_State newState = null; if (x.Type == PD_StateTypes.FunctionState) { newState = new PD_FunctionState() { Name = "Function State", EndState = false }; } if (x.Type == PD_StateTypes.SendState) { newState = new PD_SendState() { Name = "Send State", EndState = false }; //((PD_SendState)newState).ReadableParameters = ((PD_SendState)x).ReadableParameters; //((PD_SendState)newState).EditableParameters = ((PD_SendState)x).EditableParameters; } if (x.Type == PD_StateTypes.ReceiveState) { newState = new PD_ReceiveState() { Name = "Receive State", EndState = false }; } //newState.PD_Subject = x.PD_Subject; //newState.PD_Subject_Id = newSubject.Id; //newState.Id = IdHelper.getStateId(_db, processidOld, subjId); //newState.Id = IdHelper.getStateId(_db, _p.Id, newSubject.Id); //newState.PD_Process_Id = processidOld; //newState.Id = i; newState.Id = x.Id; i++; newState.Name = x.Name; newState.PositionLeft = x.PositionLeft; newState.PositionTop = x.PositionTop; newState.StartState = x.StartState; newState.EndState = x.EndState; newSubject.States.Add(newState); } _db.SaveChanges(); i = 1; var transitions = _db.PD_Transitions.Where(result => result.PD_Process_Id == processidNew && result.PD_Subject_Id == subject.Id).ToList(); foreach (var x in transitions) { PD_Transition newTransition = null; var temp = new PD_TransitionDTO() { Id = x.Id, Source = x.Source, Target = x.Target, Type = x.Type, LabelPosition = x.LabelPosition }; if (x.Type == PD_TransitionTypes.RegularTransition) { temp.Label = ((PD_RegularTransition)x).Name; newTransition = new PD_RegularTransition() { Name = temp.Label }; } if (x.Type == PD_TransitionTypes.ReceiveTransition) { newTransition = new PD_ReceiveTransition() { Message = -1 }; } if (x.Type == PD_TransitionTypes.TimeoutTransition) { temp.Label = ((PD_TimeoutTransition)x).TimeSpan; newTransition = new PD_TimeoutTransition() { TimeSpan = temp.Label }; } //newTransition.Id = IdHelper.getTransitionId(_db, processidOld, subjId); //newTransition.Id = i; newTransition.Id = x.Id; i++; newTransition.PD_Process_Id = processidOld; newTransition.Source = x.Source; newTransition.Target = x.Target; newTransition.LabelPosition = x.LabelPosition; newSubject.Transitions.Add(newTransition); } _db.SaveChanges(); string a = "location.reload();"; string b = "imprt('" + subject.Name + "','" + newSubject.Id + "','" + newSubject.PositionLeft + "','" + newSubject.PositionTop + "','" + processidOld + "')"; return JavaScript(b); //return null; }
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; } }
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); } } }
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(); }