private void GetOccupiedChannels(RegionSearchParams searchParams, RegionWhitespaceDetails whitespaceDetails, string countryRegion)
        {
            IEnumerable <INCU> incumbents = this.GetReseveredChannelsFromIncumbentRequest(searchParams.IncumbentType, searchParams.Latitude, searchParams.Longitude, countryRegion, null);

            if (incumbents != null)
            {
                List <INCU> reservedIncumbents = incumbents.ToList();
                whitespaceDetails.OccupiedChannes = this.FilterIncumbentsByRegion(searchParams.Latitude, searchParams.Longitude, reservedIncumbents).OrderBy(inc => inc.Channel).ToList();
            }
        }
        public ViewResult GetWhitespacesFinderView(string regulatoryName)
        {
            Region currentRegion = this.regionSource.GetAvailableRegions()
                                   .Where(region => string.Compare(regulatoryName, region.Regulatory.Name, StringComparison.OrdinalIgnoreCase) == 0)
                                   .FirstOrDefault();

            this.ViewData["availableRegions"] = new List <RegionInfo> {
                currentRegion.RegionInformation
            };

            RegionWhitespaceDetails whitespaceDetails = this.GetRegionWhitespaceDetails(currentRegion.Regulatory.RegionCode, null);

            return(this.View("RegionSpecificFinder", whitespaceDetails));
        }
        private void GetAvailableChannelsLookup(RegionSearchParams searchParams, RegionWhitespaceDetails whitespaceDetails, Region region)
        {
            Dictionary <string, ChannelInfo[]> availableChannelsLookup = new Dictionary <string, ChannelInfo[]>();

            ChannelInfo[] channels = null;

            string[] deviceTypes = region.Regulatory.SupportedDeviceTypes.Select(device => device.Type).ToArray();

            whitespaceDetails.AnalysisResult = this.GetWhitespaceAnalysisResult(deviceTypes, searchParams.Latitude, searchParams.Longitude, region, availableChannelsLookup);

            if (availableChannelsLookup.Any())
            {
                channels = availableChannelsLookup[searchParams.IncumbentType];
            }

            whitespaceDetails.Channels = this.GetChannelAvailabilityInfo(channels, region.Regulatory.WSChannelsInfo.StartChannel, region.Regulatory.WSChannelsInfo.EndChannel, region.Regulatory.WSChannelsInfo.PowerDBmTransitionPoint).ToList();

            whitespaceDetails.AvailableChannelsLookup = availableChannelsLookup;
        }
        public PartialViewResult FindNearByIncumbents(RegionSearchParams model)
        {
            RegionWhitespaceDetails whitespaceDetails = this.GetRegionWhitespaceDetails(model, this.ModelState.IsValid);

            return(this.PartialView("WhitespaceDetailsPartial", whitespaceDetails));
        }
        public PartialViewResult GetCountryRegionSpecificControls(RegionSearchParams model)
        {
            RegionWhitespaceDetails whitespaceDetails = this.GetRegionWhitespaceDetails(model.RegionCode, model.AntennaHeight);

            return(this.PartialView("WhitespaceDetailsPartial", whitespaceDetails));
        }
        private RegionWhitespaceDetails GetRegionWhitespaceDetails(RegionSearchParams searchParams, bool getChannelInfoList)
        {
            Region region = this.regionSource.GetAvailableRegions().FirstOrDefault(rgn => string.Compare(rgn.Regulatory.RegionCode, searchParams.RegionCode, StringComparison.OrdinalIgnoreCase) == 0);

            RegionWhitespaceDetails whitespaceDetails = new RegionWhitespaceDetails
            {
                AntennaHeight        = searchParams.AntennaHeight,
                Location             = searchParams.Location,
                EnableProtectedAreas = region != null ? region.Regulatory.AllowAccessToProtedtedArea : false
            };

            if (region != null)
            {
                whitespaceDetails.StartChannelNo = region.Regulatory.WSChannelsInfo.StartChannel;
                whitespaceDetails.EndChannelNo   = region.Regulatory.WSChannelsInfo.EndChannel;

                if (region.Regulatory.SupportedDeviceTypes != null)
                {
                    whitespaceDetails.DeviceTypes             = region.Regulatory.SupportedDeviceTypes.ToList();
                    whitespaceDetails.SelectedIncumbentType   = string.IsNullOrEmpty(searchParams.IncumbentType) ? whitespaceDetails.DeviceTypes.FirstOrDefault().Type : searchParams.IncumbentType;
                    whitespaceDetails.PowerDBmTransitionPoint = region.Regulatory.WSChannelsInfo.PowerDBmTransitionPoint;
                }
            }

            if (getChannelInfoList)
            {
                string[] deviceTypes = region.Regulatory.SupportedDeviceTypes.Select(device => device.Type).ToArray();

                Task getAnalysisResult = new Task(() =>
                {
                    this.GetAvailableChannelsLookup(searchParams, whitespaceDetails, region);
                });

                getAnalysisResult.Start();

                try
                {
                    if (region.Regulatory.AllowAccessToProtedtedArea)
                    {
                        Task getIncumbents = new Task(() =>
                        {
                            this.GetOccupiedChannels(searchParams, whitespaceDetails, region.RegionInformation.Name);
                        });

                        getIncumbents.Start();
                        Task.WaitAll(getAnalysisResult, getIncumbents);
                    }
                    else
                    {
                        Task.WaitAll(getAnalysisResult);
                    }
                }
                catch (AggregateException ex)
                {
                    // TODO: Is it required to initialize following view model lists to empty list or leave them as null ?
                    // Swallow the exception, initialize lists to empty list and return results.
                    whitespaceDetails.AnalysisResult  = new WhitespaceAnalysisResult(new List <WhitespaceSummary>());
                    whitespaceDetails.Channels        = new List <ChannelInformation>();
                    whitespaceDetails.OccupiedChannes = new List <INCU>();

                    System.Diagnostics.Trace.Write(ex.ToString());

                    this.WhitespaceFinderAuditor.RegionCode    = Convert.ToInt16(region.RegionInformation.Id);
                    this.WhitespaceFinderAuditor.TransactionId = this.WhitespaceFinderLogger.TransactionId;
                    this.WhitespaceFinderAuditor.Audit(AuditId.WhitespaceFinder, AuditStatus.Failure, default(int), ex.ToString());
                }
            }

            whitespaceDetails.RegionChannelsDetail = this.GetRegionChannelsDetail(whitespaceDetails.Channels, searchParams.Latitude, searchParams.Longitude, searchParams.CountryRegion);

            return(whitespaceDetails);
        }