/************************************************************************************* * Copyright (c) 2014-2015 Red Hat, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * JBoss by Red Hat - Initial implementation. ************************************************************************************/ package org.eclipse.m2e.core.ui.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; /** * Detects Out-Of-Date project configuration {@link IMarker}s on projects * * @author Fred Bricon */ public class OutOfDateConfigurationDeltaVisitor implements IResourceDeltaVisitor { List<IProject> outOfDateProjects = new ArrayList<>(); @Override public boolean visit(IResourceDelta delta) throws CoreException { switch(delta.getKind()) { 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 = containsOutOfDateMarkers(markers); if(hasOutOfDateMarker) { outOfDateProjects.add(project); } return false; } return true; default: break; } return false; // visit the children } private boolean containsOutOfDateMarkers(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); } }