This commit is contained in:
Francesco
2023-09-25 10:10:30 +02:00
parent 95e8dea90f
commit cdbad51641
50 changed files with 1171 additions and 218 deletions

View File

@@ -0,0 +1,34 @@
package tech.ailef.dbadmin.external.dto;
import tech.ailef.dbadmin.external.dbmapping.DbObject;
public class AutocompleteSearchResult {
private Object id;
private String value;
public AutocompleteSearchResult() {
}
public AutocompleteSearchResult(DbObject o) {
this.id = o.getPrimaryKeyValue();
this.value = o.getDisplayName();
}
public Object getId() {
return id;
}
public void setId(Object id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}

View File

@@ -0,0 +1,52 @@
package tech.ailef.dbadmin.external.dto;
public enum CompareOperator {
GT {
@Override
public String getDisplayName() {
return "Greater than";
}
},
LT {
@Override
public String getDisplayName() {
return "Less than";
}
},
EQ {
@Override
public String getDisplayName() {
return "Equals";
}
},
STRING_EQ {
@Override
public String getDisplayName() {
return "Equals";
}
},
BEFORE {
@Override
public String getDisplayName() {
return "Before";
}
},
AFTER {
@Override
public String getDisplayName() {
return "After";
}
},
CONTAINS {
@Override
public String getDisplayName() {
return "Contains";
}
};
public abstract String getDisplayName();
public String toString() {
return this.name().toLowerCase();
}
}

View File

@@ -0,0 +1,98 @@
package tech.ailef.dbadmin.external.dto;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
public class LogsSearchRequest {
private String table;
private String actionType;
private String itemId;
private int page;
private int pageSize;
private String sortKey;
private String sortOrder;
public String getTable() {
return table == null || table.isBlank() || table.equalsIgnoreCase("Any") ? null : table;
}
public void setTable(String table) {
this.table = table;
}
public String getActionType() {
return actionType == null || actionType.isBlank() || actionType.equalsIgnoreCase("Any") ? null : actionType;
}
public void setActionType(String actionType) {
this.actionType = actionType;
}
public String getItemId() {
return itemId == null || itemId.isBlank() ? null : itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String getSortKey() {
return sortKey;
}
public void setSortKey(String sortKey) {
this.sortKey = sortKey;
}
public String getSortOrder() {
return sortOrder;
}
public void setSortOrder(String sortOrder) {
this.sortOrder = sortOrder;
}
@Override
public String toString() {
return "LogsSearchRequest [table=" + table + ", actionType=" + actionType + ", itemId=" + itemId + ", page="
+ page + ", pageSize=" + pageSize + ", sortKey=" + sortKey + ", sortOrder=" + sortOrder + "]";
}
public PageRequest toPageRequest() {
int actualPage = page - 1 < 0 ? 0 : page - 1;
int actualPageSize = pageSize <= 0 ? 50 : pageSize;
if (sortKey == null)
return PageRequest.of(actualPage, actualPageSize);
if (sortOrder == null) sortOrder = "ASC";
if (sortOrder.equals("DESC")) {
return PageRequest.of(actualPage, actualPageSize, Sort.by(sortKey).descending());
} else {
return PageRequest.of(actualPage, actualPageSize, Sort.by(sortKey).ascending());
}
}
}

View File

@@ -0,0 +1,32 @@
package tech.ailef.dbadmin.external.dto;
import java.util.List;
public class PaginatedResult<T> {
private PaginationInfo pagination;
private List<T> results;
public PaginatedResult(PaginationInfo pagination, List<T> page) {
this.pagination = pagination;
this.results = page;
}
public PaginationInfo getPagination() {
return pagination;
}
public List<T> getResults() {
return results;
}
public boolean isEmpty() {
return results.isEmpty();
}
public int getNumberOfResults() {
return getResults().size();
}
}

View File

@@ -0,0 +1,131 @@
package tech.ailef.dbadmin.external.dto;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.springframework.util.MultiValueMap;
import tech.ailef.dbadmin.external.misc.Utils;
/**
* Attached as output to requests that have a paginated response,
* holds information about the current pagination.
*/
public class PaginationInfo {
/**
* How many previous and next pages to generate, used in the front-end navigation
*/
private static final int PAGE_RANGE = 3;
/**
* The current page of results
*/
private int currentPage;
/**
* The last page for which there are results
*/
private int maxPage;
/**
* The current number of elements per page
*/
private int pageSize;
// TODO: Check if used
private long maxElement;
private Set<QueryFilter> queryFilters;
private String query;
public PaginationInfo(int currentPage, int maxPage, int pageSize, long maxElement, String query, Set<QueryFilter> queryFilters) {
this.currentPage = currentPage;
this.maxPage = maxPage;
this.pageSize = pageSize;
this.query = query;
this.maxElement = maxElement;
this.queryFilters = queryFilters;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getMaxPage() {
return maxPage;
}
public void setMaxPage(int maxPage) {
this.maxPage = maxPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public long getMaxElement() {
return maxElement;
}
public String getSortedPageLink(String sortKey, String sortOrder) {
MultiValueMap<String, String> params = Utils.computeParams(queryFilters);
if (query != null) {
params.put("query", new ArrayList<>());
params.get("query").add(query);
}
params.add("pageSize", "" + pageSize);
params.add("page", "" + currentPage);
params.add("sortKey", sortKey);
params.add("sortOrder", sortOrder);
return Utils.getQueryString(params);
}
public String getLink(int page) {
MultiValueMap<String, String> params = Utils.computeParams(queryFilters);
if (query != null) {
params.put("query", new ArrayList<>());
params.get("query").add(query);
}
params.add("pageSize", "" + pageSize);
params.add("page", "" + page);
return Utils.getQueryString(params);
}
public List<Integer> getBeforePages() {
return IntStream.range(Math.max(currentPage - PAGE_RANGE, 1), currentPage).boxed().collect(Collectors.toList());
}
public List<Integer> getAfterPages() {
return IntStream.range(currentPage + 1, Math.min(currentPage + PAGE_RANGE, maxPage + 1)).boxed().collect(Collectors.toList());
}
//
// public String getSortKey() {
// return sortKey;
// }
//
// public String getSortOrder() {
// return sortOrder;
// }
public boolean isLastPage() {
return currentPage == maxPage;
}
}

View File

@@ -0,0 +1,57 @@
package tech.ailef.dbadmin.external.dto;
import java.util.Objects;
public class QueryFilter {
private String field;
private CompareOperator op;
private String value;
public QueryFilter(String field, CompareOperator op, String value) {
this.field = field;
this.op = op;
this.value = value;
}
public String getField() {
return field;
}
public CompareOperator getOp() {
return op;
}
public String getValue() {
return value;
}
@Override
public int hashCode() {
return Objects.hash(field, op, value);
}
@Override
public String toString() {
String displayValue = value;
if (value.length() > 10) {
displayValue = value.substring(0, 4) + "..." + value.substring(value.length() - 4);
}
return "'" + field + "' " + op.getDisplayName() + " '" + displayValue + "'";
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
QueryFilter other = (QueryFilter) obj;
return Objects.equals(field, other.field) && Objects.equals(op, other.op) && Objects.equals(value, other.value);
}
}