示例#1
0
 /// <summary>
 /// Fin de traitement d'un elément
 /// </summary>
 /// <param name="item">The item.</param>
 public void ExitElement(ReferenceItem item)
 {
     if (item.Element is CandleModel)
     {
         _modelsStack.Pop();
     }
     else if (item.Element is DataLayer)
     {
         DataLayer   modelsLayer = item.Element as DataLayer;
         CandleModel model       = modelsLayer.Component.Model;
         if (model.Id != _initialModelId)
         {
             _modelsStack.Pop();
         }
     }
     else if (item.Element is SoftwareLayer || item.Element is DotNetAssembly)
     {
         _projectPath.Pop();
     }
 }
示例#2
0
        /// <summary>
        /// Récupération des configurations lorsqu'on rencontre un modèle sauf pour le modèle initial.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <returns></returns>
        bool IReferenceVisitor.Accept(ReferenceItem item)
        {
            if (item.Element is CandleModel)
            {
                CandleModel model = item.Element as CandleModel;
                if (model == null)
                {
                    return(false);
                }

                ComponentSig key = new ComponentSig(model.Id, model.Version);

                // Si dèja vu, on arrete
                if (_models.ContainsKey(key))
                {
                    return(false);
                }

                // On ne prend jamais la config du modèle initial
                if (_includeInitialModelConfigurations || _models.Count > 0)
                {
                    if (model.IsLibrary && model.SoftwareComponent != null)
                    {
                        foreach (SoftwareLayer asm in model.SoftwareComponent.Layers)
                        {
                            RetrieveConfigurations(asm);
                        }
                    }
                    else if (model.BinaryComponent != null)
                    {
                        foreach (DotNetAssembly asm in model.BinaryComponent.Assemblies)
                        {
                            RetrieveConfigurations(asm);
                        }
                    }
                }
                _models.Add(key, null);
            }
            return(true);
        }
示例#3
0
 /// <summary>
 /// Exits the element.
 /// </summary>
 /// <param name="item">The item.</param>
 void IReferenceVisitor.ExitElement(ReferenceItem item)
 {
 }
示例#4
0
        /// <summary>
        /// Accepts the specified item.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <returns></returns>
        bool IReferenceVisitor.Accept(ReferenceItem item)
        {
            if (item.Element is DataLayer)
            {
                if (item.Source is DataLayer)
                {
                    RelationShip relation;
                    relation.Source = ((DataLayer)item.Source).Component.Model;
                    relation.Target = ((DataLayer)item.Element).Component.Model;
                    ;
                    relation.Type           = RelationShip.RelationType.Composants;
                    relation.Scope          = item.Scope;
                    relation.TargetAsString = String.Empty;
                    if (!RelationExists(relation))
                    {
                        _relations.Add(relation);
                    }
                    // On n'empile pas le modèle sur le contexte car une couche modèle ne peut avoir que des références sur d'autres modèles
                    // et on a pas besoin de contexte pour calculer la relation
                }
            }

            if (item.Element is CandleModel)
            {
                CandleModel model = item.Element as CandleModel;
                if (model == null)
                {
                    return(false);
                }

                if (_context.Count > 0)
                {
                    RelationShip relation;
                    relation.Source         = _context.Peek();
                    relation.Target         = model;
                    relation.Type           = RelationShip.RelationType.Composants;
                    relation.Scope          = item.Scope;
                    relation.TargetAsString = String.Empty;
                    if (!RelationExists(relation))
                    {
                        _relations.Add(relation);
                    }
                }
                else
                {
                    //modele initial
                    RelationShip rel;
                    rel.Type           = RelationShip.RelationType.Framework;
                    rel.Source         = model;
                    rel.Target         = null;
                    rel.TargetAsString = model.DotNetFrameworkVersion.ToString();
                    rel.Scope          = item.Scope;
                    _relations.Add(rel);
                }

                // Si dèja vu, on arrete
                ModelKey key = new ModelKey(model.Id, model.Version);
                if (_models.Exists(delegate(ModelKey k) { return(key.GetHashCode() == k.GetHashCode()); }))
                {
                    return(false);
                }

                _models.Add(key); // Liste des modèles dèja traités
                _context.Push(model);
            }

            return(true);
        }
示例#5
0
        /// <summary>
        /// Accepts the specified item.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <returns></returns>
        public bool Accept(ReferenceItem item)
        {
            if (item.Element is DataLayer)
            {
                DataLayer modelsLayer = item.Element as DataLayer;
                // Verification si ce système n'a pas dèjà été vu (pour éviter les boucles)
                if (_checkedModels.Contains(item.Element.Id))
                {
                    return(false);
                }
                _checkedModels.Add(item.Element.Id);

                // On accepte aussi le modèle de la couche (si il n'a pas dèjà été vu par ailleurs)
                if (!_models.Contains(modelsLayer.Component.Model))
                {
                    AcceptModel(modelsLayer.Component.Model, _initialModelId == Guid.Empty);
                }

                CandleModel model = modelsLayer.Component.Model;
                if (model.Id != _initialModelId)
                {
                    _modelsStack.Push(model);
                }
            }

            if (item.Element is CandleModel)
            {
                // Verification si ce système n'a pas dèjà été vu (pour éviter les boucles)
                if (_checkedModels.Contains(item.Element.Id))
                {
                    return(false);
                }

                if (!_models.Contains((CandleModel)item.Element))
                {
                    AcceptModel((CandleModel)item.Element, _initialModelId == Guid.Empty);
                }

                if (_initialModelId == Guid.Empty)
                {
                    _initialModelId = item.Element.Id;
                }

                _checkedModels.Add(item.Element.Id);
                _modelsStack.Push(item.Element as CandleModel);
                return(true);
            }

            // Toujours devant
            if (item.Element is SoftwareLayer)
            {
                // Calcul du répertoire du projet courant
                string currentProjectPath = CurrentModelPath;
                if (_initialModelIsInSolution && !IsExternalModel)
                {
                    currentProjectPath = Path.Combine(currentProjectPath, ((SoftwareLayer)item.Element).VSProjectName);
                }
                _projectPath.Push(currentProjectPath);
            }

            if (item.Element is InterfaceLayer)
            {
                InterfaceLayer ilayer = item.Element as InterfaceLayer;
                if (_scope == ReferenceScope.Compilation && IsExternalModel == false)
                {
                    _references.Add(ilayer.VSProjectName);
                }
                else
                {
                    AddFullNameAssembly(ilayer, ".dll");
                }
            }
            else if (item.Element is SoftwareLayer)
            {
                AcceptSoftwareLayer(item.Element as SoftwareLayer);
            }
            else if (item.Element is DotNetAssembly)
            {
                AcceptDotNetAssembly(item.Element as DotNetAssembly);
            }
            else if (item.Element is Artifact)
            {
                AcceptArtifact(item.Element as Artifact);
            }
            return(true);
        }