diff --git a/TopModel.Generator.Jpa/JpaConfig.cs b/TopModel.Generator.Jpa/JpaConfig.cs index 1327b233..a08157d3 100644 --- a/TopModel.Generator.Jpa/JpaConfig.cs +++ b/TopModel.Generator.Jpa/JpaConfig.cs @@ -99,6 +99,16 @@ public class JpaConfig : GeneratorConfigBase /// public bool UseJdbc { get; set; } = false; + /// + /// Génération d'interface Abstract avec @NoRepositoryBean permettant de mettre à jour le code généré. + /// + public bool DaosAbstract { get; set; } = false; + + /// + /// Précise l'interface des Daos générés. + /// + public string? DaosInterface { get; set; } + /// /// Indique s'il faut ajouter les mappers en tant méthode ou constructeur dans les classes qui les déclarent. /// diff --git a/TopModel.Generator.Jpa/JpaDaoGenerator.cs b/TopModel.Generator.Jpa/JpaDaoGenerator.cs index 85a64892..9377a732 100644 --- a/TopModel.Generator.Jpa/JpaDaoGenerator.cs +++ b/TopModel.Generator.Jpa/JpaDaoGenerator.cs @@ -26,16 +26,17 @@ protected override bool FilterClass(Class classe) protected override string GetFileName(Class classe, string tag) { + string path = Config.DaosAbstract ? $"Abstract{classe.NamePascal}DAO.java" : $"{classe.NamePascal}DAO.java"; return Path.Combine( Config.OutputDirectory, Config.ResolveVariables(Config.DaosPath!, tag, module: classe.Namespace.Module).ToFilePath(), - $"{classe.NamePascal}DAO.java"); + path); } protected override void HandleClass(string fileName, Class classe, string tag) { // Ne génère le DAO qu'une seule fois - if (File.Exists(fileName)) + if (!Config.DaosAbstract && File.Exists(fileName)) { return; } @@ -64,7 +65,30 @@ protected override void HandleClass(string fileName, Class classe, string tag) pk = classe.PrimaryKey.Count() > 1 ? $"{classe.NamePascal}.{classe.NamePascal}Id" : Config.GetType(classe.PrimaryKey.Single()); } - fw.WriteLine($"public interface {classe.NamePascal}DAO extends {(classe.Reference || Config.UseJdbc ? "CrudRepository" : "JpaRepository")}<{classe.NamePascal}, {pk}> {{"); + string daosInterface; + if (Config.DaosInterface != null) + { + daosInterface = $"{Config.DaosInterface}<{classe.NamePascal}, {pk}>"; + } + else if (classe.Reference || Config.UseJdbc) + { + daosInterface = $"CrudRepository<{classe.NamePascal}, {pk}>"; + } + else + { + daosInterface = $"JpaRepository<{classe.NamePascal}, {pk}>"; + } + + if (Config.DaosAbstract) + { + fw.WriteLine("@NoRepositoryBean"); + fw.WriteLine($"interface Abstract{classe.NamePascal}DAO extends {daosInterface} {{"); + } + else + { + fw.WriteLine($"interface {classe.NamePascal}DAO extends {daosInterface} {{"); + } + fw.WriteLine(); fw.WriteLine("}"); } @@ -75,11 +99,12 @@ private void WriteImports(JavaWriter fw, Class classe, string tag) { classe.GetImport(Config, tag) }; - if (Config.UseJdbc) + + if (Config.DaosInterface != null) { - imports.Add("org.springframework.data.repository.CrudRepository"); + // pas besoin d'import } - else if (classe.Reference) + else if (classe.Reference || Config.UseJdbc) { imports.Add("org.springframework.data.repository.CrudRepository"); } @@ -88,6 +113,11 @@ private void WriteImports(JavaWriter fw, Class classe, string tag) imports.Add("org.springframework.data.jpa.repository.JpaRepository"); } + if (Config.DaosAbstract) + { + imports.Add("org.springframework.data.repository.NoRepositoryBean"); + } + fw.AddImports(imports); } } \ No newline at end of file diff --git a/TopModel.Generator.Jpa/jpa.config.json b/TopModel.Generator.Jpa/jpa.config.json index 8fe6f1cf..c290866a 100644 --- a/TopModel.Generator.Jpa/jpa.config.json +++ b/TopModel.Generator.Jpa/jpa.config.json @@ -133,6 +133,16 @@ "description": "Générer les entités en mode JDBC", "default": "false" }, + "daosAbstract": { + "type": "boolean", + "description": " Génération d'interface Abstract avec @NoRepositoryBean permettant de mettre à jour le code généré", + "default": "false" + }, + "daosInterface": { + "type": "string", + "description": "Précise l'interface des Daos générés.", + "default": "false" + }, "mappersInClass": { "type": "boolean", "description": "Indique s'il faut ajouter les mappers en tant méthode ou constructeur dans les classes qui les déclarent"