/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.test.sqm.parser.criteria.tree.select;
import java.util.List;
import java.util.Map;
import org.hibernate.query.sqm.produce.spi.criteria.CriteriaVisitor;
import org.hibernate.query.sqm.produce.spi.criteria.JpaExpression;
import org.hibernate.query.sqm.tree.select.SqmAliasedExpressionContainer;
import org.hibernate.query.sqm.tree.select.SqmDynamicInstantiation;
import org.hibernate.test.sqm.parser.criteria.tree.CriteriaBuilderImpl;
/**
* @author Steve Ebersole
*/
public class DynamicInstantiationImpl<T> extends AbstractCompoundSelection<T> {
public DynamicInstantiationImpl(
CriteriaBuilderImpl criteriaBuilder,
Class<T> target,
List<JpaExpression<?>> arguments) {
super( criteriaBuilder, target, arguments );
}
@Override
public void visitSelections(CriteriaVisitor visitor, SqmAliasedExpressionContainer container) {
final SqmDynamicInstantiation dynamicInstantiation;
if ( List.class.equals( getJavaType() ) ) {
dynamicInstantiation = SqmDynamicInstantiation.forListInstantiation();
}
else if ( Map.class.equals( getJavaType() ) ) {
dynamicInstantiation = SqmDynamicInstantiation.forMapInstantiation();
}
else {
dynamicInstantiation = SqmDynamicInstantiation.forClassInstantiation( getJavaType() );
}
for ( JpaExpression<?> argument : getExpressions() ) {
argument.visitSelections( visitor, dynamicInstantiation );
}
container.add( dynamicInstantiation, getAlias() );
}
}