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

info.archinnov.achilles.composite.ThriftCompositeFactory Maven / Gradle / Ivy

package info.archinnov.achilles.composite;

import static info.archinnov.achilles.serializer.ThriftSerializerUtils.*;
import info.archinnov.achilles.compound.ThriftCompoundKeyMapper;
import info.archinnov.achilles.entity.metadata.PropertyMeta;
import info.archinnov.achilles.helper.ThriftPropertyHelper;
import info.archinnov.achilles.serializer.ThriftSerializerTypeInferer;
import info.archinnov.achilles.type.WideMap;
import info.archinnov.achilles.validation.Validator;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.beans.AbstractComposite.ComponentEquality;
import me.prettyprint.hector.api.beans.Composite;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

    private ThriftPropertyHelper helper = new ThriftPropertyHelper();
    private ThriftCompoundKeyMapper compoundKeyMapper = new ThriftCompoundKeyMapper();

    public  Composite createBaseComposite(PropertyMeta propertyMeta, T key)
    {
        log.trace("Creating base composite for propertyMeta {}", propertyMeta.getPropertyName());

        Composite composite = new Composite();
        String propertyName = propertyMeta.getPropertyName();

        if (propertyMeta.isSingleKey())
        {
            log.trace("PropertyMeta {} is single key", propertyMeta.getPropertyName());
            Validator.validateNotNull(key, "The values for the for the key of WideMap '"
                    + propertyName + "' should not be null");

            Serializer keySerializer = ThriftSerializerTypeInferer.getSerializer(propertyMeta
                    .getKeyClass());
            composite.setComponent(0, key, keySerializer, keySerializer
                    .getComparatorType()
                    .getTypeName());
        }
        else
        {
            composite = compoundKeyMapper.writeToComposite(key, propertyMeta);
        }
        return composite;
    }

    public  Composite createForQuery(PropertyMeta propertyMeta, T key,
            ComponentEquality equality)
    {
        log.trace("Creating query composite for propertyMeta {}", propertyMeta.getPropertyName());

        Composite composite = new Composite();

        if (propertyMeta.isSingleKey())
        {
            log.trace("PropertyMeta {} is single key", propertyMeta.getPropertyName());

            if (key == null)
            {
                composite = null;
            }
            else
            {
                composite.addComponent(0, key, equality);
            }
        }
        else
        {
            composite = compoundKeyMapper.buildCompositeForQuery(key, propertyMeta, equality);
        }
        return composite;
    }

    public  Composite[] createForQuery(PropertyMeta propertyMeta, K start, K end,
            WideMap.BoundingMode bounds, WideMap.OrderingMode ordering)
    {
        log
                .trace("Creating query composite for propertyMeta {} with start {}, end {}, bounding mode {} and orderging {}",
                        propertyMeta.getPropertyName(), start, end, bounds.name(), ordering.name());

        Composite[] queryComp = new Composite[2];

        ComponentEquality[] equalities = helper.determineEquality(bounds, ordering);

        Composite startComp = createForQuery(propertyMeta, start, equalities[0]);
        Composite endComp = createForQuery(propertyMeta, end, equalities[1]);

        queryComp[0] = startComp;
        queryComp[1] = endComp;

        return queryComp;
    }

    public Composite createKeyForCounter(String fqcn, Object key, PropertyMeta idMeta)
    {
        log.trace("Creating composite counter row key for entity class {} and primary key {}",
                fqcn, key);

        Composite comp = new Composite();
        comp.setComponent(0, fqcn, STRING_SRZ);
        comp.setComponent(1, idMeta.writeValueToString(key), STRING_SRZ);
        return comp;
    }

    public  Composite createBaseForGet(PropertyMeta propertyMeta)
    {
        log
                .trace("Creating base composite for propertyMeta {} get",
                        propertyMeta.getPropertyName());

        Composite composite = new Composite();
        composite.addComponent(0, propertyMeta.type().flag(), ComponentEquality.EQUAL);
        composite.addComponent(1, propertyMeta.getPropertyName(), ComponentEquality.EQUAL);
        composite.addComponent(2, 0, ComponentEquality.EQUAL);
        return composite;
    }

    public  Composite createBaseForCounterGet(PropertyMeta propertyMeta)
    {
        log
                .trace("Creating base composite for propertyMeta {} get",
                        propertyMeta.getPropertyName());

        Composite composite = new Composite();
        composite.addComponent(0, propertyMeta.getPropertyName(), ComponentEquality.EQUAL);
        return composite;
    }

    public  Composite createBaseForQuery(PropertyMeta propertyMeta,
            ComponentEquality equality)
    {
        log.trace("Creating base composite for propertyMeta {} query and equality {}",
                propertyMeta.getPropertyName(), equality.name());

        Composite composite = new Composite();
        composite.addComponent(0, propertyMeta.type().flag(), ComponentEquality.EQUAL);
        composite.addComponent(1, propertyMeta.getPropertyName(), equality);
        return composite;
    }

    public  Composite createForBatchInsertSingleValue(PropertyMeta propertyMeta)
    {
        log.trace("Creating base composite for propertyMeta {} for single value batch insert",
                propertyMeta.getPropertyName());

        Composite composite = new Composite();
        composite.setComponent(0, propertyMeta.type().flag(), BYTE_SRZ, BYTE_SRZ
                .getComparatorType()
                .getTypeName());
        composite.setComponent(1, propertyMeta.getPropertyName(), STRING_SRZ, STRING_SRZ
                .getComparatorType()
                .getTypeName());
        composite.setComponent(2, 0, INT_SRZ, INT_SRZ.getComparatorType().getTypeName());
        return composite;
    }

    public  Composite createForBatchInsertSingleCounter(PropertyMeta propertyMeta)
    {
        log
                .trace("Creating base composite for propertyMeta {} for single counter value batch insert",
                        propertyMeta.getPropertyName());

        Composite composite = new Composite();
        composite.setComponent(0, propertyMeta.getPropertyName(), STRING_SRZ, STRING_SRZ
                .getComparatorType()
                .getTypeName());
        return composite;
    }

    public  Composite createForBatchInsertMultiValue(PropertyMeta propertyMeta,
            int hashOrPosition)
    {
        log
                .trace("Creating base composite for propertyMeta {} for multi value batch insert with hash or position {}",
                        propertyMeta.getPropertyName(), hashOrPosition);

        Composite composite = new Composite();
        composite.setComponent(0, propertyMeta.type().flag(), BYTE_SRZ, BYTE_SRZ
                .getComparatorType()
                .getTypeName());
        composite.setComponent(1, propertyMeta.getPropertyName(), STRING_SRZ, STRING_SRZ
                .getComparatorType()
                .getTypeName());
        composite.setComponent(2, hashOrPosition, INT_SRZ, INT_SRZ
                .getComparatorType()
                .getTypeName());
        return composite;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy