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); }
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); }