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

org.sfm.reflect.meta.MapElementPropertyMeta Maven / Gradle / Ivy

package org.sfm.reflect.meta;

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

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

public class MapElementPropertyMeta, K, V> extends PropertyMeta {

	private final ClassMeta valueMetaData;
	private final K key;
	public MapElementPropertyMeta(PropertyNameMatcher propertyNameMatcher, ReflectionService reflectService, ClassMeta valueMetaData, K key) {
		super(propertyNameMatcher.toString(), reflectService);
		this.valueMetaData = valueMetaData;
		this.key = key;
	}

	@SuppressWarnings("unchecked")
	@Override
	protected Setter newSetter() {
        return new MapSetter(key);
	}

    @SuppressWarnings("unchecked")
    @Override
    protected Getter newGetter() {
        return new MapGetter(key);
    }

    @Override
	public Type getPropertyType() {
		return valueMetaData.getType();
	}


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

	public K getKey() {
		return key;
	}


	private static class MapSetter, K, V> implements Setter {
		private final K key;

		private MapSetter(K key) {
			this.key = key;
		}

		@Override
        public void set(T target, V value) throws Exception {
			target.put(key, value);
        }
	}

    private static class MapGetter, K, V> implements Getter {
        private final K key;

        private MapGetter(K key) {
            this.key = key;
        }

        @Override
        public V get(T target) throws Exception {
            return target.get(key);
        }
    }

    @Override
    public String toString() {
        return "MapElementPropertyMeta{"
				+"key=" + key +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy