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

info.archinnov.achilles.helper.ThriftEntityMapper Maven / Gradle / Ivy

package info.archinnov.achilles.helper;

import static info.archinnov.achilles.serializer.ThriftSerializerUtils.STRING_SRZ;
import info.archinnov.achilles.entity.metadata.EntityMeta;
import info.archinnov.achilles.entity.metadata.PropertyMeta;
import info.archinnov.achilles.entity.metadata.PropertyType;
import info.archinnov.achilles.type.Pair;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import me.prettyprint.hector.api.beans.Composite;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * ThriftEntityMapper
 * 
 * @author DuyHai DOAN
 * 
 */
public class ThriftEntityMapper extends AchillesEntityMapper
{
	private static final Logger log = LoggerFactory.getLogger(ThriftEntityMapper.class);

	public void setEagerPropertiesToEntity(Object key, List> columns,
			EntityMeta entityMeta, Object entity)
	{
		log.trace("Set eager properties to entity {} ", entityMeta.getClassName());

		Map> listProperties = new HashMap>();
		Map> setProperties = new HashMap>();
		Map> mapProperties = new HashMap>();

		setIdToEntity(key, entityMeta.getIdMeta(), entity);

		Map> propertyMetas = entityMeta.getPropertyMetas();

		for (Pair pair : columns)
		{
			String propertyName = pair.left.get(1, STRING_SRZ);

			if (StringUtils.equals(propertyName, PropertyType.SERIAL_VERSION_UID.name()))
			{
				if (Long.parseLong(pair.right) != entityMeta.getSerialVersionUID())
				{
					throw new IllegalStateException(
							"Saved serialVersionUID does not match current serialVersionUID for entity '"
									+ entityMeta.getClassName() + "'");
				}
				continue;
			}

			// PropertyMeta propertyMeta = entityMeta
			// . getPropertyMetaByProperty(propertyName);

			PropertyMeta propertyMeta = propertyMetas.get(propertyName);

			if (propertyMeta.type() == PropertyType.SIMPLE)
			{
				setSimplePropertyToEntity(pair.right, propertyMeta, entity);
			}

			else if (propertyMeta.type() == PropertyType.LIST)
			{
				addToList(listProperties, propertyMeta, propertyMeta.getValueFromString(pair.right));
			}

			else if (propertyMeta.type() == PropertyType.SET)
			{
				addToSet(setProperties, propertyMeta, propertyMeta.getValueFromString(pair.right));
			}

			else if (propertyMeta.type() == PropertyType.MAP)
			{
				addToMap(mapProperties, propertyMeta,
						propertyMeta.getKeyValueFromString(pair.right));
			}
		}

		for (Entry> entry : listProperties.entrySet())
		{
			setListPropertyToEntity(entry.getValue(), propertyMetas.get(entry.getKey()), entity);
		}

		for (Entry> entry : setProperties.entrySet())
		{
			setSetPropertyToEntity(entry.getValue(), propertyMetas.get(entry.getKey()), entity);
		}

		for (Entry> entry : mapProperties.entrySet())
		{
			setMapPropertyToEntity(entry.getValue(), propertyMetas.get(entry.getKey()), entity);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy