Skip to content

Commit

Permalink
[JPA] Permettre de personnaliser l'interface dont héritent les daos
Browse files Browse the repository at this point in the history
[JPA] Permettre de générer les classes en Abstract avec l'annotation @NoRepositoryBean
#317
  • Loading branch information
Denis Challas committed Feb 3, 2024
1 parent e1d1481 commit 60d8466
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 6 deletions.
10 changes: 10 additions & 0 deletions TopModel.Generator.Jpa/JpaConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,16 @@ public class JpaConfig : GeneratorConfigBase
/// </summary>
public bool UseJdbc { get; set; } = false;

/// <summary>
/// Génération d'interface Abstract avec @NoRepositoryBean permettant de mettre à jour le code généré.
/// </summary>
public bool DaosAbstract { get; set; } = false;

/// <summary>
/// Précise l'interface des Daos générés.
/// </summary>
public string? DaosInterface { get; set; }

/// <summary>
/// Indique s'il faut ajouter les mappers en tant méthode ou constructeur dans les classes qui les déclarent.
/// </summary>
Expand Down
42 changes: 36 additions & 6 deletions TopModel.Generator.Jpa/JpaDaoGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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("}");
}
Expand All @@ -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");
}
Expand All @@ -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);
}
}
10 changes: 10 additions & 0 deletions TopModel.Generator.Jpa/jpa.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit 60d8466

Please sign in to comment.