diff options
author | kmoore | 2012-03-01 15:34:01 +0000 |
---|---|---|
committer | kmoore | 2012-03-01 15:34:01 +0000 |
commit | da3729065ca4b7b78667c39efc39c76232e04d6a (patch) | |
tree | e025e72aead5e6d85537dfa80604431576a00949 | |
parent | 40955a2ccd756fcf4e5be54e0c61007d74e8fe12 (diff) | |
download | webtools.dali-da3729065ca4b7b78667c39efc39c76232e04d6a.tar.gz webtools.dali-da3729065ca4b7b78667c39efc39c76232e04d6a.tar.xz webtools.dali-da3729065ca4b7b78667c39efc39c76232e04d6a.zip |
a little more work on the embedded-id class validation to make it work properly for dynamic types
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmEmbeddedIdMapping.java | 192 |
1 files changed, 112 insertions, 80 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmEmbeddedIdMapping.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmEmbeddedIdMapping.java index 41ce9cc85b..e022e8d385 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmEmbeddedIdMapping.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/AbstractOrmEmbeddedIdMapping.java @@ -118,100 +118,132 @@ public abstract class AbstractOrmEmbeddedIdMapping<X extends XmlEmbeddedId> public void validate(List<IMessage> messages, IReporter reporter) { super.validate(messages, reporter); validateMappedByRelationshipAndAttributeOverridesSpecified(messages, reporter); - validateTargetEmbeddableImplementsEqualsAndHashcode(messages, reporter); - validateTargetEmbeddableIsPublic(messages, reporter); - validateTargetEmbeddableImplementsSerializable(messages, reporter); - validateNoRelationshipMappingsOnTargetEmbeddable(messages, reporter); - validateTargetEmbeddableImplementsNoArgConstructor(messages, reporter); } - - protected void validateNoRelationshipMappingsOnTargetEmbeddable(List<IMessage> messages, IReporter reporter) { - if (this.getTargetEmbeddable() != null) { - TypeMapping targetEmbeddableTypeMapping = this.getTargetEmbeddable().getPersistentType().getMapping(); - if (targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY).iterator().hasNext() - || targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY).iterator().hasNext() - || targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY).iterator().hasNext() - || targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()) { - messages.add( - DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS, - EMPTY_STRING_ARRAY, - this, - this.getValidationTextRange() - ) - ); + + @Override + protected boolean validateTargetEmbeddable(List<IMessage> messages) { + boolean continueValidating = super.validateTargetEmbeddable(messages); + if (continueValidating) { //targetEmbeddable != null + if (this.getTargetEmbeddable().getJavaResourceType() != null) { + this.validateTargetEmbeddableClass(messages); } + this.validateNoRelationshipMappingsOnTargetEmbeddable(messages); + } + return true; + } + + /** + * preconditions: + * {@link #getTargetEmbeddable()} is not null + * {@link #getTargetEmbeddable#getJavaResourceType()} is not null + */ + protected void validateTargetEmbeddableClass(List<IMessage> messages) { + this.validateTargetEmbeddableImplementsEqualsAndHashcode(messages); + this.validateTargetEmbeddableIsPublic(messages); + this.validateTargetEmbeddableImplementsSerializable(messages); + this.validateTargetEmbeddableImplementsNoArgConstructor(messages); + } + + /** + * preconditions: + * {@link #getTargetEmbeddable()} is not null + */ + protected void validateNoRelationshipMappingsOnTargetEmbeddable(List<IMessage> messages) { + TypeMapping targetEmbeddableTypeMapping = this.getTargetEmbeddable().getPersistentType().getMapping(); + if (targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.MANY_TO_MANY_ATTRIBUTE_MAPPING_KEY).iterator().hasNext() + || targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.MANY_TO_ONE_ATTRIBUTE_MAPPING_KEY).iterator().hasNext() + || targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.ONE_TO_MANY_ATTRIBUTE_MAPPING_KEY).iterator().hasNext() + || targetEmbeddableTypeMapping.getAllAttributeMappings(MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY).iterator().hasNext()) { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS, + EMPTY_STRING_ARRAY, + this, + this.getValidationTextRange() + ) + ); } } - protected void validateTargetEmbeddableImplementsSerializable(List<IMessage> messages, IReporter reporter) { - if (this.getTargetEmbeddable() != null) { - String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName(); - IJavaProject javaProject = getJpaProject().getJavaProject(); - if (!JDTTools.typeIsSubType(javaProject, targetEmbeddableClassName, Serializable.class.getName())) { - messages.add( - DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE, - EMPTY_STRING_ARRAY, - this, - this.getValidationTextRange() - ) - ); - } + /** + * preconditions: + * {@link #getTargetEmbeddable()} is not null + * {@link #getTargetEmbeddable#getJavaResourceType()} is not null + */ + protected void validateTargetEmbeddableImplementsSerializable(List<IMessage> messages) { + String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName(); + IJavaProject javaProject = getJpaProject().getJavaProject(); + if (!JDTTools.typeIsSubType(javaProject, targetEmbeddableClassName, Serializable.class.getName())) { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE, + EMPTY_STRING_ARRAY, + this, + this.getValidationTextRange() + ) + ); } } - protected void validateTargetEmbeddableIsPublic(List<IMessage> messages, IReporter reporter) { - if (this.getTargetEmbeddable() != null) { - if (!getTargetEmbeddable().getJavaResourceType().isPublic()) { - messages.add( - DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC, - EMPTY_STRING_ARRAY, - this, - this.getValidationTextRange() - ) - ); - } + /** + * preconditions: + * {@link #getTargetEmbeddable()} is not null + * {@link #getTargetEmbeddable#getJavaResourceType()} is not null + */ + protected void validateTargetEmbeddableIsPublic(List<IMessage> messages) { + if (!this.getTargetEmbeddable().getJavaResourceType().isPublic()) { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC, + EMPTY_STRING_ARRAY, + this, + this.getValidationTextRange() + ) + ); } } - protected void validateTargetEmbeddableImplementsEqualsAndHashcode(List<IMessage> messages, IReporter reporter) { - if (this.getTargetEmbeddable() != null) { - JavaResourceType resourceType = getTargetEmbeddable().getJavaResourceType(); - if (resourceType != null - && (!resourceType.hasHashCodeMethod() || !resourceType.hasEqualsMethod())) { - messages.add( - DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE, - EMPTY_STRING_ARRAY, - this, - this.getValidationTextRange() - ) - ); - } + /** + * preconditions: + * {@link #getTargetEmbeddable()} is not null + * {@link #getTargetEmbeddable#getJavaResourceType()} is not null + */ + protected void validateTargetEmbeddableImplementsEqualsAndHashcode(List<IMessage> messages) { + JavaResourceType resourceType = this.getTargetEmbeddable().getJavaResourceType(); + if (!resourceType.hasHashCodeMethod() || !resourceType.hasEqualsMethod()) { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE, + EMPTY_STRING_ARRAY, + this, + this.getValidationTextRange() + ) + ); } } - protected void validateTargetEmbeddableImplementsNoArgConstructor(List<IMessage> messages, IReporter reporter) { - if (this.getTargetEmbeddable() != null) { - String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName(); - IJavaProject javaProject = getJpaProject().getJavaProject(); - if (!JDTTools.classHasPublicZeroArgConstructor(javaProject, targetEmbeddableClassName)) { - messages.add( - DefaultJpaValidationMessages.buildMessage( - IMessage.HIGH_SEVERITY, - JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_NO_ARG_CONSTRUCTOR, - EMPTY_STRING_ARRAY, - this, - this.getValidationTextRange() - ) - ); - } + /** + * preconditions: + * {@link #getTargetEmbeddable()} is not null + * {@link #getTargetEmbeddable#getJavaResourceType()} is not null + */ + protected void validateTargetEmbeddableImplementsNoArgConstructor(List<IMessage> messages) { + String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName(); + IJavaProject javaProject = getJpaProject().getJavaProject(); + if (!JDTTools.classHasPublicZeroArgConstructor(javaProject, targetEmbeddableClassName)) { + messages.add( + DefaultJpaValidationMessages.buildMessage( + IMessage.HIGH_SEVERITY, + JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_NO_ARG_CONSTRUCTOR, + EMPTY_STRING_ARRAY, + this, + this.getValidationTextRange() + ) + ); } } |