This commit is contained in:
Francesco 2023-09-27 10:38:17 +02:00
parent 747f07e041
commit 63470ff412
9 changed files with 25 additions and 32 deletions

View File

@ -26,7 +26,7 @@ import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany; import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne; import jakarta.persistence.OneToOne;
import tech.ailef.dbadmin.external.annotations.DisplayFormat; import tech.ailef.dbadmin.external.annotations.DisplayFormat;
import tech.ailef.dbadmin.external.dbmapping.AdvancedJpaRepository; import tech.ailef.dbadmin.external.dbmapping.CustomJpaRepository;
import tech.ailef.dbadmin.external.dbmapping.DbField; import tech.ailef.dbadmin.external.dbmapping.DbField;
import tech.ailef.dbadmin.external.dbmapping.DbFieldType; import tech.ailef.dbadmin.external.dbmapping.DbFieldType;
import tech.ailef.dbadmin.external.dbmapping.DbObjectSchema; import tech.ailef.dbadmin.external.dbmapping.DbObjectSchema;
@ -126,7 +126,7 @@ public class DbAdmin {
try { try {
Class<?> klass = Class.forName(fullClassName); Class<?> klass = Class.forName(fullClassName);
DbObjectSchema schema = new DbObjectSchema(klass, this); DbObjectSchema schema = new DbObjectSchema(klass, this);
AdvancedJpaRepository simpleJpaRepository = new AdvancedJpaRepository(schema, entityManager); CustomJpaRepository simpleJpaRepository = new CustomJpaRepository(schema, entityManager);
schema.setJpaRepository(simpleJpaRepository); schema.setJpaRepository(simpleJpaRepository);
System.out.println("\n\n******************************************************"); System.out.println("\n\n******************************************************");

View File

@ -88,7 +88,7 @@ public class DefaultDbAdminController {
model.addAttribute("schemas", schemas); model.addAttribute("schemas", schemas);
model.addAttribute("query", query); model.addAttribute("query", query);
model.addAttribute("counts", counts); model.addAttribute("counts", counts);
model.addAttribute("activePage", "home"); model.addAttribute("activePage", "entities");
model.addAttribute("title", "Entities | Index"); model.addAttribute("title", "Entities | Index");
return "home"; return "home";
@ -136,7 +136,7 @@ public class DefaultDbAdminController {
CompareOperator.valueOf(otherParams.get("remove_op").get(i).toUpperCase()), CompareOperator.valueOf(otherParams.get("remove_op").get(i).toUpperCase()),
otherParams.get("remove_value").get(i) otherParams.get("remove_value").get(i)
); );
System.out.println("TOREMOVE = " + toRemove);
queryFilters.removeIf(f -> f.equals(toRemove)); queryFilters.removeIf(f -> f.equals(toRemove));
} }

View File

@ -26,14 +26,14 @@ import tech.ailef.dbadmin.external.dto.QueryFilter;
import tech.ailef.dbadmin.external.exceptions.DbAdminException; import tech.ailef.dbadmin.external.exceptions.DbAdminException;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public class AdvancedJpaRepository extends SimpleJpaRepository { public class CustomJpaRepository extends SimpleJpaRepository {
private EntityManager entityManager; private EntityManager entityManager;
private DbObjectSchema schema; private DbObjectSchema schema;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public AdvancedJpaRepository(DbObjectSchema schema, EntityManager em) { public CustomJpaRepository(DbObjectSchema schema, EntityManager em) {
super(schema.getJavaClass(), em); super(schema.getJavaClass(), em);
this.entityManager = em; this.entityManager = em;
this.schema = schema; this.schema = schema;

View File

@ -220,7 +220,7 @@ public class DbAdminRepository {
*/ */
public PaginatedResult<DbObject> search(DbObjectSchema schema, String query, int page, int pageSize, String sortKey, public PaginatedResult<DbObject> search(DbObjectSchema schema, String query, int page, int pageSize, String sortKey,
String sortOrder, Set<QueryFilter> queryFilters) { String sortOrder, Set<QueryFilter> queryFilters) {
AdvancedJpaRepository jpaRepository = schema.getJpaRepository(); CustomJpaRepository jpaRepository = schema.getJpaRepository();
long maxElement = count(schema, query, queryFilters); long maxElement = count(schema, query, queryFilters);
int maxPage = (int)(Math.ceil ((double)maxElement / pageSize)); int maxPage = (int)(Math.ceil ((double)maxElement / pageSize));
@ -245,7 +245,7 @@ public class DbAdminRepository {
* @return * @return
*/ */
public List<DbObject> search(DbObjectSchema schema, String query) { public List<DbObject> search(DbObjectSchema schema, String query) {
AdvancedJpaRepository jpaRepository = schema.getJpaRepository(); CustomJpaRepository jpaRepository = schema.getJpaRepository();
return jpaRepository.search(query, 1, 50, null, null, null).stream() return jpaRepository.search(query, 1, 50, null, null, null).stream()
.map(o -> new DbObject(o, schema)) .map(o -> new DbObject(o, schema))

View File

@ -5,6 +5,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
@ -144,13 +145,10 @@ public class DbField {
} }
public Set<DbFieldValue> getAllValues() { public Set<DbFieldValue> getAllValues() {
List findAll = schema.getJpaRepository().findAll(); List<?> findAll = schema.getJpaRepository().findAll();
Set<DbFieldValue> allValues = new HashSet<>(); return findAll.stream()
for (Object o : findAll) { .map(o -> new DbObject(o, schema).get(this))
DbFieldValue val = new DbObject(o, schema).get(this); .collect(Collectors.toSet());
allValues.add(val);
}
return allValues;
} }
@Override @Override

View File

@ -39,7 +39,7 @@ public class DbObjectSchema {
/** /**
* A JPA repository to operate on the database * A JPA repository to operate on the database
*/ */
private AdvancedJpaRepository jpaRepository; private CustomJpaRepository jpaRepository;
private DbAdmin dbAdmin; private DbAdmin dbAdmin;
@ -113,11 +113,11 @@ public class DbObjectSchema {
fields.add(f); fields.add(f);
} }
public AdvancedJpaRepository getJpaRepository() { public CustomJpaRepository getJpaRepository() {
return jpaRepository; return jpaRepository;
} }
public void setJpaRepository(AdvancedJpaRepository jpaRepository) { public void setJpaRepository(CustomJpaRepository jpaRepository) {
this.jpaRepository = jpaRepository; this.jpaRepository = jpaRepository;
} }

View File

@ -130,6 +130,13 @@
<ul class="categorical-select"> <ul class="categorical-select">
<li th:each="categoricalValue : ${field.getAllValues()}"> <li th:each="categoricalValue : ${field.getAllValues()}">
<form action="" method="GET"> <form action="" method="GET">
<!--/*--> Propagate queryParams containing other filters with hidden fields <!--*/-->
<th:block th:each="p : ${queryParams.keySet()}">
<input th:each="v : ${queryParams.get(p)}"
th:name="${p}" th:value="${v}" type="hidden"
th:if="${p.startsWith('filter_')}">
</th:block>
<!-- Reset page when applying filter to start back at page 1 --> <!-- Reset page when applying filter to start back at page 1 -->
<input type="hidden" name="page" value="1"> <input type="hidden" name="page" value="1">
<input type="hidden" name="pageSize" th:value="${page.getPagination().getPageSize()}"> <input type="hidden" name="pageSize" th:value="${page.getPagination().getPageSize()}">

View File

@ -43,18 +43,6 @@
<div class="sidebar-top"> <div class="sidebar-top">
<h6 class="fw-bold pt-2 ms-3 menu-subheading d-none d-md-block">MENU</h6> <h6 class="fw-bold pt-2 ms-3 menu-subheading d-none d-md-block">MENU</h6>
<ul class="sidebar-menu pb-0 mb-0 "> <ul class="sidebar-menu pb-0 mb-0 ">
<li th:class="${#strings.equals(activePage, 'home') ? 'active' : ''}">
<a th:href="|/${baseUrl}|">
<div class="d-flex align-items-center">
<div class="menu-icon">
<i class="bi bi-house"></i>
</div>
<div class="menu-entry-text d-none d-md-block">
Home
</div>
</div>
</a>
</li>
<li th:class="${#strings.equals(activePage, 'entities') ? 'active' : ''}"> <li th:class="${#strings.equals(activePage, 'entities') ? 'active' : ''}">
<a th:href="|/${baseUrl}|"> <a th:href="|/${baseUrl}|">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">

View File

@ -8,8 +8,8 @@
<div class="d-flex"> <div class="d-flex">
<div th:replace="~{fragments/resources :: sidebar('entities')}"></div> <div th:replace="~{fragments/resources :: sidebar('entities')}"></div>
<div class="main-content bg-lighter"> <div class="main-content bg-lighter">
<h1 class="fw-bold mb-4"><i class="align-middle bi bi-house"></i><span class="align-middle"> Home</span></h1> <h1 class="fw-bold mb-4"><i class="align-middle bi bi-database"></i><span class="align-middle"> Entities</span></h1>
<form th:action="${baseUrl}" method="GET"> <form th:action="|/${baseUrl}|" method="GET">
<div class="input-group"> <div class="input-group">
<input type="text" th:value="${query}" <input type="text" th:value="${query}"
placeholder="Type a class or a table name and press ENTER to search" placeholder="Type a class or a table name and press ENTER to search"