diff options
author | Martin Taal | 2011-05-11 18:25:01 +0000 |
---|---|---|
committer | Martin Taal | 2011-05-11 18:25:01 +0000 |
commit | e385b86be5b9ef76d71c6996a0a58e22925fe600 (patch) | |
tree | a7441be81c4607d98fc785ade604bd5b2b60fac2 /plugins | |
parent | 15fbd5d81a9f7173ca5c3c1476d729471f1d0ad3 (diff) | |
download | cdo-e385b86be5b9ef76d71c6996a0a58e22925fe600.tar.gz cdo-e385b86be5b9ef76d71c6996a0a58e22925fe600.tar.xz cdo-e385b86be5b9ef76d71c6996a0a58e22925fe600.zip |
Fixes bugzilla 330164 - [Hibernate] Upgrade to Hibernate 3.6.0
Diffstat (limited to 'plugins')
10 files changed, 158 insertions, 14 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.java b/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.java index 6d27456711..d77e5c256d 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.java @@ -26,9 +26,11 @@ import org.eclipse.net4j.util.om.trace.ContextTracer; import org.eclipse.emf.ecore.EAnnotation; import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EcoreFactory; +import org.eclipse.emf.ecore.xml.type.XMLTypePackage; import org.eclipse.emf.teneo.Constants; import org.eclipse.emf.teneo.PackageRegistryProvider; import org.eclipse.emf.teneo.PersistenceOptions; @@ -103,6 +105,7 @@ public class TeneoHibernateMappingProvider extends HibernateMappingProvider getHibernateStore().getRepository().getPackageRegistry()); // translate the list of EPackages to an array + boolean hasXMLTypePackage = false; final List<EPackage> epacks = getHibernateStore().getPackageHandler().getEPackages(); final ListIterator<EPackage> iterator = epacks.listIterator(); while (iterator.hasNext()) @@ -112,6 +115,16 @@ public class TeneoHibernateMappingProvider extends HibernateMappingProvider { iterator.remove(); } + else if (epack == XMLTypePackage.eINSTANCE) + { + hasXMLTypePackage = true; + // iterator.remove(); + } + } + + if (hasXMLTypePackage) + { + addTypeAnnotationToXMLTypes(); } addUniqueConstraintAnnotation(); @@ -139,6 +152,28 @@ public class TeneoHibernateMappingProvider extends HibernateMappingProvider return hbm; } + private void addTypeAnnotationToXMLTypes() + { + for (EClassifier eClassifier : XMLTypePackage.eINSTANCE.getEClassifiers()) + { + if (eClassifier instanceof EDataType) + { + final EDataType eDataType = (EDataType)eClassifier; + if (eDataType.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null) + { + continue; + } + + final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation(); + eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA); + final String typeAnnotation = "@Type(type=\"org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.XMLUserType$" + + eDataType.getName() + "\")"; + eAnnotation.getDetails().put("value", typeAnnotation); + eDataType.getEAnnotations().add(eAnnotation); + } + } + } + private void addTypeAnnotationToEDataType(EDataType eDataType, String type) { if (eDataType.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null) diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java index 2c30a33382..6b11f99fb8 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java @@ -50,7 +50,13 @@ import org.eclipse.core.runtime.Platform; import org.hibernate.Session; import org.hibernate.proxy.HibernateProxy; +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; + import java.io.Serializable; +import java.util.Calendar; +import java.util.Date; import java.util.Map; import java.util.Properties; @@ -73,23 +79,29 @@ public class HibernateUtil private static final String CLASS = "class"; //$NON-NLS-1$ - /** - * @return the global singleton instance - */ - public static HibernateUtil getInstance() + // Local copy of the datatype factory + private DatatypeFactory dataTypeFactory; + + public HibernateUtil() { - return instance; + try + { + dataTypeFactory = DatatypeFactory.newInstance(); + } + catch (DatatypeConfigurationException ex) + { + throw new IllegalStateException("Exception ", ex); + } } - /** - * Sets the singleton used by the Hibernate store. - * - * @param instance - * the instance to set - */ - public static void setInstance(HibernateUtil instance) + public DatatypeFactory getDataTypeFactory() { - HibernateUtil.instance = instance; + return dataTypeFactory; + } + + public void setDataTypeFactory(DatatypeFactory dataTypeFactory) + { + this.dataTypeFactory = dataTypeFactory; } /** @@ -623,4 +635,48 @@ public class HibernateUtil final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor(); return accessor.getStore().getEntityName(classifierRef); } + + /** + * Create a {@link XMLGregorianCalendar} from a {@link Date} instance. + */ + public XMLGregorianCalendar getXMLGregorianCalendarDate(Date date, boolean dateTime) + { + final XMLGregorianCalendar gregCalendar = dataTypeFactory.newXMLGregorianCalendar(); + final Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + + gregCalendar.setYear(calendar.get(Calendar.YEAR)); + gregCalendar.setMonth(calendar.get(Calendar.MONTH) + 1); // correct with 1 on purpose + gregCalendar.setDay(calendar.get(Calendar.DAY_OF_MONTH)); + + if (dateTime) + { + gregCalendar.setHour(calendar.get(Calendar.HOUR_OF_DAY)); + gregCalendar.setMinute(calendar.get(Calendar.MINUTE)); + gregCalendar.setSecond(calendar.get(Calendar.SECOND)); + gregCalendar.setMillisecond(calendar.get(Calendar.MILLISECOND)); + } + + return gregCalendar; + } + + /** + * @return the global singleton instance + */ + public static HibernateUtil getInstance() + { + return instance; + } + + /** + * Sets the singleton used by the Hibernate store. + * + * @param instance + * the instance to set + */ + public static void setInstance(HibernateUtil instance) + { + HibernateUtil.instance = instance; + } + } diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java index c34169ff8d..2b0c13b46a 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java @@ -22,6 +22,7 @@ import org.hibernate.HibernateException; import org.hibernate.engine.SessionImplementor; import org.hibernate.property.Getter; +import java.lang.reflect.Member; import java.lang.reflect.Method; import java.util.Map; @@ -123,6 +124,11 @@ public class CDOPropertyGetter extends CDOPropertyHandler implements Getter return null; } + public Member getMember() + { + return null; + } + @SuppressWarnings("rawtypes") public Class getReturnType() { diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java index f12f000a04..46bceba46c 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java @@ -22,6 +22,7 @@ import org.hibernate.property.Getter; import org.hibernate.property.PropertyAccessor; import org.hibernate.property.Setter; +import java.lang.reflect.Member; import java.lang.reflect.Method; import java.util.Map; @@ -123,6 +124,11 @@ public class CDORevisionPropertyAccessor implements PropertyAccessor { return Object.class; } + + public Member getMember() + { + return null; + } } /** diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java index f696fbf7ee..1bc27af673 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java @@ -15,6 +15,7 @@ import org.hibernate.engine.SessionImplementor; import org.hibernate.proxy.HibernateProxy; import org.hibernate.proxy.ProxyFactory; import org.hibernate.type.AbstractComponentType; +import org.hibernate.type.CompositeType; import java.io.Serializable; import java.lang.reflect.Method; @@ -42,4 +43,19 @@ public class CDORevisionProxyFactory implements ProxyFactory { return new CDORevisionProxyHibernate(new CDORevisionLazyInitializer(entityName, id, session)); } + + public void postInstantiate(String arg0, Class arg1, Set arg2, Method arg3, Method arg4, CompositeType arg5) + throws HibernateException + { + } + + public String getEntityName() + { + return entityName; + } + + public void setEntityName(String entityName) + { + this.entityName = entityName; + } } diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java index b625f587f2..9deaa6ffc7 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java @@ -294,7 +294,8 @@ public class CDORevisionTuplizer extends AbstractEntityTuplizer @Override protected ProxyFactory buildProxyFactory(PersistentClass mappingInfo, Getter idGetter, Setter idSetter) { - ProxyFactory pf = new CDORevisionProxyFactory(); + CDORevisionProxyFactory pf = new CDORevisionProxyFactory(); + pf.setEntityName(getEntityName()); try { diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java index a94b2ebd0f..b95498c2f6 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java @@ -28,6 +28,7 @@ import org.hibernate.property.PropertyAccessor; import org.hibernate.property.Setter; import java.io.Serializable; +import java.lang.reflect.Member; import java.lang.reflect.Method; import java.util.Map; @@ -52,6 +53,11 @@ public class CDOSyntheticIdPropertyHandler implements Getter, Setter, PropertyAc return this; } + public Member getMember() + { + return null; + } + public Object get(Object owner) throws HibernateException { InternalCDORevision revision = HibernateUtil.getInstance().getCDORevision(owner); diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java index 3127ee2097..ef3f9ab31c 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java @@ -22,6 +22,7 @@ import org.hibernate.property.Getter; import org.hibernate.property.PropertyAccessor; import org.hibernate.property.Setter; +import java.lang.reflect.Member; import java.lang.reflect.Method; import java.util.Map; @@ -75,6 +76,11 @@ public class CDOSyntheticVersionPropertyHandler implements Getter, Setter, Prope return null; } + public Member getMember() + { + return null; + } + public String getMethodName() { return null; diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.java index 7faccef38a..079f8ebed2 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.java @@ -27,6 +27,7 @@ import org.hibernate.property.Getter; import org.hibernate.property.PropertyAccessor; import org.hibernate.property.Setter; +import java.lang.reflect.Member; import java.lang.reflect.Method; import java.util.Map; @@ -54,6 +55,11 @@ public class FeatureMapEntryFeatureURIPropertyHandler implements PropertyAccesso return this; } + public Member getMember() + { + return null; + } + public Object get(Object owner) throws HibernateException { final CDOFeatureMapEntry cdoFeatureMapEntry = (CDOFeatureMapEntry)owner; diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.java index 0d6c77eeaf..0bd8b224c8 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.java @@ -21,6 +21,7 @@ import org.hibernate.property.Getter; import org.hibernate.property.PropertyAccessor; import org.hibernate.property.Setter; +import java.lang.reflect.Member; import java.lang.reflect.Method; import java.util.Map; @@ -49,6 +50,11 @@ public class FeatureMapEntryPropertyHandler implements PropertyAccessor, Getter, return this; } + public Member getMember() + { + return null; + } + public String getPropertyName() { return propertyName; |