
com.xlrit.gears.engine.util.ReflectUtils Maven / Gradle / Ivy
package com.xlrit.gears.engine.util;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;
import com.xlrit.gears.engine.meta.Property;
public class ReflectUtils {
public static Property getIdProperty(Class> clazz) {
Predicate predicate = elem ->
elem.isAnnotationPresent(com.xlrit.gears.base.meta.Id.class) ||
elem.isAnnotationPresent(jakarta.persistence.Id.class);
return findProperty(clazz, predicate)
.orElseThrow(() -> new RuntimeException(clazz + " has no property annotated with @Id"));
}
public static Property getDisplayedProperty(Class> clazz) {
Predicate predicate = elem ->
elem.isAnnotationPresent(com.xlrit.gears.base.meta.Displayed.class);
return findProperty(clazz, predicate)
.orElseGet(() -> Property.fromToString(clazz));
}
public static Optional findProperty(Class> clazz, Predicate super AnnotatedElement> predicate) {
// first search by getter
Stream fromGetter = streamDeclaredMethods(clazz)
.filter(predicate)
.map(getter -> Property.fromMethod(clazz, getter));
// then by field
Stream fromField = streamDeclaredFields(clazz)
.filter(predicate)
.map(field -> Property.fromField(clazz, field));
return Stream.concat(fromGetter, fromField).findFirst();
}
public static Stream streamDeclaredMethods(Class> clazz) {
return Arrays.stream(clazz.getDeclaredMethods());
}
public static Stream streamDeclaredFields(Class> clazz) {
return Arrays.stream(clazz.getDeclaredFields());
}
public static boolean isGetter(Method m, String cname) {
return (m.getName().equals("get" + cname) || m.getName().equals("is" + cname))
&& (m.getParameterCount() == 0);
}
public static boolean isSetter(Method m, String cname) {
return m.getName().equals("set" + cname) && (m.getParameterCount() == 1);
}
public static boolean isBidiSetter(Method m, String cname) {
return m.getName().equals("set" + cname + "Bidi") && (m.getParameterCount() == 1);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy