Пример #1
0
        /// <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);
        }
Пример #2
0
 /// <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));
 }