Skip to main content
summaryrefslogtreecommitdiffstats
path: root/jpa
diff options
context:
space:
mode:
authorpfullbright2010-02-20 00:19:15 +0000
committerpfullbright2010-02-20 00:19:15 +0000
commitfd43ffb00d089974bf131042a221730e0b817e57 (patch)
treeb2a71da08425804fbfda38d9532cfc797e282433 /jpa
parentea75d108a8119377afb393f74d37eac304cf9acf (diff)
downloadwebtools.dali-fd43ffb00d089974bf131042a221730e0b817e57.tar.gz
webtools.dali-fd43ffb00d089974bf131042a221730e0b817e57.tar.xz
webtools.dali-fd43ffb00d089974bf131042a221730e0b817e57.zip
bug 234191 - ** New I-Build needed **
Diffstat (limited to 'jpa')
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java9
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaResourceModelListener.java3
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java6
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java12
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java9
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java15
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/GenericRootContextNode.java20
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java38
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceXml.java148
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java27
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/structure/JpaStructurePage.java11
-rw-r--r--jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmXmlTests.java3
-rw-r--r--jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/persistence/PersistenceXmlTests.java3
13 files changed, 199 insertions, 105 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java
index 16408d4cc9..c02ebbfb13 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaPlatform.java
@@ -15,6 +15,9 @@ import org.eclipse.jpt.core.context.java.JavaAttributeMappingDefinition;
import org.eclipse.jpt.core.context.java.JavaPersistentAttribute;
import org.eclipse.jpt.core.context.java.JavaPersistentType;
import org.eclipse.jpt.core.context.java.JavaTypeMappingDefinition;
+import org.eclipse.jpt.core.context.java.NullDefaultJavaAttributeMappingDefinition;
+import org.eclipse.jpt.core.context.java.NullJavaTypeMappingDefinition;
+import org.eclipse.jpt.core.context.java.NullSpecifiedJavaAttributeMappingDefinition;
import org.eclipse.jpt.core.utility.jdt.AnnotationEditFormatter;
import org.eclipse.jpt.db.ConnectionProfileFactory;
@@ -137,6 +140,12 @@ public interface JpaPlatform
// ********** resource types and definitions **********
/**
+ * Return true if the resource type is supported. The result of this call is consistent with
+ * the result of {@link #getResourceDefinition(JpaResourceType)}
+ */
+ boolean supportsResourceType(JpaResourceType resourceType);
+
+ /**
* Return a {@link ResourceDefinition} to describe the context model for a file of the given
* resource type.
* Throw an {@link IllegalArgumentException} if the resource type is not supported by the platform.
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaResourceModelListener.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaResourceModelListener.java
index 272db14505..60d0925afb 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaResourceModelListener.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaResourceModelListener.java
@@ -25,4 +25,7 @@ public interface JpaResourceModelListener
{
void resourceModelChanged(JpaResourceModel jpaResourceModel);
+ void resourceModelReverted(JpaResourceModel jpaResourceModel);
+
+ void resourceModelUnloaded(JpaResourceModel jpaResourceModel);
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java
index e78ca34667..d0d407fc53 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/persistence/PersistenceXml.java
@@ -10,7 +10,6 @@
package org.eclipse.jpt.core.context.persistence;
import org.eclipse.jpt.core.context.XmlFile;
-import org.eclipse.jpt.core.resource.xml.JpaXmlResource;
/**
* JPA <code>persistence.xml</code> file.
@@ -41,9 +40,8 @@ public interface PersistenceXml
// ********** updating **********
/**
- * Update the context persistence XML model to match the resource model.
+ * Update the context persistence XML model to match its resource file.
* @see org.eclipse.jpt.core.JpaProject#update()
*/
- void update(JpaXmlResource resource);
-
+ void update();
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java
index d3512b9d65..9f4d2cea50 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java
@@ -78,6 +78,7 @@ import org.eclipse.jpt.utility.internal.iterables.LiveCloneIterable;
import org.eclipse.jpt.utility.internal.iterables.SubIterableWrapper;
import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
import org.eclipse.jst.j2ee.model.internal.validation.ValidationCancelledException;
+import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
@@ -1321,6 +1322,17 @@ public abstract class AbstractJpaProject
// new Exception(msg).printStackTrace(System.out);
AbstractJpaProject.this.synchronizeContextModel(jpaResourceModel);
}
+
+ public void resourceModelReverted(JpaResourceModel jpaResourceModel) {
+ IFile file = WorkbenchResourceHelper.getFile((JpaXmlResource)jpaResourceModel);
+ AbstractJpaProject.this.removeJpaFile(file);
+ AbstractJpaProject.this.addJpaFile(file);
+ }
+
+ public void resourceModelUnloaded(JpaResourceModel jpaResourceModel) {
+ IFile file = WorkbenchResourceHelper.getFile((JpaXmlResource)jpaResourceModel);
+ AbstractJpaProject.this.removeJpaFile(file);
+ }
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java
index 713874cbba..195fb19286 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/GenericJpaPlatform.java
@@ -207,6 +207,15 @@ public class GenericJpaPlatform
// ********** resource types and definitions **********
+ public boolean supportsResourceType(JpaResourceType resourceType) {
+ for (ResourceDefinition resourceDefinition : CollectionTools.iterable(resourceDefinitions())) {
+ if (resourceDefinition.getResourceType().equals(resourceType)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public ResourceDefinition getResourceDefinition(JpaResourceType resourceType) {
for (ResourceDefinition resourceDefinition : CollectionTools.iterable(resourceDefinitions())) {
if (resourceDefinition.getResourceType().equals(resourceType)) {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java
index bfb7724dbf..d0e119bb83 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/persistence/AbstractMappingFileRef.java
@@ -10,7 +10,6 @@
package org.eclipse.jpt.core.internal.context.persistence;
import java.util.List;
-
import org.eclipse.core.resources.IFile;
import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.jpt.core.context.MappingFile;
@@ -142,18 +141,24 @@ public abstract class AbstractMappingFileRef
protected void updateMappingFile() {
JpaXmlResource newXmlResource = this.resolveMappingFileXmlResource();
- if (newXmlResource == null) {
+
+ if (newXmlResource == null
+ || ! getJpaPlatform().supportsResourceType(newXmlResource.getResourceType())) {
+
if (this.mappingFile != null) {
this.mappingFile.dispose();
this.setMappingFile(null);
}
- } else {
+ }
+ else {
if (this.mappingFile == null) {
this.setMappingFile(this.buildMappingFile(newXmlResource));
- } else {
+ }
+ else {
if (this.mappingFile.getXmlResource() == newXmlResource) {
this.mappingFile.update();
- } else {
+ }
+ else {
// if the resource's content type has changed, we completely rebuild the mapping file
this.mappingFile.dispose();
this.setMappingFile(this.buildMappingFile(newXmlResource));
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/GenericRootContextNode.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/GenericRootContextNode.java
index ec63528cc0..9509448d2f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/GenericRootContextNode.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/GenericRootContextNode.java
@@ -10,7 +10,6 @@
package org.eclipse.jpt.core.internal.jpa1.context;
import java.util.List;
-
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -73,13 +72,20 @@ public class GenericRootContextNode
public void update(IProgressMonitor monitor) {
JpaXmlResource resource = this.resolvePersistenceXmlResource();
- if (resource == null) {
- this.setPersistenceXml(null);
- } else {
+ if (resource == null
+ || ! getJpaPlatform().supportsResourceType(resource.getResourceType())) {
+
+ if (this.persistenceXml != null) {
+ this.persistenceXml.dispose();
+ setPersistenceXml(null);
+ }
+ }
+ else {
if (this.persistenceXml == null) {
- this.setPersistenceXml(this.buildPersistenceXml(resource));
- } else {
- this.persistenceXml.update(resource);
+ setPersistenceXml(buildPersistenceXml(resource));
+ }
+ else {
+ this.persistenceXml.update();
}
}
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java
index 67d6a132b4..37bf01165f 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/orm/GenericOrmXml.java
@@ -10,7 +10,6 @@
package org.eclipse.jpt.core.internal.jpa1.context.orm;
import java.util.List;
-
import org.eclipse.core.resources.IResource;
import org.eclipse.jpt.core.JpaFile;
import org.eclipse.jpt.core.JpaResourceType;
@@ -43,7 +42,7 @@ public class GenericOrmXml
* ref will dispose its current mapping file and build a new one.
*/
protected final JpaXmlResource xmlResource;
-
+
/**
* The resouce type will only change if the XML file's version changes
* (since, if the content type changes, we get garbage-collected).
@@ -114,6 +113,10 @@ public class GenericOrmXml
if (this.entityMappings != null) {
this.entityMappings.dispose();
}
+ JpaFile jpaFile = getJpaFile();
+ if (jpaFile != null) {
+ jpaFile.removeRootStructureNode(this.xmlResource);
+ }
}
// ********** MappingFile implementation **********
@@ -163,31 +166,38 @@ public class GenericOrmXml
XmlEntityMappings oldXmlEntityMappings = (this.entityMappings == null) ? null : this.entityMappings.getXmlEntityMappings();
XmlEntityMappings newXmlEntityMappings = (XmlEntityMappings) this.xmlResource.getRootObject();
JpaResourceType newResourceType = this.xmlResource.getResourceType();
-
+
// If the old and new xml entity mappings are different instances,
// we scrap the old context entity mappings and rebuild. This can
// happen when the resource model drastically changes, such as
// a cvs checkout or an edit reversion.
- if ((oldXmlEntityMappings != newXmlEntityMappings) ||
- (newXmlEntityMappings == null) ||
- this.valuesAreDifferent(this.resourceType, newResourceType)
- ) {
+ if ((oldXmlEntityMappings != newXmlEntityMappings)
+ || (newXmlEntityMappings == null)
+ || this.valuesAreDifferent(this.resourceType, newResourceType)) {
+
if (this.entityMappings != null) {
- this.getJpaFile().removeRootStructureNode(this.xmlResource);
+ getJpaFile().removeRootStructureNode(this.xmlResource);
this.entityMappings.dispose();
- this.setEntityMappings(null);
+ setEntityMappings(null);
}
}
-
+
+ this.resourceType = newResourceType;
+
if (newXmlEntityMappings != null) {
if (this.entityMappings != null) {
this.entityMappings.update();
- } else {
- this.setEntityMappings(this.buildEntityMappings(newXmlEntityMappings));
}
- this.getJpaFile().addRootStructureNode(this.xmlResource, this.entityMappings);
+ else {
+ setEntityMappings(buildEntityMappings(newXmlEntityMappings));
+ }
+
+ JpaFile jpaFile = getJpaFile();
+ if (jpaFile == null) {
+ System.out.print("Jpa file is null");
+ }
+ jpaFile.addRootStructureNode(this.xmlResource, this.entityMappings);
}
- this.resourceType = newResourceType;
}
protected JpaFile getJpaFile() {
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceXml.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceXml.java
index 24c5e4230d..83f7e0d9c5 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceXml.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/jpa1/context/persistence/GenericPersistenceXml.java
@@ -10,8 +10,8 @@
package org.eclipse.jpt.core.internal.jpa1.context.persistence;
import java.util.List;
-
import org.eclipse.core.resources.IResource;
+import org.eclipse.jpt.core.JpaFile;
import org.eclipse.jpt.core.JpaResourceType;
import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.jpt.core.JptCorePlugin;
@@ -35,122 +35,133 @@ public class GenericPersistenceXml
extends AbstractPersistenceXmlContextNode
implements PersistenceXml2_0
{
- protected JpaXmlResource persistenceXmlResource; // never null
-
- protected Persistence persistence;
-
+ /**
+ * If the XML resource's content type changes a new instance of this object will be built
+ */
+ protected JpaXmlResource xmlResource; // never null
+
+ /**
+ * The resouce type will only change if the XML file's version changes
+ * (since, if the content type changes, we get garbage-collected).
+ */
protected JpaResourceType resourceType;
-
-
+
+ protected Persistence persistence;
+
+
public GenericPersistenceXml(JpaRootContextNode parent, JpaXmlResource resource) {
super(parent);
if ( ! resource.getContentType().isKindOf(JptCorePlugin.PERSISTENCE_XML_CONTENT_TYPE)) {
throw new IllegalArgumentException("Resource " + resource + " must have persistence xml content type"); //$NON-NLS-1$ //$NON-NLS-2$
}
- this.persistenceXmlResource = resource;
+ this.xmlResource = resource;
if (resource.getRootObject() != null) {
this.persistence = this.buildPersistence((XmlPersistence) resource.getRootObject());
this.resourceType = resource.getResourceType();
}
}
-
-
+
+
// ********** XmlFile implementation **********
-
+
public JpaXmlResource getXmlResource() {
- return this.persistenceXmlResource;
+ return this.xmlResource;
}
-
-
+
+
// ********** AbstractJpaNode overrides **********
-
+
@Override
public IResource getResource() {
- return this.persistenceXmlResource.getFile();
+ return this.xmlResource.getFile();
}
-
-
+
+
// ********** AbstractJpaContextNode overrides **********
-
+
@Override
public JpaResourceType getResourceType() {
- return this.persistenceXmlResource.getResourceType();
+ return this.xmlResource.getResourceType();
}
-
-
+
+
// ********** persistence **********
-
+
public Persistence getPersistence() {
return this.persistence;
}
-
+
protected void setPersistence(Persistence persistence) {
Persistence old = this.persistence;
this.persistence = persistence;
this.firePropertyChanged(PERSISTENCE_PROPERTY, old, persistence);
}
-
+
protected Persistence buildPersistence(XmlPersistence xmlPersistence) {
return this.getContextNodeFactory().buildPersistence(this, xmlPersistence);
}
-
-
+
+
// ********** metamodel **********
-
+
public void initializeMetamodel() {
if (this.persistence != null) {
((Persistence2_0) this.persistence).initializeMetamodel();
}
}
-
+
public void synchronizeMetamodel() {
if (this.persistence != null) {
((Persistence2_0) this.persistence).synchronizeMetamodel();
}
}
-
+
public void disposeMetamodel() {
if (this.persistence != null) {
((Persistence2_0) this.persistence).disposeMetamodel();
}
}
-
-
+
+
// ********** updating **********
-
- //TODO I haven't yet figured out if we do not need the resource object passed in now.
- //I don't think we will even build AbstractPersistenceXml if the resource object is null
- //I'm pretty sure this won't change now, but need to investigate - KFB
- public void update(JpaXmlResource resource) {
+
+ public void update() {
XmlPersistence oldXmlPersistence = (this.persistence == null) ? null : this.persistence.getXmlPersistence();
- XmlPersistence newXmlPersistence = (XmlPersistence) resource.getRootObject();
- JpaResourceType newResourceType = resource.getResourceType();
-
- this.persistenceXmlResource = resource;
-
+ XmlPersistence newXmlPersistence = (XmlPersistence) this.xmlResource.getRootObject();
+ JpaResourceType newResourceType = this.xmlResource.getResourceType();
+
// 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) || (newXmlPersistence == null) || this.valuesAreDifferent(this.resourceType, newResourceType)) {
+ if ((oldXmlPersistence != newXmlPersistence)
+ || (newXmlPersistence == null)
+ || this.valuesAreDifferent(this.resourceType, newResourceType)) {
+
if (this.persistence != null) {
- this.getJpaFile(this.persistenceXmlResource.getFile()).removeRootStructureNode(this.persistenceXmlResource);
+ getJpaFile().removeRootStructureNode(this.xmlResource);
this.persistence.dispose();
- this.setPersistence(null);
+ setPersistence(null);
}
}
-
+
+ this.resourceType = newResourceType;
+
if (newXmlPersistence != null) {
if (this.persistence != null) {
this.persistence.update(newXmlPersistence);
}
else {
- this.setPersistence(this.buildPersistence(newXmlPersistence));
+ setPersistence(buildPersistence(newXmlPersistence));
+ }
+
+ JpaFile jpaFile = getJpaFile();
+ if (jpaFile == null) {
+ System.out.print("Jpa file is null");
}
- this.getJpaFile(this.persistenceXmlResource.getFile()).addRootStructureNode(this.persistenceXmlResource, this.persistence);
+ jpaFile.addRootStructureNode(this.xmlResource, this.persistence);
}
- this.resourceType = newResourceType;
}
-
+
@Override
public void postUpdate() {
super.postUpdate();
@@ -158,43 +169,53 @@ public class GenericPersistenceXml
this.persistence.postUpdate();
}
}
-
-
+
+
// ********** JpaStructureNode implementation **********
-
+
public String getId() {
// isn't actually displayed, so needs no details page
return null;
}
-
+
public JpaStructureNode getStructureNode(int textOffset) {
if (this.persistence.containsOffset(textOffset)) {
return this.persistence.getStructureNode(textOffset);
}
return this;
}
-
+
// never actually selected
public TextRange getSelectionTextRange() {
return TextRange.Empty.instance();
}
-
+
public void dispose() {
- this.persistence.dispose();
+ if (this.persistence != null) {
+ this.persistence.dispose();
+ }
+ JpaFile jpaFile = getJpaFile();
+ if (jpaFile != null) {
+ jpaFile.removeRootStructureNode(this.xmlResource);
+ }
}
-
-
+
+ protected JpaFile getJpaFile() {
+ return this.getJpaFile(this.xmlResource.getFile());
+ }
+
+
// ********** validation **********
-
+
// never actually selected
public TextRange getValidationTextRange() {
return TextRange.Empty.instance();
}
-
+
@Override
public void validate(List<IMessage> messages, IReporter reporter) {
super.validate(messages, reporter);
-
+
if (this.persistence == null) {
messages.add(
DefaultJpaValidationMessages.buildMessage(
@@ -205,8 +226,7 @@ public class GenericPersistenceXml
);
return;
}
-
+
this.persistence.validate(messages, reporter);
}
-
}
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java
index 2db76c6a46..2a77551db5 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java
@@ -103,10 +103,20 @@ public class JpaXmlResource
*/
@Override
public void eNotify(Notification notification) {
- if ( ! notification.isTouch() && this.isLoaded() && (this.resourceSet != null)) {
+ //Unload events can happen before the resource set is removed - should always react to unload events
+ if (notification.getEventType() == Notification.SET && notification.getFeatureID(null) == Resource.RESOURCE__IS_LOADED) {
+ super.eNotify(notification);
+ if (isReverting()) {
+ resourceModelReverted();
+ }
+ else {
+ resourceModelUnloaded();
+ }
+ }
+ else if ( ! notification.isTouch() && this.isLoaded() && (this.resourceSet != null)) {
super.eNotify(notification);
this.resourceModelChanged();
- }
+ }
}
/**
@@ -248,6 +258,19 @@ public class JpaXmlResource
}
}
+ protected void resourceModelReverted() {
+ for (JpaResourceModelListener listener : this.resourceModelListenerList.getListeners()) {
+ listener.resourceModelReverted(this);
+ }
+ }
+
+ protected void resourceModelUnloaded() {
+ for (JpaResourceModelListener listener : this.resourceModelListenerList.getListeners()) {
+ listener.resourceModelUnloaded(this);
+ }
+ }
+
+
// ********** cast things back to what they are in EMF **********
@SuppressWarnings("unchecked")
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/structure/JpaStructurePage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/structure/JpaStructurePage.java
index 51d2b55626..e7f7823356 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/structure/JpaStructurePage.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/views/structure/JpaStructurePage.java
@@ -27,8 +27,8 @@ import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jpt.core.JpaFile;
-import org.eclipse.jpt.core.JpaProjectManager;
import org.eclipse.jpt.core.JpaProject;
+import org.eclipse.jpt.core.JpaProjectManager;
import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.jpt.core.JptCorePlugin;
import org.eclipse.jpt.ui.internal.JptUiMessages;
@@ -83,10 +83,10 @@ public class JpaStructurePage
private final CollectionChangeListener jpaFilesListener;
+
public JpaStructurePage(
- JpaStructureView jpaStructureView,
- JpaFile jpaFile,
- JpaStructureProvider structureProvider) {
+ JpaStructureView jpaStructureView, JpaFile jpaFile, JpaStructureProvider structureProvider) {
+
this.jpaStructureView = jpaStructureView;
this.jpaFile = jpaFile;
this.jpaProject = jpaFile.getJpaProject();
@@ -99,6 +99,7 @@ public class JpaStructurePage
this.jpaFilesListener = buildJpaFilesListener();
}
+
private CollectionChangeListener buildProjectsListener() {
return new CollectionChangeListener(){
@@ -182,7 +183,7 @@ public class JpaStructurePage
@SuppressWarnings("unchecked")
void jpaFilesAdded(CollectionAddEvent event) {
for (JpaFile item : (Iterable<JpaFile>) event.getItems()) {
- if (item.getFile() == JpaStructurePage.this.file) {
+ if (item.getFile() != null && item.getFile().equals(JpaStructurePage.this.file)) {
setJpaFile(item);
break;
}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmXmlTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmXmlTests.java
index 8c5e5f2340..613f4b14c0 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmXmlTests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmXmlTests.java
@@ -64,7 +64,6 @@ public class OrmXmlTests extends ContextModelTestCase
assertNotNull(getOrmXml().getRoot());
ormResource.getContents().clear();
-
- assertNull(getOrmXml().getRoot());
+ assertNull(getOrmXml());
}
}
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/persistence/PersistenceXmlTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/persistence/PersistenceXmlTests.java
index c04c9f9853..2d41aec959 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/persistence/PersistenceXmlTests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/persistence/PersistenceXmlTests.java
@@ -50,7 +50,6 @@ public class PersistenceXmlTests extends ContextModelTestCase
assertNotNull(getPersistenceXml().getPersistence());
prm.getContents().clear();
-
- assertNull(getPersistenceXml().getPersistence());
+ assertNull(getPersistenceXml());
}
}

Back to the top