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.type.impl;
  
  import java.sql.Types;
 
Store Enums as either integer or string

Author(s):
Emmanuel Bernard <emmanuel@hibernate.org>
 
 //TODO It would probably be better to implement all of this as a subclass of BasicGridType
 public class EnumType extends GridTypeDelegatingToCoreType {
 
 	private static final Log log = LoggerFactory.make();
 
 	private final boolean isOrdinal;
 	private transient volatile Enum[] enumValues;
 
 	public EnumType(CustomType customTypeorg.hibernate.type.EnumType enumType) {
 		supercustomType );
 		this. = enumType;
 	}
 
 	public boolean isOrdinal() {
 		return ;
 	}
 
 	public Object nullSafeGet(Tuple rsString[] namesSessionImplementor sessionObject owner)
 			throws HibernateException {
 		if ( names.length > 1 ) {
 			throw new NotYetImplementedException"Multi column property not implemented yet" );
 		}
 		return nullSafeGetrsnames[0], sessionowner );
 	}
 
 	public Object nullSafeGet(Tuple rsString nameSessionImplementor sessionObject owner)
 			throws HibernateException {
 		final Object object = rs.getname );
 		if ( object == null ) {
 			.tracef"found [null] as column [$s]"name );
 			return null;
 		}
 		else {
 			.tracef"found [$s] as column [$s]"objectname );
 			if ( object instanceof Integer ) {
 				int ordinal = ( (Integerobject ).intValue();
 				if ( ordinal < 0 || ordinal >= . ) {
 					throw new IllegalArgumentException"Unknown ordinal value for enum " + .returnedClass() + ": " + ordinal );
 				}
 				return [ordinal];
 			}
 			else {
 				try {
 					return Enum.valueOf.returnedClass(), object.toString() );
 				}
 				catch ( IllegalArgumentException iae ) {
 							"Unknown name value for enum " + .returnedClass() + ": " + nameiae
 					);
 				}
 			}
 		}
 	}
 
 	private void initEnumValues() {
 		if (  == null ) {
 			if (  == null ) {
 				throw new NullPointerException"Failed to init enumValues" );
 			}
 		}
 	}
 
 	public Object hydrate(Tuple rsString[] namesSessionImplementor sessionObject owner)
 			throws HibernateException {
 		return nullSafeGetrsnamessessionowner );
 	}
 
 	public void nullSafeSet(Tuple resultsetObject valueString[] namesboolean[] settableSessionImplementor session)
		if ( settable.length > 1 ) {
			throw new NotYetImplementedException"Multi column property not implemented yet" );
		}
		if ( settable[0] ) {
			nullSafeSetresultsetvaluenamessession );
		}
	}
	public void nullSafeSet(Tuple resultsetObject valueString[] namesSessionImplementor session)
		if ( names.length > 1 ) {
			throw new NotYetImplementedException"Multi column property not implemented yet" );
		}
		if ( value == null ) {
			.tracef"binding [null] to parameter [$s]"names[0] );
		}
		else {
			Object endValue =  ?
					Integer.valueOf( ( (Enum<?>) value ).ordinal() ) :
					( (Enum<?>) value ).name();
			.tracef"binding [$s] to parameter(s) $s"endValuenames[0] );
			resultset.putnames[0], endValue );
		}
	}
	//copied for core enum type
	//in truth we probably only need the types as injected by the metadata binder
	private boolean isOrdinal(int paramType) {
		switch ( paramType ) {
			case .//for Oracle Driver
			case .:  //for Oracle Driver
			case .:   //for Oracle Driver
				return true;
			case .:
				return false;
			default:
				throw new HibernateException"Unable to persist an Enum in a column of SQL Type: " + paramType );
		}
	}
New to GrepCode? Check out our FAQ X