/// <summary> /// Vérification si un type existe et le crée le cas échéant (y compris les packages) /// </summary> /// <param name="newTypeName">Nom complet du type</param> /// <returns>Une instance du type</returns> public DataType EnsureTypeExists(string newTypeName) { if (String.IsNullOrEmpty(newTypeName)) { return(null); } // le test suivant ne peut pas être null car son appel va générer la création // de la couche modèles si elle n'existe pas. C'est bien ce que l'on veut if (DataLayer == null) { IIDEHelper ide = ServiceLocator.Instance.GetService <IIDEHelper>(); if (ide != null) { ide.ShowMessage(String.Format("Can't create user type '{0}' because the models layer does not exist.", newTypeName)); } throw new DataLayerNotDefinedException(); } if (!IsDataLayerExists) { return(null); } if (this.Store.TransactionManager.CurrentTransaction.Context.ContextInfo.ContainsKey("ReverseInProgress")) { return(null); } DataType newDefinedTypeModel = null; DataLayer modelsLayer = DataLayer; using (Transaction transaction = this.Store.TransactionManager.BeginTransaction("Add class to dataLayer")) { transaction.Context.ContextInfo.Add("Generated", true); string typeName = newTypeName; ClassNameInfo cnh = new ClassNameInfo(typeName); // Si il n'y a pas de namespace, on force le namespace par défaut. if (String.IsNullOrEmpty(cnh.Namespace)) { // Si il y a plusieurs packages, on va lui demander d'en sélectionner un if (modelsLayer.Packages.Count > 1) { NamespacesSelectorDialog dlg = new NamespacesSelectorDialog(modelsLayer.Packages); if (dlg.ShowDialog() == DialogResult.Cancel) { return(null); } cnh.Namespace = dlg.SelectedNamespace; } else { cnh.Namespace = modelsLayer.DefaultPackage.Name; } } // Recherche si le type existe dans un des packages newDefinedTypeModel = modelsLayer.FindType(cnh.Namespace, cnh.ClassName); if (newDefinedTypeModel == null) { bool classExists; newDefinedTypeModel = modelsLayer.AddTypeIfNotExists(cnh, false, out classExists); } transaction.Commit(); } return(newDefinedTypeModel); }
/// <summary> /// Adds the type if not exists. /// </summary> /// <param name="className">Name of the class.</param> /// <param name="createEnum">if set to <c>true</c> [create enum].</param> /// <param name="classAlreadyExists">if set to <c>true</c> [class already exists].</param> /// <returns></returns> public DataType AddTypeIfNotExists(ClassNameInfo className, bool createEnum, out bool classAlreadyExists) { return(AddTypeIfNotExists(className.Namespace, className.ClassName, createEnum, out classAlreadyExists)); }