/*
* 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.descriptor.impl;
import java.util.Arrays;
import org.hibernate.engine.jdbc.LobCreator;
import org.hibernate.engine.jdbc.NonContextualLobCreator;
import org.hibernate.ogm.model.spi.Tuple;
import org.hibernate.ogm.util.impl.Log;
import org.hibernate.ogm.util.impl.LoggerFactory;
import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
/**
* @author Emmanuel Bernard
*/
public abstract class BasicGridBinder<X> implements GridValueBinder<X> {
private static final Log log = LoggerFactory.make();
private static final WrapperOptions DEFAULT_OPTIONS = new WrapperOptions() {
@Override
public boolean useStreamForLobBinding() {
return false;
}
@Override
public LobCreator getLobCreator() {
return NonContextualLobCreator.INSTANCE;
}
@Override
public SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor) {
//OGM dialect don't remap types yet
return sqlTypeDescriptor;
}
};
private final JavaTypeDescriptor<X> javaDescriptor;
private final GridTypeDescriptor gridDescriptor;
public BasicGridBinder(JavaTypeDescriptor<X> javaDescriptor, GridTypeDescriptor gridDescriptor) {
this.javaDescriptor = javaDescriptor;
this.gridDescriptor = gridDescriptor;
}
@Override
public void bind(Tuple resultset, X value, String[] names) {
if ( value == null ) {
for ( String name : names ) {
log.tracef( "binding [null] to parameter [%1$s]", name );
resultset.put( name, null );
}
}
else {
if ( log.isTraceEnabled() ) {
log.tracef( "binding [%1$s] to parameter(s) %2$s", javaDescriptor.extractLoggableRepresentation( value ), Arrays.toString( names ) );
}
doBind( resultset, value, names, DEFAULT_OPTIONS );
}
}
/**
* Perform the binding. Safe to assume that value is not null.
*/
protected abstract void doBind(Tuple resultset, X value, String[] names, WrapperOptions options);
}