Skip to main content
summaryrefslogtreecommitdiffstats
path: root/jpa
diff options
context:
space:
mode:
authorkmoore2008-05-22 13:59:23 +0000
committerkmoore2008-05-22 13:59:23 +0000
commitdc4f0483bc8ab135a38ce8233496fe33c237e720 (patch)
tree3cfb9d6779908b32e84cb94d32f11c17e3fb5f7b /jpa
parent461e842e15406378b6844af9c0ce07d86cc84a23 (diff)
downloadwebtools.dali-dc4f0483bc8ab135a38ce8233496fe33c237e720.tar.gz
webtools.dali-dc4f0483bc8ab135a38ce8233496fe33c237e720.tar.xz
webtools.dali-dc4f0483bc8ab135a38ce8233496fe33c237e720.zip
228718 - orm entity and embedded mapping attribute override defaults
Diffstat (limited to 'jpa')
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/BaseEmbeddedMapping.java6
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/Entity.java6
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java1
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaBaseEmbeddedMapping.java2
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaEntity.java1
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmBaseEmbeddedMapping.java1
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java1
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java14
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentType.java12
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java179
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAttributeOverride.java23
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java153
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentType.java16
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlAttributeOverride.java29
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlColumn.java50
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbedded.java69
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbeddedId.java69
-rw-r--r--jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedIdMappingTests.java413
-rw-r--r--jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedMappingTests.java96
-rw-r--r--jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java116
20 files changed, 1052 insertions, 205 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/BaseEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/BaseEmbeddedMapping.java
index a922cf5bfd..ced177aef7 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/BaseEmbeddedMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/BaseEmbeddedMapping.java
@@ -62,5 +62,11 @@ public interface BaseEmbeddedMapping extends AttributeMapping, AttributeOverride
* Move the specified attribute override from the source index to the target index.
*/
void moveSpecifiedAttributeOverride(int targetIndex, int sourceIndex);
+
+ /**
+ * Return the attribute overrides, whether specified or default,
+ * with the given name.
+ */
+ AttributeOverride getAttributeOverrideNamed(String name);
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/Entity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/Entity.java
index 6b304e6b4a..f77db82793 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/Entity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/Entity.java
@@ -207,6 +207,12 @@ public interface Entity extends TypeMapping, GeneratorHolder, QueryHolder, IdCla
String SPECIFIED_ATTRIBUTE_OVERRIDES_LIST = "specifiedAttributeOverridesList";
String VIRTUAL_ATTRIBUTE_OVERRIDES_LIST = "virtualAttributeOverridesList";
+ /**
+ * Return the attribute overrides, whether specified or default,
+ * with the given name.
+ */
+ AttributeOverride getAttributeOverrideNamed(String name);
+
// **************** association overrides **************************************
/**
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java
index 0f94e196ab..5d71d21075 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/PersistentType.java
@@ -60,6 +60,7 @@ public interface PersistentType extends JpaContextNode, JpaStructureNode
* The parentPersistentType could be found in java or xml.
*/
PersistentType getParentPersistentType();
+ String PARENT_PERSISTENT_TYPE_PROPERTY = "parentPersistentTypeProperty";
/**
* Return a read-only iterator of the contained {@link PersistentAttribute}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaBaseEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaBaseEmbeddedMapping.java
index 4ad19d0d5e..58356ff62a 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaBaseEmbeddedMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaBaseEmbeddedMapping.java
@@ -29,5 +29,7 @@ public interface JavaBaseEmbeddedMapping extends JavaAttributeMapping, BaseEmbed
ListIterator<JavaAttributeOverride> virtualAttributeOverrides();
@SuppressWarnings("unchecked")
ListIterator<JavaAttributeOverride> specifiedAttributeOverrides();
+
+ JavaAttributeOverride getAttributeOverrideNamed(String name);
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaEntity.java
index d3cb9c69b1..4f4818e770 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/java/JavaEntity.java
@@ -47,6 +47,7 @@ public interface JavaEntity extends JavaTypeMapping, Entity, JavaGeneratorHolder
ListIterator<JavaAttributeOverride> specifiedAttributeOverrides();
@SuppressWarnings("unchecked")
ListIterator<JavaAttributeOverride> virtualAttributeOverrides();
+ JavaAttributeOverride getAttributeOverrideNamed(String name);
@SuppressWarnings("unchecked")
ListIterator<JavaAssociationOverride> associationOverrides();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmBaseEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmBaseEmbeddedMapping.java
index 9e4bffaeb0..584b69c1d1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmBaseEmbeddedMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmBaseEmbeddedMapping.java
@@ -30,4 +30,5 @@ public interface OrmBaseEmbeddedMapping extends BaseEmbeddedMapping, OrmAttribut
@SuppressWarnings("unchecked")
ListIterator<OrmAttributeOverride> specifiedAttributeOverrides();
+ OrmAttributeOverride getAttributeOverrideNamed(String name);
} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java
index 6d9b7f0a84..1d848475ea 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java
@@ -99,6 +99,7 @@ public interface OrmEntity extends OrmTypeMapping, Entity, OrmGeneratorHolder
ListIterator<OrmAttributeOverride> specifiedAttributeOverrides();
@SuppressWarnings("unchecked")
ListIterator<OrmAttributeOverride> virtualAttributeOverrides();
+ OrmAttributeOverride getAttributeOverrideNamed(String name);
@SuppressWarnings("unchecked")
ListIterator<OrmAssociationOverride> associationOverrides();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java
index ca7fec4d75..64dc6cf3fc 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/AbstractJavaBaseEmbeddedMapping.java
@@ -182,8 +182,8 @@ public abstract class AbstractJavaBaseEmbeddedMapping<T extends JavaResourceNode
removeItemFromList(attributeOverride, this.virtualAttributeOverrides, BaseEmbeddedMapping.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST);
}
- public JavaAttributeOverride attributeOverrideNamed(String name) {
- return (JavaAttributeOverride) overrideNamed(name, attributeOverrides());
+ public JavaAttributeOverride getAttributeOverrideNamed(String name) {
+ return (JavaAttributeOverride) getOverrideNamed(name, attributeOverrides());
}
public boolean containsAttributeOverride(String name) {
@@ -198,7 +198,7 @@ public abstract class AbstractJavaBaseEmbeddedMapping<T extends JavaResourceNode
return containsOverride(name, specifiedAttributeOverrides());
}
- private BaseOverride overrideNamed(String name, ListIterator<? extends BaseOverride> overrides) {
+ protected BaseOverride getOverrideNamed(String name, ListIterator<? extends BaseOverride> overrides) {
for (BaseOverride override : CollectionTools.iterable(overrides)) {
String overrideName = override.getName();
if (overrideName == null && name == null) {
@@ -211,8 +211,8 @@ public abstract class AbstractJavaBaseEmbeddedMapping<T extends JavaResourceNode
return null;
}
- private boolean containsOverride(String name, ListIterator<? extends BaseOverride> overrides) {
- return overrideNamed(name, overrides) != null;
+ protected boolean containsOverride(String name, ListIterator<? extends BaseOverride> overrides) {
+ return getOverrideNamed(name, overrides) != null;
}
public Embeddable embeddable() {
@@ -242,7 +242,7 @@ public abstract class AbstractJavaBaseEmbeddedMapping<T extends JavaResourceNode
protected void initializeDefaultAttributeOverrides(JavaResourcePersistentAttribute resourcePersistentAttribute) {
for (Iterator<String> i = allOverridableAttributeNames(); i.hasNext(); ) {
String attributeName = i.next();
- JavaAttributeOverride attributeOverride = attributeOverrideNamed(attributeName);
+ JavaAttributeOverride attributeOverride = getAttributeOverrideNamed(attributeName);
if (attributeOverride == null) {
this.virtualAttributeOverrides.add(buildVirtualAttributeOverride(resourcePersistentAttribute, attributeName));
}
@@ -292,7 +292,7 @@ public abstract class AbstractJavaBaseEmbeddedMapping<T extends JavaResourceNode
protected void updateVirtualAttributeOverrides(JavaResourcePersistentAttribute resourcePersistentAttribute) {
for (Iterator<String> i = allOverridableAttributeNames(); i.hasNext(); ) {
String attributeName = i.next();
- JavaAttributeOverride attributeOverride = attributeOverrideNamed(attributeName);
+ JavaAttributeOverride attributeOverride = getAttributeOverrideNamed(attributeName);
if (attributeOverride == null) {
addVirtualAttributeOverride(buildVirtualAttributeOverride(resourcePersistentAttribute, attributeName));
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentType.java
index 94c1b84132..feb54cc1fc 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/java/GenericJavaPersistentType.java
@@ -282,6 +282,15 @@ public class GenericJavaPersistentType extends AbstractJavaJpaContextNode implem
return this.parentPersistentType;
}
+ public void setParentPersistentType(PersistentType newParentPersistentType) {
+ if (attributeValueHasNotChanged(this.parentPersistentType, newParentPersistentType)) {
+ return;
+ }
+ PersistentType oldParentPersistentType = this.parentPersistentType;
+ this.parentPersistentType = newParentPersistentType;
+ firePropertyChanged(PersistentType.PARENT_PERSISTENT_TYPE_PROPERTY, oldParentPersistentType, newParentPersistentType);
+ }
+
public boolean hasAnyAttributeMappingAnnotations() {
if (this.resourcePersistentType.hasAnyAttributeAnnotations()) {
return true;
@@ -436,8 +445,7 @@ public class GenericJavaPersistentType extends AbstractJavaJpaContextNode implem
}
public void updateParentPersistentType(JavaResourcePersistentType persistentTypeResource) {
- //TODO do we need any change notification for this?
- this.parentPersistentType = parentPersistentType(persistentTypeResource);
+ setParentPersistentType(parentPersistentType(persistentTypeResource));
}
protected PersistentType parentPersistentType(JavaResourcePersistentType persistentTypeResource) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java
index d28332e445..aa9c1baa60 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/AbstractOrmBaseEmbeddedMapping.java
@@ -18,20 +18,24 @@ import org.eclipse.jpt.core.context.BaseOverride;
import org.eclipse.jpt.core.context.ColumnMapping;
import org.eclipse.jpt.core.context.Embeddable;
import org.eclipse.jpt.core.context.PersistentAttribute;
+import org.eclipse.jpt.core.context.java.JavaAttributeOverride;
import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
import org.eclipse.jpt.core.context.orm.OrmBaseEmbeddedMapping;
import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
import org.eclipse.jpt.core.internal.context.MappingTools;
+import org.eclipse.jpt.core.internal.context.java.AbstractJavaBaseEmbeddedMapping;
import org.eclipse.jpt.core.resource.orm.BaseXmlEmbedded;
import org.eclipse.jpt.core.resource.orm.OrmFactory;
import org.eclipse.jpt.core.resource.orm.XmlAttributeOverride;
+import org.eclipse.jpt.core.resource.orm.XmlColumn;
import org.eclipse.jpt.utility.internal.CollectionTools;
import org.eclipse.jpt.utility.internal.iterators.CloneListIterator;
import org.eclipse.jpt.utility.internal.iterators.CompositeListIterator;
import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
import org.eclipse.jpt.utility.internal.iterators.FilteringIterator;
import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
public abstract class AbstractOrmBaseEmbeddedMapping<T extends BaseXmlEmbedded> extends AbstractOrmAttributeMapping<T> implements OrmBaseEmbeddedMapping
@@ -65,14 +69,20 @@ public abstract class AbstractOrmBaseEmbeddedMapping<T extends BaseXmlEmbedded>
}
public int attributeOverridesSize() {
- // TODO Auto-generated method stub
- return 0;
+ return this.specifiedAttributeOverridesSize() + this.virtualAttributeOverridesSize();
}
public ListIterator<OrmAttributeOverride> virtualAttributeOverrides() {
return new CloneListIterator<OrmAttributeOverride>(this.virtualAttributeOverrides);
}
+ protected void addVirtualAttributeOverride(OrmAttributeOverride attributeOverride) {
+ addItemToList(attributeOverride, this.virtualAttributeOverrides, BaseEmbeddedMapping.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST);
+ }
+ protected void removeVirtualAttributeOverride(OrmAttributeOverride attributeOverride) {
+ removeItemFromList(attributeOverride, this.virtualAttributeOverrides, BaseEmbeddedMapping.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST);
+ }
+
public int virtualAttributeOverridesSize() {
return this.virtualAttributeOverrides.size();
}
@@ -108,7 +118,23 @@ public abstract class AbstractOrmBaseEmbeddedMapping<T extends BaseXmlEmbedded>
fireItemMoved(BaseEmbeddedMapping.SPECIFIED_ATTRIBUTE_OVERRIDES_LIST, targetIndex, sourceIndex);
}
-
+ public OrmAttributeOverride getAttributeOverrideNamed(String name) {
+ return (OrmAttributeOverride) getOverrideNamed(name, attributeOverrides());
+ }
+
+ protected BaseOverride getOverrideNamed(String name, ListIterator<? extends BaseOverride> overrides) {
+ for (BaseOverride override : CollectionTools.iterable(overrides)) {
+ String overrideName = override.getName();
+ if (overrideName == null && name == null) {
+ return override;
+ }
+ if (overrideName != null && overrideName.equals(name)) {
+ return override;
+ }
+ }
+ return null;
+ }
+
//****************** AttributeOverride.Owner implemenation *******************
public boolean isVirtual(BaseOverride override) {
@@ -116,8 +142,62 @@ public abstract class AbstractOrmBaseEmbeddedMapping<T extends BaseXmlEmbedded>
}
public BaseOverride setVirtual(boolean virtual, BaseOverride override) {
- // TODO Auto-generated method stub
- return null;
+ // Add a new attribute override
+ if (virtual) {
+ return setVirtual((OrmAttributeOverride) override);
+ }
+ return setSpecified((OrmAttributeOverride) override);
+ }
+
+ protected OrmAttributeOverride setVirtual(OrmAttributeOverride attributeOverride) {
+ int index = this.specifiedAttributeOverrides.indexOf(attributeOverride);
+ this.specifiedAttributeOverrides.remove(index);
+ String attributeOverrideName = attributeOverride.getName();
+ //add the virtual attribute override so that I can control the order that change notification is sent.
+ //otherwise when we remove the annotation from java we will get an update and add the attribute override
+ //during the udpate. This causes the UI to be flaky, since change notification might not occur in the correct order
+ OrmAttributeOverride virtualAttributeOverride = null;
+ if (attributeOverrideName != null) {
+ for (PersistentAttribute persistentAttribute : CollectionTools.iterable(allOverridableAttributes())) {
+ if (persistentAttribute.getName().equals(attributeOverrideName)) {
+ JavaAttributeOverride javaAttributeOverride = null;
+ if (getJavaEmbeddedMapping() != null) {
+ javaAttributeOverride = getJavaEmbeddedMapping().getAttributeOverrideNamed(attributeOverrideName);
+ }
+ //store the virtualAttributeOverride so we can fire change notification later
+ virtualAttributeOverride = buildVirtualAttributeOverride(persistentAttribute, javaAttributeOverride);
+ this.virtualAttributeOverrides.add(virtualAttributeOverride);
+ }
+ }
+ }
+
+ getAttributeMapping().getAttributeOverrides().remove(index);
+ fireItemRemoved(BaseEmbeddedMapping.SPECIFIED_ATTRIBUTE_OVERRIDES_LIST, index, attributeOverride);
+
+ if (virtualAttributeOverride != null) {
+ fireItemAdded(BaseEmbeddedMapping.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST, virtualAttributeOverridesSize() - 1, virtualAttributeOverride);
+ }
+ return virtualAttributeOverride;
+ }
+
+ protected OrmAttributeOverride setSpecified(OrmAttributeOverride oldAttributeOverride) {
+ int index = specifiedAttributeOverridesSize();
+ XmlAttributeOverride xmlAttributeOverride = OrmFactory.eINSTANCE.createXmlAttributeOverrideImpl();
+ OrmAttributeOverride newAttributeOverride = getJpaFactory().buildOrmAttributeOverride(this, this, xmlAttributeOverride);
+ this.specifiedAttributeOverrides.add(index, newAttributeOverride);
+
+ getAttributeMapping().getAttributeOverrides().add(xmlAttributeOverride);
+
+ int defaultIndex = this.virtualAttributeOverrides.indexOf(oldAttributeOverride);
+ this.virtualAttributeOverrides.remove(defaultIndex);
+
+ newAttributeOverride.setName(oldAttributeOverride.getName());
+ newAttributeOverride.getColumn().setSpecifiedName(oldAttributeOverride.getColumn().getName());
+
+ this.fireItemRemoved(BaseEmbeddedMapping.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST, defaultIndex, oldAttributeOverride);
+ this.fireItemAdded(BaseEmbeddedMapping.SPECIFIED_ATTRIBUTE_OVERRIDES_LIST, index, newAttributeOverride);
+
+ return newAttributeOverride;
}
public ColumnMapping getColumnMapping(String attributeName) {
@@ -149,11 +229,20 @@ public abstract class AbstractOrmBaseEmbeddedMapping<T extends BaseXmlEmbedded>
};
}
+ public AbstractJavaBaseEmbeddedMapping<?> getJavaEmbeddedMapping() {
+ JavaPersistentAttribute javaPersistentAttribute = getJavaPersistentAttribute();
+ if (javaPersistentAttribute != null && javaPersistentAttribute.getMappingKey() == getKey()) {
+ return (AbstractJavaBaseEmbeddedMapping<?>) javaPersistentAttribute.getMapping();
+ }
+ return null;
+ }
+
@Override
public void initialize(T embedded) {
super.initialize(embedded);
this.embeddable = embeddableFor(findJavaPersistentAttribute());
this.initializeSpecifiedAttributeOverrides(embedded);
+ this.initializeVirtualAttributeOverrides();
}
protected void initializeSpecifiedAttributeOverrides(T embedded) {
@@ -161,19 +250,40 @@ public abstract class AbstractOrmBaseEmbeddedMapping<T extends BaseXmlEmbedded>
this.specifiedAttributeOverrides.add(buildAttributeOverride(attributeOverride));
}
}
-//
-// protected void initializeDefaultAttributeOverrides(JavaPersistentAttributeResource persistentAttributeResource) {
-// for (Iterator<String> i = allOverridableAttributeNames(); i.hasNext(); ) {
-// String attributeName = i.next();
-// XmlAttributeOverride attributeOverride = attributeOverrideNamed(attributeName);
-// if (attributeOverride == null) {
-// attributeOverride = createAttributeOverride(new NullAttributeOverride(persistentAttributeResource));
-// attributeOverride.setName(attributeName);
-// this.defaultAttributeOverrides.add(attributeOverride);
-// }
-// }
-// }
+
+ protected void initializeVirtualAttributeOverrides() {
+ if (getPersistentAttribute().isVirtual()) {
+ //specifiedAttributeOverrides are used if the persistentAttribute is virtual
+ return;
+ }
+ for (PersistentAttribute persistentAttribute : CollectionTools.iterable(allOverridableAttributes())) {
+ OrmAttributeOverride attributeOverride = getAttributeOverrideNamed(persistentAttribute.getName());
+ if (attributeOverride == null) {
+ JavaAttributeOverride javaAttributeOverride = null;
+ if (getJavaEmbeddedMapping() != null) {
+ javaAttributeOverride = getJavaEmbeddedMapping().getAttributeOverrideNamed(persistentAttribute.getName());
+ }
+ this.virtualAttributeOverrides.add(buildVirtualAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+ }
+ }
+ protected OrmAttributeOverride buildVirtualAttributeOverride(PersistentAttribute persistentAttribute, JavaAttributeOverride javaAttributeOverride) {
+ return buildAttributeOverride(buildVirtualXmlAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+
+ protected XmlAttributeOverride buildVirtualXmlAttributeOverride(PersistentAttribute persistentAttribute, JavaAttributeOverride javaAttributeOverride) {
+ XmlColumn xmlColumn;
+ if (javaAttributeOverride == null) {
+ ColumnMapping columnMapping = (ColumnMapping) persistentAttribute.getMapping();
+ xmlColumn = new VirtualXmlColumn(getTypeMapping(), columnMapping.getColumn(), false);
+ }
+ else {
+ xmlColumn = new VirtualXmlColumn(getTypeMapping(), javaAttributeOverride.getColumn(), true);
+ }
+ return new VirtualXmlAttributeOverride(persistentAttribute.getName(), xmlColumn);
+ }
+
protected OrmAttributeOverride buildAttributeOverride(XmlAttributeOverride attributeOverride) {
return getJpaFactory().buildOrmAttributeOverride(this, this, attributeOverride);
}
@@ -183,6 +293,7 @@ public abstract class AbstractOrmBaseEmbeddedMapping<T extends BaseXmlEmbedded>
super.update(embedded);
this.embeddable = embeddableFor(findJavaPersistentAttribute());
this.updateSpecifiedAttributeOverrides(embedded);
+ this.updateVirtualAttributeOverrides();
}
protected void updateSpecifiedAttributeOverrides(T embedded) {
@@ -204,6 +315,40 @@ public abstract class AbstractOrmBaseEmbeddedMapping<T extends BaseXmlEmbedded>
}
}
+ protected void updateVirtualAttributeOverrides() {
+ Iterator<PersistentAttribute> overridableAttributes = allOverridableAttributes();
+ ListIterator<OrmAttributeOverride> virtualAttributeOverrides = virtualAttributeOverrides();
+
+ if (!getPersistentAttribute().isVirtual()) {
+ //specifiedAttributeOverrides are used if the persistentAttribute is virtual
+ for (PersistentAttribute persistentAttribute : CollectionTools.iterable(overridableAttributes)) {
+ OrmAttributeOverride ormAttributeOverride = getAttributeOverrideNamed(persistentAttribute.getName());
+ if (ormAttributeOverride != null && !ormAttributeOverride.isVirtual()) {
+ continue;
+ }
+ JavaAttributeOverride javaAttributeOverride = null;
+ if (getJavaEmbeddedMapping() != null) {
+ javaAttributeOverride = getJavaEmbeddedMapping().getAttributeOverrideNamed(persistentAttribute.getName());
+ }
+ if (ormAttributeOverride != null) {
+ if (virtualAttributeOverrides.hasNext()) {
+ OrmAttributeOverride virtualAttributeOverride = virtualAttributeOverrides.next();
+ virtualAttributeOverride.update(buildVirtualXmlAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+ else {
+ addVirtualAttributeOverride(buildVirtualAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+ }
+ else {
+ addVirtualAttributeOverride(buildVirtualAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+ }
+ }
+ for (OrmAttributeOverride virtualAttributeOverride : CollectionTools.iterable(virtualAttributeOverrides)) {
+ removeVirtualAttributeOverride(virtualAttributeOverride);
+ }
+
+ }
//************ static methods ************
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAttributeOverride.java
index 9b20747c2b..5344708385 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAttributeOverride.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmAttributeOverride.java
@@ -12,6 +12,7 @@ package org.eclipse.jpt.core.internal.context.orm;
import java.util.List;
import org.eclipse.jpt.core.context.AttributeOverride;
import org.eclipse.jpt.core.context.BaseOverride;
+import org.eclipse.jpt.core.context.ColumnMapping;
import org.eclipse.jpt.core.context.TypeMapping;
import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
import org.eclipse.jpt.core.context.orm.OrmColumn;
@@ -88,13 +89,27 @@ public class GenericOrmAttributeOverride extends AbstractOrmJpaContextNode
}
public String getDefaultColumnName() {
- // TODO Auto-generated method stub
- return null;
+ ColumnMapping columnMapping = getColumnMapping();
+ if (columnMapping == null) {
+ return null;
+ }
+ return columnMapping.getColumn().getName();
}
public String getDefaultTableName() {
- // TODO Auto-generated method stub
- return null;
+ ColumnMapping columnMapping = getColumnMapping();
+ if (columnMapping == null) {
+ return null;
+ }
+ String tableName = columnMapping.getColumn().getSpecifiedTable();
+ if (tableName != null) {
+ return tableName;
+ }
+ return getOwner().getTypeMapping().getTableName();
+ }
+
+ protected ColumnMapping getColumnMapping() {
+ return getOwner().getColumnMapping(getName());
}
public boolean isVirtual() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
index 677288de4c..bb73f75ecd 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
@@ -35,6 +35,7 @@ import org.eclipse.jpt.core.context.RelationshipMapping;
import org.eclipse.jpt.core.context.SecondaryTable;
import org.eclipse.jpt.core.context.Table;
import org.eclipse.jpt.core.context.TypeMapping;
+import org.eclipse.jpt.core.context.java.JavaAttributeOverride;
import org.eclipse.jpt.core.context.java.JavaEntity;
import org.eclipse.jpt.core.context.java.JavaPersistentType;
import org.eclipse.jpt.core.context.java.JavaPrimaryKeyJoinColumn;
@@ -62,6 +63,7 @@ import org.eclipse.jpt.core.resource.orm.Inheritance;
import org.eclipse.jpt.core.resource.orm.OrmFactory;
import org.eclipse.jpt.core.resource.orm.XmlAssociationOverride;
import org.eclipse.jpt.core.resource.orm.XmlAttributeOverride;
+import org.eclipse.jpt.core.resource.orm.XmlColumn;
import org.eclipse.jpt.core.resource.orm.XmlEntity;
import org.eclipse.jpt.core.resource.orm.XmlEntityMappings;
import org.eclipse.jpt.core.resource.orm.XmlIdClass;
@@ -121,11 +123,11 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
protected final List<OrmAttributeOverride> specifiedAttributeOverrides;
- protected final List<OrmAttributeOverride> defaultAttributeOverrides;
+ protected final List<OrmAttributeOverride> virtualAttributeOverrides;
protected final List<OrmAssociationOverride> specifiedAssociationOverrides;
- protected final List<OrmAssociationOverride> defaultAssociationOverrides;
+ protected final List<OrmAssociationOverride> virtualAssociationOverrides;
protected final List<OrmNamedQuery> namedQueries;
@@ -140,9 +142,9 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
this.specifiedPrimaryKeyJoinColumns = new ArrayList<OrmPrimaryKeyJoinColumn>();
this.defaultPrimaryKeyJoinColumns = new ArrayList<OrmPrimaryKeyJoinColumn>();
this.specifiedAttributeOverrides = new ArrayList<OrmAttributeOverride>();
- this.defaultAttributeOverrides = new ArrayList<OrmAttributeOverride>();
+ this.virtualAttributeOverrides = new ArrayList<OrmAttributeOverride>();
this.specifiedAssociationOverrides = new ArrayList<OrmAssociationOverride>();
- this.defaultAssociationOverrides = new ArrayList<OrmAssociationOverride>();
+ this.virtualAssociationOverrides = new ArrayList<OrmAssociationOverride>();
this.namedQueries = new ArrayList<OrmNamedQuery>();
this.namedNativeQueries = new ArrayList<OrmNamedNativeQuery>();
}
@@ -715,13 +717,79 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
public ListIterator<OrmAttributeOverride> virtualAttributeOverrides() {
- return new CloneListIterator<OrmAttributeOverride>(this.defaultAttributeOverrides);
+ return new CloneListIterator<OrmAttributeOverride>(this.virtualAttributeOverrides);
}
public int virtualAttributeOverridesSize() {
- return this.defaultAttributeOverrides.size();
+ return this.virtualAttributeOverrides.size();
}
+ protected void addVirtualAttributeOverride(OrmAttributeOverride attributeOverride) {
+ addItemToList(attributeOverride, this.virtualAttributeOverrides, Entity.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST);
+ }
+
+ protected void removeVirtualAttributeOverride(OrmAttributeOverride attributeOverride) {
+ removeItemFromList(attributeOverride, this.virtualAttributeOverrides, Entity.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST);
+ }
+
+ protected OrmAttributeOverride setAttributeOverrideVirtual(boolean virtual, OrmAttributeOverride attributeOverride) {
+ if (virtual) {
+ return setAttributeOverrideVirtual(attributeOverride);
+ }
+ return setAttributeOverrideSpecified(attributeOverride);
+ }
+
+ protected OrmAttributeOverride setAttributeOverrideVirtual(OrmAttributeOverride attributeOverride) {
+ int index = this.specifiedAttributeOverrides.indexOf(attributeOverride);
+ this.specifiedAttributeOverrides.remove(index);
+ String attributeOverrideName = attributeOverride.getName();
+ //add the virtual attribute override so that I can control the order that change notification is sent.
+ //otherwise when we remove the annotation from java we will get an update and add the attribute override
+ //during the udpate. This causes the UI to be flaky, since change notification might not occur in the correct order
+ OrmAttributeOverride virtualAttributeOverride = null;
+ if (attributeOverrideName != null) {
+ for (PersistentAttribute persistentAttribute : CollectionTools.iterable(allOverridableAttributes())) {
+ if (persistentAttribute.getName().equals(attributeOverrideName)) {
+ JavaAttributeOverride javaAttributeOverride = null;
+ if (getJavaEntity() != null) {
+ javaAttributeOverride = getJavaEntity().getAttributeOverrideNamed(attributeOverrideName);
+ }
+ //store the virtualAttributeOverride so we can fire change notification later
+ virtualAttributeOverride = buildVirtualAttributeOverride(persistentAttribute, javaAttributeOverride);
+ this.virtualAttributeOverrides.add(virtualAttributeOverride);
+ }
+ }
+ }
+
+ getTypeMappingResource().getAttributeOverrides().remove(index);
+ fireItemRemoved(Entity.SPECIFIED_ATTRIBUTE_OVERRIDES_LIST, index, attributeOverride);
+
+ if (virtualAttributeOverride != null) {
+ fireItemAdded(Entity.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST, virtualAttributeOverridesSize() - 1, virtualAttributeOverride);
+ }
+ return virtualAttributeOverride;
+ }
+
+ protected OrmAttributeOverride setAttributeOverrideSpecified(OrmAttributeOverride oldAttributeOverride) {
+ int index = specifiedAttributeOverridesSize();
+ XmlAttributeOverride xmlAttributeOverride = OrmFactory.eINSTANCE.createXmlAttributeOverrideImpl();
+ OrmAttributeOverride newAttributeOverride = getJpaFactory().buildOrmAttributeOverride(this, createAttributeOverrideOwner(), xmlAttributeOverride);
+ this.specifiedAttributeOverrides.add(index, newAttributeOverride);
+
+ getTypeMappingResource().getAttributeOverrides().add(xmlAttributeOverride);
+
+ int defaultIndex = this.virtualAttributeOverrides.indexOf(oldAttributeOverride);
+ this.virtualAttributeOverrides.remove(defaultIndex);
+
+ newAttributeOverride.setName(oldAttributeOverride.getName());
+ newAttributeOverride.getColumn().setSpecifiedName(oldAttributeOverride.getColumn().getName());
+
+ this.fireItemRemoved(Entity.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST, defaultIndex, oldAttributeOverride);
+ this.fireItemAdded(Entity.SPECIFIED_ATTRIBUTE_OVERRIDES_LIST, index, newAttributeOverride);
+
+ return newAttributeOverride;
+ }
+
public ListIterator<OrmAttributeOverride> specifiedAttributeOverrides() {
return new CloneListIterator<OrmAttributeOverride>(this.specifiedAttributeOverrides);
}
@@ -754,11 +822,11 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
public ListIterator<OrmAssociationOverride> virtualAssociationOverrides() {
- return new CloneListIterator<OrmAssociationOverride>(this.defaultAssociationOverrides);
+ return new CloneListIterator<OrmAssociationOverride>(this.virtualAssociationOverrides);
}
public int virtualAssociationOverridesSize() {
- return this.defaultAssociationOverrides.size();
+ return this.virtualAssociationOverrides.size();
}
public ListIterator<OrmAssociationOverride> specifiedAssociationOverrides() {
@@ -1133,6 +1201,7 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
this.initializeSpecifiedPrimaryKeyJoinColumns(entity);
this.initializeDefaultPrimaryKeyJoinColumns();
this.initializeSpecifiedAttributeOverrides(entity);
+ this.initializeVirtualAttributeOverrides();
this.initializeSpecifiedAssociationOverrides(entity);
this.initializeNamedQueries(entity);
this.initializeNamedNativeQueries(entity);
@@ -1226,6 +1295,35 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
}
+ protected void initializeVirtualAttributeOverrides() {
+ for (PersistentAttribute persistentAttribute : CollectionTools.iterable(allOverridableAttributes())) {
+ OrmAttributeOverride attributeOverride = getAttributeOverrideNamed(persistentAttribute.getName());
+ if (attributeOverride == null) {
+ JavaAttributeOverride javaAttributeOverride = null;
+ if (getJavaEntity() != null) {
+ javaAttributeOverride = getJavaEntity().getAttributeOverrideNamed(persistentAttribute.getName());
+ }
+ this.virtualAttributeOverrides.add(buildVirtualAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+ }
+ }
+
+ protected OrmAttributeOverride buildVirtualAttributeOverride(PersistentAttribute persistentAttribute, JavaAttributeOverride javaAttributeOverride) {
+ return buildAttributeOverride(buildVirtualXmlAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+
+ protected XmlAttributeOverride buildVirtualXmlAttributeOverride(PersistentAttribute persistentAttribute, JavaAttributeOverride javaAttributeOverride) {
+ XmlColumn xmlColumn;
+ if (javaAttributeOverride == null) {
+ ColumnMapping columnMapping = (ColumnMapping) persistentAttribute.getMapping();
+ xmlColumn = new VirtualXmlColumn(this, columnMapping.getColumn(), false);
+ }
+ else {
+ xmlColumn = new VirtualXmlColumn(this, javaAttributeOverride.getColumn(), isMetadataComplete());
+ }
+ return new VirtualXmlAttributeOverride(persistentAttribute.getName(), xmlColumn);
+ }
+
protected void initializeSpecifiedAssociationOverrides(XmlEntity entity) {
for (XmlAssociationOverride associationOverride : entity.getAssociationOverrides()) {
this.specifiedAssociationOverrides.add(buildAssociationOverride(associationOverride));
@@ -1270,6 +1368,7 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
this.updateSpecifiedPrimaryKeyJoinColumns(entity);
this.updateDefaultPrimaryKeyJoinColumns();
this.updateSpecifiedAttributeOverrides(entity);
+ this.updateVirtualAttributeOverrides();
this.updateSpecifiedAssociationOverrides(entity);
this.updateNamedQueries(entity);
this.updateNamedNativeQueries(entity);
@@ -1493,6 +1592,37 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
}
+ protected void updateVirtualAttributeOverrides() {
+ Iterator<PersistentAttribute> overridableAttributes = allOverridableAttributes();
+ ListIterator<OrmAttributeOverride> virtualAttributeOverrides = virtualAttributeOverrides();
+
+ for (PersistentAttribute persistentAttribute : CollectionTools.iterable(overridableAttributes)) {
+ OrmAttributeOverride ormAttributeOverride = getAttributeOverrideNamed(persistentAttribute.getName());
+ if (ormAttributeOverride != null && !ormAttributeOverride.isVirtual()) {
+ continue;
+ }
+ JavaAttributeOverride javaAttributeOverride = null;
+ if (getJavaEntity() != null) {
+ javaAttributeOverride = getJavaEntity().getAttributeOverrideNamed(persistentAttribute.getName());
+ }
+ if (ormAttributeOverride != null) {
+ if (virtualAttributeOverrides.hasNext()) {
+ OrmAttributeOverride virtualAttributeOverride = virtualAttributeOverrides.next();
+ virtualAttributeOverride.update(buildVirtualXmlAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+ else {
+ addVirtualAttributeOverride(buildVirtualAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+ }
+ else {
+ addVirtualAttributeOverride(buildVirtualAttributeOverride(persistentAttribute, javaAttributeOverride));
+ }
+ }
+ for (OrmAttributeOverride virtualAttributeOverride : CollectionTools.iterable(virtualAttributeOverrides)) {
+ removeVirtualAttributeOverride(virtualAttributeOverride);
+ }
+ }
+
protected OrmAttributeOverride buildAttributeOverride(XmlAttributeOverride attributeOverride) {
return getJpaFactory().buildOrmAttributeOverride(this, createAttributeOverrideOwner(), attributeOverride);
}
@@ -1808,12 +1938,11 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
public boolean isVirtual(BaseOverride override) {
- return GenericOrmEntity.this.defaultAttributeOverrides.contains(override);
+ return GenericOrmEntity.this.virtualAttributeOverrides.contains(override);
}
public BaseOverride setVirtual(boolean virtual, BaseOverride override) {
- // TODO Auto-generated method stub
- return null;
+ return GenericOrmEntity.this.setAttributeOverrideVirtual(virtual, (OrmAttributeOverride) override);
}
public TypeMapping getTypeMapping() {
@@ -1840,7 +1969,7 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
public boolean isVirtual(BaseOverride override) {
- return GenericOrmEntity.this.defaultAssociationOverrides.contains(override);
+ return GenericOrmEntity.this.virtualAssociationOverrides.contains(override);
}
public BaseOverride setVirtual(boolean virtual, BaseOverride override) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentType.java
index caf25e8dbc..a0d6c7cf92 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmPersistentType.java
@@ -167,6 +167,15 @@ public class GenericOrmPersistentType extends AbstractOrmJpaContextNode implemen
public PersistentType getParentPersistentType() {
return this.parentPersistentType;
}
+
+ public void setParentPersistentType(PersistentType newParentPersistentType) {
+ if (attributeValueHasNotChanged(this.parentPersistentType, newParentPersistentType)) {
+ return;
+ }
+ PersistentType oldParentPersistentType = this.parentPersistentType;
+ this.parentPersistentType = newParentPersistentType;
+ firePropertyChanged(PersistentType.PARENT_PERSISTENT_TYPE_PROPERTY, oldParentPersistentType, newParentPersistentType);
+ }
public AccessType getAccess() {
return getMapping().getAccess();
@@ -545,12 +554,7 @@ public class GenericOrmPersistentType extends AbstractOrmJpaContextNode implemen
protected void updateParentPersistentType() {
JavaPersistentType javaPersistentType = getJavaPersistentType();
- if (javaPersistentType == null) {
- //TODO change notification for this?
- this.parentPersistentType = null;
- return;
- }
- this.parentPersistentType = javaPersistentType.getParentPersistentType();
+ setParentPersistentType(javaPersistentType == null ? null : javaPersistentType.getParentPersistentType());
}
protected void updatePersistentAttributes(AbstractXmlTypeMapping typeMapping) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlAttributeOverride.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlAttributeOverride.java
index f65d487bc4..7618d713d0 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlAttributeOverride.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlAttributeOverride.java
@@ -9,34 +9,25 @@
******************************************************************************/
package org.eclipse.jpt.core.internal.context.orm;
-import org.eclipse.jpt.core.context.java.JavaAttributeOverride;
-import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
import org.eclipse.jpt.core.resource.orm.XmlAttributeOverride;
import org.eclipse.jpt.core.resource.orm.XmlColumn;
public class VirtualXmlAttributeOverride extends AbstractJpaEObject implements XmlAttributeOverride
{
-
- protected JavaAttributeOverride javaAttributeOverride;
-
- protected final VirtualXmlColumn column;
- protected boolean metadataComplete;
+ protected String name;
+
+ protected final XmlColumn column;
- protected VirtualXmlAttributeOverride(OrmTypeMapping ormTypeMapping, JavaAttributeOverride javaAttributeOverride, boolean metadataComplete) {
+ protected VirtualXmlAttributeOverride(String name, XmlColumn xmlColumn) {
super();
- this.javaAttributeOverride = javaAttributeOverride;
- this.metadataComplete = metadataComplete;
- this.column = new VirtualXmlColumn(ormTypeMapping, javaAttributeOverride.getColumn(), metadataComplete);
+ this.name = name;
+ this.column = xmlColumn;
}
-
public String getName() {
- if (this.metadataComplete) {
- return null;//TODO is this right??
- }
- return this.javaAttributeOverride.getName();
+ return this.name;
}
public void setName(String value) {
@@ -51,10 +42,4 @@ public class VirtualXmlAttributeOverride extends AbstractJpaEObject implements X
public void setColumn(XmlColumn value) {
throw new UnsupportedOperationException("cannot set values on a virtual mapping");
}
-
- public void update(JavaAttributeOverride javaAttributeOverride) {
- this.javaAttributeOverride = javaAttributeOverride;
- this.column.update(javaAttributeOverride.getColumn());
- }
-
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlColumn.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlColumn.java
index 28f6b8a61e..7c8dbce6ef 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlColumn.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlColumn.java
@@ -9,7 +9,7 @@
******************************************************************************/
package org.eclipse.jpt.core.internal.context.orm;
-import org.eclipse.jpt.core.context.java.JavaColumn;
+import org.eclipse.jpt.core.context.Column;
import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
import org.eclipse.jpt.core.resource.orm.XmlColumn;
@@ -28,17 +28,17 @@ import org.eclipse.jpt.core.utility.TextRange;
public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
{
- protected JavaColumn javaColumn;
+ protected Column column;
protected boolean metadataComplete;
protected OrmTypeMapping ormTypeMapping;
- protected VirtualXmlColumn(OrmTypeMapping ormTypeMapping, JavaColumn javaColumn, boolean metadataComplete) {
+ protected VirtualXmlColumn(OrmTypeMapping ormTypeMapping, Column column, boolean metadataComplete) {
super();
this.ormTypeMapping = ormTypeMapping;
- this.javaColumn = javaColumn;
+ this.column = column;
this.metadataComplete = metadataComplete;
}
@@ -46,7 +46,7 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
if (this.metadataComplete) {
return null;
}
- return this.javaColumn.getColumnDefinition();
+ return this.column.getColumnDefinition();
}
public void setColumnDefinition(String value) {
@@ -55,9 +55,9 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public Boolean getInsertable() {
if (this.metadataComplete) {
- return this.javaColumn.getDefaultInsertable();
+ return this.column.getDefaultInsertable();
}
- return this.javaColumn.getInsertable();
+ return this.column.getInsertable();
}
public void setInsertable(Boolean value) {
@@ -66,9 +66,9 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public Integer getLength() {
if (this.metadataComplete) {
- return this.javaColumn.getDefaultLength();
+ return this.column.getDefaultLength();
}
- return this.javaColumn.getLength();
+ return this.column.getLength();
}
public void setLength(Integer value) {
@@ -77,9 +77,9 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public String getName() {
if (this.metadataComplete) {
- return this.javaColumn.getDefaultName();
+ return this.column.getDefaultName();
}
- return this.javaColumn.getName();
+ return this.column.getName();
}
public void setName(String value) {
@@ -88,9 +88,9 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public Boolean getNullable() {
if (this.metadataComplete) {
- return this.javaColumn.getDefaultNullable();
+ return this.column.getDefaultNullable();
}
- return this.javaColumn.getNullable();
+ return this.column.getNullable();
}
public void setNullable(Boolean value) {
@@ -99,9 +99,9 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public Integer getPrecision() {
if (this.metadataComplete) {
- return this.javaColumn.getDefaultPrecision();
+ return this.column.getDefaultPrecision();
}
- return this.javaColumn.getPrecision();
+ return this.column.getPrecision();
}
public void setPrecision(Integer value) {
@@ -110,9 +110,9 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public Integer getScale() {
if (this.metadataComplete) {
- return this.javaColumn.getDefaultScale();
+ return this.column.getDefaultScale();
}
- return this.javaColumn.getScale();
+ return this.column.getScale();
}
public void setScale(Integer value) {
@@ -121,8 +121,8 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public String getTable() {
if (!this.metadataComplete) {
- if (this.javaColumn.getSpecifiedTable() != null) {
- return this.javaColumn.getSpecifiedTable();
+ if (this.column.getSpecifiedTable() != null) {
+ return this.column.getSpecifiedTable();
}
}
return this.ormTypeMapping.getTableName();
@@ -134,9 +134,9 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public Boolean getUnique() {
if (this.metadataComplete) {
- return this.javaColumn.getDefaultUnique();
+ return this.column.getDefaultUnique();
}
- return this.javaColumn.getUnique();
+ return this.column.getUnique();
}
public void setUnique(Boolean value) {
@@ -145,17 +145,17 @@ public class VirtualXmlColumn extends AbstractJpaEObject implements XmlColumn
public Boolean getUpdatable() {
if (this.metadataComplete) {
- return this.javaColumn.getDefaultUpdatable();
+ return this.column.getDefaultUpdatable();
}
- return this.javaColumn.getUpdatable();
+ return this.column.getUpdatable();
}
public void setUpdatable(Boolean value) {
throw new UnsupportedOperationException("cannot set values on a virtual mapping");
}
- public void update(JavaColumn javaColumn) {
- this.javaColumn = javaColumn;
+ public void update(Column column) {
+ this.column = column;
}
public TextRange getNameTextRange() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbedded.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbedded.java
index a1ef573e56..2e144ba5b1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbedded.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbedded.java
@@ -10,15 +10,18 @@
package org.eclipse.jpt.core.internal.context.orm;
import java.util.ListIterator;
-import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.jpt.core.context.java.JavaAttributeOverride;
import org.eclipse.jpt.core.context.java.JavaEmbeddedMapping;
import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
+import org.eclipse.jpt.core.resource.orm.OrmPackage;
import org.eclipse.jpt.core.resource.orm.XmlAttributeOverride;
+import org.eclipse.jpt.core.resource.orm.XmlColumn;
import org.eclipse.jpt.core.resource.orm.XmlEmbedded;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.jpt.utility.internal.CollectionTools;
/**
* VirtualEmbedded is an implementation of Embedded used when there is
@@ -29,8 +32,6 @@ public class VirtualXmlEmbedded extends AbstractJpaEObject implements XmlEmbedde
JavaEmbeddedMapping javaEmbeddedMapping;
protected boolean metadataComplete;
-
- protected EList<XmlAttributeOverride> virtualAttributeOverrides;
protected OrmTypeMapping ormTypeMapping;
@@ -39,24 +40,8 @@ public class VirtualXmlEmbedded extends AbstractJpaEObject implements XmlEmbedde
this.ormTypeMapping = ormTypeMapping;
this.javaEmbeddedMapping = javaEmbeddedMapping;
this.metadataComplete = metadataComplete;
- this.initializeAttributeOverrides(javaEmbeddedMapping);
}
-
- protected void initializeAttributeOverrides(JavaEmbeddedMapping javaEmbeddedMapping) {
- this.virtualAttributeOverrides = new BasicEList<XmlAttributeOverride>();
- ListIterator<JavaAttributeOverride> javaAttributesOverrides;
- if (this.metadataComplete) {
- javaAttributesOverrides = javaEmbeddedMapping.virtualAttributeOverrides();
- }
- else {
- javaAttributesOverrides = javaEmbeddedMapping.attributeOverrides();
- }
- while (javaAttributesOverrides.hasNext()) {
- this.virtualAttributeOverrides.add(new VirtualXmlAttributeOverride(this.ormTypeMapping, javaAttributesOverrides.next(), this.metadataComplete));
- }
- }
-
public String getName() {
return this.javaEmbeddedMapping.getPersistentAttribute().getName();
}
@@ -65,44 +50,28 @@ public class VirtualXmlEmbedded extends AbstractJpaEObject implements XmlEmbedde
throw new UnsupportedOperationException("cannot set values on a virtual mapping");
}
-
public EList<XmlAttributeOverride> getAttributeOverrides() {
- return this.virtualAttributeOverrides;
- }
-
- public void update(JavaEmbeddedMapping javaEmbeddedMapping) {
- this.javaEmbeddedMapping = javaEmbeddedMapping;
- this.updateAttributeOverrides(javaEmbeddedMapping);
- }
-
- protected void updateAttributeOverrides(JavaEmbeddedMapping javaEmbeddedMapping) {
- ListIterator<JavaAttributeOverride> javaAttributesOverrides;
- ListIterator<XmlAttributeOverride> virtualAttributeOverrides = this.virtualAttributeOverrides.listIterator();
- if (this.metadataComplete) {
- javaAttributesOverrides = javaEmbeddedMapping.virtualAttributeOverrides();
+ EList<XmlAttributeOverride> attributeOverrides = new EObjectContainmentEList<XmlAttributeOverride>(XmlAttributeOverride.class, this, OrmPackage.XML_EMBEDDED__ATTRIBUTE_OVERRIDES);
+ ListIterator<JavaAttributeOverride> javaAttributeOverrides;
+ if (!this.metadataComplete) {
+ javaAttributeOverrides = this.javaEmbeddedMapping.attributeOverrides();
}
else {
- javaAttributesOverrides = javaEmbeddedMapping.attributeOverrides();
- }
-
- while (javaAttributesOverrides.hasNext()) {
- JavaAttributeOverride javaAttributeOverride = javaAttributesOverrides.next();
- if (virtualAttributeOverrides.hasNext()) {
- VirtualXmlAttributeOverride virtualAttributeOverride = (VirtualXmlAttributeOverride) virtualAttributeOverrides.next();
- virtualAttributeOverride.update(javaAttributeOverride);
- }
- else {
- this.virtualAttributeOverrides.add(new VirtualXmlAttributeOverride(this.ormTypeMapping, javaAttributeOverride, this.metadataComplete));
- }
+ javaAttributeOverrides = this.javaEmbeddedMapping.virtualAttributeOverrides();
}
-
- while(virtualAttributeOverrides.hasNext()) {
- this.virtualAttributeOverrides.remove(virtualAttributeOverrides.next());
+ for (JavaAttributeOverride javaAttributeOverride : CollectionTools.iterable(javaAttributeOverrides)) {
+ XmlColumn xmlColumn = new VirtualXmlColumn(this.ormTypeMapping, javaAttributeOverride.getColumn(), this.metadataComplete);
+ XmlAttributeOverride xmlAttributeOverride = new VirtualXmlAttributeOverride(javaAttributeOverride.getName(), xmlColumn);
+ attributeOverrides.add(xmlAttributeOverride);
}
+ return attributeOverrides;
}
-
+
+ public void update(JavaEmbeddedMapping javaEmbeddedMapping) {
+ this.javaEmbeddedMapping = javaEmbeddedMapping;
+ }
+
public TextRange getNameTextRange() {
return null;
}
-
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbeddedId.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbeddedId.java
index fa78b8e5a5..8b1a6f6dc7 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbeddedId.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/VirtualXmlEmbeddedId.java
@@ -10,15 +10,18 @@
package org.eclipse.jpt.core.internal.context.orm;
import java.util.ListIterator;
-import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.jpt.core.context.java.JavaAttributeOverride;
import org.eclipse.jpt.core.context.java.JavaEmbeddedIdMapping;
import org.eclipse.jpt.core.context.orm.OrmTypeMapping;
import org.eclipse.jpt.core.resource.common.AbstractJpaEObject;
+import org.eclipse.jpt.core.resource.orm.OrmPackage;
import org.eclipse.jpt.core.resource.orm.XmlAttributeOverride;
+import org.eclipse.jpt.core.resource.orm.XmlColumn;
import org.eclipse.jpt.core.resource.orm.XmlEmbeddedId;
import org.eclipse.jpt.core.utility.TextRange;
+import org.eclipse.jpt.utility.internal.CollectionTools;
/**
* VirtualEmbeddedId is an implementation of EmbeddedId used when there is
@@ -29,8 +32,6 @@ public class VirtualXmlEmbeddedId extends AbstractJpaEObject implements XmlEmbed
JavaEmbeddedIdMapping javaEmbeddedIdMapping;
protected boolean metadataComplete;
-
- protected EList<XmlAttributeOverride> virtualAttributeOverrides;
protected OrmTypeMapping ormTypeMapping;
@@ -39,22 +40,6 @@ public class VirtualXmlEmbeddedId extends AbstractJpaEObject implements XmlEmbed
this.ormTypeMapping = ormTypeMapping;
this.javaEmbeddedIdMapping = javaEmbeddedIdMapping;
this.metadataComplete = metadataComplete;
- this.initializeAttributeOverrides(javaEmbeddedIdMapping);
- }
-
- protected void initializeAttributeOverrides(JavaEmbeddedIdMapping javaEmbeddedIdMapping) {
- this.virtualAttributeOverrides = new BasicEList<XmlAttributeOverride>();
- ListIterator<JavaAttributeOverride> javaAttributesOverrides;
- if (this.metadataComplete) {
- javaAttributesOverrides = javaEmbeddedIdMapping.virtualAttributeOverrides();
- }
- else {
- javaAttributesOverrides = javaEmbeddedIdMapping.attributeOverrides();
- }
-
- while (javaAttributesOverrides.hasNext()) {
- this.virtualAttributeOverrides.add(new VirtualXmlAttributeOverride(this.ormTypeMapping, javaAttributesOverrides.next(), this.metadataComplete));
- }
}
public String getName() {
@@ -65,44 +50,28 @@ public class VirtualXmlEmbeddedId extends AbstractJpaEObject implements XmlEmbed
throw new UnsupportedOperationException("cannot set values on a virtual mapping");
}
-
public EList<XmlAttributeOverride> getAttributeOverrides() {
- return this.virtualAttributeOverrides;
- }
-
- public void update(JavaEmbeddedIdMapping javaEmbeddedIdMapping) {
- this.javaEmbeddedIdMapping = javaEmbeddedIdMapping;
- this.updateAttributeOverrides(javaEmbeddedIdMapping);
- }
-
- protected void updateAttributeOverrides(JavaEmbeddedIdMapping javaEmbeddedIdMapping) {
- ListIterator<JavaAttributeOverride> javaAttributesOverrides;
- ListIterator<XmlAttributeOverride> virtualAttributeOverrides = this.virtualAttributeOverrides.listIterator();
- if (this.metadataComplete) {
- javaAttributesOverrides = javaEmbeddedIdMapping.virtualAttributeOverrides();
+ EList<XmlAttributeOverride> attributeOverrides = new EObjectContainmentEList<XmlAttributeOverride>(XmlAttributeOverride.class, this, OrmPackage.XML_EMBEDDED_ID__ATTRIBUTE_OVERRIDES);
+ ListIterator<JavaAttributeOverride> javaAttributeOverrides;
+ if (!this.metadataComplete) {
+ javaAttributeOverrides = this.javaEmbeddedIdMapping.attributeOverrides();
}
else {
- javaAttributesOverrides = javaEmbeddedIdMapping.attributeOverrides();
+ javaAttributeOverrides = this.javaEmbeddedIdMapping.virtualAttributeOverrides();
}
-
- while (javaAttributesOverrides.hasNext()) {
- JavaAttributeOverride javaAttributeOverride = javaAttributesOverrides.next();
- if (virtualAttributeOverrides.hasNext()) {
- VirtualXmlAttributeOverride virtualAttributeOverride = (VirtualXmlAttributeOverride) virtualAttributeOverrides.next();
- virtualAttributeOverride.update(javaAttributeOverride);
- }
- else {
- this.virtualAttributeOverrides.add(new VirtualXmlAttributeOverride(this.ormTypeMapping, javaAttributeOverride, this.metadataComplete));
- }
- }
-
- while(virtualAttributeOverrides.hasNext()) {
- this.virtualAttributeOverrides.remove(virtualAttributeOverrides.next());
+ for (JavaAttributeOverride javaAttributeOverride : CollectionTools.iterable(javaAttributeOverrides)) {
+ XmlColumn xmlColumn = new VirtualXmlColumn(this.ormTypeMapping, javaAttributeOverride.getColumn(), this.metadataComplete);
+ XmlAttributeOverride xmlAttributeOverride = new VirtualXmlAttributeOverride(javaAttributeOverride.getName(), xmlColumn);
+ attributeOverrides.add(xmlAttributeOverride);
}
+ return attributeOverrides;
}
-
+
+ public void update(JavaEmbeddedIdMapping javaEmbeddedIdMapping) {
+ this.javaEmbeddedIdMapping = javaEmbeddedIdMapping;
+ }
+
public TextRange getNameTextRange() {
return null;
}
-
}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedIdMappingTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedIdMappingTests.java
index 051ebf0f38..5a05f082bb 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedIdMappingTests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedIdMappingTests.java
@@ -10,6 +10,7 @@
package org.eclipse.jpt.core.tests.internal.context.orm;
import java.util.Iterator;
+import java.util.ListIterator;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jpt.core.JptCorePlugin;
import org.eclipse.jpt.core.MappingKeys;
@@ -24,6 +25,12 @@ import org.eclipse.jpt.core.context.OneToManyMapping;
import org.eclipse.jpt.core.context.OneToOneMapping;
import org.eclipse.jpt.core.context.TransientMapping;
import org.eclipse.jpt.core.context.VersionMapping;
+import org.eclipse.jpt.core.context.java.JavaBasicMapping;
+import org.eclipse.jpt.core.context.java.JavaEmbeddedIdMapping;
+import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
+import org.eclipse.jpt.core.context.orm.OrmColumn;
+import org.eclipse.jpt.core.context.orm.OrmEmbeddedIdMapping;
+import org.eclipse.jpt.core.context.orm.OrmEmbeddedMapping;
import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute;
import org.eclipse.jpt.core.context.orm.OrmPersistentType;
import org.eclipse.jpt.core.resource.java.JPA;
@@ -32,6 +39,7 @@ import org.eclipse.jpt.core.resource.orm.XmlEmbeddedId;
import org.eclipse.jpt.core.resource.persistence.PersistenceFactory;
import org.eclipse.jpt.core.resource.persistence.XmlMappingFileRef;
import org.eclipse.jpt.core.tests.internal.context.ContextModelTestCase;
+import org.eclipse.jpt.core.tests.internal.projects.TestJavaProject.SourceWriter;
import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
public class OrmEmbeddedIdMappingTests extends ContextModelTestCase
@@ -108,6 +116,43 @@ public class OrmEmbeddedIdMappingTests extends ContextModelTestCase
});
}
+ private void createTestEmbeddableAddress() throws Exception {
+ SourceWriter sourceWriter = new SourceWriter() {
+ public void appendSourceTo(StringBuilder sb) {
+ sb.append(CR);
+ sb.append("import ");
+ sb.append(JPA.EMBEDDABLE);
+ sb.append(";");
+ sb.append(CR);
+ sb.append("import ");
+ sb.append(JPA.ID);
+ sb.append(";");
+ sb.append(CR);
+ sb.append("import ");
+ sb.append(JPA.COLUMN);
+ sb.append(";");
+ sb.append(CR);
+ sb.append(CR);
+ sb.append("@Embeddable");
+ sb.append(CR);
+ sb.append("public class ").append("Address").append(" ");
+ sb.append("{").append(CR);
+ sb.append(CR);
+ sb.append(" @Id").append(CR);
+ sb.append(" private int id;").append(CR);
+ sb.append(CR);
+ sb.append(" private String city;").append(CR);
+ sb.append(CR);
+ sb.append(" @Column(name=\"A_STATE\")").append(CR);
+ sb.append(" private String state;").append(CR);
+ sb.append(CR);
+ sb.append(" private int zip;").append(CR);
+ sb.append(CR);
+ sb.append("}").append(CR);
+ }
+ };
+ this.javaProject.createCompilationUnit(PACKAGE_NAME, "Address.java", sourceWriter);
+ }
// public void testUpdateName() throws Exception {
// OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(IMappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
@@ -488,5 +533,373 @@ public class OrmEmbeddedIdMappingTests extends ContextModelTestCase
assertTrue(ormPersistentAttribute.getMapping() instanceof ManyToManyMapping);
assertEquals("embeddedId", ormPersistentAttribute.getMapping().getName());
}
+
+ public void testUpdateName() throws Exception {
+ OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
+ OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY, "embeddedMapping");
+ OrmEmbeddedIdMapping ormEmbeddedMapping = (OrmEmbeddedIdMapping) ormPersistentAttribute.getMapping();
+ XmlEmbeddedId embeddedResource = ormResource().getEntityMappings().getEntities().get(0).getAttributes().getEmbeddedIds().get(0);
+
+ assertEquals("embeddedMapping", ormEmbeddedMapping.getName());
+ assertEquals("embeddedMapping", embeddedResource.getName());
+
+ //set name in the resource model, verify context model updated
+ embeddedResource.setName("newName");
+ assertEquals("newName", ormEmbeddedMapping.getName());
+ assertEquals("newName", embeddedResource.getName());
+
+ //set name to null in the resource model
+ embeddedResource.setName(null);
+ assertNull(ormEmbeddedMapping.getName());
+ assertNull(embeddedResource.getName());
+ }
+
+ public void testModifyName() throws Exception {
+ OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
+ OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY, "embeddedMapping");
+ OrmEmbeddedIdMapping ormEmbeddedMapping = (OrmEmbeddedIdMapping) ormPersistentAttribute.getMapping();
+ XmlEmbeddedId embeddedResource = ormResource().getEntityMappings().getEntities().get(0).getAttributes().getEmbeddedIds().get(0);
+
+ assertEquals("embeddedMapping", ormEmbeddedMapping.getName());
+ assertEquals("embeddedMapping", embeddedResource.getName());
+
+ //set name in the context model, verify resource model updated
+ ormEmbeddedMapping.setName("newName");
+ assertEquals("newName", ormEmbeddedMapping.getName());
+ assertEquals("newName", embeddedResource.getName());
+
+ //set name to null in the context model
+ ormEmbeddedMapping.setName(null);
+ assertNull(ormEmbeddedMapping.getName());
+ assertNull(embeddedResource.getName());
+ }
+
+ public void testMoveSpecifiedAttributeOverride() throws Exception {
+ OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
+ OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY, "embeddedMapping");
+ OrmEmbeddedIdMapping ormEmbeddedIdMapping = (OrmEmbeddedIdMapping) ormPersistentAttribute.getMapping();
+ XmlEmbeddedId embeddedIdResource = ormResource().getEntityMappings().getEntities().get(0).getAttributes().getEmbeddedIds().get(0);
+
+ embeddedIdResource.getAttributeOverrides().add(OrmFactory.eINSTANCE.createXmlAttributeOverrideImpl());
+ embeddedIdResource.getAttributeOverrides().add(OrmFactory.eINSTANCE.createXmlAttributeOverrideImpl());
+ embeddedIdResource.getAttributeOverrides().add(OrmFactory.eINSTANCE.createXmlAttributeOverrideImpl());
+
+ embeddedIdResource.getAttributeOverrides().get(0).setName("FOO");
+ embeddedIdResource.getAttributeOverrides().get(1).setName("BAR");
+ embeddedIdResource.getAttributeOverrides().get(2).setName("BAZ");
+
+ assertEquals(3, embeddedIdResource.getAttributeOverrides().size());
+
+ ormEmbeddedIdMapping.moveSpecifiedAttributeOverride(2, 0);
+ ListIterator<OrmAttributeOverride> attributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+
+ assertEquals("BAR", embeddedIdResource.getAttributeOverrides().get(0).getName());
+ assertEquals("BAZ", embeddedIdResource.getAttributeOverrides().get(1).getName());
+ assertEquals("FOO", embeddedIdResource.getAttributeOverrides().get(2).getName());
+
+
+ ormEmbeddedIdMapping.moveSpecifiedAttributeOverride(0, 1);
+ attributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+
+ assertEquals("BAZ", embeddedIdResource.getAttributeOverrides().get(0).getName());
+ assertEquals("BAR", embeddedIdResource.getAttributeOverrides().get(1).getName());
+ assertEquals("FOO", embeddedIdResource.getAttributeOverrides().get(2).getName());
+ }
+
+ public void testUpdateAttributeOverrides() throws Exception {
+ OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
+ OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY, "embeddedMapping");
+ OrmEmbeddedIdMapping ormEmbeddedIdMapping = (OrmEmbeddedIdMapping) ormPersistentAttribute.getMapping();
+ XmlEmbeddedId embeddedIdResource = ormResource().getEntityMappings().getEntities().get(0).getAttributes().getEmbeddedIds().get(0);
+
+ embeddedIdResource.getAttributeOverrides().add(OrmFactory.eINSTANCE.createXmlAttributeOverrideImpl());
+ embeddedIdResource.getAttributeOverrides().add(OrmFactory.eINSTANCE.createXmlAttributeOverrideImpl());
+ embeddedIdResource.getAttributeOverrides().add(OrmFactory.eINSTANCE.createXmlAttributeOverrideImpl());
+
+ embeddedIdResource.getAttributeOverrides().get(0).setName("FOO");
+ embeddedIdResource.getAttributeOverrides().get(1).setName("BAR");
+ embeddedIdResource.getAttributeOverrides().get(2).setName("BAZ");
+
+ ListIterator<OrmAttributeOverride> attributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ embeddedIdResource.getAttributeOverrides().move(2, 0);
+ attributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ embeddedIdResource.getAttributeOverrides().move(0, 1);
+ attributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("BAR", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ embeddedIdResource.getAttributeOverrides().remove(1);
+ attributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertEquals("FOO", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ embeddedIdResource.getAttributeOverrides().remove(1);
+ attributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+ assertEquals("BAZ", attributeOverrides.next().getName());
+ assertFalse(attributeOverrides.hasNext());
+
+ embeddedIdResource.getAttributeOverrides().remove(0);
+ assertFalse(ormEmbeddedIdMapping.specifiedAttributeOverrides().hasNext());
+ }
+
+
+ public void testEmbeddedMappingNoUnderylingJavaAttribute() throws Exception {
+ createTestEntityEmbeddedIdMapping();
+ createTestEmbeddableAddress();
+
+ OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ entityMappings().addOrmPersistentType(MappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");
+ ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY, "foo");
+ assertEquals(3, ormPersistentType.virtualAttributesSize());
+
+ OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.specifiedAttributes().next();
+ OrmEmbeddedIdMapping ormEmbeddedIdMapping = (OrmEmbeddedIdMapping) ormPersistentAttribute.getMapping();
+
+ assertEquals("foo", ormEmbeddedIdMapping.getName());
+
+
+ assertFalse(ormEmbeddedIdMapping.specifiedAttributeOverrides().hasNext());
+ assertFalse(ormEmbeddedIdMapping.virtualAttributeOverrides().hasNext());
+ }
+
+ public void testVirtualAttributeOverrides() throws Exception {
+ createTestEntityEmbeddedIdMapping();
+ createTestEmbeddableAddress();
+ OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ OrmPersistentType persistentType2 = entityMappings().addOrmPersistentType(MappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");
+
+ //embedded mapping is virtual, specified attribute overrides should exist
+ OrmEmbeddedIdMapping embeddedIdMapping = (OrmEmbeddedIdMapping) persistentType.getAttributeNamed("address").getMapping();
+ assertEquals(4, embeddedIdMapping.attributeOverridesSize());
+ assertEquals(0, embeddedIdMapping.virtualAttributeOverridesSize());
+ assertEquals(4, embeddedIdMapping.specifiedAttributeOverridesSize());
+ ListIterator<OrmAttributeOverride> specifiedAttributeOverrides = embeddedIdMapping.specifiedAttributeOverrides();
+ OrmAttributeOverride attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("city", attributeOverride.getName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("state", attributeOverride.getName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("zip", attributeOverride.getName());
+
+ JavaEmbeddedIdMapping javaEmbeddedIdMapping = (JavaEmbeddedIdMapping) embeddedIdMapping.getJavaPersistentAttribute().getMapping();
+ javaEmbeddedIdMapping.virtualAttributeOverrides().next().setVirtual(false);
+ javaEmbeddedIdMapping.specifiedAttributeOverrides().next().getColumn().setSpecifiedName("FOO_COLUMN");
+ javaEmbeddedIdMapping.specifiedAttributeOverrides().next().getColumn().setSpecifiedTable("FOO_TABLE");
+ JavaBasicMapping javaBasicMapping = (JavaBasicMapping) persistentType2.getJavaPersistentType().getAttributeNamed("state").getMapping();
+ javaBasicMapping.getColumn().setSpecifiedName("MY_STATE_COLUMN");
+ assertEquals(4, embeddedIdMapping.attributeOverridesSize());
+ assertEquals(0, embeddedIdMapping.virtualAttributeOverridesSize());
+ assertEquals(4, embeddedIdMapping.specifiedAttributeOverridesSize());
+ specifiedAttributeOverrides = embeddedIdMapping.specifiedAttributeOverrides();
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("city", attributeOverride.getName());
+ assertEquals("FOO_COLUMN", attributeOverride.getColumn().getSpecifiedName());
+ assertEquals("FOO_TABLE", attributeOverride.getColumn().getSpecifiedTable());
+
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("state", attributeOverride.getName());
+ assertEquals("MY_STATE_COLUMN", attributeOverride.getColumn().getSpecifiedName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("zip", attributeOverride.getName());
+
+
+
+ //embedded mapping is specified, virtual attribute overrides should exist
+ persistentType.getAttributeNamed("address").makeSpecified();
+ embeddedIdMapping = (OrmEmbeddedIdMapping) persistentType.getAttributeNamed("address").getMapping();
+ assertEquals(4, embeddedIdMapping.attributeOverridesSize());
+ assertEquals(4, embeddedIdMapping.virtualAttributeOverridesSize());
+ assertEquals(0, embeddedIdMapping.specifiedAttributeOverridesSize());
+ ListIterator<OrmAttributeOverride> virtualAttributeOverrides = embeddedIdMapping.virtualAttributeOverrides();
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("city", attributeOverride.getName());
+ assertEquals("city", attributeOverride.getColumn().getDefaultName());
+ assertEquals(TYPE_NAME, attributeOverride.getColumn().getDefaultTable());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("state", attributeOverride.getName());
+ assertEquals("MY_STATE_COLUMN", attributeOverride.getColumn().getDefaultName());
+ assertEquals(TYPE_NAME, attributeOverride.getColumn().getDefaultTable());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("zip", attributeOverride.getName());
+
+ //set one of the virtual attribute overrides to specified, verify others are still virtual
+ embeddedIdMapping.virtualAttributeOverrides().next().setVirtual(false);
+
+ assertEquals(4, embeddedIdMapping.attributeOverridesSize());
+ assertEquals(1, embeddedIdMapping.specifiedAttributeOverridesSize());
+ assertEquals(3, embeddedIdMapping.virtualAttributeOverridesSize());
+ assertEquals("id", embeddedIdMapping.specifiedAttributeOverrides().next().getName());
+ virtualAttributeOverrides = embeddedIdMapping.virtualAttributeOverrides();
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("city", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("state", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("zip", attributeOverride.getName());
+ }
+
+
+ public void testVirtualMappingMetadataCompleteFalse() throws Exception {
+ createTestEntityEmbeddedIdMapping();
+ createTestEmbeddableAddress();
+
+ OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ entityMappings().addOrmPersistentType(MappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");
+ assertEquals(3, ormPersistentType.virtualAttributesSize());
+ OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next();
+
+ OrmEmbeddedIdMapping ormEmbeddedIdMapping = (OrmEmbeddedIdMapping) ormPersistentAttribute.getMapping();
+ assertEquals("address", ormEmbeddedIdMapping.getName());
+
+ assertEquals(4, ormEmbeddedIdMapping.specifiedAttributeOverridesSize());
+ assertEquals(0, ormEmbeddedIdMapping.virtualAttributeOverridesSize());
+ ListIterator<OrmAttributeOverride> ormAttributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+
+ OrmAttributeOverride ormAttributeOverride = ormAttributeOverrides.next();
+ assertEquals(ATTRIBUTE_OVERRIDE_NAME, ormAttributeOverride.getName());
+ OrmColumn ormColumn = ormAttributeOverride.getColumn();
+ assertEquals(ATTRIBUTE_OVERRIDE_COLUMN_NAME, ormColumn.getSpecifiedName());
+
+
+ ormAttributeOverride = ormAttributeOverrides.next();
+ assertEquals("id", ormAttributeOverride.getName());
+ ormColumn = ormAttributeOverride.getColumn();
+ assertEquals("id", ormColumn.getSpecifiedName());
+
+ ormAttributeOverride = ormAttributeOverrides.next();
+ assertEquals("state", ormAttributeOverride.getName());
+ ormColumn = ormAttributeOverride.getColumn();
+ assertEquals("A_STATE", ormColumn.getSpecifiedName());
+
+ ormAttributeOverride = ormAttributeOverrides.next();
+ assertEquals("zip", ormAttributeOverride.getName());
+ ormColumn = ormAttributeOverride.getColumn();
+ assertEquals("zip", ormColumn.getSpecifiedName());
+
+ }
+
+ public void testVirtualMappingMetadataCompleteTrue() throws Exception {
+ createTestEntityEmbeddedIdMapping();
+ createTestEmbeddableAddress();
+
+ OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ entityMappings().addOrmPersistentType(MappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");
+ ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE);
+ assertEquals(3, ormPersistentType.virtualAttributesSize());
+ OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.virtualAttributes().next();
+
+ //will be an OrmEmbeddedMapping instead of OrmEmbeddedIdMapping since that is the default
+ OrmEmbeddedMapping ormEmbeddedMapping = (OrmEmbeddedMapping) ormPersistentAttribute.getMapping();
+ assertEquals("address", ormEmbeddedMapping.getName());
+
+ //TODO
+// assertEquals(4, ormEmbeddedIdMapping.specifiedAttributeOverridesSize());
+// assertEquals(0, CollectionTools.size(ormEmbeddedIdMapping.defaultAttributeOverrides()));
+// ListIterator<XmlAttributeOverride> ormAttributeOverrides = ormEmbeddedIdMapping.specifiedAttributeOverrides();
+//
+// XmlAttributeOverride ormAttributeOverride = ormAttributeOverrides.next();
+// assertEquals(ATTRIBUTE_OVERRIDE_NAME, ormAttributeOverride.getName());
+// XmlColumn xmlColumn = ormAttributeOverride.getColumn();
+// assertEquals("city", xmlColumn.getSpecifiedName());
+//// assertEquals(Boolean.TRUE, xmlColumn.getSpecifiedUnique());
+//// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedNullable());
+//// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedInsertable());
+//// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedUpdatable());
+//// assertEquals("COLUMN_DEFINITION", xmlColumn.getColumnDefinition());
+//// assertEquals("MY_TABLE", xmlColumn.getSpecifiedTable());
+//// assertEquals(Integer.valueOf(5), xmlColumn.getSpecifiedLength());
+//// assertEquals(Integer.valueOf(6), xmlColumn.getSpecifiedPrecision());
+//// assertEquals(Integer.valueOf(7), xmlColumn.getSpecifiedScale());
+//
+// ormAttributeOverride = ormAttributeOverrides.next();
+// assertEquals("id", ormAttributeOverride.getName());
+// xmlColumn = ormAttributeOverride.getColumn();
+// assertEquals("id", xmlColumn.getSpecifiedName());
+//
+// ormAttributeOverride = ormAttributeOverrides.next();
+// assertEquals("state", ormAttributeOverride.getName());
+// xmlColumn = ormAttributeOverride.getColumn();
+// assertEquals("state", xmlColumn.getSpecifiedName());
+//
+// ormAttributeOverride = ormAttributeOverrides.next();
+// assertEquals("zip", ormAttributeOverride.getName());
+// xmlColumn = ormAttributeOverride.getColumn();
+// assertEquals("zip", xmlColumn.getSpecifiedName());
+ }
+
+ public void testSpecifiedMapping() throws Exception {
+ createTestEntityEmbeddedIdMapping();
+ createTestEmbeddableAddress();
+
+ OrmPersistentType ormPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ entityMappings().addOrmPersistentType(MappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");
+
+ ormPersistentType.addSpecifiedPersistentAttribute(MappingKeys.EMBEDDED_ID_ATTRIBUTE_MAPPING_KEY, "address");
+ assertEquals(2, ormPersistentType.virtualAttributesSize());
+
+ OrmPersistentAttribute ormPersistentAttribute = ormPersistentType.specifiedAttributes().next();
+ OrmEmbeddedIdMapping ormEmbeddedIdMapping = (OrmEmbeddedIdMapping) ormPersistentAttribute.getMapping();
+
+ assertEquals("address", ormEmbeddedIdMapping.getName());
+
+ assertEquals(0, ormEmbeddedIdMapping.specifiedAttributeOverridesSize());
+ //TODO
+// assertEquals(4, CollectionTools.size(ormEmbeddedIdMapping.defaultAttributeOverrides()));
+// ListIterator<XmlAttributeOverride> ormAttributeOverrides = ormEmbeddedIdMapping.defaultAttributeOverrides();
+//
+// XmlAttributeOverride ormAttributeOverride = ormAttributeOverrides.next();
+// assertEquals(ATTRIBUTE_OVERRIDE_NAME, ormAttributeOverride.getName());
+// XmlColumn xmlColumn = ormAttributeOverride.getColumn();
+// assertEquals("city", xmlColumn.getDefaultName());
+//// assertEquals(Boolean.TRUE, xmlColumn.getSpecifiedUnique());
+//// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedNullable());
+//// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedInsertable());
+//// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedUpdatable());
+//// assertEquals("COLUMN_DEFINITION", xmlColumn.getColumnDefinition());
+//// assertEquals("MY_TABLE", xmlColumn.getSpecifiedTable());
+//// assertEquals(Integer.valueOf(5), xmlColumn.getSpecifiedLength());
+//// assertEquals(Integer.valueOf(6), xmlColumn.getSpecifiedPrecision());
+//// assertEquals(Integer.valueOf(7), xmlColumn.getSpecifiedScale());
+//
+// ormAttributeOverride = ormAttributeOverrides.next();
+// assertEquals("id", ormAttributeOverride.getName());
+// xmlColumn = ormAttributeOverride.getColumn();
+// assertEquals("id", xmlColumn.getDefaultName());
+//
+// ormAttributeOverride = ormAttributeOverrides.next();
+// assertEquals("state", ormAttributeOverride.getName());
+// xmlColumn = ormAttributeOverride.getColumn();
+// assertEquals("state", xmlColumn.getDefaultName());
+//
+// ormAttributeOverride = ormAttributeOverrides.next();
+// assertEquals("zip", ormAttributeOverride.getName());
+// xmlColumn = ormAttributeOverride.getColumn();
+// assertEquals("zip", xmlColumn.getDefaultName());
+ }
} \ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedMappingTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedMappingTests.java
index 49d28c22b2..a8abb3bcab 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedMappingTests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEmbeddedMappingTests.java
@@ -25,6 +25,8 @@ import org.eclipse.jpt.core.context.OneToManyMapping;
import org.eclipse.jpt.core.context.OneToOneMapping;
import org.eclipse.jpt.core.context.TransientMapping;
import org.eclipse.jpt.core.context.VersionMapping;
+import org.eclipse.jpt.core.context.java.JavaBasicMapping;
+import org.eclipse.jpt.core.context.java.JavaEmbeddedMapping;
import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
import org.eclipse.jpt.core.context.orm.OrmColumn;
import org.eclipse.jpt.core.context.orm.OrmEmbeddedMapping;
@@ -359,6 +361,88 @@ public class OrmEmbeddedMappingTests extends ContextModelTestCase
assertFalse(ormEmbeddedMapping.virtualAttributeOverrides().hasNext());
}
+ public void testVirtualAttributeOverrides() throws Exception {
+ createTestEntityEmbeddedMapping();
+ createTestEmbeddableAddress();
+ OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ OrmPersistentType persistentType2 = entityMappings().addOrmPersistentType(MappingKeys.EMBEDDABLE_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");
+
+ //embedded mapping is virtual, specified attribute overrides should exist
+ OrmEmbeddedMapping embeddedMapping = (OrmEmbeddedMapping) persistentType.getAttributeNamed("address").getMapping();
+ assertEquals(4, embeddedMapping.attributeOverridesSize());
+ assertEquals(0, embeddedMapping.virtualAttributeOverridesSize());
+ assertEquals(4, embeddedMapping.specifiedAttributeOverridesSize());
+ ListIterator<OrmAttributeOverride> specifiedAttributeOverrides = embeddedMapping.specifiedAttributeOverrides();
+ OrmAttributeOverride attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("city", attributeOverride.getName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("state", attributeOverride.getName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("zip", attributeOverride.getName());
+
+ JavaEmbeddedMapping javaEmbeddedMapping = (JavaEmbeddedMapping) embeddedMapping.getJavaPersistentAttribute().getMapping();
+ javaEmbeddedMapping.specifiedAttributeOverrides().next().getColumn().setSpecifiedName("FOO_COLUMN");
+ javaEmbeddedMapping.specifiedAttributeOverrides().next().getColumn().setSpecifiedTable("FOO_TABLE");
+ JavaBasicMapping javaBasicMapping = (JavaBasicMapping) persistentType2.getJavaPersistentType().getAttributeNamed("state").getMapping();
+ javaBasicMapping.getColumn().setSpecifiedName("MY_STATE_COLUMN");
+ assertEquals(4, embeddedMapping.attributeOverridesSize());
+ assertEquals(0, embeddedMapping.virtualAttributeOverridesSize());
+ assertEquals(4, embeddedMapping.specifiedAttributeOverridesSize());
+ specifiedAttributeOverrides = embeddedMapping.specifiedAttributeOverrides();
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("city", attributeOverride.getName());
+ assertEquals("FOO_COLUMN", attributeOverride.getColumn().getSpecifiedName());
+ assertEquals("FOO_TABLE", attributeOverride.getColumn().getSpecifiedTable());
+
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("state", attributeOverride.getName());
+ assertEquals("MY_STATE_COLUMN", attributeOverride.getColumn().getSpecifiedName());
+ attributeOverride = specifiedAttributeOverrides.next();
+ assertEquals("zip", attributeOverride.getName());
+
+
+
+ //embedded mapping is specified, virtual attribute overrides should exist
+ persistentType.getAttributeNamed("address").makeSpecified();
+ ormResource().save(null);
+ embeddedMapping = (OrmEmbeddedMapping) persistentType.getAttributeNamed("address").getMapping();
+ assertEquals(4, embeddedMapping.attributeOverridesSize());
+ assertEquals(4, embeddedMapping.virtualAttributeOverridesSize());
+ assertEquals(0, embeddedMapping.specifiedAttributeOverridesSize());
+ ListIterator<OrmAttributeOverride> virtualAttributeOverrides = embeddedMapping.virtualAttributeOverrides();
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("city", attributeOverride.getName());
+ assertEquals("city", attributeOverride.getColumn().getDefaultName());
+ assertEquals(TYPE_NAME, attributeOverride.getColumn().getDefaultTable());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("state", attributeOverride.getName());
+ assertEquals("MY_STATE_COLUMN", attributeOverride.getColumn().getDefaultName());
+ assertEquals(TYPE_NAME, attributeOverride.getColumn().getDefaultTable());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("zip", attributeOverride.getName());
+
+ //set one of the virtual attribute overrides to specified, verify others are still virtual
+ embeddedMapping.virtualAttributeOverrides().next().setVirtual(false);
+
+ assertEquals(4, embeddedMapping.attributeOverridesSize());
+ assertEquals(1, embeddedMapping.specifiedAttributeOverridesSize());
+ assertEquals(3, embeddedMapping.virtualAttributeOverridesSize());
+ assertEquals("id", embeddedMapping.specifiedAttributeOverrides().next().getName());
+ virtualAttributeOverrides = embeddedMapping.virtualAttributeOverrides();
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("city", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("state", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("zip", attributeOverride.getName());
+ }
+
public void testVirtualMappingMetadataCompleteFalse() throws Exception {
createTestEntityEmbeddedMapping();
@@ -380,16 +464,8 @@ public class OrmEmbeddedMappingTests extends ContextModelTestCase
assertEquals(ATTRIBUTE_OVERRIDE_NAME, ormAttributeOverride.getName());
OrmColumn ormColumn = ormAttributeOverride.getColumn();
assertEquals(ATTRIBUTE_OVERRIDE_COLUMN_NAME, ormColumn.getSpecifiedName());
-// assertEquals(Boolean.TRUE, xmlColumn.getSpecifiedUnique());
-// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedNullable());
-// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedInsertable());
-// assertEquals(Boolean.FALSE, xmlColumn.getSpecifiedUpdatable());
-// assertEquals("COLUMN_DEFINITION", xmlColumn.getColumnDefinition());
-// assertEquals("MY_TABLE", xmlColumn.getSpecifiedTable());
-// assertEquals(Integer.valueOf(5), xmlColumn.getSpecifiedLength());
-// assertEquals(Integer.valueOf(6), xmlColumn.getSpecifiedPrecision());
-// assertEquals(Integer.valueOf(7), xmlColumn.getSpecifiedScale());
-
+
+
ormAttributeOverride = ormAttributeOverrides.next();
assertEquals("id", ormAttributeOverride.getName());
ormColumn = ormAttributeOverride.getColumn();
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java
index 9c39a7393a..a0db2dc0e0 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java
@@ -21,6 +21,7 @@ import org.eclipse.jpt.core.context.java.JavaPrimaryKeyJoinColumn;
import org.eclipse.jpt.core.context.java.JavaSecondaryTable;
import org.eclipse.jpt.core.context.orm.OrmAssociationOverride;
import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
+import org.eclipse.jpt.core.context.orm.OrmBasicMapping;
import org.eclipse.jpt.core.context.orm.OrmEmbeddable;
import org.eclipse.jpt.core.context.orm.OrmEntity;
import org.eclipse.jpt.core.context.orm.OrmIdMapping;
@@ -1604,6 +1605,121 @@ public class OrmEntityTests extends ContextModelTestCase
assertFalse(ormEntity.specifiedAttributeOverrides().hasNext());
}
+ public void testVirtualAttributeOverrides() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+ OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_CHILD_TYPE_NAME);
+ OrmPersistentType persistentType2 = entityMappings().addOrmPersistentType(MappingKeys.MAPPED_SUPERCLASS_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+
+
+ OrmEntity entity = (OrmEntity) persistentType.getMapping();
+
+ assertEquals(3, entity.virtualAttributeOverridesSize());
+ ListIterator<OrmAttributeOverride> virtualAttributeOverrides = entity.virtualAttributeOverrides();
+ OrmAttributeOverride attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("name", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("foo", attributeOverride.getName());
+
+ entity.virtualAttributeOverrides().next().setVirtual(false);
+
+ assertEquals(2, entity.virtualAttributeOverridesSize());
+ virtualAttributeOverrides = entity.virtualAttributeOverrides();
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("name", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("foo", attributeOverride.getName());
+
+ entity.setSpecifiedMetadataComplete(Boolean.TRUE);
+ assertEquals(2, entity.virtualAttributeOverridesSize());
+ virtualAttributeOverrides = entity.virtualAttributeOverrides();
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("name", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("foo", attributeOverride.getName());
+
+ entity.specifiedAttributeOverrides().next().setVirtual(true);
+ entity.setSpecifiedMetadataComplete(Boolean.FALSE);
+ entity.getJavaEntity().virtualAttributeOverrides().next().setVirtual(false);
+ entity.getJavaEntity().specifiedAttributeOverrides().next().getColumn().setSpecifiedName("FOO");
+ assertEquals(3, entity.virtualAttributeOverridesSize());
+ virtualAttributeOverrides = entity.virtualAttributeOverrides();
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ assertEquals("FOO", attributeOverride.getColumn().getSpecifiedName());//TODO specified or default?
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("name", attributeOverride.getName());
+ assertEquals("name", attributeOverride.getColumn().getSpecifiedName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("foo", attributeOverride.getName());
+
+ persistentType2.getAttributeNamed("name").makeSpecified();
+ OrmBasicMapping basicMapping = (OrmBasicMapping) persistentType2.getAttributeNamed("name").getMapping();
+ basicMapping.getColumn().setSpecifiedName("MY_NAME");
+
+ assertEquals(3, entity.virtualAttributeOverridesSize());
+ virtualAttributeOverrides = entity.virtualAttributeOverrides();
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("name", attributeOverride.getName());
+ assertEquals("MY_NAME", attributeOverride.getColumn().getSpecifiedName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ assertEquals("FOO", attributeOverride.getColumn().getSpecifiedName());//TODO specified or default?
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("foo", attributeOverride.getName());
+ }
+
+ public void testVirtualAttributeOverridesNoJavaEntity() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+ OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_CHILD_TYPE_NAME);
+ entityMappings().addOrmPersistentType(MappingKeys.MAPPED_SUPERCLASS_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+
+
+ OrmEntity entity = (OrmEntity) persistentType.getMapping();
+
+ persistentType.getJavaPersistentType().setMappingKey(MappingKeys.NULL_TYPE_MAPPING_KEY);
+ assertEquals(3, entity.virtualAttributeOverridesSize());
+ ListIterator<OrmAttributeOverride> virtualAttributeOverrides = entity.virtualAttributeOverrides();
+ OrmAttributeOverride attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("id", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("name", attributeOverride.getName());
+ attributeOverride = virtualAttributeOverrides.next();
+ assertEquals("foo", attributeOverride.getName());
+ }
+
+ public void testAttributeOverrideColumnDefaults() throws Exception {
+ createTestMappedSuperclass();
+ createTestSubType();
+ OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_CHILD_TYPE_NAME);
+ entityMappings().addOrmPersistentType(MappingKeys.MAPPED_SUPERCLASS_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+
+
+ OrmEntity entity = (OrmEntity) persistentType.getMapping();
+
+ entity.virtualAttributeOverrides().next().setVirtual(false);
+
+ OrmAttributeOverride attributeOverride = entity.specifiedAttributeOverrides().next();
+ assertEquals("id", attributeOverride.getColumn().getDefaultName());
+ assertEquals(CHILD_TYPE_NAME, attributeOverride.getColumn().getDefaultTable());
+
+ ((JavaEntity) persistentType.getJavaPersistentType().getMapping()).getTable().setSpecifiedName("FOO");
+ assertEquals("id", attributeOverride.getColumn().getDefaultName());
+ assertEquals("FOO", attributeOverride.getColumn().getDefaultTable());
+
+ entity.setSpecifiedMetadataComplete(Boolean.TRUE);
+ assertEquals("id", attributeOverride.getColumn().getDefaultName());
+ assertEquals(CHILD_TYPE_NAME, attributeOverride.getColumn().getDefaultTable());
+
+ entity.setSpecifiedMetadataComplete(Boolean.FALSE);
+ entity.getTable().setSpecifiedName("BAR");
+ assertEquals("id", attributeOverride.getColumn().getDefaultName());
+ assertEquals("BAR", attributeOverride.getColumn().getDefaultTable());
+ }
+
// public void testAddSpecifiedAssociationOverride() throws Exception {
// OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
// OrmEntity ormEntity = (OrmEntity) persistentType.getMapping();

Back to the top