Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions sprout-annotations/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@
</ciManagement>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
Expand All @@ -55,6 +59,10 @@
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
/**
* If true, only read endpoints are generated for this resource. Note that this overrides the
* {@link SproutResource#include()} and {@link SproutResource#exclude()} options.<br>
* e.g., if set to true, no create, update, or delete endpoints will be generated.
* E.g., if set to true, no create, update, or delete endpoints will be generated.
* No matter what is set in include/exclude. You can still exclude read endpoints
* using {@link SproutResource#exclude()}.
* @return true if the resource is read-only
Expand All @@ -61,6 +61,14 @@
*/
boolean generateSwaggerDocs() default true;

/**
* If true, the generated Repository will be annotated with
* {@link org.springframework.data.repository.NoRepositoryBean}. By default, the repository is annotated with
* {@link org.springframework.stereotype.Repository}.
* @return true if the repository should be overridable.
*/
boolean overrideRepository() default false;

/**
* Optional tag for the resource. This will be used in the Swagger documentation if enabled.
* @return the resource tag
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
Diagnostic.Kind.NOTE,
"[Sprout] Generating repository for " + simpleName
);
var repository = SproutRepositoryGenerator.generateRepository(type, simpleName, entityName, idName, idType);
var repository = SproutRepositoryGenerator
.generateRepository(type, simpleName, entityName, idName, annotation.overrideRepository(), idType);

processingEnv.getMessager().printMessage(
Diagnostic.Kind.NOTE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,29 @@ private SproutRepositoryGenerator() {
}

public static TypeSpec.Builder generateRepository(
TypeElement type, String simpleName, String entityName, String idName, TypeMirror idType
TypeElement type,
String simpleName,
String entityName,
String idName,
boolean overrideRepository,
TypeMirror idType
) {
return TypeSpec.interfaceBuilder("Sprout" + simpleName + "Repository")
var builder = TypeSpec.interfaceBuilder("Sprout" + simpleName + "Repository")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(ClassName.get("org.springframework.stereotype", "Repository"))
.addSuperinterface(ParameterizedTypeName.get(
ClassName.get(SPRING_DATA_JPA, "JpaRepository"),
ClassName.get(type),
TypeName.get(idType)
))
.addMethod(generateDeleteByIdMethod(entityName, idName, TypeName.get(idType)));

if (overrideRepository) {
builder.addAnnotation(ClassName.get("org.springframework.data.repository", "NoRepositoryBean"));
} else {
builder.addAnnotation(ClassName.get("org.springframework.stereotype", "Repository"));
}

return builder;
}

private static MethodSpec generateDeleteByIdMethod(String entityName, String idName, TypeName idType) {
Expand Down