[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$
+ }
+ }
+ }
+
}