/*******************************************************************************
 * Copyright (c) 2000, 2015 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *     Alexander Kurtakov <akurtako@redhat.com> - Bug 459343
 *******************************************************************************/
package org.eclipse.core.tests.resources;

import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.junit.Assert;

public class ResourceVisitorVerifier extends Assert implements IResourceVisitor {
	Set<IResource> expected;
	StringBuffer message;
	boolean success = true;
	boolean verified = false;

	public ResourceVisitorVerifier() {
		super();
		reset();
	}

	public void addExpected(IResource resource) {
		expected.add(resource);
	}

	public void addExpected(IResource[] resources) {
		for (IResource resource : resources) {
			expected.add(resource);
		}
	}

	@Override
	public boolean visit(IResource resource) {
		boolean included = expected.remove(resource);
		if (!included) {
			success = false;
			log(resource.getFullPath() + " was not expected.");
		}
		return true;
	}

	private void log(String text) {
		message.append("\n" + text);
	}

	private void verify() {
		if (verified) {
			return;
		}
		// Add messages for the resources which weren't visited but were expected.
		for (IResource resource : expected) {
			success = false;
			log(resource.getFullPath() + " was not visited.");
		}
		verified = true;
	}

	public boolean isValid() {
		verify();
		return success;
	}

	public String getMessage() {
		return message.toString();
	}

	public void reset() {
		expected = new HashSet<>();
		message = new StringBuffer();
		verified = false;
	}
}
