package org.radrails.server.internal.ui.launching; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.radrails.server.core.launching.IRailsAppLaunchConfigurationConstants; public class LaunchCleaner implements IResourceChangeListener { public void resourceChanged(IResourceChangeEvent event) { if (event == null) return; IResourceDelta delta = event.getDelta(); checkDelta(delta); } private void checkDelta(IResourceDelta delta) { if (delta == null) return; IResource resource = delta.getResource(); if (!(resource instanceof IWorkspaceRoot) && !(resource instanceof IProject)) return; // don't dive any deeper than project if (resource instanceof IProject) { if (IResourceDelta.REMOVED != delta.getKind()) return; IPath path = delta.getFullPath(); String name = path.lastSegment(); projectRemoved(name); } IResourceDelta[] children = delta.getAffectedChildren(); for (int i = 0; i < children.length; i++) { checkDelta(children[i]); } } private void projectRemoved(String name) { try { ILaunchConfigurationType type = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(IRailsAppLaunchConfigurationConstants.LAUNCH_TYPE_ID); ILaunchConfiguration[] configs = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations(type); for (int i = 0; i < configs.length; i++) { String projectName = configs[i].getAttribute(IRailsAppLaunchConfigurationConstants.PROJECT_NAME, (String) null); if (projectName != null && projectName.equals(name)) { configs[i].delete(); } } } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }