Пример #1
0
        private void updateGlobalparameters(PD_Message message)
        {
            //check parameters in from and to 
            //START
            List<string> messagetypeparameters = message.PD_MessageType.Parameters.ToList();

            var from = _db.PD_Subjects.Find(message.PD_Process_Id, message.From);

            List<string> frompara = from.GlobalParameters.ToList();
            List<string> toAdd = messagetypeparameters.Except(frompara).ToList();
            toAdd.ForEach(item => from.GlobalParameters.Add(item));

            var to = _db.PD_Subjects.Find(message.PD_Process_Id, message.To);
            List<string> topara = to.GlobalParameters.ToList();
            List<string> toAddTo = messagetypeparameters.Except(topara).ToList();
            toAddTo.ForEach(item => to.GlobalParameters.Add(item));
            //END
            _db.SaveChanges();
        }
Пример #2
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;
        }
 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;
      }
 }