From 2787873ca7d16120f80da53b8b14e21478329dc3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 00:28:44 +0200 Subject: [PATCH 1/2] updated to jdk 21 and bumped all spring updated to the latest lts --- .../src/main/java/at/drm/dao/RelationDao.java | 9 +- .../at/drm/processor/ReleationProcessor.java | 116 +++++++++++------- .../java/at/drm/service/RelationService.java | 30 ++--- .../drm/processor/ReleationProcessorTest.java | 2 +- jacoco-report/pom.xml | 5 +- pom.xml | 74 +++++++---- testing/pom.xml | 6 +- .../application-integration.properties | 2 + 8 files changed, 146 insertions(+), 98 deletions(-) diff --git a/dynamic-relations/src/main/java/at/drm/dao/RelationDao.java b/dynamic-relations/src/main/java/at/drm/dao/RelationDao.java index 22cf52c..8e06766 100644 --- a/dynamic-relations/src/main/java/at/drm/dao/RelationDao.java +++ b/dynamic-relations/src/main/java/at/drm/dao/RelationDao.java @@ -1,17 +1,18 @@ package at.drm.dao; +import at.drm.model.RelationIdentity; import at.drm.model.RelationLink; +import java.util.List; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.NoRepositoryBean; -import java.util.List; - @NoRepositoryBean public interface RelationDao extends CrudRepository { - RelationLink findBySourceObjectAndTargetIdAndTargetType(Object sourceObject, Long targetId, String targetType); + RelationLink findBySourceObjectAndTargetIdAndTargetType(RelationIdentity sourceObject, Long targetId, + String targetType); - List findBySourceObject(Object sourceObject); + List findBySourceObject(RelationIdentity sourceObject); List findByTargetIdAndTargetType(Long targetId, String targetType); } diff --git a/dynamic-relations/src/main/java/at/drm/processor/ReleationProcessor.java b/dynamic-relations/src/main/java/at/drm/processor/ReleationProcessor.java index b27e5f7..91bc1cc 100644 --- a/dynamic-relations/src/main/java/at/drm/processor/ReleationProcessor.java +++ b/dynamic-relations/src/main/java/at/drm/processor/ReleationProcessor.java @@ -5,10 +5,34 @@ import at.drm.model.RelationLink; import at.drm.model.RelationMetaData; import com.google.auto.service.AutoService; -import com.squareup.javapoet.*; -import jakarta.persistence.*; - -import javax.annotation.processing.*; +import com.squareup.javapoet.AnnotationSpec; +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.CodeBlock; +import com.squareup.javapoet.FieldSpec; +import com.squareup.javapoet.JavaFile; +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeName; +import com.squareup.javapoet.TypeSpec; +import com.squareup.javapoet.TypeVariableName; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; +import java.io.IOException; +import java.util.LinkedHashSet; +import java.util.Set; +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Filer; +import javax.annotation.processing.Messager; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.Processor; +import javax.annotation.processing.RoundEnvironment; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; import javax.lang.model.element.Modifier; @@ -16,9 +40,6 @@ import javax.lang.model.type.MirroredTypeException; import javax.lang.model.type.TypeMirror; import javax.tools.Diagnostic; -import java.io.IOException; -import java.util.LinkedHashSet; -import java.util.Set; @AutoService(Processor.class) public class ReleationProcessor extends AbstractProcessor { @@ -40,15 +61,15 @@ public Set getSupportedAnnotationTypes() { Set annotations = new LinkedHashSet<>(); annotations.add(Relation.class.getCanonicalName()); processingEnv.getMessager() - .printMessage(Diagnostic.Kind.NOTE, "getSupportedAnnotationTypes: " - + annotations); + .printMessage(Diagnostic.Kind.NOTE, "getSupportedAnnotationTypes: " + + annotations); return annotations; } @Override public SourceVersion getSupportedSourceVersion() { processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "getSupportedSourceVersion"); - return SourceVersion.RELEASE_17; + return SourceVersion.RELEASE_21; } @Override @@ -68,7 +89,7 @@ public boolean process(Set annotations, RoundEnvironment private RelationMetaData createEntityMetaData(Element relationElement) { Relation relationAnnotation = relationElement.getAnnotation(Relation.class); String elementPackage = processingEnv.getElementUtils() - .getPackageOf(relationElement).getQualifiedName().toString(); + .getPackageOf(relationElement).getQualifiedName().toString(); TypeName sourceObjectName = getSourceObjectTypeName(relationAnnotation); String sourceObjectWithoutPackages = sourceObjectName.toString().replace(elementPackage + ".", ""); String generatedEntityName = sourceObjectWithoutPackages + "Relation"; @@ -80,13 +101,14 @@ private void createDynamicRelationDao(RelationMetaData entityMetaData) { String generatedName = entityMetaData.generatedName(); ClassName entityClassName = ClassName.get(packageName, generatedName); TypeName longTypeName = TypeVariableName.get(Long.class); - TypeSpec relationDao = TypeSpec.interfaceBuilder(entityMetaData.generatedName().replace("Relation", "RelationDao")) - .addModifiers(Modifier.PUBLIC) - .addSuperinterface( - ParameterizedTypeName.get(ClassName.get(RelationDao.class), entityClassName, longTypeName)) - .build(); + TypeSpec relationDao = TypeSpec.interfaceBuilder( + entityMetaData.generatedName().replace("Relation", "RelationDao")) + .addModifiers(Modifier.PUBLIC) + .addSuperinterface( + ParameterizedTypeName.get(ClassName.get(RelationDao.class), entityClassName, longTypeName)) + .build(); JavaFile javaFileDao = JavaFile.builder(packageName, relationDao) - .build(); + .build(); createJavaClass(javaFileDao); } @@ -152,26 +174,26 @@ private void createDynamicRelationEntity(RelationMetaData entityMetaData) { .build()) .build(); JavaFile entityJavaFile = JavaFile.builder(packageName, relationEntity) - .build(); + .build(); createJavaClass(entityJavaFile); } private static FieldSpec createTargetTypeField() { return FieldSpec.builder(String.class, "targetType", Modifier.PRIVATE) - .addAnnotation(AnnotationSpec.builder(Column.class) - .addMember("name", "$S", "target_type") - .addMember("nullable", "$L", false) - .build()) - .build(); + .addAnnotation(AnnotationSpec.builder(Column.class) + .addMember("name", "$S", "target_type") + .addMember("nullable", "$L", false) + .build()) + .build(); } private static FieldSpec createTargetIdField() { return FieldSpec.builder(Long.class, "targetId", Modifier.PRIVATE) - .addAnnotation(AnnotationSpec.builder(Column.class) - .addMember("name", "$S", "target_id") - .addMember("nullable", "$L", false) - .build()) - .build(); + .addAnnotation(AnnotationSpec.builder(Column.class) + .addMember("name", "$S", "target_id") + .addMember("nullable", "$L", false) + .build()) + .build(); } private TypeName getSourceObjectTypeName(Relation annotation) { @@ -182,39 +204,39 @@ private TypeName getSourceObjectTypeName(Relation annotation) { private FieldSpec createSourceObjectField(TypeName typeName) { return FieldSpec.builder(typeName, "sourceObject", Modifier.PRIVATE) - .addAnnotation(ManyToOne.class) - .addAnnotation(createJoinColumnAnnotaion()) - .build(); + .addAnnotation(ManyToOne.class) + .addAnnotation(createJoinColumnAnnotaion()) + .build(); } private FieldSpec createIdAnnotation() { return FieldSpec.builder(Long.class, "id", Modifier.PRIVATE) - .addAnnotation(Id.class) - .addAnnotation(createGeneratedValueAnnotation()) - .build(); + .addAnnotation(Id.class) + .addAnnotation(createGeneratedValueAnnotation()) + .build(); } private AnnotationSpec createJoinColumnAnnotaion() { return AnnotationSpec.builder(JoinColumn.class) - .addMember("name", "$S", "source_object") - .build(); + .addMember("name", "$S", "source_object") + .build(); } private AnnotationSpec createGeneratedValueAnnotation() { return AnnotationSpec.builder(GeneratedValue.class) - .addMember("strategy", "$T.$L", GenerationType.class, GenerationType.IDENTITY.name()) - .build(); + .addMember("strategy", "$T.$L", GenerationType.class, GenerationType.IDENTITY.name()) + .build(); } private AnnotationSpec createTableAnnotation(String generatedName) { return AnnotationSpec.builder(Table.class) - .addMember("name", "$S", generatedName) - .addMember("uniqueConstraints", CodeBlock.builder() - .add("{ @$T(name = " + "\"unique_$L\", columnNames = " + - "{ \"target_id\", \"target_type\",\"source_object\" })}", - UniqueConstraint.class, generatedName) - .build()) - .build(); + .addMember("name", "$S", generatedName) + .addMember("uniqueConstraints", CodeBlock.builder() + .add("{ @$T(name = " + "\"unique_$L\", columnNames = " + + "{ \"target_id\", \"target_type\",\"source_object\" })}", + UniqueConstraint.class, generatedName) + .build()) + .build(); } private void createJavaClass(JavaFile javaFile) { @@ -222,8 +244,8 @@ private void createJavaClass(JavaFile javaFile) { javaFile.writeTo(filer); } catch (IOException e) { processingEnv.getMessager() - .printMessage(Diagnostic.Kind.ERROR, "ERROR ON write file: " + - e.getMessage()); + .printMessage(Diagnostic.Kind.ERROR, "ERROR ON write file: " + + e.getMessage()); } } diff --git a/dynamic-relations/src/main/java/at/drm/service/RelationService.java b/dynamic-relations/src/main/java/at/drm/service/RelationService.java index 64296e3..42d6fbd 100644 --- a/dynamic-relations/src/main/java/at/drm/service/RelationService.java +++ b/dynamic-relations/src/main/java/at/drm/service/RelationService.java @@ -5,16 +5,14 @@ import at.drm.factory.RelationDaoFactory; import at.drm.model.RelationIdentity; import at.drm.model.RelationLink; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import lombok.NonNull; -import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.core.ResolvableType; import org.springframework.stereotype.Service; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - @Service public class RelationService { @@ -28,7 +26,7 @@ public RelationLink createRelation(@NonNull Object sourceObject, @NonNull Relati Long targetId = targetObect.getId(); String targetType = targetObect.getType(); RelationDao daoFromSourceObject = - relationDaoFactory.getDaoFromSourceObjectClass(sourceObject.getClass()); + relationDaoFactory.getDaoFromSourceObjectClass(sourceObject.getClass()); RelationLink relationLink = createRelationModelFromGenericParameter(daoFromSourceObject); relationLink.setSourceObject(sourceObject); relationLink.setTargetId(targetId); @@ -38,21 +36,22 @@ public RelationLink createRelation(@NonNull Object sourceObject, @NonNull Relati public void deleteRelation(RelationLink relationLink) { RelationDao daoFromSourceObjectClass = - relationDaoFactory.getDaoFromSourceObjectClass(relationLink.getSourceObject().getClass()); + relationDaoFactory.getDaoFromSourceObjectClass(relationLink.getSourceObject().getClass()); daoFromSourceObjectClass.delete(relationLink); } - public RelationLink findRelationBySourceObjectAndRelationIdentity(@NonNull Object sourceObject, @NonNull RelationIdentity targetObect) { + public RelationLink findRelationBySourceObjectAndRelationIdentity(@NonNull RelationIdentity sourceObject, + @NonNull RelationIdentity targetObect) { RelationDao daoFromSourceObject = - relationDaoFactory.getDaoFromSourceObjectClass(sourceObject.getClass()); + relationDaoFactory.getDaoFromSourceObjectClass(sourceObject.getClass()); RelationLink relationLink = daoFromSourceObject. - findBySourceObjectAndTargetIdAndTargetType(sourceObject, targetObect.getId(), targetObect.getType()); + findBySourceObjectAndTargetIdAndTargetType(sourceObject, targetObect.getId(), targetObect.getType()); return relationLink; } - public List findRelationBySourceObject(@NonNull Object sourceObject) { + public List findRelationBySourceObject(@NonNull RelationIdentity sourceObject) { RelationDao daoFromSourceObject = - relationDaoFactory.getDaoFromSourceObjectClass(sourceObject.getClass()); + relationDaoFactory.getDaoFromSourceObjectClass(sourceObject.getClass()); List relationLinks = daoFromSourceObject.findBySourceObject(sourceObject); return relationLinks; } @@ -60,14 +59,15 @@ public List findRelationBySourceObject(@NonNull Object sourceObjec public Set findRelationByTargetRelationIdentity(@NonNull RelationIdentity targetObect) { Set allDaos = relationDaoFactory.getAllDaos(); Set relations = new HashSet<>(); - allDaos.forEach(dao -> relations.addAll(dao.findByTargetIdAndTargetType(targetObect.getId(), targetObect.getType()))); + allDaos.forEach( + dao -> relations.addAll(dao.findByTargetIdAndTargetType(targetObect.getId(), targetObect.getType()))); return relations; } private static RelationLink createRelationModelFromGenericParameter(RelationDao daoFromSourceObjectClass) { + Long> daoFromSourceObjectClass) { ResolvableType resolvableType = ResolvableType.forClass(daoFromSourceObjectClass.getClass()) - .as(RelationDao.class); + .as(RelationDao.class); ResolvableType generic = resolvableType.getGeneric(0); Class resolve = generic.resolve(); return (RelationLink) BeanUtils.instantiateClass(resolve); diff --git a/dynamic-relations/src/test/java/at/drm/processor/ReleationProcessorTest.java b/dynamic-relations/src/test/java/at/drm/processor/ReleationProcessorTest.java index 7ee579a..f816fb5 100644 --- a/dynamic-relations/src/test/java/at/drm/processor/ReleationProcessorTest.java +++ b/dynamic-relations/src/test/java/at/drm/processor/ReleationProcessorTest.java @@ -52,7 +52,7 @@ void getSupportedSourceVersion() { Mockito.when(processingEnvironment.getMessager()).thenReturn(messager); releationProcessorUnderTest.init(processingEnvironment); SourceVersion supportedSourceVersion = releationProcessorUnderTest.getSupportedSourceVersion(); - assertThat(supportedSourceVersion).isEqualTo(SourceVersion.RELEASE_17); + assertThat(supportedSourceVersion).isEqualTo(SourceVersion.RELEASE_21); } @Test diff --git a/jacoco-report/pom.xml b/jacoco-report/pom.xml index 9455ef4..1e325e2 100644 --- a/jacoco-report/pom.xml +++ b/jacoco-report/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.github.Mom0aut jdr @@ -15,7 +15,6 @@ ${basedir}/../ ${basedir}/../target/aggregate.exec UTF-8 - 0.8.8 diff --git a/pom.xml b/pom.xml index 7edd368..43e4bf3 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,11 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> org.springframework.boot spring-boot-starter-parent - 3.1.0 + 3.5.4 @@ -134,27 +134,31 @@ + 21 1.0.4 1.2.7 - 0.8.8 + 3.14.0 + 0.8.13 3.0.1 3.2.0 3.2.1 - 17 - 17 + 21 + 21 1.6.13 - 1.18.24 - 42.3.9 - 1.0.1 - 0.19 + 1.18.38 + 42.7.7 + 1.1.1 + 0.21.0 + 1.13.0 - 3.1.0 + 3.5.4 UTF-8 - 2.2.0 - 2.0.2 - 2.7.3 - 6.0.0 - 9.10.0 + 2.6.0 + 2.1.0 + 17.5.0 + 3.5.4 + 6.2.9 + 11.10.5 @@ -225,6 +229,13 @@ ${embedded-postgres.version} test + + io.zonky.test.postgres + embedded-postgres-binaries-bom + ${embedded-postgres-runtime.version} + pom + import + org.springframework.boot spring-boot-starter-web @@ -240,28 +251,37 @@ flyway-core ${flyway-core.version} + + org.flywaydb + flyway-database-postgresql + ${flyway-core.version} + runtime + - - - - - - - - - - - - + + + + + + + + + + + + org.apache.maven.plugins maven-compiler-plugin + ${maven-compiler-plugin.version} true + 1.21 + 1.21 diff --git a/testing/pom.xml b/testing/pom.xml index 04eda27..8f4f1f0 100644 --- a/testing/pom.xml +++ b/testing/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> io.github.Mom0aut @@ -39,6 +39,10 @@ org.flywaydb flyway-core + + org.flywaydb + flyway-database-postgresql + diff --git a/testing/src/test/resources/application-integration.properties b/testing/src/test/resources/application-integration.properties index 95fe68a..1446cea 100644 --- a/testing/src/test/resources/application-integration.properties +++ b/testing/src/test/resources/application-integration.properties @@ -3,3 +3,5 @@ spring.jpa.hibernate.ddl-auto=validate spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect spring.jpa.show-sql=false spring.flyway.enabled=true +embedded.postgres.version=15.3.0 +zonky.test.database.postgres \ No newline at end of file From 8095fad09a1dbf117da1b05bad219961a332c8ed Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 00:32:44 +0200 Subject: [PATCH 2/2] updated to jdk 21 and bumped all spring updated to the latest lts --- .github/workflows/maven-pr.yml | 4 ++-- .github/workflows/maven.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/maven-pr.yml b/.github/workflows/maven-pr.yml index a7649c6..69e3e72 100644 --- a/.github/workflows/maven-pr.yml +++ b/.github/workflows/maven-pr.yml @@ -16,10 +16,10 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN || secrets.TOKEN}} fetch-depth: 0 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' + java-version: '21' distribution: 'temurin' cache: maven - name: Build with Maven diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 1ac60e8..cc3c187 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -18,10 +18,10 @@ jobs: with: token: ${{ secrets.TOKEN}} fetch-depth: 0 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' + java-version: '21' distribution: 'temurin' cache: maven - name: Build with Maven