diff options
author | Martin Taal | 2012-11-04 16:26:40 +0000 |
---|---|---|
committer | Martin Taal | 2012-11-04 16:26:40 +0000 |
commit | 36bc669c05180f57f8e281568e41ef3ee9899885 (patch) | |
tree | ea2d56216af9ae7ce6edd2a6f71ec51b4c2efc20 | |
parent | 8cfde1ce28aed11c2be9037d01996a396874f29e (diff) | |
download | cdo-36bc669c05180f57f8e281568e41ef3ee9899885.tar.gz cdo-36bc669c05180f57f8e281568e41ef3ee9899885.tar.xz cdo-36bc669c05180f57f8e281568e41ef3ee9899885.zip |
Solve failing FeatureMapTest
3 files changed, 58 insertions, 5 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 84d5c23526..006013a38b 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 @@ -137,6 +137,8 @@ public class TeneoHibernateMappingProvider extends HibernateMappingProvider properties.remove(PersistenceOptions.PERSISTENCE_XML); } + properties.setProperty(PersistenceOptions.FEATUREMAP_AS_COMPONENT, "true"); + // add some annotations to the CDO model so that the mapping gets generated correctly addTransientAnnotationToEClass(EtypesPackage.eINSTANCE.getModelElement()); addTransientAnnotationToEClass(EtypesPackage.eINSTANCE.getAnnotation()); 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 117ba81604..fd04fa412a 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 @@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer; import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext; import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext; +import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil; import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry; import org.eclipse.emf.ecore.EClass; @@ -114,8 +115,16 @@ public class FeatureMapEntryFeatureURIPropertyHandler implements PropertyAccesso final String eClassName = eFeatureURI.substring(1 + firstSeparator, lastSeparator); final String eFeatureName = eFeatureURI.substring(1 + lastSeparator); - final HibernateCommitContext hbCommitContext = HibernateThreadContext.getCommitContext(); - final EPackage ePackage = hbCommitContext.getCommitContext().getPackageRegistry().getEPackage(ePackageURI); + final EPackage ePackage; + if (HibernateThreadContext.isCommitContextSet()) + { + final HibernateCommitContext hbCommitContext = HibernateThreadContext.getCommitContext(); + ePackage = hbCommitContext.getCommitContext().getPackageRegistry().getEPackage(ePackageURI); + } + else + { + ePackage = HibernateUtil.getInstance().getPackageRegistry().getEPackage(ePackageURI); + } if (ePackage == null) { throw new IllegalArgumentException("EPackage not found using " + eFeatureURI + " and EPackageURI: " + ePackageURI); //$NON-NLS-1$ //$NON-NLS-2$ 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 a783d43ee6..763b4dcf28 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 @@ -11,8 +11,14 @@ */ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer; +import org.eclipse.emf.cdo.common.id.CDOID; +import org.eclipse.emf.cdo.common.id.CDOIDExternal; +import org.eclipse.emf.cdo.common.id.CDOIDUtil; +import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil; import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry; +import org.eclipse.emf.ecore.EReference; + import org.hibernate.HibernateException; import org.hibernate.PropertyNotFoundException; import org.hibernate.engine.spi.SessionFactoryImplementor; @@ -73,7 +79,23 @@ public class FeatureMapEntryPropertyHandler implements PropertyAccessor, Getter, return null; } - return cdoFeatureMapEntry.getValue(); + final Object value = cdoFeatureMapEntry.getValue(); + if (cdoFeatureMapEntry.getEStructuralFeature() instanceof EReference) + { + if (value instanceof CDOID && CDOIDUtil.isNull((CDOID)value)) + { + return null; + } + else if (value instanceof CDOIDExternal) + { + return value; + } + else if (value instanceof CDOID) + { + return HibernateUtil.getInstance().getCDORevision((CDOID)value); + } + } + return value; } @SuppressWarnings("rawtypes") @@ -101,9 +123,29 @@ public class FeatureMapEntryPropertyHandler implements PropertyAccessor, Getter, public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException { final CDOFeatureMapEntry cdoFeatureMapEntry = (CDOFeatureMapEntry)target; - if (value != null) + Object localValue; + if (cdoFeatureMapEntry.getEStructuralFeature() instanceof EReference) + { + if (value == null) + { + localValue = value; + } + else if (value instanceof CDOIDExternal) + { + localValue = value; + } + else + { + localValue = HibernateUtil.getInstance().getCDOID(value); + } + } + else + { + localValue = value; + } + if (localValue != null) { - cdoFeatureMapEntry.setValue(value); + cdoFeatureMapEntry.setValue(localValue); } } |