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

org.sfm.reflect.meta.ArrayElementPropertyMeta 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.meta;

import org.sfm.reflect.ReflectionService;
import org.sfm.reflect.Setter;
import org.sfm.reflect.TypeHelper;

import java.lang.reflect.Type;
import java.util.List;

public class ArrayElementPropertyMeta extends PropertyMeta {

	private final int index;
	private final ArrayClassMeta arrayMetaData;
	public ArrayElementPropertyMeta(String name,  String column, ReflectionService reflectService, int index, ArrayClassMeta arrayMetaData) {
		super(name, column, reflectService);
		this.index = index;
		this.arrayMetaData = arrayMetaData;
	}

	@SuppressWarnings("unchecked")
	@Override
	protected Setter newSetter() {
		if (List.class.isAssignableFrom(TypeHelper.toClass(arrayMetaData.getType()))) {
			return (Setter) new ListSetter(index);
		} else if (TypeHelper.toClass(arrayMetaData.getType()).isArray()) {
			return (Setter) new ArraySetter(index);
		} else {
			throw new IllegalArgumentException("Asking setter on unsupported type " + arrayMetaData.getType());
		}
	}

	@Override
	public Type getType() {
		return arrayMetaData.getElementTarget();
	}


	public int getIndex() {
		return index;
	}

	@Override
	public boolean isPrimitive() {
		return false;
	}

	@Override
	public String getPath() {
		return index + "." + getName();
	}


	private static class ArraySetter implements Setter {
		private final int index;

		private ArraySetter(int index) {
			this.index = index;
		}

		@Override
        public void set(E[] target, E value) throws Exception {
			target[index] = value;
        }
	}

	private static class ListSetter implements Setter, E> {
		private final int index;

		private ListSetter(int index) {
			this.index = index;
		}

		@Override
		public void set(List target, E value) throws Exception {
			while(target.size() <= index) {
				target.add(null);
			}
			target.set(index, value);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy