private TOut ProcessBuild <TOut>() where TOut : ITabsViewModel, new()
        {
            var viewModel = new TOut();

            viewModel.TabId  = tabId;
            viewModel.TabKey = tabKey;


            viewModel = LoadPage(viewModel);
            viewModel = LoadInTabFilters(viewModel);

            viewModel = LoadJewelryCollection(viewModel);

            //defaults

            viewModel.Page         = page;
            viewModel.ItemsPerPage = itemsPerPage;

            viewModel.MetalFilter  = JewelMediaTypeFilter.Value;
            viewModel.OrderByPrice = OrderByPriceFilter.Value;

            viewModel.MetalFilterItems  = MetalFilter.GetKeyValue();
            viewModel.OrderByPriceItems = OrderByPriceFilter.GetKeyValue();



            return(viewModel);
        }
        public TabsViewModelBuilder(string tabKey, string tabId, XDocument tabsource, ITabsRepository tabsRepository, IJewelRepository jewelRepository, IFileSystem fileSystem)
        {
            this.tabKey = tabKey;
            this.tabId  = tabId;

            this.tabsRepository  = tabsRepository;
            this.jewelRepository = jewelRepository;
            this.fileSystem      = fileSystem;
            this.tabsource       = tabsource;

            //defaults
            itemsPerPage         = 21;
            page                 = 1;
            JewelMediaTypeFilter = new MetalFilter(JewelMediaType.WhiteGold);
            OrderByPriceFilter   = new OrderByPriceFilter(OrderByPrice.LowToHigh);
        }
        public TabsViewModelBuilder(ITabsViewModel model, XDocument tabsource, ITabsRepository tabsRepository, IJewelRepository jewelRepository, IFileSystem fileSystem)
        {
            tabKey = model.TabKey;
            tabId  = model.TabId;

            this.tabsRepository  = tabsRepository;
            this.jewelRepository = jewelRepository;
            this.fileSystem      = fileSystem;
            this.tabsource       = tabsource;

            //extract from model
            itemsPerPage = model.ItemsPerPage;
            page         = model.Page;

            JewelMediaTypeFilter = new MetalFilter(model.MetalFilter);
            OrderByPriceFilter   = new OrderByPriceFilter(model.OrderByPrice);

            if (model.CustomFilters != null)
            {
                CustomFiltersStateList = model.CustomFilters;
            }
        }