Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmoore2012-03-05 15:17:27 +0000
committerkmoore2012-03-05 15:17:27 +0000
commiteeccada92fc231d94cc5722e54ba59ef89f05f43 (patch)
tree9d600e0b0feac268eae014d82ca9d4fd4b8d02ae /jpa/plugins/org.eclipse.jpt.jpa.core/src/org
parentd1d939e4444d70a6de1d203b8c7e195fd358eecc (diff)
downloadwebtools.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')
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/context/orm/OrmTypeMapping.java25
-rw-r--r--jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/context/orm/AbstractOrmTypeMapping.java83
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() {

Back to the top