private void RemoveApproachesByFilter(FilterSignal filterSignal, Models.Signal signal)
        {
            RemoveApproachesFromSignalByDirection(signal);
            RemoveDetectorsFromSignalByMovement(signal);
            var approachRepository  = ApproachRepositoryFactory.Create();
            var excludedApproachIds =
                filterSignal.FilterApproaches.Where(f => f.Exclude).Select(f => f.ApproachId).ToList();
            var excludedApproaches = approachRepository.GetApproachesByIds(excludedApproachIds);

            foreach (var excludedApproach in excludedApproaches)
            {
                var approachesToExclude = signal.Approaches.Where(a =>
                                                                  a.DirectionTypeID == excludedApproach.DirectionTypeID &&
                                                                  a.ProtectedPhaseNumber == excludedApproach.ProtectedPhaseNumber &&
                                                                  a.PermissivePhaseNumber == excludedApproach.PermissivePhaseNumber &&
                                                                  a.IsPermissivePhaseOverlap ==
                                                                  excludedApproach.IsPermissivePhaseOverlap &&
                                                                  a.IsProtectedPhaseOverlap ==
                                                                  excludedApproach.IsProtectedPhaseOverlap)
                                          .ToList();
                foreach (var approachToExclude in approachesToExclude)
                {
                    signal.Approaches.Remove(approachToExclude);
                }
                foreach (var approach in signal.Approaches)
                {
                    foreach (var filterApproach in filterSignal.FilterApproaches.Where(f => !f.Exclude))
                    {
                        RemoveDetectorsFromApproachByFilter(filterApproach, approach);
                    }
                }
            }
        }
        private static FilterSignal GetFilterSignal(MOE.Common.Models.Signal signal)
        {
            var filterSignal = new FilterSignal
            {
                Exclude     = false,
                SignalId    = signal.SignalID,
                VersionId   = signal.VersionID,
                Description = signal.SignalDescription
            };

            foreach (var approach in signal.Approaches)
            {
                var filterApproach = new FilterApproach
                {
                    ApproachId  = approach.ApproachID,
                    Exclude     = false,
                    Description = approach.Description
                };
                foreach (var detector in approach.Detectors)
                {
                    var filterDetector = new FilterDetector
                    {
                        Id          = detector.ID,
                        Exclude     = false,
                        Description = detector.Description
                    };
                    filterApproach.FilterDetectors.Add(filterDetector);
                }
                filterSignal.FilterApproaches.Add(filterApproach);
            }

            return(filterSignal);
        }
        protected void SetFilterSignal(SignalAggregationMetricOptions options)
        {
            List <FilterSignal> filterSignals = new List <FilterSignal>();
            var signals = Db.Signals.Take(2);

            foreach (var signal in signals)
            {
                var filterSignal = new FilterSignal {
                    SignalId = signal.SignalID, Exclude = false
                };
                foreach (var approach in signal.Approaches)
                {
                    var filterApproach = new FilterApproach
                    {
                        ApproachId  = approach.ApproachID,
                        Description = String.Empty,
                        Exclude     = false
                    };
                    filterSignal.FilterApproaches.Add(filterApproach);
                    foreach (var detector in approach.Detectors)
                    {
                        filterApproach.FilterDetectors.Add(new FilterDetector
                        {
                            Id          = detector.ID,
                            Description = String.Empty,
                            Exclude     = false
                        });
                    }
                }
                filterSignals.Add(filterSignal);
            }
            options.FilterSignals    = filterSignals;
            options.FilterDirections = new List <FilterDirection>();
            options.FilterDirections.Add(new FilterDirection {
                Description = "", DirectionTypeId = 0, Include = true
            });
            options.FilterDirections.Add(new FilterDirection {
                Description = "", DirectionTypeId = 1, Include = true
            });
            options.FilterDirections.Add(new FilterDirection {
                Description = "", DirectionTypeId = 2, Include = true
            });
            options.FilterDirections.Add(new FilterDirection {
                Description = "", DirectionTypeId = 3, Include = true
            });
            options.FilterMovements = new List <FilterMovement>();
            options.FilterMovements.Add(new FilterMovement {
                Description = "", MovementTypeId = 0, Include = true
            });
            options.FilterMovements.Add(new FilterMovement {
                Description = "", MovementTypeId = 1, Include = true
            });
            options.FilterMovements.Add(new FilterMovement {
                Description = "", MovementTypeId = 2, Include = true
            });
            options.FilterMovements.Add(new FilterMovement {
                Description = "", MovementTypeId = 3, Include = true
            });
        }