Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpfullbright2008-12-03 22:32:38 +0000
committerpfullbright2008-12-03 22:32:38 +0000
commit6fc1b46099c798b9562c86271f7c0d316cdc2a1e (patch)
treec746e49b3bf011c38a243f1747a7a4fe6ff23737
parent82fa06271663ca4acb62212b25c170fdf4f56e8c (diff)
downloadwebtools.dali-6fc1b46099c798b9562c86271f7c0d316cdc2a1e.tar.gz
webtools.dali-6fc1b46099c798b9562c86271f7c0d316cdc2a1e.tar.xz
webtools.dali-6fc1b46099c798b9562c86271f7c0d316cdc2a1e.zip
[255271] - rebuild context model when there's a major change to resource model
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java5
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/Persistence.java11
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericEntityMappings.java7
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/OrmXmlImpl.java29
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistence.java6
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistenceXml.java26
6 files changed, 70 insertions, 14 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java
index 3c63896096..a62b051c67 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/EntityMappings.java
@@ -13,6 +13,7 @@ import java.util.ListIterator;
import org.eclipse.jpt.core.context.AccessType;
import org.eclipse.jpt.core.context.MappingFileRoot;
import org.eclipse.jpt.core.context.QueryHolder;
+import org.eclipse.jpt.core.resource.orm.XmlEntityMappings;
import org.eclipse.jpt.db.Catalog;
import org.eclipse.jpt.db.Schema;
import org.eclipse.jpt.db.SchemaContainer;
@@ -27,6 +28,7 @@ import org.eclipse.jpt.db.SchemaContainer;
public interface EntityMappings
extends MappingFileRoot, OrmPersistentTypeContext, QueryHolder
{
+ XmlEntityMappings getXmlEntityMappings();
String getVersion();
@@ -126,6 +128,7 @@ public interface EntityMappings
void changeMapping(OrmPersistentType ormPersistentType, OrmTypeMapping oldMapping, OrmTypeMapping newMapping);
+
// **************** updating ***********************************************
/**
@@ -134,8 +137,8 @@ public interface EntityMappings
*/
void update();
+
// *************************************************************************
boolean containsOffset(int textOffset);
-
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/Persistence.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/Persistence.java
index 7efe89e50d..d9607f6532 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/Persistence.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/Persistence.java
@@ -10,13 +10,12 @@
package org.eclipse.jpt.core.context.persistence;
import java.util.ListIterator;
+import org.eclipse.jpt.core.JpaNode;
import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.resource.persistence.XmlPersistence;
/**
- *
- *
* Provisional API: This interface is part of an interim API that is still
* under development and expected to change significantly before reaching
* stability. It is available at this early stage to solicit feedback from
@@ -25,7 +24,15 @@ import org.eclipse.jpt.core.resource.persistence.XmlPersistence;
*/
public interface Persistence extends XmlContextNode, JpaStructureNode
{
+ /**
+ * Return the resource model object associated with this context model object
+ */
+ XmlPersistence getXmlPersistence();
+
+ /**
+ * @see {@link JpaNode#getParent()}
+ */
PersistenceXml getParent();
// **************** persistence units **************************************
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericEntityMappings.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericEntityMappings.java
index 7258918892..1a1ec2b343 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericEntityMappings.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericEntityMappings.java
@@ -149,6 +149,13 @@ public class GenericEntityMappings
return getPersistenceUnitMetadata().isXmlMappingMetadataComplete();
}
+
+ // **************** EntityMappings impl ************************************
+
+ public XmlEntityMappings getXmlEntityMappings() {
+ return this.xmlEntityMappings;
+ }
+
public void changeMapping(OrmPersistentType ormPersistentType, OrmTypeMapping oldMapping, OrmTypeMapping newMapping) {
ormPersistentType.dispose();
int sourceIndex = this.persistentTypes.indexOf(ormPersistentType);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/OrmXmlImpl.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/OrmXmlImpl.java
index e3db059e97..b579ca016d 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/OrmXmlImpl.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/OrmXmlImpl.java
@@ -153,18 +153,37 @@ public class OrmXmlImpl
}
public void update(JpaXmlResource resource) {
+ OrmResource ormResource;
try {
- this.ormResource = (OrmResource) resource;
- } catch (ClassCastException cce) {
+ ormResource = (OrmResource) resource;
+ }
+ catch (ClassCastException cce) {
throw new IllegalArgumentException(resource.toString());
}
- XmlEntityMappings xmlEntityMappings = this.ormResource.getEntityMappings();
- if (xmlEntityMappings != null) {
+
+ XmlEntityMappings oldXmlEntityMappings =
+ (this.entityMappings == null) ? null : this.entityMappings.getXmlEntityMappings();
+ XmlEntityMappings newXmlEntityMappings = ormResource.getEntityMappings();
+
+ this.ormResource = ormResource;
+
+ // if the old and new xml entity mappings are different instances,
+ // we scrap the old and rebuild. this can happen when the resource
+ // model drastically changes, such as a cvs checkout or an edit reversion
+ if (oldXmlEntityMappings != newXmlEntityMappings) {
+ if (this.entityMappings != null) {
+ this.getJpaFile(this.ormResource.getFile()).removeRootStructureNode(this.ormResource);
+ this.entityMappings.dispose();
+ this.setEntityMappings(null);
+ }
+ }
+
+ if (newXmlEntityMappings != null) {
if (this.entityMappings != null) {
this.getJpaFile(this.ormResource.getFile()).addRootStructureNode(this.ormResource, this.entityMappings);
this.entityMappings.update();
} else {
- this.setEntityMappings(this.buildEntityMappings(xmlEntityMappings));
+ this.setEntityMappings(this.buildEntityMappings(newXmlEntityMappings));
}
} else {
if (this.entityMappings != null) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistence.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistence.java
index 6a4553b052..5ab7e1e36c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistence.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistence.java
@@ -46,7 +46,11 @@ public class GenericPersistence extends AbstractXmlContextNode
public String getId() {
return PersistenceStructureNodes.PERSISTENCE_ID;
}
-
+
+ public XmlPersistence getXmlPersistence() {
+ return this.xmlPersistence;
+ }
+
@Override
public PersistenceXml getParent() {
return (PersistenceXml) super.getParent();
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistenceXml.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistenceXml.java
index 75b23d025b..eae37528ed 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistenceXml.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/GenericPersistenceXml.java
@@ -121,15 +121,31 @@ public class GenericPersistenceXml
}
}
- public void update(PersistenceResource pr) {
- this.persistenceResource = pr;
- if (pr.getPersistence() != null) {
+ public void update(PersistenceResource persistenceResource) {
+ XmlPersistence oldXmlPersistence =
+ (this.persistence == null) ? null : this.persistence.getXmlPersistence();
+ XmlPersistence newXmlPersistence = persistenceResource.getPersistence();
+
+ this.persistenceResource = persistenceResource;
+
+ // if the old and new xml persistences are different instances,
+ // we scrap the old and rebuild. this can happen when the resource
+ // model drastically changes, such as a cvs checkout or an edit reversion
+ if (oldXmlPersistence != newXmlPersistence) {
+ if (this.persistence != null) {
+ this.getJpaFile(this.persistenceResource.getFile()).removeRootStructureNode(this.persistenceResource);
+ this.persistence.dispose();
+ this.setPersistence_(null);
+ }
+ }
+
+ if (newXmlPersistence != null) {
if (this.persistence != null) {
this.getJpaFile(this.persistenceResource.getFile()).addRootStructureNode(this.persistenceResource, this.persistence);
- this.persistence.update(pr.getPersistence());
+ this.persistence.update(newXmlPersistence);
}
else {
- setPersistence_(buildPersistence(pr.getPersistence()));
+ setPersistence_(buildPersistence(newXmlPersistence));
}
}
else {

Back to the top