protected override void Context() { base.Context(); _observerCriteria = Create.Criteria(x => x.With("Organism")); _obs1 = A.Fake <IContainerObserverBuilder>(); _obs1.MoleculeList.ForAll = true; _obs1.ContainerCriteria = _observerCriteria; _obs2 = A.Fake <IContainerObserverBuilder>(); _obs2.MoleculeList.ForAll = false; A.CallTo(() => _obs2.MoleculeList.MoleculeNames).Returns(new List <string> { _molecule2 }); _obs2.ContainerCriteria = _observerCriteria; _molecule2Amount = new MoleculeAmount().WithName(_molecule2); _molecule1Amount = new MoleculeAmount().WithName(_molecule1); _organism.Add(_molecule2Amount); _organism.Add(_molecule1Amount); _observerBuildingBlock.Add(_obs1); _observerBuildingBlock.Add(_obs2); A.CallTo(() => _observerMapper.MapFrom(_obs1, _buildConfiguration)).Returns(A.Fake <IObserver>().WithName("obs1")); A.CallTo(() => _observerMapper.MapFrom(_obs2, _buildConfiguration)).Returns(A.Fake <IObserver>().WithName("obs2")); A.CallTo(() => _containerTask.CreateOrRetrieveSubContainerByName(_organism, _molecule1)).Returns(_molecule1Amount); A.CallTo(() => _containerTask.CreateOrRetrieveSubContainerByName(_organism, _molecule2)).Returns(_molecule2Amount); }
/// <summary> /// Creates (molecule-specific) observers, stored under /// molecule container of the corresponding molecule in the spatial structure /// of the model. /// Typical example is average drug concentration in an organ /// </summary> private void createContainerObserver(IContainerObserverBuilder observerBuilder, IModel model, IEnumerable <IMoleculeBuilder> presentMolecules) { var moleculeBuildersForObserver = moleculeBuildersValidFor(observerBuilder.MoleculeList, presentMolecules).ToList(); //retrieve a list here to avoid endless loop if observers criteria is not well defined foreach (var container in _allContainers.Where(observerBuilder.ContainerCriteria.IsSatisfiedBy).ToList()) { foreach (var moleculeBuilder in moleculeBuildersForObserver) { //get the molecule container defined for the molecule name var moleculeContainer = container.GetSingleChildByName <IContainer>(moleculeBuilder.Name); if (moleculeContainer == null) { //should only happen for a logical container. moleculeContainer = _containerTask.CreateOrRetrieveSubContainerByName(container, moleculeBuilder.Name).WithContainerType(ContainerType.Molecule); _buildConfiguration.AddBuilderReference(moleculeContainer, observerBuilder); } var observer = addObserverInContainer(observerBuilder, moleculeContainer, moleculeBuilder.QuantityType); _keywordReplacerTask.ReplaceIn(observer, model.Root, moleculeBuilder.Name); } } }