diff options
author | pfullbright | 2007-06-12 14:05:45 +0000 |
---|---|---|
committer | pfullbright | 2007-06-12 14:05:45 +0000 |
commit | 72aba5fda5333bcc3f3eb3cc8f929379b24c0b6c (patch) | |
tree | 426aa821687ba662ca867f7e188caf9420e7a125 /jpa/plugins | |
parent | 2909b8e88f89a8ed84b2e5950ac2cb45b03b6920 (diff) | |
download | webtools.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')
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); |