Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Hibernate, Relational Persistence for Idiomatic Java
   *
   * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
   * indicated by the @author tags or express copyright attribution
   * statements applied by the authors.  All third-party contributions are
   * distributed under license by Red Hat Inc.
   *
   * This copyrighted material is made available to anyone wishing to use, modify,
  * copy, or redistribute it subject to the terms and conditions of the GNU
  * Lesser General Public License, as published by the Free Software Foundation.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
  * for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this distribution; if not, write to:
  * Free Software Foundation, Inc.
  * 51 Franklin Street, Fifth Floor
  * Boston, MA  02110-1301  USA
  */
 package org.hibernate.ejb.criteria.path;
 
 import java.util.Map;
 
Convenience base class for various javax.persistence.criteria.Path implementors.

Author(s):
Steve Ebersole
 
 public abstract class AbstractPathImpl<X>
 		extends ExpressionImpl<X>
 		implements Path<X>, PathImplementor<X>, Serializable {
 
 	private final PathSource pathSource;
 	private final Expression<Class<? extends X>> typeExpression;
Constructs a basic path instance.

Parameters:
criteriaBuilder The criteria builder
javaType The java type of this path
pathSource The source (or origin) from which this path originates
 
 	@SuppressWarnings({ "unchecked" })
 	public AbstractPathImpl(
 			CriteriaBuilderImpl criteriaBuilder,
 			Class<X> javaType,
 			PathSource pathSource) {
 		supercriteriaBuilderjavaType );
 		this. = pathSource;
 		this. =  new PathTypeExpressioncriteriaBuilder(), getJavaType(), this );
 	}
 
 	public PathSource getPathSource() {
 		return ;
 	}

 
     public PathSource<?> getParentPath() {
         return getPathSource();
     }

 
 	@SuppressWarnings({ "unchecked" })
 	public Expression<Class<? extends X>> type() {
 		return ;
 	}

 
 	public String getPathIdentifier() {
 		return getPathSource().getPathIdentifier() + "." + getAttribute().getName();
 	}
	protected abstract boolean canBeDereferenced();
	protected final RuntimeException illegalDereference() {
		String message = "Illegal attempt to dereference path source";
		PathSource<?> source = getPathSource();
		if ( source != null ) {
			message += " [" + getPathSource().getPathIdentifier() + "]";
		}
		return new IllegalArgumentException(message);
	}
	protected final RuntimeException unknownAttribute(String attributeName) {
		String message = "Unable to resolve attribute [" + attributeName + "] against path";
		PathSource<?> source = getPathSource();
		if ( source != null ) {
			message += " [" + source.getPathIdentifier() + "]";
		}
		return new IllegalArgumentException(message);
	}
	protected final Path resolveCachedAttributePath(String attributeName) {
		return  == null
null
.getattributeName );
	}
	protected final void registerAttributePath(String attributeNamePath path) {
		if (  == null ) {
		}
		.putattributeNamepath );
	}

	@SuppressWarnings({ "unchecked" })
	public <Y> Path<Y> get(SingularAttribute<? super X, Y> attribute) {
		if ( ! canBeDereferenced() ) {
		}
		if ( path == null ) {
			path = new SingularAttributePath<Y>( criteriaBuilder(), attribute.getJavaType(), thisattribute );
			registerAttributePathattribute.getName(), path );
		}
		return path;
	}

	@SuppressWarnings({ "unchecked" })
	public <E, C extends Collection<E>> Expression<C> get(PluralAttribute<X, C, E> attribute) {
		if ( ! canBeDereferenced() ) {
		}
		if ( path == null ) {
			path = new PluralAttributePath<C>( criteriaBuilder(), thisattribute );
			registerAttributePathattribute.getName(), path );
		}
		return path;
	}

	@SuppressWarnings({ "unchecked" })
	public <K, V, M extends Map<K, V>> Expression<M> get(MapAttribute<X, K, V> attribute) {
		if ( ! canBeDereferenced() ) {
		}
		if ( path == null ) {
			path = new PluralAttributePathcriteriaBuilder(), thisattribute );
			registerAttributePathattribute.getName(), path );
		}
		return path;
	}

	@SuppressWarnings({ "unchecked" })
	public <Y> Path<Y> get(String attributeName) {
		if ( ! canBeDereferenced() ) {
		}
		final Attribute attribute = locateAttributeattributeName );
		if ( attribute.isCollection() ) {
			final PluralAttribute<X,Y,?> pluralAttribute = (PluralAttribute<X,Y,?>) attribute;
			if ( ...equalspluralAttribute.getCollectionType() ) ) {
				return (PluralAttributePath<Y>) this.<Object,Object,Map<ObjectObject>>get( (MapAttributepluralAttribute );
			}
			else {
				return (PluralAttributePath<Y>) this.get( (PluralAttributepluralAttribute );
			}
		}
		else {
			return get( (SingularAttribute<X,Y>) attribute );
		}
	}

Get the attribute by name from the underlying model. This allows subclasses to define exactly how the attribute is derived.

Parameters:
attributeName The name of the attribute to locate
Returns:
The attribute; should never return null.
Throws:
java.lang.IllegalArgumentException If no such attribute exists
	protected  final Attribute locateAttribute(String attributeName) {
		final Attribute attribute = locateAttributeInternalattributeName );
		if ( attribute == null ) {
			throw unknownAttributeattributeName );
		}
		return attribute;
	}

Get the attribute by name from the underlying model. This allows subclasses to define exactly how the attribute is derived. Called from locateAttribute(java.lang.String) which also applies nullness checking for proper error reporting.

Parameters:
attributeName The name of the attribute to locate
Returns:
The attribute; may be null.
Throws:
java.lang.IllegalArgumentException If no such attribute exists
	protected abstract Attribute locateAttributeInternal(String attributeName);

	public void registerParameters(ParameterRegistry registry) {
		// none to register
	}
	public void prepareAlias(CriteriaQueryCompiler.RenderingContext renderingContext) {
		// Make sure we delegate up to our source (eventually up to the path root) to
		// prepare the path properly.
		PathSource<?> source = getPathSource();
		if ( source != null ) {
			source.prepareAliasrenderingContext );
		}
	}

	public String render(CriteriaQueryCompiler.RenderingContext renderingContext) {
		PathSource<?> source = getPathSource();
		if ( source != null ) {
			source.prepareAliasrenderingContext );
			return source.getPathIdentifier() + "." + getAttribute().getName();
else {
			return getAttribute().getName();
		}
	}

		return renderrenderingContext );
	}
New to GrepCode? Check out our FAQ X