ActivitySummary

This commit is contained in:
2026-05-03 18:51:29 +02:00
parent 359ac0c723
commit 3b97e9d86a

View File

@@ -1,6 +1,6 @@
package com.peakup.tools.testdata;
import com.peakup.common.dao.PersistableEnum;
import com.peakup.common.model.PersistableEnum;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Transient;
@@ -40,16 +40,16 @@ public final class ResultSetMapper {
private ResultSetMapper() {
}
public static <T> T map(ResultSet rs, Class<T> clazz) throws Exception {
Map<String, Object> columns = buildColumnMap(rs);
T instance = newInstance(clazz);
public static <T> T map(final ResultSet rs, final Class<T> clazz) throws Exception {
final Map<String, Object> columns = buildColumnMap(rs);
final T instance = newInstance(clazz);
Class<?> cursor = clazz;
while (cursor != null && cursor != Object.class) {
for (Field field : cursor.getDeclaredFields()) {
for (final Field field : cursor.getDeclaredFields()) {
if (shouldSkip(field)) {
continue;
}
Object raw = columns.get(resolveColumnName(field));
final Object raw = columns.get(resolveColumnName(field));
if (raw == null) {
continue;
}
@@ -63,30 +63,30 @@ public final class ResultSetMapper {
// -----------------------------------------------------------------------
private static <T> T newInstance(Class<T> clazz) throws Exception {
var ctor = clazz.getDeclaredConstructor();
private static <T> T newInstance(final Class<T> clazz) throws Exception {
final var ctor = clazz.getDeclaredConstructor();
ctor.setAccessible(true);
return ctor.newInstance();
}
private static Map<String, Object> buildColumnMap(ResultSet rs) throws Exception {
ResultSetMetaData meta = rs.getMetaData();
int n = meta.getColumnCount();
Map<String, Object> map = new HashMap<>(n * 2);
private static Map<String, Object> buildColumnMap(final ResultSet rs) throws Exception {
final ResultSetMetaData meta = rs.getMetaData();
final int n = meta.getColumnCount();
final Map<String, Object> map = new HashMap<>(n * 2);
for (int i = 1; i <= n; i++) {
map.put(meta.getColumnName(i).toLowerCase(), rs.getObject(i));
}
return map;
}
private static boolean shouldSkip(Field field) {
private static boolean shouldSkip(final Field field) {
return field.isAnnotationPresent(ElementCollection.class)
|| field.isAnnotationPresent(Transient.class)
|| field.isSynthetic();
}
private static String resolveColumnName(Field field) {
Column col = field.getAnnotation(Column.class);
private static String resolveColumnName(final Field field) {
final Column col = field.getAnnotation(Column.class);
if (col != null && !col.name().isEmpty()) {
return col.name().toLowerCase();
}
@@ -94,30 +94,30 @@ public final class ResultSetMapper {
}
@SuppressWarnings({"unchecked", "rawtypes"})
private static Object convert(Object raw, Field field) throws Exception {
Class<?> type = field.getType();
private static Object convert(final Object raw, final Field field) throws Exception {
final Class<?> type = field.getType();
if (type == Instant.class) {
return ((Timestamp) raw).toInstant();
}
if (type.isEnum() && PersistableEnum.class.isAssignableFrom(type)) {
int key = ((Number) raw).intValue();
final int key = ((Number) raw).intValue();
return PersistableEnum.getEnumByKey(key, (PersistableEnum[]) type.getEnumConstants());
}
if (type == int[].class && raw instanceof Array arr) {
Object javaArr = arr.getArray();
if (type == int[].class && raw instanceof final Array arr) {
final Object javaArr = arr.getArray();
if (javaArr instanceof int[]) {
return javaArr;
}
Integer[] boxed = (Integer[]) javaArr;
int[] result = new int[boxed.length];
final Integer[] boxed = (Integer[]) javaArr;
final int[] result = new int[boxed.length];
for (int i = 0; i < boxed.length; i++) {
result[i] = boxed[i];
}
return result;
}
if (type == String[].class && raw instanceof Array arr) {
return (String[]) arr.getArray();
if (type == String[].class && raw instanceof final Array arr) {
return arr.getArray();
}
if (type == Long.class || type == long.class) {
return ((Number) raw).longValue();
@@ -137,10 +137,10 @@ public final class ResultSetMapper {
return raw;
}
private static String camelToSnake(String name) {
StringBuilder sb = new StringBuilder(name.length() + 4);
private static String camelToSnake(final String name) {
final StringBuilder sb = new StringBuilder(name.length() + 4);
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
final char c = name.charAt(i);
if (Character.isUpperCase(c) && i > 0) {
sb.append('_');
}