diff --git a/openbas-framework/pom.xml b/openbas-framework/pom.xml index c2c8191ec9..852ba9dc3d 100644 --- a/openbas-framework/pom.xml +++ b/openbas-framework/pom.xml @@ -38,11 +38,6 @@ commons-io ${commons-io.version} - - org.reflections - reflections - 0.10.2 - org.springframework.boot diff --git a/openbas-framework/src/main/java/io/openbas/utils/SubclassScanner.java b/openbas-framework/src/main/java/io/openbas/utils/SubclassScanner.java new file mode 100644 index 0000000000..8ce1ad500a --- /dev/null +++ b/openbas-framework/src/main/java/io/openbas/utils/SubclassScanner.java @@ -0,0 +1,23 @@ +package io.openbas.utils; + +import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; +import org.springframework.core.type.filter.AssignableTypeFilter; + +import java.util.Set; +import java.util.stream.Collectors; + +public class SubclassScanner { + public static Set> getSubclasses(String basePackage, Class clazz) { + ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); + provider.addIncludeFilter(new AssignableTypeFilter(clazz)); + return provider.findCandidateComponents(basePackage).stream() + .map(beanDefinition -> { + try { + return Class.forName(beanDefinition.getBeanClassName()); + } catch (ClassNotFoundException e) { + return null; + } + }) + .collect(Collectors.toSet()); + } +} diff --git a/openbas-framework/src/main/java/io/openbas/utils/schema/SchemaUtils.java b/openbas-framework/src/main/java/io/openbas/utils/schema/SchemaUtils.java index 82243feb6f..fe8e2c8e0b 100644 --- a/openbas-framework/src/main/java/io/openbas/utils/schema/SchemaUtils.java +++ b/openbas-framework/src/main/java/io/openbas/utils/schema/SchemaUtils.java @@ -2,12 +2,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.openbas.annotation.Queryable; +import io.openbas.utils.SubclassScanner; import jakarta.persistence.Column; import jakarta.persistence.JoinTable; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -import org.reflections.Reflections; import java.lang.annotation.Annotation; import java.lang.reflect.Field; @@ -18,7 +18,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -import static org.reflections.scanners.Scanners.SubTypes; import static org.springframework.util.StringUtils.hasText; public class SchemaUtils { @@ -33,18 +32,19 @@ private SchemaUtils() { Email.class ); + private static final String BASE_CLASS_PACKAGE = "io.openbas.database.model"; + private static final ConcurrentHashMap, List> cacheMap = new ConcurrentHashMap<>(); // -- SCHEMA -- public static List schemaWithSubtypes(@NotNull Class clazz) throws ClassNotFoundException { - Reflections reflections = new Reflections("io.openbas.database.model"); - Set> subTypes = reflections.get(SubTypes.of(clazz).asClass()); - List> propertySchemasAll = new ArrayList<>(); propertySchemasAll.add(schema(clazz)); - for (Class subType : subTypes) { - propertySchemasAll.add(schema(subType)); - } + propertySchemasAll + .addAll(SubclassScanner.getSubclasses(BASE_CLASS_PACKAGE, clazz) + .stream() + .map(SchemaUtils::schema) + .toList()); return propertySchemasAll.stream().flatMap(List::stream) .collect(Collectors.toMap(