/*
 * 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.loader.plan.exec.internal;

import org.hibernate.loader.plan.spi.EntityQuerySpace;
import org.hibernate.loader.plan.spi.LoadPlan;
import org.hibernate.loader.plan.spi.QuerySpace;
import org.hibernate.loader.plan.spi.QuerySpaces;
import org.hibernate.loader.plan.spi.Return;

Author:Steve Ebersole
/** * @author Steve Ebersole */
public class RootHelper {
Singleton access
/** * Singleton access */
public static final RootHelper INSTANCE = new RootHelper();
Disallow direct instantiation
/** * Disallow direct instantiation */
private RootHelper() { }
Extract the root return of the LoadPlan, assuming there is just one.
Params:
  • loadPlan – The LoadPlan from which to extract the root return
  • returnType – The Return type expected, passed as an argument
Type parameters:
  • <T> – The parameterized type of the specific Return type expected
Throws:
  • IllegalStateException – If there is no root, more than one root or the single root is not of the expected type.
Returns:The root Return
/** * Extract the root return of the LoadPlan, assuming there is just one. * * @param loadPlan The LoadPlan from which to extract the root return * @param returnType The Return type expected, passed as an argument * @param <T> The parameterized type of the specific Return type expected * * @return The root Return * * @throws IllegalStateException If there is no root, more than one root or the single root * is not of the expected type. */
@SuppressWarnings("unchecked") public <T extends Return> T extractRootReturn(LoadPlan loadPlan, Class<T> returnType) { if ( loadPlan.getReturns().size() == 0 ) { throw new IllegalStateException( "LoadPlan contained no root returns" ); } else if ( loadPlan.getReturns().size() > 1 ) { throw new IllegalStateException( "LoadPlan contained more than one root returns" ); } final Return rootReturn = loadPlan.getReturns().get( 0 ); if ( !returnType.isInstance( rootReturn ) ) { throw new IllegalStateException( String.format( "Unexpected LoadPlan root return; expecting %s, but found %s", returnType.getName(), rootReturn.getClass().getName() ) ); } return (T) rootReturn; }
Extract the root QuerySpace of the LoadPlan, assuming there is just one.
Params:
  • querySpaces – The QuerySpaces from which to extract the root.
  • returnType – The QuerySpace type expected, passed as an argument
Throws:
  • IllegalStateException – If there is no root, more than one root or the single root is not of the expected type.
Returns:The root QuerySpace
/** * Extract the root QuerySpace of the LoadPlan, assuming there is just one. * * * @param querySpaces The QuerySpaces from which to extract the root. * @param returnType The QuerySpace type expected, passed as an argument * * @return The root QuerySpace * * @throws IllegalStateException If there is no root, more than one root or the single root * is not of the expected type. */
@SuppressWarnings("unchecked") public <T extends QuerySpace> T extractRootQuerySpace(QuerySpaces querySpaces, Class<EntityQuerySpace> returnType) { if ( querySpaces.getRootQuerySpaces().size() == 0 ) { throw new IllegalStateException( "LoadPlan contained no root query-spaces" ); } else if ( querySpaces.getRootQuerySpaces().size() > 1 ) { throw new IllegalStateException( "LoadPlan contained more than one root query-space" ); } final QuerySpace querySpace = querySpaces.getRootQuerySpaces().get( 0 ); if ( !returnType.isInstance( querySpace ) ) { throw new IllegalStateException( String.format( "Unexpected LoadPlan root query-space; expecting %s, but found %s", returnType.getName(), querySpace.getClass().getName() ) ); } return (T) querySpace; } }