/// <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); }
/// <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"); } } } }