diff options
author | pfullbright | 2010-01-21 23:27:29 +0000 |
---|---|---|
committer | pfullbright | 2010-01-21 23:27:29 +0000 |
commit | 6e4e87ff4f1df4c9cd8112f49f171803098abeed (patch) | |
tree | 4746c98124a11b59e333cb4da6c3c539fe872c49 /jpa | |
parent | 951c9a1491b74a8bde07813cfa39c876d613dc8f (diff) | |
download | webtools.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')
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 ********** |