示例#1
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="startingModelId"></param>
    /// <param name="side"></param>
    private void TraverseRelations(ComponentSig startingModel, GraphRelationSide side)
    {
        for (int ix = 0; ix < relations.Count; ix++)
        {
            if (processedLinks[ix])
            {
                continue;
            }

            DependencyGraphVisitor.RelationShip relation = relations[ix];

            if (startingModel.Equals(relation.Source) && side == GraphRelationSide.Source)
            {
                processedLinks.Set(ix, true);
                GenerateRelationInGraph(relation);
                if (relation.Target != null)
                {
                    TraverseRelations(new ComponentSig(relation.Target), side);
                }
            }
            else if (relation.Target != null && startingModel.Equals(relation.Target) && side == GraphRelationSide.Target)
            {
                processedLinks.Set(ix, true);
                GenerateRelationInGraph(relation);
                TraverseRelations(new ComponentSig(relation.Source), side);
            }
        }
    }
示例#2
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="side"></param>
    public void Generate(ComponentSig mainComponentSig)
    {
        if (relations.Count == 0 || mainComponentSig.IsEmpty)
        {
            return;
        }

        processedLinks = new BitArray(relations.Count);
        showMainSource = true;
        TraverseRelations(mainComponentSig, GraphRelationSide.Source);
        TraverseRelations(mainComponentSig, GraphRelationSide.Target);
    }
示例#3
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);
        }
示例#4
0
        /// <summary>
        /// Liste des artifacts d'un modèle
        /// </summary>
        /// <param name="metadata"></param>
        /// <returns></returns>
        public List <string> GetArtifacts(ComponentModelMetadata metadata)
        {
            ComponentSig  sig = new ComponentSig(metadata);
            List <string> artifacts;

            if (!_artifactsCache.TryGetValue(sig, out artifacts))
            {
                ModelLoader loader = ModelLoader.GetLoader(metadata);
                if (loader != null && loader.Model != null)
                {
                    ReferenceWalker  walker  = new ReferenceWalker(ReferenceScope.Publish, new ConfigurationMode("*"));
                    ReferenceVisitor visitor = new ReferenceVisitor(ReferenceScope.Publish);
                    walker.Traverse(visitor, loader.Model);
                    artifacts = new List <string>();
                    foreach (string artifactFileName in visitor.References)
                    {
                        artifacts.Add(Path.GetFileName(artifactFileName));
                    }
                }
                _artifactsCache.Add(sig, artifacts);
            }
            return(artifacts);
        }