[255321] EAR Deployment Descriptor was not refreshing on library copy.
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ear5ContentProvider.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ear5ContentProvider.java index a902a34..8b5bc23 100644 --- a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ear5ContentProvider.java +++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ear5ContentProvider.java
@@ -13,9 +13,14 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResourceChangeEvent; +import org.eclipse.core.resources.IResourceDelta; +import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IPath; @@ -197,4 +202,52 @@ protected AbstractGroupProvider getNewContentProviderInstance(IProject project) { return new GroupEARProvider((Application) getCachedModelProvider(project).getModelObject(), (EARVirtualComponent)ComponentCore.createComponent(project)); } + + public EarLibVisitor getVisitor() { + return new EarLibVisitor(); + } + + protected class EarLibVisitor implements IResourceDeltaVisitor { + + private Set<IProject> projects = new HashSet<IProject>(); + + public boolean visit(IResourceDelta delta) throws CoreException { + IResourceDelta[] affectedChildren = delta.getAffectedChildren(IResourceDelta.ADDED | IResourceDelta.REMOVED | IResourceDelta.REPLACED); + if (affectedChildren != null){ + for (int i = 0; i < affectedChildren.length; i++) { + if (affectedChildren[i].getResource() != null && affectedChildren[i].getResource().getName() != null + && affectedChildren[i].getResource().getName().toLowerCase().endsWith(".jar")){ //$NON-NLS-1$ + projects.add(affectedChildren[i].getResource().getProject()); + } + } + } + return true; + } + + protected Set<IProject> getChangedProject() { + return projects; + } + + } + + public void resourceChanged(IResourceChangeEvent event) { + super.resourceChanged(event); + if (event.getType() == IResourceChangeEvent.POST_CHANGE){ + EarLibVisitor visitor = getVisitor(); + if (visitor == null){ + return; + } + try { + event.getDelta().accept(visitor); + Set<IProject> changedProject = visitor.getChangedProject(); + for (IProject project : changedProject) { + projectChanged(project); + } + + } catch (CoreException e) { + JEEUIPlugin.logError("Could not refresh changed project.", e); //$NON-NLS-1$ + } + } + } + }