【Java开源代码栏目提醒】:网学会员为需要Java开源代码的朋友们搜集整理了TuplizerLookup.java相关资料,希望对各位网友有所帮助!
//$Id: TuplizerLookup.java 7451 2005-07-11 21:49:08Z steveebersole $
package org.hibernate.tuple;
import java.io.Serializable;
import org.hibernate.EntityMode;
import org.hibernate.HibernateException;
import org.hibernate.util.ReflectHelper;
import org.hibernate.mapping.Component;
import org.hibernate.mapping.PersistentClass;
/**
* Stores references to the tuplizers available for a
* "tuplizable thing" (i.e., an entity or component).
*
* @author Gavin King
*/
public class TuplizerLookup implements Serializable {
private static final Class[] ENTITY_TUP_CTOR_SIG = new Class[] { EntityMetamodel.class, PersistentClass.class };
private static final Class[] COMPONENT_TUP_CTOR_SIG = new Class[] { Component.class };
private final Tuplizer pojoTuplizer;
private final Tuplizer dynamicMapTuplizer;
private final Tuplizer dom4jTuplizer;
/**
* TuplizerLookup constructor.
*
* @param pojoTuplizer The POJO-based tuplizer.
* @param dynamicMapTuplizer The java.util.Map-based tuplizer.
* @param dom4jTuplizer The org.dom4j.Element-based tuplizer.
*/
private TuplizerLookup(Tuplizer pojoTuplizer, Tuplizer dynamicMapTuplizer, Tuplizer dom4jTuplizer) {
this.pojoTuplizer = pojoTuplizer;
this.dynamicMapTuplizer = dynamicMapTuplizer;
this.dom4jTuplizer = dom4jTuplizer;
}
/**
* Generate a TuplizerLookup based on the given entity mapping and metamodel
* definitions.
*
* @param mappedEntity The entity mapping definition.
* @param em The entity metamodel definition.
* @return A TuplizerLookup containing the appropriate Tuplizers.
*/
public static TuplizerLookup create(PersistentClass mappedEntity, EntityMetamodel em) {
// Build the dynamic-map tuplizer...
Tuplizer dynamicMapTuplizer = null;
String tuplizerImpl = mappedEntity.getTuplizerImplClassName( EntityMode.MAP );
if ( tuplizerImpl == null ) {
dynamicMapTuplizer = new DynamicMapEntityTuplizer( em, mappedEntity );
}
else {
dynamicMapTuplizer = buildEntityTuplizer( tuplizerImpl, mappedEntity, em );
}
// then the pojo tuplizer, using the dynamic-map tuplizer if no pojo representation is available
Tuplizer pojoTuplizer = null;
if ( mappedEntity.hasPojoRepresentation() ) {
tuplizerImpl = mappedEntity.getTuplizerImplClassName( EntityMode.POJO );
if ( tuplizerImpl == null ) {
pojoTuplizer = new PojoEntityTuplizer( em, mappedEntity );
}
else {
pojoTuplizer = buildEntityTuplizer( tuplizerImpl, mappedEntity, em );
}
}
else {
pojoTuplizer = dynamicMapTuplizer;
}
// then dom4j tuplizer, if dom4j representation is available
Tuplizer dom4jTuplizer = null;
if ( mappedEntity.hasDom4jRepresentation() ) {
tuplizerImpl = mappedEntity.getTuplizerImplClassName( EntityMode.DOM4J );
if ( tuplizerImpl == null ) {
dom4jTuplizer = new Dom4jEntityTuplizer( em, mappedEntity );
}
else {
dom4jTuplizer = buildEntityTuplizer( tuplizerImpl, mappedEntity, em );
}
}
else {
dom4jTuplizer = null;
}
return new TuplizerLookup( pojoTuplizer, dynamicMapTuplizer, dom4jTuplizer );
}
private static EntityTuplizer buildEntityTuplizer(String className, PersistentClass pc, EntityMetamodel em) {
try {
Class implClass = ReflectHelper.classForName( className );
return ( EntityTuplizer ) implClass.getConstructor( ENTITY_TUP_CTOR_SIG ).newInstance( new Object[] { em, pc } );
}
catch( Throwable t ) {
throw new HibernateException( "Could not build tuplizer [" + className + "]", t );
}
}
/**
* Generate a TuplizerLookup based on the given component mapping definition.
*
* @param component The component mapping definition.
* @return A TuplizerLookup containing the appropriate Tuplizers.
*/
public static TuplizerLookup create(Component component) {
PersistentClass owner = component.getOwner();
// Build the dynamic-map tuplizer...
Tuplizer dynamicMapTuplizer = null;
String tuplizerImpl = component.getTuplizerImplClassName( EntityMode.MAP );
if ( tuplizerImpl == null ) {
dynamicMapTuplizer = new DynamicMapComponentTuplizer( component );
}
else {
dynamicMapTuplizer = buildComponentTuplizer( tuplizerImpl, component );
}
// then the pojo tuplizer, using the dynamic-map tuplizer if no pojo representation is available
Tuplizer pojoTuplizer = null;
if ( owner.hasPojoRepresentation() && component.hasPojoRepresentation() ) {
t