org.hibernate.query.criteria.internal.expression.CompoundSelectionImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
Hibernate's core ORM functionality
/*
* 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 .
*/
package org.hibernate.query.criteria.internal.expression;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Tuple;
import javax.persistence.criteria.CompoundSelection;
import javax.persistence.criteria.Selection;
import org.hibernate.query.criteria.internal.CriteriaBuilderImpl;
import org.hibernate.query.criteria.internal.ParameterRegistry;
import org.hibernate.query.criteria.internal.Renderable;
import org.hibernate.query.criteria.internal.TupleElementImplementor;
import org.hibernate.query.criteria.internal.ValueHandlerFactory;
import org.hibernate.query.criteria.internal.compile.RenderingContext;
/**
* The Hibernate implementation of the JPA {@link CompoundSelection}
* contract.
*
* @author Steve Ebersole
*/
public class CompoundSelectionImpl
extends SelectionImpl
implements CompoundSelection, Renderable, Serializable {
private final boolean isConstructor;
private List> selectionItems;
public CompoundSelectionImpl(
CriteriaBuilderImpl criteriaBuilder,
Class javaType,
List> selectionItems) {
super( criteriaBuilder, javaType );
this.isConstructor = !javaType.isArray() && !Tuple.class.isAssignableFrom( javaType );
this.selectionItems = selectionItems;
}
@Override
public boolean isCompoundSelection() {
return true;
}
@Override
public List> getCompoundSelectionItems() {
return selectionItems;
}
@Override
public List getValueHandlers() {
if ( isConstructor ) {
return null;
}
boolean foundHandlers = false;
ArrayList valueHandlers = new ArrayList();
for ( Selection selection : getCompoundSelectionItems() ) {
ValueHandlerFactory.ValueHandler valueHandler = ( (TupleElementImplementor) selection ).getValueHandler();
valueHandlers.add( valueHandler );
foundHandlers = foundHandlers || valueHandler != null;
}
return foundHandlers ? null : valueHandlers;
}
public void registerParameters(ParameterRegistry registry) {
for ( Selection selectionItem : getCompoundSelectionItems() ) {
Helper.possibleParameter(selectionItem, registry);
}
}
public String render(RenderingContext renderingContext) {
StringBuilder buff = new StringBuilder();
if ( isConstructor ) {
buff.append( "new " ).append( getJavaType().getName() ).append( '(' );
}
String sep = "";
for ( Selection selection : selectionItems ) {
buff.append( sep )
.append( ( (Renderable) selection ).renderProjection( renderingContext ) );
sep = ", ";
}
if ( isConstructor ) {
buff.append( ')' );
}
return buff.toString();
}
}