All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sfm.reflect.ObjectSetterFactory Maven / Gradle / Ivy

Go to download

Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.

There is a newer version: 1.10.3
Show newest version
package org.sfm.reflect;

import org.sfm.reflect.asm.AsmFactory;
import org.sfm.reflect.impl.FieldSetter;
import org.sfm.reflect.impl.MethodSetter;
import org.sfm.reflect.impl.NullSetter;
import org.sfm.reflect.primitive.*;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 *
 */
public final class ObjectSetterFactory {
	
	private final AsmFactory asmFactory;
	
	public ObjectSetterFactory(final AsmFactory asmFactory) {
		this.asmFactory = asmFactory;
	}

	/**
	 *
	 * @param target
	 * @param property
	 * @param 
	 * @param 

* @return */ public Setter getSetter(final Class target, final String property) { // first look for method final Method method = lookForMethod(target, property); final Setter setter; if (method == null) { setter = getFieldSetter(target, property); } else { setter = getMethodSetter(method); } return setter; } /** * * @param method * @param * @param

* @return */ public Setter getMethodSetter(final Method method) { if (asmFactory != null) { try { return asmFactory.createSetter(method); } catch(Exception e) { // ignore } } return new MethodSetter(method); } public Setter getFieldSetter(final Class target, final String property) { // look for field final Field field = lookForField(target, property); if (field != null) { return getFieldSetter(field); } else { return null; } } private Setter getFieldSetter(Field field) { if (asmFactory != null && Modifier.isPublic(field.getModifiers())) { try { return asmFactory.createSetter(field); } catch(Exception e) { } } if (!Modifier.isPublic(field.getModifiers())) { field.setAccessible(true); } return new FieldSetter(field); } private Method lookForMethod(final Class target, final String property) { if (target == null) return null; for(Method m : target.getDeclaredMethods()) { if(SetterHelper.methodModifiersMatches(m.getModifiers()) && SetterHelper.methodNameMatchesProperty(m.getName(), property)) { return m; } } if (!Object.class.equals(target)) { return lookForMethod(target.getSuperclass(), property); } return null; } private Field lookForField(final Class target, final String property) { if (target == null) return null; for(Field field : target.getDeclaredFields()) { if(SetterHelper.fieldModifiersMatches(field.getModifiers()) && SetterHelper.fieldNameMatchesProperty(field.getName(), property)) { return field; } } if (!Object.class.equals(target)) { return lookForField(target.getSuperclass(), property); } return null; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static BooleanSetter toBooleanSetter(final Setter setter) { if (isNullSetter(setter)) { return null; } else if (setter instanceof BooleanSetter) { return (BooleanSetter) setter; } else if (setter instanceof MethodSetter) { return new BooleanMethodSetter(((MethodSetter) setter).getMethod()); } else if (setter instanceof FieldSetter) { return new BooleanFieldSetter(((FieldSetter) setter).getField()); } else { throw new IllegalArgumentException("Invalid type " + setter); } } private static boolean isNullSetter(Setter setter) { return setter == null || setter instanceof NullSetter; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static ByteSetter toByteSetter(final Setter setter) { if (isNullSetter(setter)) { return null; } else if (setter instanceof ByteSetter) { return (ByteSetter) setter; } else if (setter instanceof MethodSetter) { return new ByteMethodSetter(((MethodSetter) setter).getMethod()); } else if (setter instanceof FieldSetter) { return new ByteFieldSetter(((FieldSetter) setter).getField()); } else { throw new IllegalArgumentException("Invalid type " + setter); } } @SuppressWarnings({ "rawtypes", "unchecked" }) public static CharacterSetter toCharacterSetter(final Setter setter) { if (isNullSetter(setter)) { return null; } else if (setter instanceof CharacterSetter) { return (CharacterSetter) setter; } else if (setter instanceof MethodSetter) { return new CharacterMethodSetter(((MethodSetter) setter).getMethod()); } else if (setter instanceof FieldSetter) { return new CharacterFieldSetter(((FieldSetter) setter).getField()); } else { throw new IllegalArgumentException("Invalid type " + setter); } } @SuppressWarnings({ "rawtypes", "unchecked" }) public static ShortSetter toShortSetter(final Setter setter) { if (isNullSetter(setter)) { return null; } else if (setter instanceof ShortSetter) { return (ShortSetter) setter; } else if (setter instanceof MethodSetter) { return new ShortMethodSetter(((MethodSetter) setter).getMethod()); } else if (setter instanceof FieldSetter) { return new ShortFieldSetter(((FieldSetter) setter).getField()); } else { throw new IllegalArgumentException("Invalid type " + setter); } } @SuppressWarnings({ "rawtypes", "unchecked" }) public static IntSetter toIntSetter(final Setter setter) { if (isNullSetter(setter)) { return null; } else if (setter instanceof IntSetter) { return (IntSetter) setter; } else if (setter instanceof MethodSetter) { return new IntMethodSetter(((MethodSetter) setter).getMethod()); } else if (setter instanceof FieldSetter) { return new IntFieldSetter(((FieldSetter) setter).getField()); } else { throw new IllegalArgumentException("Invalid type " + setter); } } @SuppressWarnings({ "rawtypes", "unchecked" }) public static LongSetter toLongSetter(final Setter setter) { if (isNullSetter(setter)) { return null; } else if (setter instanceof LongSetter) { return (LongSetter) setter; } else if (setter instanceof MethodSetter) { return new LongMethodSetter(((MethodSetter) setter).getMethod()); } else if (setter instanceof FieldSetter) { return new LongFieldSetter(((FieldSetter) setter).getField()); } else { throw new IllegalArgumentException("Invalid type " + setter); } } @SuppressWarnings({ "rawtypes", "unchecked" }) public static FloatSetter toFloatSetter(final Setter setter) { if (isNullSetter(setter)) { return null; } else if (setter instanceof FloatSetter) { return (FloatSetter) setter; } else if (setter instanceof MethodSetter) { return new FloatMethodSetter(((MethodSetter) setter).getMethod()); } else if (setter instanceof FieldSetter) { return new FloatFieldSetter(((FieldSetter) setter).getField()); } else { throw new IllegalArgumentException("Invalid type " + setter); } } @SuppressWarnings({ "rawtypes", "unchecked" }) public static DoubleSetter toDoubleSetter(final Setter setter) { if (isNullSetter(setter)) { return null; } else if (setter instanceof DoubleSetter) { return (DoubleSetter) setter; } else if (setter instanceof MethodSetter) { return new DoubleMethodSetter(((MethodSetter) setter).getMethod()); } else if (setter instanceof FieldSetter) { return new DoubleFieldSetter(((FieldSetter) setter).getField()); } else { throw new IllegalArgumentException("Invalid type " + setter); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy