diff options
author | kmoore | 2012-03-05 15:17:27 +0000 |
---|---|---|
committer | kmoore | 2012-03-05 15:17:27 +0000 |
commit | eeccada92fc231d94cc5722e54ba59ef89f05f43 (patch) | |
tree | 9d600e0b0feac268eae014d82ca9d4fd4b8d02ae /jpa | |
parent | d1d939e4444d70a6de1d203b8c7e195fd358eecc (diff) | |
download | webtools.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')
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; } |