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

com.spikeify.converters.MapJsonConverter Maven / Gradle / Ivy

There is a newer version: 0.2.35
Show newest version
package com.spikeify.converters;

import com.spikeify.Converter;
import com.spikeify.NoArgClassConstructor;

import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapJsonConverter implements Converter {

	private final Constructor classConstructor;
	private JsonConverter valueConverter;

	@SuppressWarnings("unchecked")
	public MapJsonConverter(Class mapType, Class valueType) {
		this.valueConverter = new JsonConverter(valueType);

		if (mapType.equals(Map.class)) {
			mapType = HashMap.class;
		}
		classConstructor = NoArgClassConstructor.getNoArgConstructor(mapType);
	}

	@SuppressWarnings("unchecked")
	@Override
	public Map fromProperty(Map propertyMap) {
		if (propertyMap == null) {
			return null;
		}
		Map fieldMap = NoArgClassConstructor.newInstance(classConstructor);
		Set entrySet = propertyMap.entrySet();
		for (Map.Entry entry : entrySet) {
			if(entry.getValue() instanceof String){
				// value is String, treat it as JSON
				fieldMap.put(entry.getKey(), valueConverter.fromProperty((String) entry.getValue()));
			} else {
				// value is already a java object
				fieldMap.put(entry.getKey(), entry.getValue());
			}
		}
		return fieldMap;
	}

	@SuppressWarnings("unchecked")
	@Override
	public Map fromField(Map fieldMap) {
		Map propertyMap = new HashMap<>(fieldMap.size());
		Set entrySet = fieldMap.entrySet();
		for (Map.Entry entry : entrySet) {
			propertyMap.put(entry.getKey(), valueConverter.fromField(entry.getValue()));
		}
		return propertyMap;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy