From 1d66169a43d22e89332d27c712467edf10030872 Mon Sep 17 00:00:00 2001 From: Francesco Date: Mon, 2 Oct 2023 09:16:20 +0200 Subject: [PATCH] Implemented scanning of multiple models packages (#3) --- .../tech/ailef/dbadmin/external/DbAdmin.java | 17 +++-- .../controller/DefaultDbAdminController.java | 5 +- .../external/dbmapping/DbObjectSchema.java | 4 ++ src/main/resources/templates/home.html | 72 ++++++++++--------- 4 files changed, 57 insertions(+), 41 deletions(-) diff --git a/src/main/java/tech/ailef/dbadmin/external/DbAdmin.java b/src/main/java/tech/ailef/dbadmin/external/DbAdmin.java index 8e8f835..b46f8ba 100644 --- a/src/main/java/tech/ailef/dbadmin/external/DbAdmin.java +++ b/src/main/java/tech/ailef/dbadmin/external/DbAdmin.java @@ -23,6 +23,7 @@ import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; @@ -70,7 +71,7 @@ public class DbAdmin { private List schemas = new ArrayList<>(); - private String modelsPackage; + private List modelsPackage; /** * Builds the DbAdmin instance by scanning the `@Entity` beans and loading @@ -79,18 +80,21 @@ public class DbAdmin { * @param properties the configuration properties */ public DbAdmin(@Autowired EntityManager entityManager, @Autowired DbAdminProperties properties) { - this.modelsPackage = properties.getModelsPackage(); + this.modelsPackage = Arrays.stream(properties.getModelsPackage().split(",")).map(String::trim).toList(); this.entityManager = entityManager; ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); provider.addIncludeFilter(new AnnotationTypeFilter(Entity.class)); - Set beanDefs = provider.findCandidateComponents(modelsPackage); - for (BeanDefinition bd : beanDefs) { - schemas.add(processBeanDefinition(bd)); + for (String currentPackage : modelsPackage) { + Set beanDefs = provider.findCandidateComponents(currentPackage); + for (BeanDefinition bd : beanDefs) { + schemas.add(processBeanDefinition(bd)); + } + logger.info("Scanned package '" + currentPackage + "'. Loaded " + beanDefs.size() + " schemas."); } - logger.info("Spring Boot Database Admin initialized. Loaded " + schemas.size() + " table definitions"); + logger.info("Spring Boot Database Admin initialized. Loaded " + schemas.size() + " schemas from " + modelsPackage.size() + " packages"); logger.info("Spring Boot Database Admin web interface at: http://YOUR_HOST:YOUR_PORT/" + properties.getBaseUrl()); } @@ -154,6 +158,7 @@ public class DbAdmin { CustomJpaRepository simpleJpaRepository = new CustomJpaRepository(schema, entityManager); schema.setJpaRepository(simpleJpaRepository); + logger.debug("Processing class: " + klass + " - Table: " + schema.getTableName()); Field[] fields = klass.getDeclaredFields(); diff --git a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java index 4b06db3..76b2726 100644 --- a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java +++ b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java @@ -103,10 +103,13 @@ public class DefaultDbAdminController { }).collect(Collectors.toList()); } + Map> groupedBy = + schemas.stream().collect(Collectors.groupingBy(s -> s.getBasePackage())); + Map counts = schemas.stream().collect(Collectors.toMap(s -> s.getClassName(), s -> repository.count(s))); - model.addAttribute("schemas", schemas); + model.addAttribute("schemas", groupedBy); model.addAttribute("query", query); model.addAttribute("counts", counts); model.addAttribute("activePage", "entities"); diff --git a/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbObjectSchema.java b/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbObjectSchema.java index fbb6dce..9c3b4b6 100644 --- a/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbObjectSchema.java +++ b/src/main/java/tech/ailef/dbadmin/external/dbmapping/DbObjectSchema.java @@ -115,6 +115,10 @@ public class DbObjectSchema { } } + public String getBasePackage() { + return entityClass.getPackageName(); + } + /** * Returns the DbAdmin instance * @return the DbAdmin instance diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index 6b9cbc8..ee521a6 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -21,40 +21,44 @@
- - - - - - - - - - - - - -
TableRowsJava class
- - - - - - - - -
-
- No entities have been loaded from Java classes. - -
    -
  • Make sure you are initializing Spring Boot DB Admin Panel correctly and double check - that the package you have set in the CommandLineRunner is the correct one.
  • -
  • Check that the Java classes in the package have been correctly marked with - the @Entity annotation.
  • -
-
+ +

+ + + + + + + + + + + + + +
TableRowsJava class
+ + + + + + + + +
+ +
+ No entities have been loaded from Java classes. + +
    +
  • Make sure you are initializing Spring Boot DB Admin Panel correctly and double check + that the package you have set in the CommandLineRunner is the correct one.
  • +
  • Check that the Java classes in the package have been correctly marked with + the @Entity annotation.
  • +
+
+