Esempio n. 1
0
 public void Visit(IUsingFormula usingFormula)
 {
     replaceInUsingFormula(usingFormula, _rootContainer);
 }
        protected virtual IFormulaUsablePath CreateRelativePath(IFormulaUsable formulaUsable, IEntity refObject, IUsingFormula editedObject)
        {
            var path = createRelativePathBase(formulaUsable, refObject);

            if (path == null)
            {
                return(null);
            }

            path.Replace(Constants.MOLECULE_PROPERTIES, ObjectPathKeywords.MOLECULE);
            return(AdjustReferences(formulaUsable, path));
        }
        /// <summary>
        ///    Creates the path from entity.
        /// </summary>
        /// <param name="objectBase">The object base that should be referenced</param>
        /// <param name="shouldCreateAbsolutePaths">if set to <c>true</c> should create absolute paths otherwise relative paths are created.</param>
        /// <param name="refObject">The object from which the path is created.</param>
        /// <param name="editedObject"></param>
        /// <returns> the dto Object for the reference</returns>
        public virtual ReferenceDTO CreatePathsFromEntity(IObjectBase objectBase, bool shouldCreateAbsolutePaths, IEntity refObject, IUsingFormula editedObject)
        {
            var dto = new ReferenceDTO();

            if (!objectBase.IsAnImplementationOf <IFormulaUsable>())
            {
                return(null);
            }
            var formulaUseable = objectBase.DowncastTo <IFormulaUsable>();

            if (isGlobal(objectBase))
            {
                // This a global parameters that we always use as absolute paths
                dto.Path = CreateAlwaysAbsolutePaths(objectBase, formulaUseable);
            }
            else
            {
                // local reaction and molecule properties are always referenced local.
                if (formulaUseable.IsAtReaction() || formulaUseable.IsAtMolecule())
                {
                    shouldCreateAbsolutePaths = false;
                }
                dto.Path = shouldCreateAbsolutePaths
               ? CreateAbsolutePath(formulaUseable)
               : CreateRelativePath(formulaUseable, refObject, editedObject);
            }
            var parameter = formulaUseable as IParameter;

            if (parameter == null)
            {
                return(dto);
            }

            dto.BuildMode = parameter.BuildMode;
            updateReferenceForTransportMoleculeContainer(dto, parameter, shouldCreateAbsolutePaths);
            return(dto);
        }
        /// <summary>
        ///    Creates the path from parameter dummy.
        /// </summary>
        /// <param name="objectBaseDTO">The dummy parameter dto.</param>
        /// <param name="shouldCreateAbsolutePaths">if set to <c>true</c>  creates absolute paths otherwise creates reltive paths.</param>
        /// <param name="refObject">
        ///    The reference object the user chosen (may the concrete object that uses the reference or a
        ///    existing parent of it).
        /// </param>
        /// <param name="editedObject"></param>
        /// <returns> The path that could be uses in the model to reference the object</returns>
        public virtual ReferenceDTO CreatePathFromParameterDummy(IObjectBaseDTO objectBaseDTO, bool shouldCreateAbsolutePaths, IEntity refObject, IUsingFormula editedObject)
        {
            if (IsMoleculeReference(objectBaseDTO))
            {
                return(createMoleculeReference());
            }

            var          dtoDummyParameter = (DummyParameterDTO)objectBaseDTO;
            var          parameterToUse    = _context.Get <IParameter>(dtoDummyParameter.ParameterToUse.Id);
            ReferenceDTO dtoReference;

            if (parameterToUse.IsAtMolecule())
            {
                dtoReference = new ReferenceDTO();
                IObjectPath tmpPath;
                //global molecule parameters we always reference absolute
                if (shouldCreateAbsolutePaths || !parameterToUse.BuildMode.Equals(ParameterBuildMode.Local))
                {
                    tmpPath = _objectPathFactory.CreateAbsoluteObjectPath(dtoDummyParameter.Parent);
                }
                else
                {
                    if (refObject != dtoDummyParameter.Parent)
                    {
                        tmpPath = _objectPathFactory.CreateRelativeObjectPath(refObject, dtoDummyParameter.Parent);
                    }
                    else
                    {
                        tmpPath = new ObjectPath();
                    }

                    tmpPath = AdjustReferences(parameterToUse, tmpPath);
                }
                dtoReference.Path = _objectPathFactory.CreateFormulaUsablePathFrom(tmpPath)
                                    .WithAlias(_aliasCreator.CreateAliasFrom(parameterToUse.Name))
                                    .WithDimension(parameterToUse.Dimension);
                dtoReference.Path.Add(parameterToUse.Name);
            }
            else
            {
                dtoReference = CreatePathsFromEntity(parameterToUse, shouldCreateAbsolutePaths, refObject, editedObject);
            }
            dtoReference.Path.Replace(Constants.MOLECULE_PROPERTIES, dtoDummyParameter.ModelParentName);
            dtoReference.BuildMode = parameterToUse.BuildMode;
            return(dtoReference);
        }