예제 #1
0
 public void AddOrUpdate(Common.Models.Signal signal)
 {
     MOE.Common.Models.Signal g = (from r in _db.Signals
                                   where r.SignalID == signal.SignalID
                                   select r).FirstOrDefault();
     if (g == null)
     {
         _db.Signals.Add(signal);
     }
     else
     {
         Update(signal);
     }
 }
예제 #2
0
        public void Update(MOE.Common.Models.Signal incomingSignal)
        {
            MOE.Common.Models.Signal signalFromDatabase = (from r in _db.Signals
                                                           where r.SignalID == incomingSignal.SignalID
                                                           select r).FirstOrDefault();
            if (signalFromDatabase != null)
            {
                signalFromDatabase.VersionAction = (from r in _db.VersionActions
                                                    where r.ID == 3
                                                    select r).FirstOrDefault();



                if (incomingSignal.Approaches != null)
                {
                    foreach (MOE.Common.Models.Approach a in incomingSignal.Approaches)
                    {
                        var approach = signalFromDatabase.Approaches.FirstOrDefault(app => app.ApproachID == a.ApproachID);
                        if (approach != null)
                        {
                            if (!a.Equals(approach))
                            {
                                signalFromDatabase.Approaches.Remove(approach);
                                signalFromDatabase.Approaches.Add(a);
                            }
                        }
                        else
                        {
                            signalFromDatabase.Approaches.Add(a);
                        }
                        if (a.Detectors != null)
                        {
                            foreach (MOE.Common.Models.Detector newDetector in a.Detectors)
                            {
                                var detectorFromDatabase = _db.Detectors.Where(d => d.ID == newDetector.ID).FirstOrDefault();
                                if (newDetector.DetectionTypes == null)
                                {
                                    newDetector.DetectionTypes = _db.DetectionTypes.Where(x => newDetector.DetectionTypeIDs.Contains(x.DetectionTypeID)).ToList();
                                }
                                if (detectorFromDatabase != null)
                                {
                                    if (!newDetector.Equals(detectorFromDatabase))
                                    {
                                        if (detectorFromDatabase.DetectionTypes == null)
                                        {
                                            detectorFromDatabase.DetectionTypes = new List <DetectionType>();
                                        }
                                        var deletedDetectionTypes = detectorFromDatabase.DetectionTypes
                                                                    .Except(newDetector.DetectionTypes).ToList <DetectionType>();
                                        var addedDetectionTypes = newDetector.DetectionTypes
                                                                  .Except(detectorFromDatabase.DetectionTypes).ToList <DetectionType>();

                                        deletedDetectionTypes.ForEach(delDet => detectorFromDatabase.DetectionTypes.Remove(delDet));
                                        foreach (DetectionType n in addedDetectionTypes)
                                        {
                                            detectorFromDatabase.DetectionTypes.Add(n);
                                        }

                                        a.Detectors.Remove(newDetector);
                                        a.Detectors.Add(detectorFromDatabase);
                                    }
                                }
                                else
                                {
                                    if (newDetector.DetectionTypes == null)
                                    {
                                        newDetector.DetectionTypes = _db.DetectionTypes.Where(x => newDetector.DetectionTypeIDs.Contains(x.DetectionTypeID)).ToList();
                                    }
                                    if (approach != null)
                                    {
                                        approach.Detectors.Add(newDetector);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                foreach (Common.Models.Approach a in incomingSignal.Approaches)
                {
                    foreach (Common.Models.Detector gd in a.Detectors)
                    {
                        gd.DetectionTypes = _db.DetectionTypes.Where(x => gd.DetectionTypeIDs.Contains(x.DetectionTypeID)).ToList();
                    }
                }
                _db.Signals.Add(incomingSignal);
            }
        }