private IContainer addContainerUnder(IContainer parentContainer, IContainer templateContainer, string newContainerName, IBuildConfiguration buildConfiguration)
        {
            var instanceContainer = _containerTask.CreateOrRetrieveSubContainerByName(parentContainer, newContainerName);

            buildConfiguration.AddBuilderReference(instanceContainer, templateContainer);
            instanceContainer.Icon        = templateContainer.Icon;
            instanceContainer.Description = templateContainer.Description;
            return(instanceContainer);
        }
        protected override void Context()
        {
            _reactionMapper      = A.Fake <IReactionBuilderToReactionMapper>();
            _keywordReplacerTask = A.Fake <IKeywordReplacerTask>();
            _containerTask       = A.Fake <IContainerTask>();
            _parameterMapper     = A.Fake <IParameterBuilderCollectionToParameterCollectionMapper>();

            sut = new ReactionCreator(_reactionMapper, _keywordReplacerTask, _containerTask, _parameterMapper);

            _model           = A.Fake <IModel>();
            _reactionBuilder = A.Fake <IReactionBuilder>();
            _reactionBuilder.ContainerCriteria = new DescriptorCriteria();
            _reactionBuilder.Description       = "A great description";
            _reactionBuilder.Name = "Reaction";
            _educt1 = A.Fake <IReactionPartnerBuilder>();
            _educt1.MoleculeName = "sp1";
            _educt2 = A.Fake <IReactionPartnerBuilder>();
            _educt2.MoleculeName   = "sp2";
            _product1              = A.Fake <IReactionPartnerBuilder>();
            _product1.MoleculeName = "sp3";
            A.CallTo(() => _reactionBuilder.Educts).Returns(new[] { _educt1, _educt2 });
            A.CallTo(() => _reactionBuilder.Products).Returns(new[] { _product1 });
            A.CallTo(() => _reactionBuilder.ModifierNames).Returns(new[] { "modifier" });

            _buildConfiguration = A.Fake <IBuildConfiguration>();
            _rootContainer      = new Container().WithMode(ContainerMode.Physical);
            _model.Root         = _rootContainer;
            _globalContainer    = new Container();

            _reaction = A.Fake <IReaction>().WithName(_reactionBuilder.Name);
            A.CallTo(() => _reactionMapper.MapFromLocal(A <IReactionBuilder> ._, A <IContainer> ._, _buildConfiguration)).Returns(_reaction);
            A.CallTo(() => _containerTask.CreateOrRetrieveSubContainerByName(_rootContainer, _reactionBuilder.Name)).Returns(_globalContainer);
        }
Esempio n. 3
0
        private IContainer createReactionPropertiesContainer()
        {
            var globalReactionContainer = _containerTask.CreateOrRetrieveSubContainerByName(_model.Root, _reactionBuilder.Name)
                                          .WithContainerType(ContainerType.Reaction)
                                          .WithIcon(_reactionBuilder.Icon)
                                          .WithDescription(_reactionBuilder.Description);

            _buildConfiguration.AddBuilderReference(globalReactionContainer, _reactionBuilder);

            //"Local"-Parameters will be filled in elsewhere (by the Reaction-Mapper)
            _parameterMapper.MapGlobalOrPropertyFrom(_reactionBuilder, _buildConfiguration).Each(globalReactionContainer.Add);

            _keywordReplacerTask.ReplaceIn(globalReactionContainer, _model.Root, _reactionBuilder.Name);
            return(globalReactionContainer);
        }
        /// <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);
                }
            }
        }