Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/type In directory sc8-pr-cvs1:/tmp/cvs-serv13138/type Modified Files: AbstractComponentType.java ComponentType.java CustomType.java DynaBeanType.java ObjectType.java TypeFactory.java Added Files: CompositeCustomType.java Log Message: added CompositeUserType refactored handling of component path expressions PersistentIdentifierGenerators now aware of schema --- NEW FILE: CompositeCustomType.java --- package net.sf.hibernate.type; import net.sf.hibernate.CompositeUserType; import net.sf.hibernate.HibernateException; import net.sf.hibernate.MappingException; import net.sf.hibernate.engine.Cascades; import net.sf.hibernate.engine.SessionImplementor; import net.sf.hibernate.engine.Cascades.CascadeStyle; import net.sf.hibernate.loader.OuterJoinLoader; public class CompositeCustomType extends CustomType implements AbstractComponentType { public CompositeCustomType(Class userTypeClass) throws MappingException { super(userTypeClass); } public Type[] getSubtypes() { return ( (CompositeUserType) getUserType() ).getPropertyTypes(); } public String[] getPropertyNames() { return ( (CompositeUserType) getUserType() ).getPropertyNames(); } public Object[] getPropertyValues(Object component, SessionImplementor session) throws HibernateException { int len = getSubtypes().length; Object[] result = new Object[len]; for ( int i=0; i<len; i++ ) { result[i] = getPropertyValue(component, i, session); } return result; } public void setPropertyValues(Object component, Object[] values) throws HibernateException { throw new UnsupportedOperationException(); } public Object getPropertyValue(Object component, int i, SessionImplementor session) throws HibernateException { return ( (CompositeUserType) getUserType() ).getPropertyValue(component, i); } public CascadeStyle cascade(int i) { return Cascades.STYLE_NONE; } public int enableJoinedFetch(int i) { return OuterJoinLoader.LAZY; } public boolean isComponentType() { return true; } } Index: AbstractComponentType.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/type/AbstractComponentType.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** AbstractComponentType.java 29 Mar 2003 04:08:49 -0000 1.6 --- AbstractComponentType.java 6 Apr 2003 02:28:58 -0000 1.7 *************** *** 4,7 **** --- 4,8 ---- import net.sf.hibernate.HibernateException; import net.sf.hibernate.engine.Cascades; + import net.sf.hibernate.engine.SessionImplementor; /** *************** *** 11,17 **** public Type[] getSubtypes(); public String[] getPropertyNames(); ! public Object[] getPropertyValues(Object component) throws HibernateException; public void setPropertyValues(Object component, Object[] values) throws HibernateException; ! public Object getPropertyValue(Object component, int i) throws HibernateException; //public Object instantiate(Object parent, SessionImplementor session) throws HibernateException; public Cascades.CascadeStyle cascade(int i); --- 12,18 ---- public Type[] getSubtypes(); public String[] getPropertyNames(); ! public Object[] getPropertyValues(Object component, SessionImplementor session) throws HibernateException; public void setPropertyValues(Object component, Object[] values) throws HibernateException; ! public Object getPropertyValue(Object component, int i, SessionImplementor session) throws HibernateException; //public Object instantiate(Object parent, SessionImplementor session) throws HibernateException; public Cascades.CascadeStyle cascade(int i); Index: ComponentType.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/type/ComponentType.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** ComponentType.java 29 Mar 2003 07:36:23 -0000 1.10 --- ComponentType.java 6 Apr 2003 02:28:58 -0000 1.11 *************** *** 181,191 **** } public Object getPropertyValue(Object component, int i) throws HibernateException { return getters[i].get(component); } public Object[] getPropertyValues(Object component) throws HibernateException { ! if(optimizer!=null) { try { return optimizer.getPropertyValues(component); --- 181,199 ---- } + public Object getPropertyValue(Object component, int i, SessionImplementor session) throws HibernateException { + return getPropertyValue(component, i); + } + public Object getPropertyValue(Object component, int i) throws HibernateException { return getters[i].get(component); } + public Object[] getPropertyValues(Object component, SessionImplementor session) throws HibernateException { + return getPropertyValues(component); + } + public Object[] getPropertyValues(Object component) throws HibernateException { ! if (optimizer!=null) { try { return optimizer.getPropertyValues(component); *************** *** 304,308 **** } ! public Object assemble(Serializable object, SessionImplementor session, Object owner) throws HibernateException, SQLException { if ( object==null ) { return null; --- 312,318 ---- } ! public Object assemble(Serializable object, SessionImplementor session, Object owner) ! throws HibernateException, SQLException { ! if ( object==null ) { return null; Index: CustomType.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/type/CustomType.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** CustomType.java 3 Feb 2003 10:28:48 -0000 1.6 --- CustomType.java 6 Apr 2003 02:28:58 -0000 1.7 *************** *** 28,31 **** --- 28,35 ---- private final int[] types; + protected UserType getUserType() { + return userType; + } + public CustomType(Class userTypeClass) throws MappingException { Index: DynaBeanType.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/type/DynaBeanType.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** DynaBeanType.java 29 Mar 2003 04:08:49 -0000 1.4 --- DynaBeanType.java 6 Apr 2003 02:28:59 -0000 1.5 *************** *** 63,66 **** --- 63,76 ---- } + public Object getPropertyValue(Object component, int i, SessionImplementor session) + throws HibernateException { + return getPropertyValue(component, i); + } + + public Object[] getPropertyValues(Object component, SessionImplementor session) + throws HibernateException { + return getPropertyValues(component); + } + /** * @see net.sf.hibernate.type.AbstractComponentType#getPropertyValue(java.lang.Object, int) Index: ObjectType.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/type/ObjectType.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ObjectType.java 29 Mar 2003 04:08:49 -0000 1.6 --- ObjectType.java 6 Apr 2003 02:28:59 -0000 1.7 *************** *** 10,19 **** import net.sf.hibernate.HibernateException; import net.sf.hibernate.MappingException; import net.sf.hibernate.engine.Mapping; import net.sf.hibernate.engine.SessionFactoryImplementor; import net.sf.hibernate.engine.SessionImplementor; import net.sf.hibernate.util.ArrayHelper; ! public class ObjectType extends AbstractType { private Type identifierType; --- 10,23 ---- import net.sf.hibernate.HibernateException; import net.sf.hibernate.MappingException; + import net.sf.hibernate.TransientObjectException; + import net.sf.hibernate.engine.Cascades; import net.sf.hibernate.engine.Mapping; import net.sf.hibernate.engine.SessionFactoryImplementor; import net.sf.hibernate.engine.SessionImplementor; + import net.sf.hibernate.engine.Cascades.CascadeStyle; + import net.sf.hibernate.loader.OuterJoinLoader; import net.sf.hibernate.util.ArrayHelper; ! public class ObjectType extends AbstractType implements AbstractComponentType { private Type identifierType; *************** *** 184,187 **** --- 188,244 ---- */ public boolean isObjectType() { + return true; + } + + + public CascadeStyle cascade(int i) { + return Cascades.STYLE_NONE; + } + + public int enableJoinedFetch(int i) { + return OuterJoinLoader.LAZY; + } + + private static final String[] PROPERTY_NAMES = new String[] { "class", "id" }; + + public String[] getPropertyNames() { + return PROPERTY_NAMES; + } + + public Object getPropertyValue(Object component, int i, SessionImplementor session) + throws HibernateException { + + return (i==0) ? + component.getClass() : + id(component, session); + } + + public Object[] getPropertyValues(Object component, SessionImplementor session) + throws HibernateException { + + return new Object[] { component.getClass(), id(component, session) }; + } + + private Serializable id(Object component, SessionImplementor session) throws HibernateException { + try { + return session.getEntityIdentifierIfNotUnsaved(component); + } + catch (TransientObjectException toe) { + return null; + } + } + + public Type[] getSubtypes() { + return new Type[] { Hibernate.CLASS, identifierType }; + } + + public void setPropertyValues(Object component, Object[] values) + throws HibernateException { + + throw new UnsupportedOperationException(); + + } + + public boolean isComponentType() { return true; } Index: TypeFactory.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/type/TypeFactory.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** TypeFactory.java 2 Feb 2003 04:19:52 -0000 1.6 --- TypeFactory.java 6 Apr 2003 02:28:59 -0000 1.7 *************** *** 16,19 **** --- 16,20 ---- import java.util.TimeZone; + import net.sf.hibernate.CompositeUserType; import net.sf.hibernate.Hibernate; import net.sf.hibernate.HibernateException; *************** *** 138,141 **** --- 139,145 ---- throw new MappingException("Could not instantiate Type " + typeClass.getName() + ": " + e); } + } + else if ( CompositeUserType.class.isAssignableFrom(typeClass) ) { + type = new CompositeCustomType(typeClass); } else if ( UserType.class.isAssignableFrom(typeClass) ) { |