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

com.github.jmkgreen.morphia.converters.MapOfValuesConverter Maven / Gradle / Ivy

There is a newer version: 1.2.3
Show newest version
/**
 * 
 */
package com.github.jmkgreen.morphia.converters;

import java.util.HashMap;
import java.util.Map;

import com.github.jmkgreen.morphia.mapping.MappedField;
import com.github.jmkgreen.morphia.mapping.MappingException;
import com.github.jmkgreen.morphia.utils.IterHelper;
import com.github.jmkgreen.morphia.utils.IterHelper.MapIterCallback;
import com.github.jmkgreen.morphia.utils.ReflectionUtils;

/**
 * @author Uwe Schaefer, ([email protected])
 */
@SuppressWarnings({"unchecked","rawtypes"})
public class MapOfValuesConverter extends TypeConverter {
	private final DefaultConverters converters;
	
	public MapOfValuesConverter(DefaultConverters converters) {
		this.converters = converters;
	}
	
	@Override
	protected boolean isSupported(Class c, MappedField optionalExtraInfo) {
		if (optionalExtraInfo != null)
			return optionalExtraInfo.isMap();
		else
			return ReflectionUtils.implementsInterface(c, Map.class);
	}
	
	@Override
	public Object decode(Class targetClass, Object fromDBObject, final MappedField mf) throws MappingException {
		if (fromDBObject == null) return null;


		final Map values = mapr.getOptions().objectFactory.createMap(mf);
		new IterHelper().loopMap((Object)fromDBObject, new MapIterCallback() {
			@Override
			public void eval(Object key, Object val) {
					Object objKey = converters.decode(mf.getMapKeyClass(), key);
					values.put(objKey, converters.decode(mf.getSubClass(), val));
				}});
		
		return values;
	}
	
	@Override
	public Object encode(Object value, MappedField mf) {
		if (value == null)
			return null;
		
		Map map = (Map) value;
		if ((map != null) && (map.size() > 0)) {
			Map mapForDb = new HashMap();
			for (Map.Entry entry : map.entrySet()) {
				String strKey = converters.encode(entry.getKey()).toString();
				mapForDb.put(strKey, converters.encode(entry.getValue()));
			}
			return mapForDb;
		}
		return null;
	}	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy