diff --git a/README.md b/README.md
index 526f216..99c98c4 100644
--- a/README.md
+++ b/README.md
@@ -77,7 +77,7 @@ relations are only working with classed which are **annotated with @Entity**!
```java
-@Relation(sourceClass = Person.class)
+@Relation
@Entity
@Getter
@Setter
@@ -108,7 +108,7 @@ This is useful for:
```java
@IgnoreRelation
-@Relation(sourceClass = DisabledRelationEntity.class)
+@Relation
@Entity
public class DisabledRelationEntity {
@@ -124,7 +124,7 @@ Implement the relationIdentity, each dynamic relation need a Long id and a Strin
```java
-@Relation(sourceClass = Person.class)
+@Relation
@Entity
@Getter
@Setter
@@ -142,14 +142,15 @@ public class Person implements RelationIdentity {
```
-## Import Config Module for Component Scan
+## Import Configuration Module for Component Scanning and Relation Support
-Import the DrmConfig in your Spring Boot Application, so that you can use the RelationService
+Enable the `DrmConfig` configuration in your Spring Boot application by using the custom `@EnableDynamicRelation` annotation.
+This activates component scanning for the `at.drm.*` packages and makes the `RelationService` and related beans available for use.
```java
+@EnableDynamicRelation
@SpringBootApplication
-@Import(DrmConfig.class)
public class App {
public static void main(String[] args) {
diff --git a/dynamic-relations/src/main/java/at/drm/DrmConfig.java b/dynamic-relations/src/main/java/at/drm/DrmConfig.java
index 8ac8cfe..8797f49 100644
--- a/dynamic-relations/src/main/java/at/drm/DrmConfig.java
+++ b/dynamic-relations/src/main/java/at/drm/DrmConfig.java
@@ -5,5 +5,5 @@
@Configuration
@ComponentScan(basePackageClasses = DrmConfig.class)
-public class DrmConfig {
+class DrmConfig {
}
diff --git a/dynamic-relations/src/main/java/at/drm/EnableDynamicRelation.java b/dynamic-relations/src/main/java/at/drm/EnableDynamicRelation.java
new file mode 100644
index 0000000..caffb07
--- /dev/null
+++ b/dynamic-relations/src/main/java/at/drm/EnableDynamicRelation.java
@@ -0,0 +1,14 @@
+package at.drm;
+
+import org.springframework.context.annotation.Import;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Import(DrmConfig.class)
+public @interface EnableDynamicRelation {
+}
diff --git a/dynamic-relations/src/main/java/at/drm/annotation/Relation.java b/dynamic-relations/src/main/java/at/drm/annotation/Relation.java
index d9047ff..0de3f67 100644
--- a/dynamic-relations/src/main/java/at/drm/annotation/Relation.java
+++ b/dynamic-relations/src/main/java/at/drm/annotation/Relation.java
@@ -8,5 +8,4 @@
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface Relation {
- Class> sourceClass();
}
diff --git a/dynamic-relations/src/main/java/at/drm/processor/RelationProcessor.java b/dynamic-relations/src/main/java/at/drm/processor/RelationProcessor.java
index 8f21003..6dd39f3 100644
--- a/dynamic-relations/src/main/java/at/drm/processor/RelationProcessor.java
+++ b/dynamic-relations/src/main/java/at/drm/processor/RelationProcessor.java
@@ -97,7 +97,7 @@ private RelationMetaData createEntityMetaData(Element relationElement) {
Relation relationAnnotation = relationElement.getAnnotation(Relation.class);
String elementPackage = processingEnv.getElementUtils()
.getPackageOf(relationElement).getQualifiedName().toString();
- TypeName sourceObjectName = getSourceObjectTypeName(relationAnnotation);
+ TypeName sourceObjectName = ClassName.get(relationElement.asType());
String sourceObjectWithoutPackages = sourceObjectName.toString().replace(elementPackage + ".", "");
String generatedEntityName = sourceObjectWithoutPackages + "Relation";
return new RelationMetaData(sourceObjectName, elementPackage, generatedEntityName, relationAnnotation);
@@ -203,12 +203,6 @@ private static FieldSpec createTargetIdField() {
.build();
}
- private TypeName getSourceObjectTypeName(Relation annotation) {
- TypeMirror typeMirror = getSourceClass(annotation);
- assert typeMirror != null;
- return ClassName.get(typeMirror);
- }
-
private FieldSpec createSourceObjectField(TypeName typeName) {
return FieldSpec.builder(typeName, "sourceObject", Modifier.PRIVATE)
.addAnnotation(ManyToOne.class)
@@ -255,16 +249,4 @@ private void createJavaClass(JavaFile javaFile) {
e.getMessage());
}
}
-
-
- //TODO refactor with the more right way see:
- // https://stackoverflow.com/questions/7687829/java-6-annotation-processing-getting-a-class-from-an-annotation
- private TypeMirror getSourceClass(Relation annotation) {
- try {
- annotation.sourceClass(); // this should throw
- } catch (MirroredTypeException mte) {
- return mte.getTypeMirror();
- }
- return null; // can this ever happen ??
- }
}
diff --git a/dynamic-relations/src/test/resources/TestFile.java b/dynamic-relations/src/test/resources/TestFile.java
index 4080718..a17f459 100644
--- a/dynamic-relations/src/test/resources/TestFile.java
+++ b/dynamic-relations/src/test/resources/TestFile.java
@@ -6,7 +6,7 @@
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
-@Relation(sourceClass = TestFile.class)
+@Relation
@Entity
public class TestFile {
@Id
diff --git a/dynamic-relations/src/test/resources/TestFileWithIgnoreRelation.java b/dynamic-relations/src/test/resources/TestFileWithIgnoreRelation.java
index c7fd76f..539e5be 100644
--- a/dynamic-relations/src/test/resources/TestFileWithIgnoreRelation.java
+++ b/dynamic-relations/src/test/resources/TestFileWithIgnoreRelation.java
@@ -8,7 +8,7 @@
import jakarta.persistence.Id;
@IgnoreRelation
-@Relation(sourceClass = TestFileWithIgnoreRelation.class)
+@Relation
@Entity
public class TestFileWithIgnoreRelation {
@Id
diff --git a/testing/src/main/java/at/test/drm/AnnotationTest.java b/testing/src/main/java/at/test/drm/AnnotationTest.java
index cb8d1b4..664c129 100644
--- a/testing/src/main/java/at/test/drm/AnnotationTest.java
+++ b/testing/src/main/java/at/test/drm/AnnotationTest.java
@@ -9,7 +9,7 @@
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
-@Relation(sourceClass = AnnotationTest.class)
+@Relation
@Entity
@Data
public class AnnotationTest implements RelationIdentity {
diff --git a/testing/src/main/java/at/test/drm/AnnotationTest2.java b/testing/src/main/java/at/test/drm/AnnotationTest2.java
index 3dc8fcd..ef83800 100644
--- a/testing/src/main/java/at/test/drm/AnnotationTest2.java
+++ b/testing/src/main/java/at/test/drm/AnnotationTest2.java
@@ -9,7 +9,7 @@
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
-@Relation(sourceClass = AnnotationTest2.class)
+@Relation
@Entity
@Data
public class AnnotationTest2 implements RelationIdentity {
diff --git a/testing/src/main/java/at/test/drm/AnnotationTest3.java b/testing/src/main/java/at/test/drm/AnnotationTest3.java
index 9699104..2dcdee4 100644
--- a/testing/src/main/java/at/test/drm/AnnotationTest3.java
+++ b/testing/src/main/java/at/test/drm/AnnotationTest3.java
@@ -9,7 +9,7 @@
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
-@Relation(sourceClass = AnnotationTest3.class)
+@Relation
@Entity
@Data
public class AnnotationTest3 implements RelationIdentity {
diff --git a/testing/src/test/java/at/test/drm/ApplicationIntegrationTest.java b/testing/src/test/java/at/test/drm/ApplicationIntegrationTest.java
index 1596d68..932e25d 100644
--- a/testing/src/test/java/at/test/drm/ApplicationIntegrationTest.java
+++ b/testing/src/test/java/at/test/drm/ApplicationIntegrationTest.java
@@ -1,6 +1,6 @@
package at.test.drm;
-import at.drm.DrmConfig;
+import at.drm.EnableDynamicRelation;
import at.drm.model.RelationLink;
import at.drm.service.RelationService;
import io.zonky.test.db.AutoConfigureEmbeddedDatabase;
@@ -9,7 +9,6 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;
import java.util.List;
@@ -17,7 +16,7 @@
@SpringBootTest
@ActiveProfiles("integration")
-@Import(DrmConfig.class)
+@EnableDynamicRelation
@AutoConfigureEmbeddedDatabase(provider = DatabaseProvider.ZONKY)
class ApplicationIntegrationTest {