示例#1
0
        /// <summary>
        /// Ajoute une référence sur un modèle externe.
        /// </summary>
        /// <param name="modelId">The model id.</param>
        /// <param name="displayName">The display name.</param>
        /// <param name="version">Version désirée ou null</param>
        /// <returns></returns>
        /// <remarks>
        /// Si la référence existe dans le référentiel avec le bon numèro de version,
        /// on rajoute la référence si le numéro de version n'est pas précisé ou n'est pas
        /// présent dans le référentiel, on affiche la boite de dialogue de sélection
        /// si ce n'est toujours pas bon, on rajoute la référence en tant que référence
        /// classique statique.
        /// </remarks>
        protected ExternalComponent AddExternalModel(Guid modelId, string displayName, VersionInfo version)
        {
            ExternalComponent externalComponent = this.Component.Model.FindExternalComponent(modelId);

            if (externalComponent != null)
            {
                return(externalComponent);
            }

            // Recherche le modèle dans le repository
            ComponentModelMetadata metadata = RepositoryManager.Instance.ModelsMetadata.Metadatas.Find(modelId, version);

            if (metadata != null)
            {
                // Ok on l'a trouvé
                using (Transaction transaction = this.Store.TransactionManager.BeginTransaction("Add external component"))
                {
                    externalComponent = metadata.CreateComponent(this.Component.Model);
                    transaction.Commit();
                    return(externalComponent);
                }
            }
            else
            {
                // Pas trouvé
                ReferencedAssembliesForm form = new ReferencedAssembliesForm(modelId, displayName, version, null);
                if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    if (form.SelectedAssemblyBindings.Count > 0)
                    {
                        return(form.SelectedAssemblyBindings[0].CreateComponent(this.Component.Model));
                    }
                }
            }

            return(null);
        }
示例#2
0
        /// <summary>
        /// Création d'une dépendance avec une assembly importée
        /// </summary>
        /// <param name="asm">The asm.</param>
        internal void InsertDependencies(Assembly asm)
        {
            // Gestion des dépendances
            List <AssemblyName> referencedAssemblies = GetAssemblyListToCreate(asm);

            if (referencedAssemblies.Count == 0)
            {
                return;
            }

            // On va demander de faire le mapping entre l'assembly et les modèles
            // Fenetre permettant de trouver le lien entre une assembly et son modèle
            ReferencedAssembliesForm form = new ReferencedAssembliesForm(this, referencedAssemblies.ToArray());

            if (form.ShowDialog() == DialogResult.OK)
            {
                // Création des composants externes
                List <ExternalComponent> externalComponents = new List <ExternalComponent>();
                foreach (ComponentMetadataMap map in form.SelectedAssemblyBindings)
                {
                    if (!map.AlreadyExists)
                    {
                        externalComponents.Add(map.CreateComponent(Component.Model));
                    }
                }

                // Puis création des relations avec eux
                foreach (ExternalComponent externalComponent in externalComponents)
                {
                    // Pour l'instant, on ne crée des références qu'avec des composants binaires
                    if (externalComponent == null || externalComponent.MetaData == null ||
                        externalComponent.MetaData.ComponentType != ComponentType.Library)
                    {
                        continue;
                    }

                    if (externalComponent.Ports.Count == 1)
                    {
                        if (ExternalServiceReference.GetLink(this, externalComponent.Ports[0]) == null)
                        {
                            ExternalServiceReference esr =
                                new ExternalServiceReference(this, externalComponent.Ports[0]);
                            esr.Scope = ReferenceScope.Runtime;
                        }
                    }
                    else if (externalComponent.Ports.Count > 1)
                    {
                        string assemblyName = asm.GetName().Name;
                        foreach (ExternalPublicPort port in externalComponent.Ports)
                        {
                            if (Utils.StringCompareEquals(port.Name, assemblyName) ||
                                Utils.StringCompareEquals(port.Parent.Name, assemblyName))
                            {
                                if (ExternalServiceReference.GetLink(this, port) == null)
                                {
                                    ExternalServiceReference esr = new ExternalServiceReference(this, port);
                                    esr.Scope = ReferenceScope.Runtime;
                                }
                                break;
                            }
                        }
                    }
                    else
                    {
                        IIDEHelper ide = ServiceLocator.Instance.GetService <IIDEHelper>();
                        ide.LogError(false, String.Format("Can not create relationship between {0} and {1}", this.Name, externalComponent.Name), 0, 0, "Import");
                    }
                }
            }
        }