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/plugins/org.eclipse.jpt.jpa.core/src/org | |
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/plugins/org.eclipse.jpt.jpa.core/src/org')
2 files changed, 108 insertions, 0 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() { |