Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 203372 Details for
Bug 331480
[Validation] Need validation for embeddable id class
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch with additional recommended changes
propossed_patch_331480_2.txt (text/plain), 31.79 KB, created by
Leslie Davis
on 2011-09-14 18:18:26 EDT
(
hide
)
Description:
patch with additional recommended changes
Filename:
MIME Type:
Creator:
Leslie Davis
Created:
2011-09-14 18:18:26 EDT
Size:
31.79 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jpt.common.core >Index: src/org/eclipse/jpt/common/core/internal/utility/JDTTools.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JDTTools.java,v >retrieving revision 1.6 >diff -u -r1.6 JDTTools.java >--- src/org/eclipse/jpt/common/core/internal/utility/JDTTools.java 16 Aug 2011 20:36:50 -0000 1.6 >+++ src/org/eclipse/jpt/common/core/internal/utility/JDTTools.java 14 Sep 2011 22:15:46 -0000 >@@ -19,12 +19,14 @@ > import org.eclipse.jdt.core.IParent; > import org.eclipse.jdt.core.IType; > import org.eclipse.jdt.core.JavaModelException; >+import org.eclipse.jdt.core.Signature; > import org.eclipse.jpt.common.core.JptCommonCorePlugin; > import org.eclipse.jpt.common.utility.Filter; > import org.eclipse.jpt.common.utility.internal.ArrayTools; > import org.eclipse.jpt.common.utility.internal.ClassName; > import org.eclipse.jpt.common.utility.internal.NotNullFilter; > import org.eclipse.jpt.common.utility.internal.ReflectionTools; >+import org.eclipse.jpt.common.utility.internal.StringTools; > import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; > import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; > import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; >@@ -117,6 +119,54 @@ > return false; > } > >+ >+ /** >+ * Return true if the given type named contains a method name as given with the given parameter types >+ */ >+ public static boolean typeNamedImplementsMethod(IJavaProject javaProject, String typeName, String methodName, String[] parameterTypeNames) { >+ try { >+ return typeImplementsMethod(javaProject.findType(typeName), methodName, parameterTypeNames); >+ } catch (JavaModelException ex) { >+ JptCommonCorePlugin.log(ex); >+ return false; >+ } >+ } >+ >+ private static boolean typeImplementsMethod(IType type, String methodName, String[] parameterTypeNames) { >+ if ((type == null) || methodName == null) { >+ return false; >+ } >+ >+ try { >+ IMethod[] methods = type.getMethods(); >+ for (IMethod method : methods) { >+ if (StringTools.stringsAreEqual(method.getElementName(), methodName)) { >+ if (parameterTypeNames.length == 0 && method.getNumberOfParameters() == 0) { >+ return true; >+ } else if (parameterTypeNames.length == method.getNumberOfParameters()) { >+ int index = 0; >+ String[] parameters = method.getParameterTypes(); >+ String resolvedParameterTypeName = parameters[0]; >+ if (!type.isResolved()) { >+ resolvedParameterTypeName = resolveType(type, Signature.getSignatureSimpleName(parameters[index])); >+ } >+ for (String parameterTypeName : parameterTypeNames) { >+ if (!StringTools.stringsAreEqual(resolvedParameterTypeName, parameterTypeName)) { >+ return false; >+ } >+ index++; >+ } >+ return true; >+ } >+ } >+ } >+ } catch (JavaModelException ex) { >+ JptCommonCorePlugin.log(ex); >+ return false; >+ } >+ return false; >+ } >+ > /** > * Return the names of the specified type's supertypes (class and interfaces). > * This is necessary because, for whatever reason, { @link IType#getSuperInterfaceNames()} >#P org.eclipse.jpt.jpa.core >Index: property_files/jpa_validation.properties >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/property_files/jpa_validation.properties,v >retrieving revision 1.13 >diff -u -r1.13 jpa_validation.properties >--- property_files/jpa_validation.properties 25 Aug 2011 20:29:37 -0000 1.13 >+++ property_files/jpa_validation.properties 14 Sep 2011 22:15:48 -0000 >@@ -60,6 +60,7 @@ > TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR=The java class for mapped type \"{0}\" has no no-arg constructor defined > TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR=The java class for mapped type \"{0}\" has a private no-arg constructor; it must be public or protected. > TYPE_MAPPING_FINAL_CLASS=The java class for mapped type \"{0}\" is final >+TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED=This class must use either an ID or and embedded ID to specify its primary key, not both. > TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED=This class must use either an ID class or an embedded ID to specify its composite primary key, not both. > TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH=Primary key attribute {0} is a duplicate match for ID class > TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH=There is no ID class attribute to match the primary key attribute {0} >@@ -84,6 +85,10 @@ > ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST=Target class does not exist on the project classpath > ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE=Target class \"{0}\" is not an embeddable or basic type > ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED=Target class is not defined >+EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC=Embedded id class should be public. >+EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE=Embedded id class should include method definitions for equals() and hashcode(). >+EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE=Embedded id class should implement Serializable. >+EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS=Embedded id class should not contain relationship mappings. > EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED=Embedded IDs that are mapped by a relationship should not specify any attribute overrides. > ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED=In {0}, a column is specified, but it is mapped by a relationship. IDs that are mapped by a relationship should not specify a column. > MAPS_ID_VALUE_INVALID=In {0}, the "maps ID" value ''{1}'' does not refer to an attribute that is used as an ID for this entity >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java,v >retrieving revision 1.3 >diff -u -r1.3 AbstractEntityPrimaryKeyValidator.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java 14 Sep 2011 19:39:22 -0000 1.3 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractEntityPrimaryKeyValidator.java 14 Sep 2011 22:15:48 -0000 >@@ -72,6 +72,8 @@ > validateOneOfIdClassOrEmbeddedIdIsUsed(messages, reporter); > // ... and only one embedded id > validateOneEmbeddedId(messages, reporter); >+ // ... and not both id and embedded id >+ validateOneOfEmbeddedOrIdIsUsed(messages, reporter); > > validateMapsIdMappings(messages, reporter); > >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractMappedSuperclassPrimaryKeyValidator.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java 12 May 2011 04:20:30 -0000 1.2 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractMappedSuperclassPrimaryKeyValidator.java 14 Sep 2011 22:15:48 -0000 >@@ -43,6 +43,8 @@ > validateOneOfIdClassOrEmbeddedIdIsUsed(messages, reporter); > // ... and only one embedded id > validateOneEmbeddedId(messages, reporter); >+ // ... and not both id and embedded id >+ validateOneOfEmbeddedOrIdIsUsed(messages, reporter); > > if (specifiesIdClass()) { > validateIdClass(idClassReference().getIdClass(), messages, reporter); >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java,v >retrieving revision 1.4 >diff -u -r1.4 AbstractPrimaryKeyValidator.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java 2 Aug 2011 13:24:16 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/AbstractPrimaryKeyValidator.java 14 Sep 2011 22:15:48 -0000 >@@ -117,6 +117,19 @@ > } > } > >+ //only embedded or id, both may not be used >+ protected void validateOneOfEmbeddedOrIdIsUsed(List<IMessage> messages, IReporter reporter) { >+ if (definesEmbeddedIdMapping(typeMapping) && definesIdMapping(typeMapping)) { >+ messages.add( >+ DefaultJpaValidationMessages.buildMessage( >+ IMessage.HIGH_SEVERITY, >+ JpaValidationMessages.TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED, >+ EMPTY_STRING_ARRAY, >+ typeMapping(), >+ textRangeResolver().getTypeMappingTextRange())); >+ } >+ } >+ > // only one embedded id may be used > protected void validateOneEmbeddedId(List<IMessage> messages, IReporter reporter) { > if (CollectionTools.size(getEmbeddedIdMappings(typeMapping())) > 1) { >@@ -459,6 +472,14 @@ > return ! CollectionTools.isEmpty(getEmbeddedIdMappings(typeMapping)); > } > >+ /** >+ * Return whether an id is defined for this class, whether that be locally >+ * or on an ancestor >+ */ >+ protected boolean definesIdMapping(TypeMapping typeMapping) { >+ return ! CollectionTools.isEmpty(getIdMappings(typeMapping)); >+ } >+ > protected EmbeddedIdMapping getEmbeddedIdMapping(TypeMapping typeMapping) { > Iterable<EmbeddedIdMapping> embeddedIdMappings = getEmbeddedIdMappings(typeMapping); > if (CollectionTools.size(embeddedIdMappings) == 1) { >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericJavaEmbeddedIdMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java 2 Aug 2011 13:24:16 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaEmbeddedIdMapping.java 14 Sep 2011 22:15:48 -0000 >@@ -9,8 +9,12 @@ > ******************************************************************************/ > package org.eclipse.jpt.jpa.core.internal.jpa1.context.java; > >+import java.io.Serializable; > import java.util.List; >+ >+import org.eclipse.jdt.core.IJavaProject; > import org.eclipse.jdt.core.dom.CompilationUnit; >+import org.eclipse.jpt.common.core.internal.utility.JDTTools; > import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; > import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; > import org.eclipse.jpt.jpa.core.MappingKeys; >@@ -101,7 +105,87 @@ > @Override > public void validate(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { > super.validate(messages, reporter, astRoot); >- >+ validateMappedByRelationshipAndAttributeOverridesSpecified(messages, reporter, astRoot); >+ validateTargetEmbeddableImplementsEqualsAndHashcode(messages, reporter, astRoot); >+ validateTargetEmbeddableIsPublic(messages, reporter, astRoot); >+ validateTargetEmbeddableImplementsSerializable(messages, reporter, astRoot); >+ validateNoRelationshipMappingsOnTargetEmbeddable(messages, reporter, astRoot); >+ } >+ >+ protected void validateNoRelationshipMappingsOnTargetEmbeddable(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { >+ 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(astRoot) >+ ) >+ ); >+ } >+ } >+ } >+ >+ protected void validateTargetEmbeddableImplementsSerializable(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { >+ 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(astRoot) >+ ) >+ ); >+ } >+ } >+ } >+ >+ protected void validateTargetEmbeddableIsPublic(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { >+ 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(astRoot) >+ ) >+ ); >+ } >+ } >+ } >+ >+ protected void validateTargetEmbeddableImplementsEqualsAndHashcode(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { >+ if (this.getTargetEmbeddable() != null) { >+ String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName(); >+ IJavaProject javaProject = getJpaProject().getJavaProject(); >+ if (!JDTTools.typeNamedImplementsMethod(javaProject, targetEmbeddableClassName, "equals", new String[] {Object.class.getName()}) >+ || !JDTTools.typeNamedImplementsMethod(javaProject, targetEmbeddableClassName, "hashCode", EMPTY_STRING_ARRAY)) { >+ messages.add( >+ DefaultJpaValidationMessages.buildMessage( >+ IMessage.HIGH_SEVERITY, >+ JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE, >+ EMPTY_STRING_ARRAY, >+ this, >+ this.getValidationTextRange(astRoot) >+ ) >+ ); >+ } >+ } >+ } >+ >+ protected void validateMappedByRelationshipAndAttributeOverridesSpecified(List<IMessage> messages, IReporter reporter, CompilationUnit astRoot) { > // [JPA 2.0] if the embedded id is mapped by a relationship, then any specified > // attribute overrides are in error > // (in JPA 1.0, this will obviously never be reached) >Index: src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java,v >retrieving revision 1.4 >diff -u -r1.4 GenericOrmEmbeddedIdMapping.java >--- src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java 2 Aug 2011 13:24:16 -0000 1.4 >+++ src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmEmbeddedIdMapping.java 14 Sep 2011 22:15:48 -0000 >@@ -9,7 +9,11 @@ > ******************************************************************************/ > package org.eclipse.jpt.jpa.core.internal.jpa1.context.orm; > >+import java.io.Serializable; > import java.util.List; >+ >+import org.eclipse.jdt.core.IJavaProject; >+import org.eclipse.jpt.common.core.internal.utility.JDTTools; > import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; > import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; > import org.eclipse.jpt.jpa.core.MappingKeys; >@@ -113,7 +117,90 @@ > @Override > 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); >+ } >+ >+ 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() >+ ) >+ ); >+ } >+ } >+ } >+ >+ 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() >+ ) >+ ); >+ } >+ } >+ } >+ >+ protected void validateTargetEmbeddableIsPublic(List<IMessage> messages, IReporter reporter) { >+ if (this.getTargetEmbeddable() != null) { >+// String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName(); >+// IJavaProject javaProject = getJpaProject().getJavaProject(); >+// if (!JDTTools.classIsPublic(javaProject, targetEmbeddableClassName)) { >+ if (!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) { >+ String targetEmbeddableClassName = this.getTargetEmbeddable().getPersistentType().getName(); >+ IJavaProject javaProject = getJpaProject().getJavaProject(); >+ if (!JDTTools.typeNamedImplementsMethod(javaProject, targetEmbeddableClassName, "equals", new String[] {Object.class.getName()}) >+ || !JDTTools.typeNamedImplementsMethod(javaProject, targetEmbeddableClassName, "hashCode", EMPTY_STRING_ARRAY)) { >+ messages.add( >+ DefaultJpaValidationMessages.buildMessage( >+ IMessage.HIGH_SEVERITY, >+ JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE, >+ EMPTY_STRING_ARRAY, >+ this, >+ this.getValidationTextRange() >+ ) >+ ); >+ } >+ } >+ } >+ >+ protected void validateMappedByRelationshipAndAttributeOverridesSpecified(List<IMessage> messages, IReporter reporter) { > // [JPA 2.0] if the embedded id is mapped by a relationship, then any specified > // attribute overrides are in error > // (in JPA 1.0, this will obviously never be reached) >@@ -130,8 +217,6 @@ > ); > } > } >- >- > // ********** attribute override container owner ********* > > protected class AttributeOverrideContainerOwner >Index: src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java,v >retrieving revision 1.13 >diff -u -r1.13 JpaValidationMessages.java >--- src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java 25 Aug 2011 20:29:37 -0000 1.13 >+++ src/org/eclipse/jpt/jpa/core/internal/validation/JpaValidationMessages.java 14 Sep 2011 22:15:48 -0000 >@@ -64,6 +64,7 @@ > public static final String TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR = "TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR"; > public static final String TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR = "TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR"; > public static final String TYPE_MAPPING_FINAL_CLASS = "TYPE_MAPPING_FINAL_CLASS"; >+ public static final String TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED = "TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED"; > public static final String TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED = "TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED"; > public static final String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH = "TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH"; > public static final String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH = "TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH"; >@@ -88,6 +89,10 @@ > public static final String ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST = "ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST"; > public static final String ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE = "ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE"; > public static final String ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED = "ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED"; >+ public static final String EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC="EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC"; >+ public static final String EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE = "EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE"; >+ public static final String EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE="EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE"; >+ public static final String EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS="EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS"; > public static final String EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED = "EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED"; > public static final String ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED = "ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED"; > public static final String MAPS_ID_VALUE_INVALID = "MAPS_ID_VALUE_INVALID"; >#P org.eclipse.jpt.jpa.ui >Index: property_files/jpt_ui_validation_preferences.properties >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.ui/property_files/jpt_ui_validation_preferences.properties,v >retrieving revision 1.9 >diff -u -r1.9 jpt_ui_validation_preferences.properties >--- property_files/jpt_ui_validation_preferences.properties 25 Aug 2011 20:29:34 -0000 1.9 >+++ property_files/jpt_ui_validation_preferences.properties 14 Sep 2011 22:15:50 -0000 >@@ -60,6 +60,7 @@ > TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR=Mapped Java class has no no-arg constructor: > TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR=Mapped Java class has a private no-arg constructor: > TYPE_MAPPING_FINAL_CLASS=Mapped Java class is final: >+TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED=ID and embedded ID are not allowed to use together: > TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED=ID class and embedded ID mapping are not allowed to use together: > TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH=Primary key attribute is a duplicate match for ID class: > TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH=No ID class attribute matches primary key attribute: >@@ -83,6 +84,10 @@ > ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST=Element collection target class does not exist on the project classpath: > ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE=Element collection target class is not embeddable or basic type: > ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED=Element collection target class is not specified: >+EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC=Embedded ID classes should be public: >+EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE=Embedded ID classes should implement equals() and hashcode(): >+EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE=Embedded ID classes should implement Serializable: >+EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS=Embedded ID classes should not contain relationship mappings: > EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED=Embedded IDs that are mapped by a relationship should not specify any attribute overrides: > ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED=IDs that are mapped by a relationship should not specify a column: > MAPS_ID_VALUE_INVALID="Maps ID" attribute value invalid: >Index: src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java,v >retrieving revision 1.9 >diff -u -r1.9 JptUiValidationPreferenceMessages.java >--- src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java 25 Aug 2011 20:29:34 -0000 1.9 >+++ src/org/eclipse/jpt/jpa/ui/internal/JptUiValidationPreferenceMessages.java 14 Sep 2011 22:15:50 -0000 >@@ -68,6 +68,7 @@ > public static String TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR; > public static String TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR; > public static String TYPE_MAPPING_FINAL_CLASS; >+ public static String TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED; > public static String TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED; //3.0 M7 > public static String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH; //3.0 M7 > public static String TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH; //3.0 M7 >@@ -92,6 +93,10 @@ > public static String ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST;// 3.0 M7 > public static String ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE; > public static String ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED; >+ public static String EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC; >+ public static String EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE; >+ public static String EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE; >+ public static String EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS; > public static String EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED; //3.0 M7 > public static String ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED; //3.0 M7 > public static String MAPS_ID_VALUE_INVALID; >Index: src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java >=================================================================== >RCS file: /cvsroot/webtools/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java,v >retrieving revision 1.10 >diff -u -r1.10 JpaProblemSeveritiesPage.java >--- src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java 25 Aug 2011 20:29:34 -0000 1.10 >+++ src/org/eclipse/jpt/jpa/ui/internal/preferences/JpaProblemSeveritiesPage.java 14 Sep 2011 22:15:50 -0000 >@@ -323,6 +323,7 @@ > addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR, JpaValidationMessages.TYPE_MAPPING_CLASS_MISSING_NO_ARG_CONSTRUCTOR); > addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR, JpaValidationMessages.TYPE_MAPPING_CLASS_PRIVATE_NO_ARG_CONSTRUCTOR); > addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_FINAL_CLASS, JpaValidationMessages.TYPE_MAPPING_FINAL_CLASS); >+ addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED, JpaValidationMessages.TYPE_MAPPING_ID_AND_EMBEDDED_ID_BOTH_USED); > addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED, JpaValidationMessages.TYPE_MAPPING_ID_CLASS_AND_EMBEDDED_ID_BOTH_USED); //3.0 M7 > addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH, JpaValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_DUPLICATE_MATCH); //3.0 M7 > addLabeledCombo(parent, JptUiValidationPreferenceMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH, JpaValidationMessages.TYPE_MAPPING_ID_CLASS_ATTRIBUTE_MAPPING_NO_MATCH); //3.0 M7 >@@ -349,6 +350,10 @@ > addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE, JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_MUST_BE_EMBEDDABLE_OR_BASIC_TYPE); > addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST, JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_DOES_NOT_EXIST); //3.0 M7 > addLabeledCombo(parent, JptUiValidationPreferenceMessages.ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED, JpaValidationMessages.ELEMENT_COLLECTION_TARGET_CLASS_NOT_DEFINED); >+ addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC, JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_BE_PUBLIC); >+ addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE, JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_EQUALS_HASHCODE); >+ addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE, JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_IMPLEMENT_SERIALIZABLE); >+ addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS, JpaValidationMessages.EMBEDDED_ID_CLASS_SHOULD_NOT_CONTAIN_RELATIONSHIP_MAPPINGS); > addLabeledCombo(parent, JptUiValidationPreferenceMessages.EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED, JpaValidationMessages.EMBEDDED_ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_ATTRIBUTE_OVERRIDES_SPECIFIED); //3.0 M7 > addLabeledCombo(parent, JptUiValidationPreferenceMessages.ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED, JpaValidationMessages.ID_MAPPING_MAPPED_BY_RELATIONSHIP_AND_COLUMN_SPECIFIED); //3.0 M7 > addLabeledCombo(parent, JptUiValidationPreferenceMessages.MAPS_ID_VALUE_INVALID, JpaValidationMessages.MAPS_ID_VALUE_INVALID);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 331480
:
192311
|
203372
|
211005