Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpfullbright2007-06-12 14:05:45 +0000
committerpfullbright2007-06-12 14:05:45 +0000
commit72aba5fda5333bcc3f3eb3cc8f929379b24c0b6c (patch)
tree426aa821687ba662ca867f7e188caf9420e7a125 /jpa/plugins
parent2909b8e88f89a8ed84b2e5950ac2cb45b03b6920 (diff)
downloadwebtools.dali-72aba5fda5333bcc3f3eb3cc8f929379b24c0b6c.tar.gz
webtools.dali-72aba5fda5333bcc3f3eb3cc8f929379b24c0b6c.tar.xz
webtools.dali-72aba5fda5333bcc3f3eb3cc8f929379b24c0b6c.zip
bug 191301 - fixed critical mapping change bug
Diffstat (limited to 'jpa/plugins')
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/EntityMappingsInternal.java19
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java8
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java10
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java8
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingsTranslator.java9
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiObjectDependencyTranslator.java4
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingsTranslator.java6
7 files changed, 58 insertions, 6 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/EntityMappingsInternal.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/EntityMappingsInternal.java
index 0a6faee299..ae69349df2 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/EntityMappingsInternal.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/EntityMappingsInternal.java
@@ -513,7 +513,6 @@ public class EntityMappingsInternal extends XmlEObject
/**
* Returns the value of the '<em><b>Root</b></em>' reference.
- * The default value is <code>""</code>.
* It is bidirectional and its opposite is '{@link org.eclipse.jpt.core.internal.content.orm.XmlRootContentNode#getEntityMappings <em>Entity Mappings</em>}'.
* <!-- begin-user-doc -->
* <p>
@@ -641,7 +640,6 @@ public class EntityMappingsInternal extends XmlEObject
/**
* Returns the value of the '<em><b>Persistence Unit Metadata Internal</b></em>' containment reference.
- * The default value is <code>""</code>.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Persistence Unit Metadata Internal</em>' containment reference isn't clear,
@@ -1553,6 +1551,7 @@ public class EntityMappingsInternal extends XmlEObject
public void changeMapping(XmlTypeMapping oldMapping, String newMappingKey) {
XmlTypeMapping newTypeMapping = buildXmlTypeMapping(oldMapping.getPersistentType().typeMappingProviders(), newMappingKey);
+ newTypeMapping.setPersistentType(oldMapping.getPersistentType());
getTypeMappings().remove(oldMapping);
newTypeMapping.initializeFrom(oldMapping);
insertTypeMapping(newTypeMapping);
@@ -1638,7 +1637,14 @@ public class EntityMappingsInternal extends XmlEObject
@Override
protected void didAdd(int index, XmlTypeMapping newObject) {
- getPersistentTypes().add(index, newObject.getPersistentType());
+ XmlPersistentType type = newObject.getPersistentType();
+ if (getPersistentTypes().contains(type)) {
+ // the type has been remapped. don't remove, simply move.
+ getPersistentTypes().move(index, type);
+ }
+ else {
+ getPersistentTypes().add(index, type);
+ }
}
@Override
@@ -1659,7 +1665,12 @@ public class EntityMappingsInternal extends XmlEObject
@Override
protected void didRemove(int index, XmlTypeMapping oldObject) {
- getPersistentTypes().remove(oldObject.getPersistentType());
+ XmlPersistentType type = oldObject.getPersistentType();
+ if (type != null) {
+ // the type has been remapped. don't remove, simply move.
+ // (see didAdd(int, XmlTypeMapping) )
+ getPersistentTypes().remove(oldObject.getPersistentType());
+ }
}
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java
index 96079e2b2d..6e663af487 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlAttributeMapping.java
@@ -9,6 +9,7 @@
******************************************************************************/
package org.eclipse.jpt.core.internal.content.orm;
+import java.util.Set;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.ecore.EClass;
@@ -80,6 +81,12 @@ public abstract class XmlAttributeMapping extends XmlEObject
protected INamedColumn.Owner buildOwner() {
return new ColumnOwner();
}
+
+ @Override
+ protected void addInsignificantFeatureIdsTo(Set<Integer> insignificantFeatureIds) {
+ super.addInsignificantFeatureIdsTo(insignificantFeatureIds);
+ insignificantFeatureIds.add(OrmPackage.XML_ATTRIBUTE_MAPPING__PERSISTENT_ATTRIBUTE);
+ }
/**
* <!-- begin-user-doc -->
@@ -238,7 +245,6 @@ public abstract class XmlAttributeMapping extends XmlEObject
protected abstract void initializeOn(XmlAttributeMapping newMapping);
public void initializeFromXmlAttributeMapping(XmlAttributeMapping oldMapping) {
- setPersistentAttribute(oldMapping.getPersistentAttribute());
}
public void initializeFromXmlBasicMapping(XmlBasic oldMapping) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java
index 220621a726..aa14ad2995 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentType.java
@@ -172,6 +172,7 @@ public class XmlPersistentType extends XmlEObject implements IPersistentType
@Override
protected void addInsignificantFeatureIdsTo(Set<Integer> insignificantFeatureIds) {
super.addInsignificantFeatureIdsTo(insignificantFeatureIds);
+ insignificantFeatureIds.add(OrmPackage.XML_PERSISTENT_TYPE__ATTRIBUTE_MAPPINGS);
insignificantFeatureIds.add(OrmPackage.XML_PERSISTENT_TYPE__PERSISTENT_ATTRIBUTES);
insignificantFeatureIds.add(OrmPackage.XML_PERSISTENT_TYPE__SPECIFIED_PERSISTENT_ATTRIBUTES);
insignificantFeatureIds.add(OrmPackage.XML_PERSISTENT_TYPE__VIRTUAL_PERSISTENT_ATTRIBUTES);
@@ -423,12 +424,21 @@ public class XmlPersistentType extends XmlEObject implements IPersistentType
protected void changeMapping(XmlAttributeMapping oldMapping, String newMappingKey) {
boolean virtual = oldMapping.isVirtual();
XmlAttributeMapping newAttributeMapping = buildAttributeMapping(oldMapping.getPersistentAttribute().attributeMappingProviders(), newMappingKey);
+ // we can't set the attribute to null, but we can set it to a dummy placeholder one
+ // we do this to get the translators to *wake up* and remove adapters from the attribute
+ XmlPersistentAttribute nullAttribute = OrmFactory.eINSTANCE.createXmlPersistentAttribute();
+ XmlPersistentAttribute attribute = oldMapping.getPersistentAttribute();
+ oldMapping.setPersistentAttribute(nullAttribute);
+
if (virtual) {
+ getVirtualPersistentAttributes().remove(attribute);
getVirtualAttributeMappings().remove(oldMapping);
}
else {
+ getSpecifiedPersistentAttributes().remove(attribute);
getSpecifiedAttributeMappings().remove(oldMapping);
}
+ newAttributeMapping.setPersistentAttribute(attribute);
oldMapping.initializeOn(newAttributeMapping);
if (virtual) {
insertAttributeMapping(newAttributeMapping, getVirtualAttributeMappings());
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java
index f7ec05ea02..51a6f2c4f1 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlTypeMapping.java
@@ -10,6 +10,7 @@
package org.eclipse.jpt.core.internal.content.orm;
import java.util.Iterator;
+import java.util.Set;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.ecore.EClass;
@@ -168,6 +169,12 @@ public abstract class XmlTypeMapping extends XmlEObject implements ITypeMapping
protected XmlPersistentType createXmlPersistentType() {
return OrmFactory.eINSTANCE.createXmlPersistentType(getKey());
}
+
+ @Override
+ protected void addInsignificantFeatureIdsTo(Set<Integer> insignificantFeatureIds) {
+ super.addInsignificantFeatureIdsTo(insignificantFeatureIds);
+ insignificantFeatureIds.add(OrmPackage.XML_TYPE_MAPPING__PERSISTENT_TYPE);
+ }
/**
* <!-- begin-user-doc -->
@@ -597,7 +604,6 @@ public abstract class XmlTypeMapping extends XmlEObject implements ITypeMapping
* @param oldMapping
*/
public void initializeFrom(XmlTypeMapping oldMapping) {
- setPersistentType(oldMapping.getPersistentType());
}
public IJpaContentNode getContentNode(int offset) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingsTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingsTranslator.java
index 3dc03f10dc..71d37e572d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingsTranslator.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingsTranslator.java
@@ -9,6 +9,7 @@
package org.eclipse.jpt.core.internal.content.orm.resource;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
import org.eclipse.jpt.core.internal.mappings.IBasic;
import org.eclipse.jpt.core.internal.mappings.IEmbedded;
@@ -31,9 +32,11 @@ public class AttributeMappingsTranslator extends MultiObjectDependencyTranslator
//TODO we're not putting the translator in the translator map in this situation
public Translator getDelegateFor(EObject o) {
Translator translator = super.getDelegateFor(o);
+
if (translator != null) {
return translator;
}
+
switch (o.eClass().getClassifierID()) {
case OrmPackage.XML_ID :
translator = new IdTranslator();
@@ -72,6 +75,7 @@ public class AttributeMappingsTranslator extends MultiObjectDependencyTranslator
break;
}
+ setDelegateFor(o, translator);
return translator;
}
@@ -117,6 +121,11 @@ public class AttributeMappingsTranslator extends MultiObjectDependencyTranslator
}
@Override
+ public EStructuralFeature getDependencyFeature() {
+ return JPA_CORE_XML_PKG.getXmlAttributeMapping_PersistentAttribute();
+ }
+
+ @Override
public EObject basicGetDependencyObject(EObject parent) {
Translator delegate = getDelegateFor(parent);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiObjectDependencyTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiObjectDependencyTranslator.java
index 41d8845714..9ace901605 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiObjectDependencyTranslator.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiObjectDependencyTranslator.java
@@ -33,6 +33,10 @@ public abstract class MultiObjectDependencyTranslator extends DependencyTranslat
return translatorMap.get(o);
}
+ public void setDelegateFor(EObject o, Translator t) {
+ translatorMap.put(o, t);
+ }
+
public abstract Translator getDelegateFor(String domName, String readAheadName);
public EObject createEMFObject(String nodeName, String readAheadName) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingsTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingsTranslator.java
index da8dffc3d4..7a66392e67 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingsTranslator.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingsTranslator.java
@@ -12,6 +12,7 @@ package org.eclipse.jpt.core.internal.content.orm.resource;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
import org.eclipse.jpt.core.internal.mappings.IEntity;
import org.eclipse.wst.common.internal.emf.resource.MultiObjectTranslator;
@@ -88,6 +89,11 @@ public class TypeMappingsTranslator extends MultiObjectTranslator
}
@Override
+ public EStructuralFeature getDependencyFeature() {
+ return JPA_CORE_XML_PKG.getXmlTypeMapping_PersistentType();
+ }
+
+ @Override
public EObject basicGetDependencyObject(EObject parent) {
Translator delegate = getDelegateFor(parent);

Back to the top