示例#1
0
        public IEnumerable <IContainer> SubContainersFor(Species species, ModelConfiguration modelConfiguration, IContainer parentContainer)
        {
            IList <IContainer> allSubContainers = new List <IContainer>();

            string pathToParentContainer = _entityPathResolver.PathFor(parentContainer);

            var flatParentContainer    = _flatContainerRepo.ContainerFrom(pathToParentContainer);
            var flatModelSubContainers = _modelContainerRepo.AllSubContainerFor(modelConfiguration.ModelName, flatParentContainer.Id);
            var allSpeciesSubContainer = speciesSubContainers(species.Name, flatParentContainer.Id);

            foreach (var flatModelContainer in flatModelSubContainers)
            {
                // check if container available in species
                if (allSpeciesSubContainer.Contains(flatModelContainer.Id))
                {
                    //model subcontainer available in the species structure - add to model subcontainers and continue
                    allSubContainers.Add(_flatContainerIdToContainerMapper.MapFrom(flatModelContainer));
                    continue;
                }

                // model subcontainer NOT available in species structure.
                // In this case, action depends on UsageInIndividuum-flag

                if (flatModelContainer.UsageInIndividual == CoreConstants.ORM.UsageInIndividualRequired)
                {
                    throw new ArgumentException(PKSimConstants.Error.ModelContainerNotAvailable(_flatContainerRepo.ContainerPathFrom(flatModelContainer.Id).ToString()));
                }

                if (flatModelContainer.UsageInIndividual == CoreConstants.ORM.UsageInIndividualOptional)
                {
                    continue;
                }

                if (flatModelContainer.UsageInIndividual == CoreConstants.ORM.UsageInIndividualExtended)
                {
                    allSubContainers.Add(_flatContainerIdToContainerMapper.MapFrom(flatModelContainer));
                    continue;
                }

                throw new ArgumentException(PKSimConstants.Error.UnknownUsageInIndividualFlag(flatModelContainer.UsageInIndividual));
            }

            return(allSubContainers);
        }
        public IReadOnlyList <IContainer> SubContainersFor(SpeciesPopulation population, ModelConfiguration modelConfiguration, IContainer parentContainer)
        {
            var allSubContainers = new List <IContainer>();

            string pathToParentContainer = _entityPathResolver.PathFor(parentContainer);

            var flatParentContainer    = _flatContainerRepo.ContainerFrom(pathToParentContainer);
            var flatModelSubContainers = _modelContainerRepo.AllSubContainerFor(modelConfiguration.ModelName, flatParentContainer.Id);
            var allSpeciesSubContainer = populationSubContainers(population, flatParentContainer);

            foreach (var flatModelContainer in flatModelSubContainers)
            {
                // check if container available in species
                if (allSpeciesSubContainer.Contains(flatModelContainer.Id))
                {
                    //model subcontainer available in the species structure - add to model subcontainers and continue
                    allSubContainers.Add(_flatContainerIdToContainerMapper.MapFrom(flatModelContainer));
                    continue;
                }

                // model subcontainer NOT available in species structure.
                // In this case, action depends on UsageInIndividuum-flag

                if (flatModelContainer.UsageInIndividual == CoreConstants.ORM.USAGE_IN_INDIVIDUAL_REQUIRED)
                {
                    throw new ArgumentException(PKSimConstants.Error.ModelContainerNotAvailable(_flatContainerRepo.ContainerPathFrom(flatModelContainer.Id).ToString()));
                }

                if (flatModelContainer.UsageInIndividual == CoreConstants.ORM.USAGE_IN_INDIVIDUAL_OPTIONAL)
                {
                    continue;
                }

                if (flatModelContainer.UsageInIndividual == CoreConstants.ORM.USAGE_IN_INDIVIDUAL_EXTENDED)
                {
                    allSubContainers.Add(_flatContainerIdToContainerMapper.MapFrom(flatModelContainer));
                    continue;
                }

                throw new ArgumentException(PKSimConstants.Error.UnknownUsageInIndividualFlag(flatModelContainer.UsageInIndividual));
            }

            return(allSubContainers);
        }
示例#3
0
        protected override void Context()
        {
            _entityPathResolver = new EntityPathResolver(new ObjectPathFactoryForSpecs());
            _flatContainerIdToContainerMapper = A.Fake <IFlatContainerIdToContainerMapper>();
            _modelContainerRepo = A.Fake <IFlatModelContainerRepository>();
            _compartment        = A.Fake <IContainer>();
            _populationName     = "HUMAN_POP";

            A.CallTo(() => _modelContainerRepo.All()).Returns(
                new List <FlatModelContainer>
            {
                NewFMC(1, "C1", "ORGAN", "M1"),
                NewFMC(2, "C2", "COMPARTMENT", "M1"),
                NewFMC(3, Constants.ROOT, "SIMULATION", "M1")
            });

            _populationContainerRepo = A.Fake <IFlatPopulationContainerRepository>();
            A.CallTo(() => _populationContainerRepo.AllSubContainerFor(_populationName, 3)).Returns(
                new List <FlatPopulationContainer>
            {
                CreateFlatPopulationContainer(1, "C1", "ORGAN", _populationName),
            });

            A.CallTo(() => _populationContainerRepo.AllSubContainerFor(_populationName, 1)).Returns(
                new List <FlatPopulationContainer>
            {
                CreateFlatPopulationContainer(2, "C2", "COMPARTMENT", _populationName)
            });


            _flatContainerRepo = A.Fake <IFlatContainerRepository>();
            var simulationFlatContainer  = NewFC(3, Constants.ROOT, "SIMULATION", null, "", "");
            var organFlatContainer       = NewFC(1, "C1", "ORGAN", 3, "SIMULATION", Constants.ROOT);
            var compartmentFlatContainer = NewFC(2, "C2", "COMPARTMENT", 1, "C1", "ORGAN");

            A.CallTo(() => _flatContainerRepo.All()).Returns(
                new List <FlatContainer>
            {
                organFlatContainer,
                compartmentFlatContainer,
                simulationFlatContainer
            });

            A.CallTo(() => _flatContainerRepo.ParentContainerFrom(organFlatContainer.Id)).Returns(simulationFlatContainer);
            A.CallTo(() => _flatContainerRepo.ParentContainerFrom(compartmentFlatContainer.Id)).Returns(organFlatContainer);
            A.CallTo(() => _flatContainerRepo.ParentContainerFrom(simulationFlatContainer.Id)).Returns(null);

            A.CallTo(() => _flatContainerRepo.ContainerFrom(organFlatContainer.Id)).Returns(organFlatContainer);
            A.CallTo(() => _flatContainerRepo.ContainerFrom(compartmentFlatContainer.Id)).Returns(compartmentFlatContainer);
            A.CallTo(() => _flatContainerRepo.ContainerFrom(simulationFlatContainer.Id)).Returns(simulationFlatContainer);

            _flatModelCompartment = new FlatModelContainer {
                Id = compartmentFlatContainer.Id
            };
            A.CallTo(() => _flatContainerRepo.ContainerFrom("ROOT")).Returns(organFlatContainer);
            A.CallTo(() => _flatContainerRepo.ContainerFrom("C1")).Returns(organFlatContainer);

            A.CallTo(() => _modelContainerRepo.AllSubContainerFor("M1", 1)).Returns(new[] { _flatModelCompartment });
            A.CallTo(() => _flatContainerIdToContainerMapper.MapFrom(_flatModelCompartment)).Returns(_compartment);
            sut = new ModelContainerQuery(_modelContainerRepo, _populationContainerRepo,
                                          _flatContainerRepo, _flatContainerIdToContainerMapper, _entityPathResolver);
        }