Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
path: root/jpa
diff options
context:
space:
mode:
authorpfullbright2010-01-21 23:27:29 +0000
committerpfullbright2010-01-21 23:27:29 +0000
commit6e4e87ff4f1df4c9cd8112f49f171803098abeed (patch)
tree4746c98124a11b59e333cb4da6c3c539fe872c49 /jpa
parent951c9a1491b74a8bde07813cfa39c876d613dc8f (diff)
downloadwebtools.dali-6e4e87ff4f1df4c9cd8112f49f171803098abeed.tar.gz
webtools.dali-6e4e87ff4f1df4c9cd8112f49f171803098abeed.tar.xz
webtools.dali-6e4e87ff4f1df4c9cd8112f49f171803098abeed.zip
Partial fix for model disconnect on resource unload
Diffstat (limited to 'jpa')
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/JpaResourceModelListener.java2
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/AbstractJpaProject.java25
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/resource/xml/JpaXmlResource.java18
3 files changed, 34 insertions, 11 deletions
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 742d79e873..60fd535418 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
@@ -24,4 +24,6 @@ public interface JpaResourceModelListener
extends EventListener
{
void resourceModelChanged(JpaResourceModel jpaResourceModel);
+
+ void resourceModelUnloaded(JpaResourceModel jpaResourceModel);
}
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 bc36be9082..3d22ef1f9b 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
@@ -15,7 +15,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Vector;
-
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -79,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;
@@ -1305,25 +1305,34 @@ public abstract class AbstractJpaProject
this.updater.stop();
this.dataSource.dispose();
}
-
-
+
+
// ********** resource model listener **********
-
- protected class DefaultResourceModelListener implements JpaResourceModelListener {
+
+ protected class DefaultResourceModelListener
+ implements JpaResourceModelListener
+ {
protected DefaultResourceModelListener() {
super();
}
+
public void resourceModelChanged(JpaResourceModel jpaResourceModel) {
// String msg = Thread.currentThread() + " resource model change: " + jpaResourceModel;
// System.out.println(msg);
// new Exception(msg).printStackTrace(System.out);
AbstractJpaProject.this.synchronizeContextModel(jpaResourceModel);
}
+
+ public void resourceModelUnloaded(JpaResourceModel jpaResourceModel) {
+ IFile file = WorkbenchResourceHelper.getFile((JpaXmlResource)jpaResourceModel);
+ AbstractJpaProject.this.removeJpaFile(file);
+ AbstractJpaProject.this.addJpaFile(file);
+ }
}
-
-
+
+
// ********** resource events **********
-
+
// TODO need to do the same thing for external projects and compilation units
public void projectChanged(IResourceDelta delta) {
if (delta.getResource().equals(this.getProject())) {
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 87e4af9f39..d14342ebd0 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
@@ -66,13 +66,14 @@ public class JpaXmlResource
this.rootTranslator = rootTranslator;
this.resourceModelListenerList = new ListenerList<JpaResourceModelListener>(JpaResourceModelListener.class);
}
-
+
+
//296544 - override this to avoid internet access finding the schema during tests
@Override
public EntityResolver getEntityResolver() {
return J2EEXmlDtDEntityResolver.INSTANCE;
}
-
+
public IContentType getContentType() {
return this.contentType;
}
@@ -105,9 +106,14 @@ public class JpaXmlResource
if ( ! notification.isTouch() && this.isLoaded() && (this.resourceSet != null)) {
super.eNotify(notification);
this.resourceModelChanged();
+ }
+ //Unload events can happen before the resource set is removed - should always react to unload events
+ else if (notification.getEventType() == Notification.SET && notification.getFeatureID(null) == Resource.RESOURCE__IS_LOADED) {
+ super.eNotify(notification);
+ this.resourceModelUnloaded();
}
}
-
+
/**
* we could use this method to suppress some notifications; or we could just
* check whether 'resourceSet' is 'null' (which is what we do)
@@ -247,6 +253,12 @@ public class JpaXmlResource
}
}
+ protected void resourceModelUnloaded() {
+ for (JpaResourceModelListener listener : this.resourceModelListenerList.getListeners()) {
+ listener.resourceModelUnloaded(this);
+ }
+ }
+
// ********** cast things back to what they are in EMF **********

Back to the top