Esempio n. 1
0
        public override ReferenceDTO CreateMoleculePath(DummyMoleculeContainerDTO dtoObjectBase, bool shouldCreateAbsolutePaths, IEntity refObject)
        {
            var moleculeProperties = _context.Get <IContainer>(dtoObjectBase.MoleculePropertiesContainer.Id);
            var parentContainer    = moleculeProperties.ParentContainer;
            var firstPathElemnt    = getPathKeywordForContainer(parentContainer);

            if (firstPathElemnt.IsNullOrEmpty())
            {
                return(base.CreateMoleculePath(dtoObjectBase, shouldCreateAbsolutePaths, refObject));
            }

            string moleculeElement = shouldCreateAbsolutePaths ? dtoObjectBase.Name : ObjectPathKeywords.MOLECULE;

            return(new ReferenceDTO
            {
                Path = CreateFormulaUsablePathFrom(new[] { firstPathElemnt, moleculeElement }, AppConstants.AmountAlias, Constants.Dimension.AMOUNT)
            });
        }
Esempio n. 2
0
        public virtual ReferenceDTO CreateMoleculePath(DummyMoleculeContainerDTO dtoObjectBase, bool shouldCreateAbsolutePaths, IEntity refObject)
        {
            var moleculeProperties = _context.Get <IContainer>(dtoObjectBase.MoleculePropertiesContainer.Id);
            var parentContainer    = moleculeProperties.ParentContainer;

            if (parentContainer == null)
            {
                return(null);
            }
            IEnumerable <string> elements;
            IFormulaUsablePath   path;

            if (shouldCreateAbsolutePaths)
            {
                elements = _objectPathFactory.CreateAbsoluteObjectPath(parentContainer);
                path     = _objectPathFactory.CreateFormulaUsablePathFrom(elements);
            }
            else
            {
                if (refObject == parentContainer)
                {
                    path = new FormulaUsablePath();
                }
                else
                {
                    elements = _objectPathFactory.CreateRelativeObjectPath(refObject, parentContainer);
                    path     = _objectPathFactory.CreateFormulaUsablePathFrom(elements);
                }
                AdjustReferences(parentContainer, path);
            }

            path.Alias     = _aliasCreator.CreateAliasFrom(dtoObjectBase.Name);
            path.Dimension = _context.DimensionFactory.Dimension(Constants.Dimension.AMOUNT);
            path.Add(dtoObjectBase.Name);

            return(new ReferenceDTO {
                Path = path
            });
        }
Esempio n. 3
0
        protected virtual void AddChildrenFromDummyMolecule(List <IObjectBaseDTO> children, DummyMoleculeContainerDTO dummyMolecule)
        {
            var parameterDTOs = new List <IObjectBaseDTO>();
            var moleculePropertiesContainer = _context.Get <IContainer>(dummyMolecule.MoleculePropertiesContainer.Id);

            parameterDTOs.AddRange(moleculePropertiesContainer.GetChildren <IParameter>()
                                   .Where(selectionPredicate)
                                   .Select(x => _dummyParameterDTOMapper.MapFrom(x, moleculePropertiesContainer, dummyMolecule)));

            if (isGlobalMoleculePropertiesContainer(moleculePropertiesContainer))
            {
                //add Child Container
                children.AddRange(getAllMoleculeChildren <TransporterMoleculeContainer>(_context.CurrentProject, dummyMolecule)
                                  .MapAllUsing(_objectBaseDTOMapper));

                children.AddRange(getAllMoleculeChildren <InteractionContainer>(_context.CurrentProject, dummyMolecule)
                                  .MapAllUsing(_objectBaseDTOMapper));

                //add global Molecule Properties defined in Molecules BB because the molecule represents a global molecule container
                parameterDTOs.AddRange(getAllMoleculeChildren <IParameter>(_context.CurrentProject, dummyMolecule)
                                       .Where(para => para.BuildMode != ParameterBuildMode.Local)
                                       .Select(x => _dummyParameterDTOMapper.MapFrom(x, moleculePropertiesContainer, dummyMolecule)));
            }
            else
            {
                //This is a local molecule container . We add local Molecules Properties defined in Molecule BB only if container is defined in a physical cotnainer
                if (moleculePropertiesContainer.ParentContainer.Mode == ContainerMode.Physical)
                {
                    parameterDTOs.AddRange(getAllMoleculeChildren <IParameter>(_context.CurrentProject, dummyMolecule)
                                           .Where(para => para.BuildMode == ParameterBuildMode.Local)
                                           .Select(x => _dummyParameterDTOMapper.MapFrom(x, moleculePropertiesContainer, dummyMolecule)));
                }
            }

            children.AddRange(parameterDTOs.OrderBy(x => x.Name));
        }
Esempio n. 4
0
        private IEnumerable <T> getAllMoleculeChildren <T>(IMoBiProject currentProject, DummyMoleculeContainerDTO dummyMolecule) where T : class, IEntity
        {
            IEnumerable <T> children = new List <T>();

            foreach (var moleculeBuildingBlock in currentProject.MoleculeBlockCollection)
            {
                var moleculeBuilder = moleculeBuildingBlock.FindByName(dummyMolecule.Name);
                if (moleculeBuilder == null)
                {
                    continue;
                }

                children = moleculeBuilder.GetChildren <T>().Union(children);
                children = children.Distinct(new NameComparer <T>()).Where(selectionPredicate);
            }

            return(children.OrderBy(x => x.Name));
        }
        protected override void AddChildrenFromDummyMolecule(List <IObjectBaseDTO> children, DummyMoleculeContainerDTO dummyMolecule)
        {
            IEnumerable <TransporterMoleculeContainer> allTransporterMoleculeContainers = new List <TransporterMoleculeContainer>();
            IMoleculeBuildingBlock editedMoleculeBuildingBlock = null;
            var allMoleculeBuildingBlocks = editedMoleculeBuildingBlock != null ? new[] { editedMoleculeBuildingBlock } : _context.CurrentProject.MoleculeBlockCollection;

            foreach (var moleculeBuildingBlock in allMoleculeBuildingBlocks)
            {
                if (moleculeBuildingBlock.Any(builder => builder.Name.Equals(dummyMolecule.Name)))
                {
                    allTransporterMoleculeContainers = moleculeBuildingBlock[dummyMolecule.Name].TransporterMoleculeContainerCollection.Union(allTransporterMoleculeContainers);
                    allTransporterMoleculeContainers = allTransporterMoleculeContainers.Distinct(new NameComparer <TransporterMoleculeContainer>());
                }
            }

            children.AddRange(allTransporterMoleculeContainers.MapAllUsing(_transporterMoleculeContainerMapper));
            base.AddChildrenFromDummyMolecule(children, dummyMolecule);
        }