Package com.dottydingo.hyperion.service.query

Source Code of com.dottydingo.hyperion.service.query.AssociationsPredicateBuilder

package com.dottydingo.hyperion.service.query;

import cz.jirutka.rsql.parser.model.Comparison;


import javax.persistence.criteria.From;
import javax.persistence.criteria.Predicate;
import javax.persistence.metamodel.EntityType;

/**
*/
public class AssociationsPredicateBuilder extends AbstractPredicateBuilder
{
    @Override
    public boolean accept(String propertyPath, Class<?> entityClass, ExpressionPredicateBuilder parent)
    {
        return splitPath(propertyPath).length > 1;
    }

    @Override
    public Predicate createPredicate(String propertyPath, Comparison operator, String argument, From root,
                                     ExpressionPredicateBuilder parent)
            throws ArgumentFormatException, UnknownSelectorException
    {
        String[] path = splitPath(propertyPath);
        String property = null;
        From lastRoot = root;

        // walk through associations
        for (int i = 0; i < path.length - 1; i++)
        {
            EntityType metadata = parent.getEntityType(lastRoot.getJavaType());
            property = parent.getMapper().translate(path[i], lastRoot.getJavaType());

            if (!isPropertyName(property, metadata))
            {
                throw new UnknownSelectorException(path[i]);
            }

            lastRoot = lastRoot.join(property);

            logger.trace("Nesting level {}: property '{}' of entity {}",
                    new Object[]{i, property, metadata.getJavaType().getSimpleName()});

        }

        // the last property may by an ordinal property (not an association)
        property = parent.getMapper().translate(path[path.length - 1], lastRoot.getJavaType());

        return parent.buildPredicate(lastRoot, property, operator, argument);

    }

    protected String[] splitPath(String path)
    {
        return path.split("\\.");
    }

}
TOP

Related Classes of com.dottydingo.hyperion.service.query.AssociationsPredicateBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.