private ModelPageCollectorSet[] getModelPages(ModelCollectorSet modelSet, ITitleLinkPair model)
        {
            ModelPageDocumentRequestor mpDR     = new ModelPageDocumentRequestor(new WebRequestor(), $"{baseUrl}{model.Link}");
            ModelPageParser            mpParser = new ModelPageParser(mpDR);

            string[] modelPages = mpParser.Parse();

            List <ModelPageCollectorSet> modelPageSets = new List <ModelPageCollectorSet>();

            foreach (var modelPage in modelPages)
            {
                ModelPageCollectorSet modelPageSet = new ModelPageCollectorSet();

                ModelDetailDocumentRequestor mdDR     = new ModelDetailDocumentRequestor(new WebRequestor(), $"{baseUrl}{modelPage}");
                ModelDetailParser            mdParser = new ModelDetailParser(mdDR);
                ModelPageModel modelPageModel         = mdParser.Parse();
                modelPageSet.Data = mdDR;

                modelPageSet.Parent  = modelSet;
                modelPageSet.Subsets = getModelDetails(modelPageSet, modelPageModel);
                modelPageSets.Add(modelPageSet);
            }

            return(modelPageSets.ToArray());
        }
        private ModelPageDetailCollectorSet[] getModelDetails(ModelPageCollectorSet modelPageSet, ModelPageModel modelPageModel)
        {
            ModelPageDetailCollectorSet modelPageDetailSet = new ModelPageDetailCollectorSet();

            modelPageDetailSet.Parent = modelPageSet;
            modelPageDetailSet.Data   = getRowModel(modelPageModel, modelPageSet);

            return(new[] { modelPageDetailSet });
        }
        private void addFilters(ModelPageCollectorSet modelPageSet, RowModel rm)
        {
            ModelDetailDocumentRequestor mdDR = (ModelDetailDocumentRequestor)modelPageSet.Data;
            FilterNodeModel fnModelAir        = addFilterInfo(mdDR, FilterTypes.Air);

            if (!String.IsNullOrEmpty(fnModelAir.Filters))
            {
                rm.AirFilters          = fnModelAir.Filters;
                rm.AirFilterDimensions = addFilterDimensions(fnModelAir.FilterUrls, FilterTypes.Air);
            }

            FilterNodeModel fnModelOil = addFilterInfo(mdDR, FilterTypes.Oil);

            if (!String.IsNullOrEmpty(fnModelOil.Filters))
            {
                rm.OilFilters          = fnModelOil.Filters;
                rm.OilFilterDimensions = addFilterDimensions(fnModelOil.FilterUrls, FilterTypes.Oil);
            }

            FilterNodeModel fnModelFuel = addFilterInfo(mdDR, FilterTypes.Fuel);

            if (!String.IsNullOrEmpty(fnModelFuel.Filters))
            {
                rm.FuelFilters          = fnModelFuel.Filters;
                rm.FuelFilterDimensions = addFilterDimensions(fnModelFuel.FilterUrls, FilterTypes.Fuel);
            }

            FilterNodeModel fnModelInterior = addFilterInfo(mdDR, FilterTypes.Interior);

            if (!String.IsNullOrEmpty(fnModelInterior.Filters))
            {
                rm.InteriorFilters          = fnModelInterior.Filters;
                rm.InteriorFilterDimensions = addFilterDimensions(fnModelInterior.FilterUrls, FilterTypes.Interior);
            }

            FilterNodeModel fnModelOther = addFilterInfo(mdDR, FilterTypes.Other);

            if (!String.IsNullOrEmpty(fnModelOther.Filters))
            {
                rm.OtherFilters          = fnModelOther.Filters;
                rm.OtherFilterDimensions = addFilterDimensions(fnModelOther.FilterUrls, FilterTypes.Other);
            }
        }
        private RowModel getRowModel(ModelPageModel modelPageModel, ModelPageCollectorSet modelPageSet)
        {
            ModelCollectorSet       modelSet    = (ModelCollectorSet)modelPageSet.Parent;
            ProducerCollectorSet    producerSet = (ProducerCollectorSet)modelSet.Parent;
            VehicleTypeCollectorSet vehicleType = (VehicleTypeCollectorSet)producerSet.Parent;

            RowModel rm = new RowModel();

            rm.VehicleType = vehicleType.Data;
            rm.Producer    = producerSet.Data;
            rm.Model       = modelSet.Data;
            rm.ModelType   = modelPageModel.ModelType;
            rm.MotorCode   = modelPageModel.MotorCode;
            rm.kW          = modelPageModel.kW;
            rm.PS          = modelPageModel.PS;
            rm.Year        = modelPageModel.Year;

            addFilters(modelPageSet, rm);

            return(rm);
        }