package org.jboss.tools.playground.maven.internal.project; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IMarkerDelta; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.m2e.core.internal.IMavenConstants; import org.eclipse.m2e.core.internal.Messages; public class OutOfDateConfigurationMarker implements IResourceDeltaVisitor { List<IProject> outOfDateProjects = new ArrayList<IProject>(); @Override public boolean visit(IResourceDelta delta) throws CoreException { switch (delta.getKind()) { case IResourceDelta.ADDED: case IResourceDelta.CHANGED: int flags = delta.getFlags(); if ((flags & IResourceDelta.MARKERS) != 0) { IResource res = delta.getResource(); if (res == null) { return true; } IProject project = res.getProject(); if (project == null || !isMavenProject(project) || outOfDateProjects.contains(project)) { return false; } IMarkerDelta[] markers = delta.getMarkerDeltas(); boolean hasOutOfDateMarker = findOutOfDateMarkers(markers); if (hasOutOfDateMarker) { outOfDateProjects.add(project); } return false; } break; default: break; } return true; // visit the children } private boolean findOutOfDateMarkers(IMarkerDelta[] markers) throws CoreException { if (markers != null && markers.length > 0) { for (IMarkerDelta markerDelta : markers) { IMarker marker = markerDelta.getMarker(); if (marker.exists()) { String message = (String) marker.getAttribute(IMarker.MESSAGE); if (Messages.ProjectConfigurationUpdateRequired.equals(message)) { return true; } } } } return false; } private boolean isMavenProject(IProject project) throws CoreException { return project != null && project.isAccessible() && project.hasNature(IMavenConstants.NATURE_ID); } }