Skip to main content
summaryrefslogtreecommitdiffstats
path: root/jpa
diff options
context:
space:
mode:
authorkmoore2012-03-05 15:17:27 +0000
committerkmoore2012-03-05 15:17:27 +0000
commiteeccada92fc231d94cc5722e54ba59ef89f05f43 (patch)
tree9d600e0b0feac268eae014d82ca9d4fd4b8d02ae /jpa
parentd1d939e4444d70a6de1d203b8c7e195fd358eecc (diff)
downloadwebtools.dali-eeccada92fc231d94cc5722e54ba59ef89f05f43.tar.gz
webtools.dali-eeccada92fc231d94cc5722e54ba59ef89f05f43.tar.xz
webtools.dali-eeccada92fc231d94cc5722e54ba59ef89f05f43.zip
Bug 369940 - [EclipseLink] dynamic persistence validation for parent-class attribute
Diffstat (limited to 'jpa')
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTypeMapping.java25
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java83
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/property_files/eclipselink_jpa_validation.properties5
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkOrmTypeMapping.java18
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLinkJpaValidationMessages.java1
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java54
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java53
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java52
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java10
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java7
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java5
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_1/XmlTypeMapping_2_1.java3
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_2/EclipseLink2_2.java3
-rw-r--r--jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmEmbeddableTests.java61
-rw-r--r--jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmEntityTests.java61
-rw-r--r--jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmMappedSuperclassTests.java61
-rw-r--r--jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/JptEclipseLinkCoreOrmContextModelTests.java7
17 files changed, 435 insertions, 74 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTypeMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTypeMapping.java
index 7f6e2bb071..6b4f177fea 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTypeMapping.java
@@ -67,6 +67,31 @@ public interface OrmTypeMapping
String OVERRIDE_METADATA_COMPLETE_PROPERTY = "overrideMetadataComplete"; //$NON-NLS-1$
+ // ********** parent class **********
+
+ /**
+ * <strong>NB:</strong> This may be an unqualified name to be prefixed by the
+ * entity mappings's package value.
+ *
+ * @see EntityMappings#getPackage()
+ */
+ String getParentClass();
+
+ String getFullyQualifiedParentClass();
+ String FULLY_QUALIFIED_PARENT_CLASS_PROPERTY = "fullyQualifiedParentClass"; //$NON-NLS-1$
+
+ String getSpecifiedParentClass();
+
+ /**
+ * @see #getParentClass()
+ */
+ void setSpecifiedParentClass(String parentClass);
+ String SPECIFIED_PARENT_CLASS_PROPERTY = "specifiedParentClass"; //$NON-NLS-1$
+
+ String getDefaultParentClass();
+ String DEFAULT_PARENT_CLASS_PROPERTY = "defaultParentClass"; //$NON-NLS-1$
+
+
// ********** XML **********
/**
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java
index 2ca8e87cd6..cc1a48cb83 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java
@@ -68,12 +68,16 @@ public abstract class AbstractOrmTypeMapping<X extends XmlTypeMapping>
protected Boolean specifiedMetadataComplete;
protected boolean overrideMetadataComplete;
+ protected String specifiedParentClass;
+ protected String defaultParentClass;
+ protected String fullyQualifiedParentClass;
protected AbstractOrmTypeMapping(OrmPersistentType parent, X xmlTypeMapping) {
super(parent);
this.xmlTypeMapping = xmlTypeMapping;
this.class_ = xmlTypeMapping.getClassName();
this.specifiedMetadataComplete = xmlTypeMapping.getMetadataComplete();
+ this.specifiedParentClass = this.buildSpecifiedParentClass();
}
@@ -84,12 +88,15 @@ public abstract class AbstractOrmTypeMapping<X extends XmlTypeMapping>
super.synchronizeWithResourceModel();
this.setClass_(this.xmlTypeMapping.getClassName());
this.setSpecifiedMetadataComplete_(this.xmlTypeMapping.getMetadataComplete());
+ this.setSpecifiedParentClass_(this.buildSpecifiedParentClass());
}
@Override
public void update() {
super.update();
this.setOverrideMetadataComplete(this.buildOverrideMetadataComplete());
+ this.setDefaultParentClass(this.buildDefaultParentClass());
+ this.setFullyQualifiedParentClass(this.buildFullyQualifiedParentClass());
}
@@ -154,6 +161,82 @@ public abstract class AbstractOrmTypeMapping<X extends XmlTypeMapping>
}
+ // ********** fully-qualified parent class **********
+
+ public String getFullyQualifiedParentClass() {
+ return this.fullyQualifiedParentClass;
+ }
+
+ protected void setFullyQualifiedParentClass(String parentClass) {
+ String old = this.fullyQualifiedParentClass;
+ this.fullyQualifiedParentClass = parentClass;
+ this.firePropertyChanged(FULLY_QUALIFIED_PARENT_CLASS_PROPERTY, old, parentClass);
+ }
+
+ protected String buildFullyQualifiedParentClass() {
+ return (this.specifiedParentClass == null) ?
+ this.defaultParentClass :
+ this.getEntityMappings().getFullyQualifiedName(this.specifiedParentClass);
+ }
+
+ // ********** parent class **********
+
+ public String getParentClass() {
+ return (this.specifiedParentClass != null) ? this.specifiedParentClass : this.defaultParentClass;
+ }
+
+ public String getSpecifiedParentClass() {
+ return this.specifiedParentClass;
+ }
+
+ public void setSpecifiedParentClass(String parentClass) {
+ this.setSpecifiedParentClass_(parentClass);
+ this.setSpecifiedParentClassInXml(parentClass);
+ }
+
+ protected void setSpecifiedParentClass_(String parentClass) {
+ String old = this.specifiedParentClass;
+ this.specifiedParentClass = parentClass;
+ this.firePropertyChanged(SPECIFIED_PARENT_CLASS_PROPERTY, old, parentClass);
+ }
+
+ /**
+ * subclasses must override if they support specifying a parent class
+ */
+ protected void setSpecifiedParentClassInXml(String parentClass) {
+ //no-op
+ }
+
+ /**
+ * subclasses must override if they support specifying a parent class
+ */
+ protected String buildSpecifiedParentClass() {
+ return null;
+ }
+
+ public String getDefaultParentClass() {
+ return this.defaultParentClass;
+ }
+
+ protected void setDefaultParentClass(String parentClass) {
+ String old = this.defaultParentClass;
+ this.defaultParentClass = parentClass;
+ this.firePropertyChanged(DEFAULT_PARENT_CLASS_PROPERTY, old, parentClass);
+ }
+
+ protected String buildDefaultParentClass() {
+ JavaResourceType javaResourceType = this.getJavaResourceType();
+ return (javaResourceType == null) ? null : javaResourceType.getSuperclassQualifiedName();
+ }
+
+ protected PersistentType getResolvedParentClass() {
+ if (this.fullyQualifiedParentClass == null) {
+ return null;
+ }
+ return this.getPersistenceUnit().getPersistentType(this.fullyQualifiedParentClass);
+ }
+
+
// ********** Java type mapping **********
public JavaTypeMapping getJavaTypeMapping() {
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/property_files/eclipselink_jpa_validation.properties b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/property_files/eclipselink_jpa_validation.properties
index 2c3726b4a9..5cf1f81f2d 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/property_files/eclipselink_jpa_validation.properties
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/property_files/eclipselink_jpa_validation.properties
@@ -1,5 +1,5 @@
################################################################################
-# Copyright (c) 2008, 2011 Oracle. All rights reserved.
+# Copyright (c) 2008, 2012 Oracle. All rights reserved.
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v1.0, which accompanies this distribution
# and is available at http://www.eclipse.org/legal/epl-v10.html.
@@ -61,4 +61,5 @@ MULTITENANT_VPD_MIGHT_NOT_BE_NOT_SUPPORTED=Target database is not specified in t
MULTITENANT_VPD_NOT_SUPPORTED_ON_NON_ORACLE_DATABASE_PLATFORM=Target database is \"{0}\", multitenancy with Oracle VPD is only supported on Oracle platform
MULTITENANT_VPD_INCLUDE_CRITERIA_WILL_BE_IGNORED=Include criteria is false when multitenant type is VPD. The specified setting will be ignored.
VIRTUAL_ATTRIBUTE_NO_ATTRIBUTE_TYPE_SPECIFIED=Virtual attribute \"{0}\" must specify an attribute-type
-VIRTUAL_ATTRIBUTE_ATTRIBUTE_TYPE_DOES_NOT_EXIST=Attribute type \"{0}\" does not exist \ No newline at end of file
+VIRTUAL_ATTRIBUTE_ATTRIBUTE_TYPE_DOES_NOT_EXIST=Attribute type \"{0}\" does not exist
+VIRTUAL_TYPE_PARENT_CLASS_DOES_NOT_EXIST=Parent class \"{0}\" does not exist \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkOrmTypeMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkOrmTypeMapping.java
index b99b542d1d..777d4c33a6 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkOrmTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkOrmTypeMapping.java
@@ -9,7 +9,6 @@
******************************************************************************/
package org.eclipse.jpt.jpa.eclipselink.core.context.orm;
-import org.eclipse.jpt.jpa.core.context.orm.EntityMappings;
import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping;
import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkTypeMapping;
import org.eclipse.jpt.jpa.eclipselink.core.context.java.EclipseLinkJavaTypeMapping;
@@ -32,21 +31,4 @@ public interface EclipseLinkOrmTypeMapping
EclipseLinkJavaTypeMapping getJavaTypeMappingForDefaults();
-
- // ********** parent class **********
-
- /**
- * <strong>NB:</strong> This may be a partial name to be prefixed by the
- * entity mappings's package value.
- *
- * @see EntityMappings#getPackage()
- */
- String getParentClass();
-
- /**
- * @see #getParentClass()
- */
- void setParentClass(String parentClass);
- String PARENT_CLASS_PROPERTY = "parentClass"; //$NON-NLS-1$
-
}
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLinkJpaValidationMessages.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLinkJpaValidationMessages.java
index e9ea2dbc66..3abfe110f2 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLinkJpaValidationMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLinkJpaValidationMessages.java
@@ -109,4 +109,5 @@ public interface EclipseLinkJpaValidationMessages {
public static final String VIRTUAL_ATTRIBUTE_NO_ATTRIBUTE_TYPE_SPECIFIED = "VIRTUAL_ATTRIBUTE_NO_ATTRIBUTE_TYPE_SPECIFIED";
public static final String VIRTUAL_ATTRIBUTE_ATTRIBUTE_TYPE_DOES_NOT_EXIST = "VIRTUAL_ATTRIBUTE_ATTRIBUTE_TYPE_DOES_NOT_EXIST";
+ public static final String VIRTUAL_TYPE_PARENT_CLASS_DOES_NOT_EXIST = "VIRTUAL_TYPE_PARENT_CLASS_DOES_NOT_EXIST";
}
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java
index 73e049092f..3fa06df2ed 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEmbeddableImpl.java
@@ -12,6 +12,8 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm;
import java.util.List;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jpt.common.core.internal.utility.JDTTools;
+import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.common.utility.internal.NotNullFilter;
import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable;
import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable;
@@ -26,6 +28,9 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkCustomizer;
import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkEmbeddable;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkEmbeddable;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType;
+import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages;
+import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkDynamicTypeMappingValidator;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkTypeMappingValidator;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlEmbeddable;
@@ -49,15 +54,12 @@ public class OrmEclipseLinkEmbeddableImpl
protected final OrmEclipseLinkCustomizer customizer;
- protected String parentClass;
-
public OrmEclipseLinkEmbeddableImpl(OrmPersistentType parent, XmlEmbeddable xmlEmbeddable) {
super(parent, xmlEmbeddable);
this.converterContainer = this.buildConverterContainer();
this.changeTracking = this.buildChangeTracking();
this.customizer = this.buildCustomizer();
- this.parentClass = xmlEmbeddable.getParentClass();
}
@@ -69,7 +71,6 @@ public class OrmEclipseLinkEmbeddableImpl
this.converterContainer.synchronizeWithResourceModel();
this.changeTracking.synchronizeWithResourceModel();
this.customizer.synchronizeWithResourceModel();
- this.setParentClass(this.xmlTypeMapping.getParentClass());
}
@Override
@@ -143,21 +144,16 @@ public class OrmEclipseLinkEmbeddableImpl
// ********** parent class **********
- public String getParentClass() {
- return this.parentClass;
+ @Override
+ protected String buildSpecifiedParentClass() {
+ return this.xmlTypeMapping.getParentClass();
}
- public void setParentClass(String parentClass) {
- this.setParentClass_(parentClass);
+ @Override
+ public void setSpecifiedParentClassInXml(String parentClass) {
this.xmlTypeMapping.setParentClass(parentClass);
}
- protected void setParentClass_(String parentClass) {
- String old = this.parentClass;
- this.parentClass = parentClass;
- this.firePropertyChanged(PARENT_CLASS_PROPERTY, old, parentClass);
- }
-
// ********** misc **********
@@ -172,8 +168,8 @@ public class OrmEclipseLinkEmbeddableImpl
}
@Override
- public OrmEclipseLinkPersistentType getPersistentType() {
- return (OrmEclipseLinkPersistentType) super.getPersistentType();
+ public EclipseLinkOrmPersistentType getPersistentType() {
+ return (EclipseLinkOrmPersistentType) super.getPersistentType();
}
public boolean usesPrimaryKeyColumns() {
@@ -247,6 +243,7 @@ public class OrmEclipseLinkEmbeddableImpl
@Override
public void validate(List<IMessage> messages, IReporter reporter) {
super.validate(messages, reporter);
+ this.validateParentClass(messages, reporter);
this.customizer.validate(messages, reporter);
this.changeTracking.validate(messages, reporter);
this.converterContainer.validate(messages, reporter);
@@ -263,4 +260,29 @@ public class OrmEclipseLinkEmbeddableImpl
protected boolean isDynamicType() {
return this.getPersistentType().isDynamic();
}
+
+
+ protected void validateParentClass(List<IMessage> messages, IReporter reporter) {
+ if (this.specifiedParentClass == null) {
+ return;
+ }
+ if (this.getResolvedParentClass() == null) {
+ IType jdtType = JDTTools.findType(this.getJavaProject(), this.getFullyQualifiedParentClass());
+ if (jdtType == null) {
+ messages.add(
+ DefaultEclipseLinkJpaValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ EclipseLinkJpaValidationMessages.VIRTUAL_TYPE_PARENT_CLASS_DOES_NOT_EXIST,
+ new String[] {this.getFullyQualifiedParentClass()},
+ this,
+ this.getParentClassTextRange()
+ )
+ );
+ }
+ }
+ }
+
+ protected TextRange getParentClassTextRange() {
+ return this.getValidationTextRange(this.xmlTypeMapping.getParentClassTextRange());
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java
index 6a4c3812bc..36239230f6 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkEntityImpl.java
@@ -12,8 +12,10 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm;
import java.util.List;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jpt.common.core.internal.utility.JDTTools;
import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType;
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
+import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.common.utility.internal.NotNullFilter;
import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable;
import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable;
@@ -38,6 +40,9 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkCaching;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkEntity;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMultitenancy2_3;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType;
+import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages;
+import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkDynamicTypeMappingValidator;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkEntityPrimaryKeyValidator;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkTypeMappingValidator;
@@ -69,8 +74,6 @@ public class OrmEclipseLinkEntityImpl
protected final OrmEclipseLinkMultitenancy2_3 multitenancy;
- protected String parentClass;
-
public OrmEclipseLinkEntityImpl(OrmPersistentType parent, XmlEntity xmlEntity) {
super(parent, xmlEntity);
@@ -80,7 +83,6 @@ public class OrmEclipseLinkEntityImpl
this.changeTracking = this.buildChangeTracking();
this.customizer = this.buildCustomizer();
this.multitenancy = this.buildMultitenancy();
- this.parentClass = xmlEntity.getParentClass();
}
@@ -95,7 +97,6 @@ public class OrmEclipseLinkEntityImpl
this.changeTracking.synchronizeWithResourceModel();
this.customizer.synchronizeWithResourceModel();
this.multitenancy.synchronizeWithResourceModel();
- this.setParentClass_(this.xmlTypeMapping.getParentClass());
}
@Override
@@ -219,21 +220,16 @@ public class OrmEclipseLinkEntityImpl
// ********** parent class **********
- public String getParentClass() {
- return this.parentClass;
+ @Override
+ protected String buildSpecifiedParentClass() {
+ return this.xmlTypeMapping.getParentClass();
}
- public void setParentClass(String parentClass) {
- this.setParentClass_(parentClass);
+ @Override
+ public void setSpecifiedParentClassInXml(String parentClass) {
this.xmlTypeMapping.setParentClass(parentClass);
}
- protected void setParentClass_(String parentClass) {
- String old = this.parentClass;
- this.parentClass = parentClass;
- this.firePropertyChanged(PARENT_CLASS_PROPERTY, old, parentClass);
- }
-
// ********** misc **********
@@ -248,8 +244,8 @@ public class OrmEclipseLinkEntityImpl
}
@Override
- public OrmEclipseLinkPersistentType getPersistentType() {
- return (OrmEclipseLinkPersistentType) super.getPersistentType();
+ public EclipseLinkOrmPersistentType getPersistentType() {
+ return (EclipseLinkOrmPersistentType) super.getPersistentType();
}
public boolean usesPrimaryKeyColumns() {
@@ -411,6 +407,7 @@ public class OrmEclipseLinkEntityImpl
@Override
public void validate(List<IMessage> messages, IReporter reporter) {
super.validate(messages, reporter);
+ this.validateParentClass(messages, reporter);
this.caching.validate(messages, reporter);
this.readOnly.validate(messages, reporter);
this.converterContainer.validate(messages, reporter);
@@ -435,4 +432,28 @@ public class OrmEclipseLinkEntityImpl
protected boolean isDynamicType() {
return this.getPersistentType().isDynamic();
}
+
+ protected void validateParentClass(List<IMessage> messages, IReporter reporter) {
+ if (this.specifiedParentClass == null) {
+ return;
+ }
+ if (this.getResolvedParentClass() == null) {
+ IType jdtType = JDTTools.findType(this.getJavaProject(), this.getFullyQualifiedParentClass());
+ if (jdtType == null) {
+ messages.add(
+ DefaultEclipseLinkJpaValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ EclipseLinkJpaValidationMessages.VIRTUAL_TYPE_PARENT_CLASS_DOES_NOT_EXIST,
+ new String[] {this.getFullyQualifiedParentClass()},
+ this,
+ this.getParentClassTextRange()
+ )
+ );
+ }
+ }
+ }
+
+ protected TextRange getParentClassTextRange() {
+ return this.getValidationTextRange(this.xmlTypeMapping.getParentClassTextRange());
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java
index 5ae2d0b204..b2388fd46e 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMappedSuperclassImpl.java
@@ -12,6 +12,8 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm;
import java.util.List;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jpt.common.core.internal.utility.JDTTools;
+import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.common.utility.internal.NotNullFilter;
import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable;
import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable;
@@ -34,6 +36,9 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkCaching;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMultitenancy2_3;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType;
+import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages;
+import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkDynamicTypeMappingValidator;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkMappedSuperclassPrimaryKeyValidator;
import org.eclipse.jpt.jpa.eclipselink.core.internal.context.EclipseLinkMappedSuperclassValidator;
@@ -67,7 +72,6 @@ public class OrmEclipseLinkMappedSuperclassImpl
protected final OrmQueryContainer queryContainer;
- protected String parentClass;
public OrmEclipseLinkMappedSuperclassImpl(OrmPersistentType parent, XmlMappedSuperclass xmlMappedSuperclass) {
super(parent, xmlMappedSuperclass);
@@ -78,7 +82,6 @@ public class OrmEclipseLinkMappedSuperclassImpl
this.customizer = this.buildCustomizer();
this.multitenancy = this.buildMultitenancy();
this.queryContainer = this.buildQueryContainer();
- this.parentClass = xmlMappedSuperclass.getParentClass();
}
@@ -94,7 +97,6 @@ public class OrmEclipseLinkMappedSuperclassImpl
this.customizer.synchronizeWithResourceModel();
this.multitenancy.synchronizeWithResourceModel();
this.queryContainer.synchronizeWithResourceModel();
- this.setParentClass(this.xmlTypeMapping.getParentClass());
}
@Override
@@ -231,21 +233,16 @@ public class OrmEclipseLinkMappedSuperclassImpl
// ********** parent class **********
- public String getParentClass() {
- return this.parentClass;
+ @Override
+ protected String buildSpecifiedParentClass() {
+ return this.xmlTypeMapping.getParentClass();
}
- public void setParentClass(String parentClass) {
- this.setParentClass_(parentClass);
+ @Override
+ public void setSpecifiedParentClassInXml(String parentClass) {
this.xmlTypeMapping.setParentClass(parentClass);
}
- protected void setParentClass_(String parentClass) {
- String old = this.parentClass;
- this.parentClass = parentClass;
- this.firePropertyChanged(PARENT_CLASS_PROPERTY, old, parentClass);
- }
-
// ********** misc **********
@@ -260,8 +257,8 @@ public class OrmEclipseLinkMappedSuperclassImpl
}
@Override
- public OrmEclipseLinkPersistentType getPersistentType() {
- return (OrmEclipseLinkPersistentType) super.getPersistentType();
+ public EclipseLinkOrmPersistentType getPersistentType() {
+ return (EclipseLinkOrmPersistentType) super.getPersistentType();
}
public boolean usesPrimaryKeyColumns() {
@@ -358,6 +355,7 @@ public class OrmEclipseLinkMappedSuperclassImpl
@Override
public void validate(List<IMessage> messages, IReporter reporter) {
super.validate(messages, reporter);
+ this.validateParentClass(messages, reporter);
this.caching.validate(messages, reporter);
this.readOnly.validate(messages, reporter);
this.converterContainer.validate(messages, reporter);
@@ -382,4 +380,28 @@ public class OrmEclipseLinkMappedSuperclassImpl
protected boolean isDynamicType() {
return this.getPersistentType().isDynamic();
}
+
+ protected void validateParentClass(List<IMessage> messages, IReporter reporter) {
+ if (this.specifiedParentClass == null) {
+ return;
+ }
+ if (this.getResolvedParentClass() == null) {
+ IType jdtType = JDTTools.findType(this.getJavaProject(), this.getFullyQualifiedParentClass());
+ if (jdtType == null) {
+ messages.add(
+ DefaultEclipseLinkJpaValidationMessages.buildMessage(
+ IMessage.HIGH_SEVERITY,
+ EclipseLinkJpaValidationMessages.VIRTUAL_TYPE_PARENT_CLASS_DOES_NOT_EXIST,
+ new String[] {this.getFullyQualifiedParentClass()},
+ this,
+ this.getParentClassTextRange()
+ )
+ );
+ }
+ }
+ }
+
+ protected TextRange getParentClassTextRange() {
+ return this.getValidationTextRange(this.xmlTypeMapping.getParentClassTextRange());
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java
index ec46adba8f..62a8722d7d 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEmbeddable.java
@@ -21,6 +21,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.InternalEList;
import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator;
+import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.jpa.core.resource.orm.JPA;
import org.eclipse.jpt.jpa.core.resource.orm.OrmPackage;
import org.eclipse.jpt.jpa.core.resource.orm.XmlAssociationOverride;
@@ -28,6 +29,7 @@ import org.eclipse.jpt.jpa.core.resource.orm.XmlAssociationOverrideContainer;
import org.eclipse.jpt.jpa.core.resource.orm.XmlAttributeOverride;
import org.eclipse.jpt.jpa.core.resource.orm.XmlAttributeOverrideContainer;
import org.eclipse.jpt.jpa.core.resource.orm.XmlClassReference;
+import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_1.EclipseLink2_1;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_1.EclipseLinkOrmV2_1Package;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_1.XmlTypeMapping_2_1;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_2.EclipseLink2_2;
@@ -1503,7 +1505,13 @@ public class XmlEmbeddable extends org.eclipse.jpt.jpa.core.resource.orm.XmlEmbe
result.append(')');
return result.toString();
}
-
+
+
+ public TextRange getParentClassTextRange() {
+ return getAttributeTextRange(EclipseLink2_1.PARENT_CLASS);
+ }
+
+
// ********** translators **********
public static Translator buildTranslator(String elementName, EStructuralFeature structuralFeature) {
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java
index 025558a6c2..f7fa0b881c 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlEntity.java
@@ -3577,7 +3577,12 @@ public class XmlEntity extends org.eclipse.jpt.jpa.core.resource.orm.XmlEntity i
public TextRange getReadOnlyTextRange() {
return getAttributeTextRange(EclipseLink.READ_ONLY);
}
-
+
+ public TextRange getParentClassTextRange() {
+ return getAttributeTextRange(EclipseLink2_1.PARENT_CLASS);
+ }
+
+
// ********** translators **********
public static Translator buildTranslator(String elementName, EStructuralFeature structuralFeature) {
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java
index d18b4bfdd3..59a83e2c3c 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/XmlMappedSuperclass.java
@@ -3816,7 +3816,10 @@ public class XmlMappedSuperclass extends org.eclipse.jpt.jpa.core.resource.orm.X
public TextRange getCacheableTextRange() {
return getAttributeTextRange(JPA2_0.CACHEABLE);
}
-
+
+ public TextRange getParentClassTextRange() {
+ return getAttributeTextRange(EclipseLink2_1.PARENT_CLASS);
+ }
// ********** translators **********
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_1/XmlTypeMapping_2_1.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_1/XmlTypeMapping_2_1.java
index 60b6452796..3ec86112f6 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_1/XmlTypeMapping_2_1.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_1/XmlTypeMapping_2_1.java
@@ -9,6 +9,7 @@
******************************************************************************/
package org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_1;
+import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlAccessMethodsHolder;
/**
@@ -55,4 +56,6 @@ public interface XmlTypeMapping_2_1 extends XmlAccessMethodsHolder
* @generated
*/
void setParentClass(String value);
+
+ TextRange getParentClassTextRange();
} // XmlTypeMapping_2_1
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_2/EclipseLink2_2.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_2/EclipseLink2_2.java
index 667e03a5b3..5a7bceea1f 100644
--- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_2/EclipseLink2_2.java
+++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/resource/orm/v2_2/EclipseLink2_2.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2011 Oracle. All rights reserved.
+ * Copyright (c) 2010, 2012 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
@@ -36,7 +36,6 @@ public interface EclipseLink2_2
String INDEX__TABLE = "table";
String INDEX__UNIQUE = "unique";
String NONCACHEABLE = "noncacheable";
- String PARENT_CLASS = "parent-class";
String PARTITIONING = "partitioning";
String PARTITIONING_GROUP__PARTITIONED = "partitioned";
String PINNED_PARTITIONING = "pinned-partitioning";
diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmEmbeddableTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmEmbeddableTests.java
new file mode 100644
index 0000000000..bc21b644af
--- /dev/null
+++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmEmbeddableTests.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.jpa.eclipselink.core.tests.internal.context.orm;
+
+import org.eclipse.jpt.jpa.core.MappingKeys;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmTypeMapping;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType;
+import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlTypeMapping;
+import org.eclipse.jpt.jpa.eclipselink.core.tests.internal.context.EclipseLink2_1ContextModelTestCase;
+
+@SuppressWarnings("nls")
+public class EclipseLink2_1OrmEmbeddableTests
+ extends EclipseLink2_1ContextModelTestCase
+{
+ public EclipseLink2_1OrmEmbeddableTests(String name) {
+ super(name);
+ }
+
+ public void testUpdateSpecifiedParentClass() throws Exception {
+ EclipseLinkOrmPersistentType persistentType = (EclipseLinkOrmPersistentType) getEntityMappings().addPersistentType(MappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY, "model.Employee");
+ EclipseLinkOrmTypeMapping ormTypeMapping = persistentType.getMapping();
+ XmlTypeMapping xmlTypeMapping = (XmlTypeMapping) ormTypeMapping.getXmlTypeMapping();
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+
+ //set parentClass in the resource model, verify context model updated
+ xmlTypeMapping.setParentClass("model.Parent");
+ assertEquals("model.Parent", ormTypeMapping.getSpecifiedParentClass());
+ assertEquals("model.Parent", xmlTypeMapping.getParentClass());
+
+ //set parentClass to null in the resource model
+ xmlTypeMapping.setParentClass(null);
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+ }
+
+ public void testModifySpecifiedParentClass() throws Exception {
+ EclipseLinkOrmPersistentType persistentType = (EclipseLinkOrmPersistentType) getEntityMappings().addPersistentType(MappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY, "model.Employee");
+ EclipseLinkOrmTypeMapping ormTypeMapping = persistentType.getMapping();
+ XmlTypeMapping xmlTypeMapping = (XmlTypeMapping) ormTypeMapping.getXmlTypeMapping();
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+
+ //set parentClass in the context model, verify resource model modified
+ ormTypeMapping.setSpecifiedParentClass("model.Parent");
+ assertEquals("model.Parent", ormTypeMapping.getSpecifiedParentClass());
+ assertEquals("model.Parent", xmlTypeMapping.getParentClass());
+
+ //set parentClass to null in the context model
+ ormTypeMapping.setSpecifiedParentClass(null);
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+ }
+} \ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmEntityTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmEntityTests.java
new file mode 100644
index 0000000000..08779f7c2a
--- /dev/null
+++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmEntityTests.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.jpa.eclipselink.core.tests.internal.context.orm;
+
+import org.eclipse.jpt.jpa.core.MappingKeys;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmTypeMapping;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType;
+import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlTypeMapping;
+import org.eclipse.jpt.jpa.eclipselink.core.tests.internal.context.EclipseLink2_1ContextModelTestCase;
+
+@SuppressWarnings("nls")
+public class EclipseLink2_1OrmEntityTests
+ extends EclipseLink2_1ContextModelTestCase
+{
+ public EclipseLink2_1OrmEntityTests(String name) {
+ super(name);
+ }
+
+ public void testUpdateSpecifiedParentClass() throws Exception {
+ EclipseLinkOrmPersistentType persistentType = (EclipseLinkOrmPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Employee");
+ EclipseLinkOrmTypeMapping ormTypeMapping = persistentType.getMapping();
+ XmlTypeMapping xmlTypeMapping = (XmlTypeMapping) ormTypeMapping.getXmlTypeMapping();
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+
+ //set parentClass in the resource model, verify context model updated
+ xmlTypeMapping.setParentClass("model.Parent");
+ assertEquals("model.Parent", ormTypeMapping.getSpecifiedParentClass());
+ assertEquals("model.Parent", xmlTypeMapping.getParentClass());
+
+ //set parentClass to null in the resource model
+ xmlTypeMapping.setParentClass(null);
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+ }
+
+ public void testModifySpecifiedParentClass() throws Exception {
+ EclipseLinkOrmPersistentType persistentType = (EclipseLinkOrmPersistentType) getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Employee");
+ EclipseLinkOrmTypeMapping ormTypeMapping = persistentType.getMapping();
+ XmlTypeMapping xmlTypeMapping = (XmlTypeMapping) ormTypeMapping.getXmlTypeMapping();
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+
+ //set parentClass in the context model, verify resource model modified
+ ormTypeMapping.setSpecifiedParentClass("model.Parent");
+ assertEquals("model.Parent", ormTypeMapping.getSpecifiedParentClass());
+ assertEquals("model.Parent", xmlTypeMapping.getParentClass());
+
+ //set parentClass to null in the context model
+ ormTypeMapping.setSpecifiedParentClass(null);
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+ }
+} \ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmMappedSuperclassTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmMappedSuperclassTests.java
new file mode 100644
index 0000000000..1b16d12965
--- /dev/null
+++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_1OrmMappedSuperclassTests.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jpt.jpa.eclipselink.core.tests.internal.context.orm;
+
+import org.eclipse.jpt.jpa.core.MappingKeys;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmTypeMapping;
+import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmPersistentType;
+import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlTypeMapping;
+import org.eclipse.jpt.jpa.eclipselink.core.tests.internal.context.EclipseLink2_1ContextModelTestCase;
+
+@SuppressWarnings("nls")
+public class EclipseLink2_1OrmMappedSuperclassTests
+ extends EclipseLink2_1ContextModelTestCase
+{
+ public EclipseLink2_1OrmMappedSuperclassTests(String name) {
+ super(name);
+ }
+
+ public void testUpdateSpecifiedParentClass() throws Exception {
+ EclipseLinkOrmPersistentType persistentType = (EclipseLinkOrmPersistentType) getEntityMappings().addPersistentType(MappingKeys.MAPPED_SUPERCLASS_TYPE_MAPPING_KEY, "model.Employee");
+ EclipseLinkOrmTypeMapping ormTypeMapping = persistentType.getMapping();
+ XmlTypeMapping xmlTypeMapping = (XmlTypeMapping) ormTypeMapping.getXmlTypeMapping();
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+
+ //set parentClass in the resource model, verify context model updated
+ xmlTypeMapping.setParentClass("model.Parent");
+ assertEquals("model.Parent", ormTypeMapping.getSpecifiedParentClass());
+ assertEquals("model.Parent", xmlTypeMapping.getParentClass());
+
+ //set parentClass to null in the resource model
+ xmlTypeMapping.setParentClass(null);
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+ }
+
+ public void testModifySpecifiedParentClass() throws Exception {
+ EclipseLinkOrmPersistentType persistentType = (EclipseLinkOrmPersistentType) getEntityMappings().addPersistentType(MappingKeys.MAPPED_SUPERCLASS_TYPE_MAPPING_KEY, "model.Employee");
+ EclipseLinkOrmTypeMapping ormTypeMapping = persistentType.getMapping();
+ XmlTypeMapping xmlTypeMapping = (XmlTypeMapping) ormTypeMapping.getXmlTypeMapping();
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+
+ //set parentClass in the context model, verify resource model modified
+ ormTypeMapping.setSpecifiedParentClass("model.Parent");
+ assertEquals("model.Parent", ormTypeMapping.getSpecifiedParentClass());
+ assertEquals("model.Parent", xmlTypeMapping.getParentClass());
+
+ //set parentClass to null in the context model
+ ormTypeMapping.setSpecifiedParentClass(null);
+ assertNull(ormTypeMapping.getSpecifiedParentClass());
+ assertNull(xmlTypeMapping.getParentClass());
+ }
+} \ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/JptEclipseLinkCoreOrmContextModelTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/JptEclipseLinkCoreOrmContextModelTests.java
index da50bc760f..4d70a79c65 100644
--- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/JptEclipseLinkCoreOrmContextModelTests.java
+++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/JptEclipseLinkCoreOrmContextModelTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2011 Oracle.
+ * Copyright (c) 2007, 2012 Oracle.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -31,7 +31,6 @@ public class JptEclipseLinkCoreOrmContextModelTests extends TestCase
suite.addTestSuite(EclipseLinkOrmOneToManyMappingTests.class);
suite.addTestSuite(EclipseLinkOrmOneToOneMappingTests.class);
suite.addTestSuite(EclipseLinkOrmPersistentAttributeTests.class);
- suite.addTestSuite(EclipseLink2_1OrmPersistentTypeTests.class);
suite.addTestSuite(EclipseLinkOrmVersionMappingTests.class);
suite.addTestSuite(EclipseLinkOrmTransientMappingTests.class);
suite.addTestSuite(EclipseLinkOrmConverterTests.class);
@@ -52,6 +51,10 @@ public class JptEclipseLinkCoreOrmContextModelTests extends TestCase
suite.addTestSuite(EclipseLink2_0OrmOneToManyMappingTests.class);
suite.addTestSuite(EclipseLink2_1EntityMappingsTests.class);
suite.addTestSuite(EclipseLink2_1PersistenceUnitDefaultsTests.class);
+ suite.addTestSuite(EclipseLink2_1OrmPersistentTypeTests.class);
+ suite.addTestSuite(EclipseLink2_1OrmEmbeddableTests.class);
+ suite.addTestSuite(EclipseLink2_1OrmEntityTests.class);
+ suite.addTestSuite(EclipseLink2_1OrmMappedSuperclassTests.class);
suite.addTestSuite(EclipseLink2_3OrmMultitenancyTests.class);
return suite;
}

Back to the top