/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ui.views.navigator;

import java.util.*;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;

/**
 * Provides utilities for checking the validity of selections.
 * <p>
 * This class provides static methods only; it is not intended to be instantiated
 * or subclassed.
 * @since 2.0
 * </p>
 */
public class ResourceSelectionUtil {
/* (non-Javadoc)
 * Private constructor to block instantiation.
 */
private ResourceSelectionUtil(){
}
/**
 * Returns whether the types of the resources in the given selection are among 
 * the specified resource types.
 * 
 * @param selection the selection
 * @param resourceMask resource mask formed by bitwise OR of resource type
 *   constants (defined on <code>IResource</code>)
 * @return <code>true</code> if all selected elements are resources of the right
 *  type, and <code>false</code> if at least one element is either a resource
 *  of some other type or a non-resource
 * @see IResource#getType()
 */
public static boolean allResourcesAreOfType(IStructuredSelection selection, int resourceMask) {
	Iterator resources = selection.iterator();
	while (resources.hasNext()) {
		Object next = resources.next();
		if (!(next instanceof IResource))
			return false;
		if (!resourceIsType((IResource)next, resourceMask))
			return false;
	}
	return true;
}

/**
 * Returns the selection adapted to IResource. Returns null
 * if any of the entries are not adaptable.
 * 
 * @param selection the selection
 * @param resourceMask resource mask formed by bitwise OR of resource type
 *   constants (defined on <code>IResource</code>)
 * @return IStructuredSelection or null if any of the entries are not adaptable.
 * @see IResource#getType()
 */
public static IStructuredSelection allResources(IStructuredSelection selection, int resourceMask) {
	Iterator adaptables = selection.iterator();
	List result = new ArrayList();
	while (adaptables.hasNext()) {
		Object next = adaptables.next();
		if(next instanceof IAdaptable){
			Object resource = ((IAdaptable) next).getAdapter(IResource.class);
			if(resource == null)
				return null;
			else if (resourceIsType((IResource)resource, resourceMask))
				result.add(resource);
		}
		else	
			return null;	
	}
	return new StructuredSelection(result);

}

/**
 * Returns whether the type of the given resource is among the specified 
 * resource types.
 * 
 * @param resource the resource
 * @param resourceMask resource mask formed by bitwise OR of resource type
 *   constants (defined on <code>IResource</code>)
 * @return <code>true</code> if the resources has a matching type, and 
 *   <code>false</code> otherwise
 * @see IResource#getType()
 */
public static boolean resourceIsType(IResource resource, int resourceMask) {
	return (resource.getType() & resourceMask) != 0;
}

}
