[407089] Server status is not set to Republish when deleting a web
project, but the references to the project are not removed in the
refactoring dialog
diff --git a/plugins/org.eclipse.jst.j2ee/ltkbasedrefactoring/org/eclipse/jst/javaee/ltk/core/participant/JavaEEServerRefRefactorParticipant.java b/plugins/org.eclipse.jst.j2ee/ltkbasedrefactoring/org/eclipse/jst/javaee/ltk/core/participant/JavaEEServerRefRefactorParticipant.java
index 88dbfb2..6eaff9d 100644
--- a/plugins/org.eclipse.jst.j2ee/ltkbasedrefactoring/org/eclipse/jst/javaee/ltk/core/participant/JavaEEServerRefRefactorParticipant.java
+++ b/plugins/org.eclipse.jst.j2ee/ltkbasedrefactoring/org/eclipse/jst/javaee/ltk/core/participant/JavaEEServerRefRefactorParticipant.java
@@ -109,12 +109,46 @@
 				}
 			}
 			IModule[] modsToRemove = tmpList.toArray(new IModule[tmpList.size()]);
+			// If modsToRemove is empty, that means that the server does not have the affected project deployed, or
+			// the affected project is not a top-level module (for example, and EAR, or stand-alone WAR), but we 
+			// need to check if the affected project is a child of a top-level module. 
 			if( modsToRemove.length > 0 ) 
 				change.add(new RemoveProjectFromServersChange(modsToRemove, allServers[i]));
+			else if (hasParentInServer(projectToDelete, allServers[i], pm)){
+					change.add(new RefreshServerChange(allServers[i]));
+			}
 		}
 		return change;
 	}	
 	
+	private boolean hasParentInServer(IProject project, IServer server, IProgressMonitor pm) {
+		IModule[] modules = ServerUtil.getModules(project);
+		if (modules == null || modules.length == 0){
+			return false;
+		}
+		IModule[] parents = null;
+		boolean parentFound = false;
+		for (IModule module:modules){
+			try {
+				parents = server.getRootModules(module, pm);
+			} catch (CoreException e) {
+				org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin.logError(e);
+			}
+
+			if (parents == null || parents.length == 0){
+				return false;
+			}
+			for (IModule parent:parents){
+				if (!parent.equals(module) && ServerUtil.containsModule(server, parent, pm)){
+					parentFound = true;
+					break;
+				}
+			}			
+		}
+		return parentFound;
+	}
+
+	
 	public class RemoveProjectFromServersChange extends Change {
 
 		private IModule[] modules;
@@ -153,4 +187,27 @@
 		}
 		
 	}
+	
+	public class RefreshServerChange extends RemoveProjectFromServersChange{
+
+		private IServer server;
+		
+		public RefreshServerChange(IServer server){
+			super(null, server);
+			this.server = server;
+		}
+
+		@Override
+		public Change perform(IProgressMonitor progressMonitor) throws CoreException {
+			IServerWorkingCopy wc = null;
+
+			wc = server.createWorkingCopy();
+			if (wc != null) {
+				wc.saveAll(true, null);
+			}					
+			return null;
+		}
+
+	}	
+	
 }