Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Hibernate OGM, Domain model persistence for NoSQL datastores
   *
   * 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.ogm.options.navigation.impl;
  
 
 
Keeps track of the entities and properties configured using the fluent configuration API. There is one instance of this context per invocation of this API (beginning with the creation of a org.hibernate.ogm.options.navigation.GlobalContext). This instance is passed between the individual context types created in the course of using the fluent API. The book-keeping of configured options is delegated to AppendableConfigurationContext.

Author(s):
Davide D'Alto <davide@hibernate.org>
Gunnar Morling
 
 public class ConfigurationContextImpl implements ConfigurationContext {
 
 	private static final Log log = LoggerFactory.make();

Contains all options configured via this and other configuration contexts.
 
 
 	private Class<?> currentEntityType;
 
 		this. = appendableContext;
 	}
 
 	public <V> void addGlobalOption(Option<?, V> option, V value) {
 		.addGlobalOptionoptionvalue );
 	}
 
 	public <V> void addEntityOption(Option<?, V> option, V value) {
 	}
 
 	public <V> void addPropertyOption(Option<?, V> option, V value) {
 	}
 
 	public void configureEntity(Class<?> entityType) {
 		this. = entityType;
 	}
 
 	public void configureProperty(String propertyNameElementType elementType) {
 		if ( elementType != . && elementType != . ) {
 			throw .getUnsupportedElementTypeExceptionelementType );
 		}
 
 		if ( !ReflectionHelper.propertyExistspropertyNameelementType ) ) {
 			throw .getPropertyDoesNotExistException.getName(), propertyNameelementType );
 		}
 
 		this. = propertyName;
 	}

Creates a new org.hibernate.ogm.options.navigation.GlobalContext object based on the given context implementation types. All implementation types must declare a public or protected constructor with a single parameter, accepting org.hibernate.ogm.options.navigation.spi.ConfigurationContext.

Each context implementation type must provide an implementation of the method(s) declared on the particular provider-specific context interface. All methods declared on context super interfaces - entity() and property() - are implemented following the dynamic proxy pattern, the implementation types therefore can be declared abstract, avoiding the need to implement these methods themselves.

By convention, the implementation types should directly or indirectly extend org.hibernate.ogm.options.navigation.spi.BaseContext.

Parameters:
globalContextImplType the provider-specific global context implementation type
entityContextImplType the provider-specific entity context implementation type
propertyContextImplType the provider-specific property context implementation type
Returns:
a new org.hibernate.ogm.options.navigation.GlobalContext object based on the given context implementation types
 
 	@SuppressWarnings("unchecked")
	public <G extends GlobalContext<?, ?>> G createGlobalContext(Class<? extends G> globalContextImplType,
			final Class<? extends EntityContext<?, ?>> entityContextImplTypeClass<? extends PropertyContext<?, ?>> propertyContextImplType) {
		ProxyFactory proxyFactory = new ProxyFactory();
		proxyFactory.setSuperclassglobalContextImplType );
		proxyFactory.setFilternew EntityMethodFilter() );
		try {
			return (G) proxyFactory.create(
					new Class<?>[] { ConfigurationContext.class },
					new Object[] { this },
					new EntityOrPropertyMethodHandlerentityContextImplTypepropertyContextImplType ) );
		}
		catch (Exception e) {
			throw .cannotCreateGlobalContextProxyglobalContextImplTypee);
		}
	}
	@SuppressWarnings("unchecked")
	private <E extends EntityContext<?, ?>> E createEntityMappingContext(Class<? extends E> entityContextImplType,
			Class<? extends PropertyContext<?, ?>> propertyContextImplType) {
		ProxyFactory proxyFactory = new ProxyFactory();
		proxyFactory.setSuperclassentityContextImplType );
		proxyFactory.setFilternew EntityOrPropertyMethodFilter() );
		try {
			return (E) proxyFactory.create(
					new Class<?>[] { ConfigurationContext.class },
					new Object[] { this },
					new EntityOrPropertyMethodHandlerentityContextImplTypepropertyContextImplType ) );
		}
		catch (Exception e) {
			throw .cannotCreateEntityContextProxyentityContextImplTypee);
		}
	}
	@SuppressWarnings("unchecked")
	private <P extends PropertyContext<?, ?>> P createPropertyMappingContext(Class<? extends EntityContext<?, ?>> entityContextImplType,
			Class<? extends P> propertyContextImplType) {
		ProxyFactory proxyFactory = new ProxyFactory();
		proxyFactory.setSuperclasspropertyContextImplType );
		proxyFactory.setFilternew EntityOrPropertyMethodFilter() );
		try {
			return (P) proxyFactory.create(
					new Class<?>[] { ConfigurationContext.class },
					new Object[] { this },
					new EntityOrPropertyMethodHandlerentityContextImplTypepropertyContextImplType ) );
		}
		catch (Exception e) {
			throw .cannotCreateEntityContextProxypropertyContextImplTypee);
		}
	}
	private final class EntityOrPropertyMethodHandler implements MethodHandler {
		private final Class<? extends EntityContext<?, ?>> entityContextImplType;
		private final Class<? extends PropertyContext<?, ?>> propertyContextImplType;
		private EntityOrPropertyMethodHandler(Class<? extends EntityContext<?, ?>> entityContextImplType,
				Class<? extends PropertyContext<?, ?>> propertyContextImplType) {
			this. = entityContextImplType;
			this. = propertyContextImplType;
		}
		public Object invoke(Object selfMethod thisMethodMethod proceedObject[] argsthrows Throwable {
			if ( thisMethod.getName().equals"entity" ) ) {
				configureEntity( (Class<?>) args[0] );
			}
			else {
				configureProperty( (Stringargs[0], (ElementTypeargs[1] );
			}
		}
	}
	private final class EntityMethodFilter implements MethodFilter {
		public boolean isHandled(Method m) {
			return m.getName().equals"entity" ) && m.getParameterTypes().length == 1 && m.getParameterTypes()[0] == Class.class;
		}
	}
	private final class EntityOrPropertyMethodFilter implements MethodFilter {
		public boolean isHandled(Method m) {
			return ( m.getName().equals"entity" ) && m.getParameterTypes().length == 1 && m.getParameterTypes()[0] == Class.class )
					|| ( m.getName().equals"property" ) && m.getParameterTypes().length == 2 && m.getParameterTypes()[0] == String.class && m
							.getParameterTypes()[1] == ElementType.class );
		}
	}
New to GrepCode? Check out our FAQ X