[219303] No notifications after editing web 2.5 models using model provider - fixed. Added listeners were disposed.
diff --git a/plugins/org.eclipse.jst.jee.web/web/org/eclipse/jst/jee/model/internal/Web25MergedModelProviderFactory.java b/plugins/org.eclipse.jst.jee.web/web/org/eclipse/jst/jee/model/internal/Web25MergedModelProviderFactory.java index 927f98a..2cfae2e 100644 --- a/plugins/org.eclipse.jst.jee.web/web/org/eclipse/jst/jee/model/internal/Web25MergedModelProviderFactory.java +++ b/plugins/org.eclipse.jst.jee.web/web/org/eclipse/jst/jee/model/internal/Web25MergedModelProviderFactory.java
@@ -10,11 +10,14 @@ ***********************************************************************/ package org.eclipse.jst.jee.model.internal; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import org.eclipse.core.resources.IProject; import org.eclipse.jst.j2ee.model.IModelProvider; import org.eclipse.jst.j2ee.model.IModelProviderFactory; +import org.eclipse.jst.j2ee.model.IModelProviderListener; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; /** @@ -28,12 +31,27 @@ public IModelProvider create(IProject project) { IModelProvider result = getResource(project); if(result == null || ((Web25MergedModelProvider)result).isDisposed()){ + //Transport listeners so they are not lost. + Collection<IModelProviderListener> listeners = new ArrayList<IModelProviderListener>(); + if (result != null){ + listeners = ( (Web25MergedModelProvider)result).getListeners(); + } result = new Web25MergedModelProvider(project); + + addListeners(result, listeners); addResource(project, result); } return result; } + private void addListeners(IModelProvider modelProvider, + Collection<IModelProviderListener> listeners) { + for (IModelProviderListener iModelProviderListener : listeners) { + if (iModelProviderListener != null) + modelProvider.addListener(iModelProviderListener); + } + } + public IModelProvider create(IVirtualComponent component) { return create(component.getProject()); }
diff --git a/plugins/org.eclipse.jst.jee/common/org/eclipse/jst/jee/model/internal/common/AbstractMergedModelProvider.java b/plugins/org.eclipse.jst.jee/common/org/eclipse/jst/jee/model/internal/common/AbstractMergedModelProvider.java index 7eedffd..ba9c21f 100644 --- a/plugins/org.eclipse.jst.jee/common/org/eclipse/jst/jee/model/internal/common/AbstractMergedModelProvider.java +++ b/plugins/org.eclipse.jst.jee/common/org/eclipse/jst/jee/model/internal/common/AbstractMergedModelProvider.java
@@ -196,7 +196,7 @@ */ protected abstract IModelProvider loadDeploymentDescriptorModel() throws CoreException; - protected Collection<IModelProviderListener> getListeners() { + public Collection<IModelProviderListener> getListeners() { if (listeners == null) listeners = new ArrayList<IModelProviderListener>(); return listeners;