public void RecalculateRootModel(
            RootModel root,
            ISqlConnectionFactory connectionFactory,
            IDataManagerFactory dataManagerFactory,
            CalculationTicket ticket
            )
        {
            // everything is recalculated automatically but overlays in case they were changed
#warning it's a big question whether overlays need to be recalculated every time
#warning we need to see if somebody has changed PST composition since we opened for editing but haven't yet saved

            SecurityRepository  securityRepository;
            PortfolioRepository portfolioRepository;
            ManagingPst.PortfolioSecurityTargetRepository portfolioSecurityTargetRepository;
            using (var ondemandManager = new OnDemandDataManager(connectionFactory, dataManagerFactory))
            {
                securityRepository  = this.repositoryManager.ClaimSecurityRepository(ondemandManager);
                portfolioRepository = this.repositoryManager.ClaimPortfolioRepository(ondemandManager);
                portfolioSecurityTargetRepository = this.repositoryManager.ClaimPortfolioSecurityTargetRepository(
                    root.LatestPstChangeset,
                    ondemandManager.Claim()
                    );


                // in order to proceed we need to make sure all missing countries are there
                IEnumerable <BenchmarkSumByIsoInfo> benchmarks = new BenchmarkSumByIsoInfo[] { };
                var computations            = this.modelBuilder.CreateComputations(root.Globe, this.Traverser);
                var countryRepository       = this.repositoryManager.ClaimCountryRepository(ondemandManager);
                var targetingTypeRepository = this.repositoryManager.ClaimTargetingTypeRepository(ondemandManager);
                var targetingType           = targetingTypeRepository.GetTargetingType(root.TargetingType.Id);
                this.RegisterMissingCountriesIfAny(
                    root,
                    computations,
                    countryRepository,
                    targetingType,
                    securityRepository,
                    portfolioRepository,
                    portfolioSecurityTargetRepository,
                    benchmarks
                    );
            }


            this.InitializeOverlay(
                root,
                securityRepository,
                portfolioRepository,
                portfolioSecurityTargetRepository
                );

            // required to inject problems to base values
            // we are not interested in the result of validation
            this.modelApplier.ValidateModel(root, ticket);
        }
Exemple #2
0
        protected IOnDemand <TDataManager> CreateOnDemandDataManager()
        {
            var result = new OnDemandDataManager <TDataManager>(this.connectionFactory, this.dataManagerFactory);

            return(result);
        }