package org.bndtools.builder.jobs.newproject; import java.util.LinkedList; import java.util.List; import org.bndtools.api.BndtoolsConstants; import org.bndtools.api.ILogger; import org.bndtools.api.Logger; 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.IResourceDeltaVisitor; import org.eclipse.core.runtime.CoreException; public class NewProjectResourceListener implements IResourceChangeListener { private static final ILogger logger = Logger.getLogger(NewProjectResourceListener.class); public void resourceChanged(IResourceChangeEvent event) { IResourceDelta delta = event.getDelta(); if (delta == null) return; final List<IProject> newProjects = new LinkedList<IProject>(); try { delta.accept(new IResourceDeltaVisitor() { public boolean visit(IResourceDelta delta) throws CoreException { if (delta.getFlags() == IResourceDelta.MARKERS) return false; // ignore marker-only deltas. IResource resource = delta.getResource(); if (resource.getType() == IResource.ROOT) return true; if (resource.getType() == IResource.PROJECT) { IProject project = (IProject) resource; if (project.isOpen() && project.hasNature(BndtoolsConstants.NATURE_ID) && ((delta.getKind() & IResourceDelta.ADDED) != 0)) { newProjects.add(project); } } return false; } }); for (IProject project : newProjects) { AdjustClasspathsForNewProjectJob adjustClasspathsJob = new AdjustClasspathsForNewProjectJob(project); adjustClasspathsJob.setSystem(true); adjustClasspathsJob.schedule(); } } catch (CoreException e) { logger.logError("An error occurred while analysing the resource change", e); } } }