Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Taal2012-11-04 16:26:40 +0000
committerMartin Taal2012-11-04 16:26:40 +0000
commit36bc669c05180f57f8e281568e41ef3ee9899885 (patch)
treeea2d56216af9ae7ce6edd2a6f71ec51b4c2efc20
parent8cfde1ce28aed11c2be9037d01996a396874f29e (diff)
downloadcdo-36bc669c05180f57f8e281568e41ef3ee9899885.tar.gz
cdo-36bc669c05180f57f8e281568e41ef3ee9899885.tar.xz
cdo-36bc669c05180f57f8e281568e41ef3ee9899885.zip
Solve failing FeatureMapTest
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.java13
-rw-r--r--plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.java48
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);
}
}

Back to the top