diff options
author | Nan Li | 2013-08-13 16:06:14 +0000 |
---|---|---|
committer | Nan Li | 2013-08-13 16:06:14 +0000 |
commit | c24e00173a036a08024b4df9ce2b2aba0fe85771 (patch) | |
tree | 6b5ca60de9614dc80ce9ab49cb3513b2a3918845 /jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse | |
parent | 3d4dc7d4c665fab511fa2b18769f8881453fced5 (diff) | |
download | webtools.dali-c24e00173a036a08024b4df9ce2b2aba0fe85771.tar.gz webtools.dali-c24e00173a036a08024b4df9ce2b2aba0fe85771.tar.xz webtools.dali-c24e00173a036a08024b4df9ce2b2aba0fe85771.zip |
347842 - [EclipseLink][Validation] No id class validation when id class
defined on mapped superclass
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse')
3 files changed, 40 insertions, 20 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java index 8d27c6252e..46c41d04f6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java @@ -10,10 +10,10 @@ package org.eclipse.jpt.jpa.core.internal.jpa1.context; import java.util.List; - +import org.eclipse.jpt.common.core.internal.utility.ValidationMessageTools; +import org.eclipse.jpt.common.core.utility.TextRange; import org.eclipse.jpt.jpa.core.context.AttributeMapping; import org.eclipse.jpt.jpa.core.context.Entity; -import org.eclipse.jpt.common.core.internal.utility.ValidationMessageTools; import org.eclipse.jpt.jpa.core.validation.JptJpaCoreValidationMessages; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -69,17 +69,17 @@ public abstract class AbstractEntityPrimaryKeyValidator extends validateMapsIdMappings(messages, reporter); - if (specifiesIdClass()) { + if (declaresIdClassInHierarchy()) { validateIdClass(idClassReference().getIdClass(), messages, reporter); } } protected void validateNonRootEntityDoesNotSpecifyIdClass(List<IMessage> messages, IReporter reporter) { - if (idClassReference().isSpecified()) { + if (declaresIdClassLocally()) { messages.add( ValidationMessageTools.buildValidationMessage( entity().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.ENTITY_NON_ROOT_ID_CLASS_SPECIFIED ) ); @@ -97,4 +97,9 @@ public abstract class AbstractEntityPrimaryKeyValidator extends ); } } + + @Override + protected TextRange getIdClassRefValidationTextRange() { + return declaresIdClassLocally() ? super.getIdClassRefValidationTextRange() : typeMapping().getValidationTextRange(); + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java index 74fd1c7b24..1db787e56d 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java @@ -39,7 +39,7 @@ public abstract class AbstractMappedSuperclassPrimaryKeyValidator // ... and not both id and embedded id validateOneOfEmbeddedOrIdIsUsed(messages, reporter); - if (specifiesIdClass()) { + if (declaresIdClassInHierarchy()) { validateIdClass(idClassReference().getIdClass(), messages, reporter); } return true; diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java index 9fcec8c2a5..98c02fcd73 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java @@ -56,9 +56,9 @@ public abstract class AbstractPrimaryKeyValidator return this.typeMapping; } + // Return the id class ref that is to be validated protected IdClassReference idClassReference() { return typeMapping().getIdClassReference(); - } protected TextRange getAttributeMappingTextRange(AttributeMapping attributeMapping) { @@ -77,7 +77,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_PK_REDEFINED_ID_CLASS ) ); @@ -97,7 +97,7 @@ public abstract class AbstractPrimaryKeyValidator // if a primary key defining class has multiple primary keys, it must use an id class protected void validateIdClassIsUsedIfNecessary(List<IMessage> messages, IReporter reporter) { - if (! specifiesIdClass() && idClassIsRequired()) { + if (! declaresIdClassInHierarchy() && idClassIsRequired()) { messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), @@ -110,7 +110,7 @@ public abstract class AbstractPrimaryKeyValidator // only one composite primary key strategy may be used protected void validateOneOfIdClassOrEmbeddedIdIsUsed(List<IMessage> messages, IReporter reporter) { - if (idClassReference().isSpecified() + if (declaresIdClassLocally() && IterableTools.size(typeMapping().getAllAttributeMappings(MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY)) > 0) { messages.add( ValidationMessageTools.buildValidationMessage( @@ -202,7 +202,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_NOT_PRIMARY_KEY, idClassAttribute.getName() ) @@ -218,7 +218,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_TYPE_DOES_NOT_AGREE, idClassAttribute.getName(), idClassAttributeTypeName @@ -232,7 +232,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_NO_MATCH, idClassAttribute.getName() ) @@ -253,7 +253,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_DOES_NOT_EXIST, attributeMapping.getName() ) @@ -273,13 +273,17 @@ public abstract class AbstractPrimaryKeyValidator validateIdClassConstructor(idClass, messages, reporter); } + protected TextRange getIdClassRefValidationTextRange() { + return idClassReference().getValidationTextRange(); + } + protected void checkMissingAttribute(JavaPersistentType idClass, AttributeMapping attributeMapping, List<IMessage> messages, IReporter reporter) { if (!IterableTools.contains(getIdClassAttributeNames(idClass), attributeMapping.getName())) { messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_DOES_NOT_EXIST, attributeMapping.getName() ) @@ -297,7 +301,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_MISSING_NO_ARG_CONSTRUCTOR, idClass.getName() ) @@ -342,7 +346,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH, attributeMapping.getName() ) @@ -353,7 +357,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH, attributeMapping.getName() ) @@ -389,7 +393,7 @@ public abstract class AbstractPrimaryKeyValidator messages.add( ValidationMessageTools.buildValidationMessage( typeMapping().getResource(), - idClassReference().getValidationTextRange(), + getIdClassRefValidationTextRange(), JptJpaCoreValidationMessages.TYPE_MAPPING_ID_CLASS_PROPERTY_METHOD_NOT_PUBLIC, idClass.getJavaResourceType().getTypeBinding().getQualifiedName(), methodName @@ -508,7 +512,18 @@ public abstract class AbstractPrimaryKeyValidator // **************** id class ********************************************** - protected boolean specifiesIdClass() { + /** + * Return whether an id class is specified on the class locally + */ + protected boolean declaresIdClassLocally() { + return typeMapping().getIdClassReference().isSpecified(); + } + + /** + * Return whether an id class is specified in the class hierarchy + * either on current class or on the super class + */ + protected boolean declaresIdClassInHierarchy() { return idClassReference().isSpecified(); } |