Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
info.archinnov.achilles.iterator.factory.ThriftKeyValueFactory Maven / Gradle / Ivy
package info.archinnov.achilles.iterator.factory;
import static info.archinnov.achilles.helper.ThriftLoggerHelper.format;
import info.archinnov.achilles.context.ThriftPersistenceContext;
import info.archinnov.achilles.dao.ThriftGenericEntityDao;
import info.archinnov.achilles.entity.metadata.EntityMeta;
import info.archinnov.achilles.entity.metadata.PropertyMeta;
import info.archinnov.achilles.entity.operations.ThriftEntityProxifier;
import info.archinnov.achilles.helper.ThriftJoinEntityHelper;
import info.archinnov.achilles.type.Counter;
import info.archinnov.achilles.type.KeyValue;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import me.prettyprint.hector.api.beans.Composite;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.beans.HCounterColumn;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
/**
* ThriftKeyValueFactory
*
* @author DuyHai DOAN
*
*/
public class ThriftKeyValueFactory
{
private static final Logger log = LoggerFactory.getLogger(ThriftKeyValueFactory.class);
private ThriftJoinEntityHelper joinHelper = new ThriftJoinEntityHelper();
private ThriftEntityProxifier proxifier = new ThriftEntityProxifier();
private ThriftCompositeTransformer thriftCompositeTransformer = new ThriftCompositeTransformer();
public KeyValue createKeyValue(ThriftPersistenceContext context,
PropertyMeta propertyMeta, HColumn hColumn)
{
log.trace("Build key/value for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return thriftCompositeTransformer.buildKeyValue(context, propertyMeta, hColumn);
}
public K createKey(PropertyMeta propertyMeta, HColumn hColumn)
{
log.trace("Build key for property {} of entity class {}", propertyMeta.getPropertyName(),
propertyMeta.getEntityClassName());
return thriftCompositeTransformer.buildKey(propertyMeta, hColumn);
}
public V createValue(ThriftPersistenceContext context, PropertyMeta propertyMeta,
HColumn hColumn)
{
log.trace("Build key value for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return thriftCompositeTransformer.buildValue(context, propertyMeta, hColumn);
}
public Integer createTtl(HColumn hColumn)
{
log.debug("Build ttl from Hcolumn {}", format(hColumn.getName()));
return hColumn.getTtl();
}
public List createValueList(PropertyMeta propertyMeta,
List> hColumns)
{
log.trace("Build value list for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return Lists.transform(hColumns,
thriftCompositeTransformer.buildValueTransformer(propertyMeta));
}
public List createKeyList(PropertyMeta propertyMeta,
List> hColumns)
{
log.trace("Build key list for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return Lists.transform(hColumns,
thriftCompositeTransformer.buildKeyTransformer(propertyMeta));
}
public List> createKeyValueList(ThriftPersistenceContext context,
PropertyMeta propertyMeta, List> hColumns)
{
log.trace("Build key/value list for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return Lists.transform(hColumns,
thriftCompositeTransformer.buildKeyValueTransformer(context, propertyMeta));
}
public List createJoinValueList(ThriftPersistenceContext context,
PropertyMeta propertyMeta, List> hColumns)
{
log.trace("Build join value list for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
List result = new ArrayList();
if (CollectionUtils.isNotEmpty(hColumns))
{
EntityMeta joinMeta = propertyMeta.joinMeta();
List joinIds = Lists.transform(hColumns,
thriftCompositeTransformer.buildRawValueTransformer());
Map joinEntities = loadJoinEntities(context, propertyMeta, joinMeta, joinIds);
for (Object joinId : joinIds)
{
V proxy = buildProxy(context, joinMeta, joinEntities, joinId);
result.add(proxy);
}
}
return result;
}
public List> createJoinKeyValueList(ThriftPersistenceContext context,
PropertyMeta propertyMeta, List> hColumns)
{
log.trace("Build join key/value list for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
List> result = new ArrayList>();
if (CollectionUtils.isNotEmpty(hColumns))
{
EntityMeta joinMeta = propertyMeta.joinMeta();
List keys = Lists.transform(hColumns,
thriftCompositeTransformer.buildKeyTransformer(propertyMeta));
List joinIds = Lists.transform(hColumns,
thriftCompositeTransformer.buildRawValueTransformer());
Map joinEntities = loadJoinEntities(context, propertyMeta, joinMeta, joinIds);
List ttls = Lists.transform(hColumns,
thriftCompositeTransformer.buildTtlTransformer());
List timestamps = Lists.transform(hColumns,
thriftCompositeTransformer.buildTimestampTransformer());
for (int i = 0; i < keys.size(); i++)
{
V proxy = buildProxy(context, joinMeta, joinEntities, joinIds.get(i));
result.add(new KeyValue(keys.get(i), proxy, ttls.get(i), timestamps.get(i)));
}
}
return result;
}
// Counter
public KeyValue createCounterKeyValue(ThriftPersistenceContext context,
PropertyMeta propertyMeta, HCounterColumn hColumn)
{
log.trace("Build counter key/value for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return thriftCompositeTransformer.buildCounterKeyValue(context, propertyMeta, hColumn);
}
public K createCounterKey(PropertyMeta propertyMeta,
HCounterColumn hColumn)
{
log.trace("Build counter key for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return thriftCompositeTransformer.buildCounterKey(propertyMeta, hColumn);
}
public Counter createCounterValue(ThriftPersistenceContext context,
PropertyMeta propertyMeta, HCounterColumn hColumn)
{
log.trace("Build counter value for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return thriftCompositeTransformer.buildCounterValue(context, propertyMeta, hColumn);
}
public List> createCounterKeyValueList(
ThriftPersistenceContext context, PropertyMeta propertyMeta,
List> hColumns)
{
log.trace("Build counter key/value list for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return Lists.transform(hColumns,
thriftCompositeTransformer.buildCounterKeyValueTransformer(context, propertyMeta));
}
public List createCounterValueList(ThriftPersistenceContext context,
PropertyMeta propertyMeta, List> hColumns)
{
log.trace("Build counter value lsit for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return Lists.transform(hColumns,
thriftCompositeTransformer.buildCounterValueTransformer(context, propertyMeta));
}
public List createCounterKeyList(PropertyMeta propertyMeta,
List> hColumns)
{
log.trace("Build counter key list for property {} of entity class {}",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
return Lists.transform(hColumns,
thriftCompositeTransformer.buildCounterKeyTransformer(propertyMeta));
}
private Map loadJoinEntities(ThriftPersistenceContext context,
PropertyMeta propertyMeta, EntityMeta joinMeta, List joinIds)
{
ThriftGenericEntityDao joinEntityDao = context.findEntityDao(joinMeta.getTableName());
Map joinEntities = joinHelper.loadJoinEntities(propertyMeta.getValueClass(),
joinIds, joinMeta, joinEntityDao);
return joinEntities;
}
private V buildProxy(ThriftPersistenceContext context, EntityMeta joinMeta,
Map joinEntities, Object joinId)
{
V joinEntity = joinEntities.get(joinId);
ThriftPersistenceContext joinContext = context.newPersistenceContext(joinMeta, joinEntity);
V proxy = proxifier.buildProxy(joinEntity, joinContext);
return proxy;
}
}