001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.ui.views.navigator;
011:
012: import java.util.ArrayList;
013: import java.util.Iterator;
014: import java.util.List;
015:
016: import org.eclipse.core.resources.IResource;
017: import org.eclipse.core.runtime.IAdaptable;
018: import org.eclipse.jface.viewers.IStructuredSelection;
019: import org.eclipse.jface.viewers.StructuredSelection;
020:
021: /**
022: * Provides utilities for checking the validity of selections.
023: * <p>
024: * This class provides static methods only; it is not intended to be instantiated
025: * or subclassed.
026: * @since 2.0
027: * </p>
028: */
029: public class ResourceSelectionUtil {
030: /* (non-Javadoc)
031: * Private constructor to block instantiation.
032: */
033: private ResourceSelectionUtil() {
034: }
035:
036: /**
037: * Returns whether the types of the resources in the given selection are among
038: * the specified resource types.
039: *
040: * @param selection the selection
041: * @param resourceMask resource mask formed by bitwise OR of resource type
042: * constants (defined on <code>IResource</code>)
043: * @return <code>true</code> if all selected elements are resources of the right
044: * type, and <code>false</code> if at least one element is either a resource
045: * of some other type or a non-resource
046: * @see IResource#getType()
047: */
048: public static boolean allResourcesAreOfType(
049: IStructuredSelection selection, int resourceMask) {
050: Iterator resources = selection.iterator();
051: while (resources.hasNext()) {
052: Object next = resources.next();
053: if (!(next instanceof IResource)) {
054: return false;
055: }
056: if (!resourceIsType((IResource) next, resourceMask)) {
057: return false;
058: }
059: }
060: return true;
061: }
062:
063: /**
064: * Returns the selection adapted to IResource. Returns null
065: * if any of the entries are not adaptable.
066: *
067: * @param selection the selection
068: * @param resourceMask resource mask formed by bitwise OR of resource type
069: * constants (defined on <code>IResource</code>)
070: * @return IStructuredSelection or null if any of the entries are not adaptable.
071: * @see IResource#getType()
072: */
073: public static IStructuredSelection allResources(
074: IStructuredSelection selection, int resourceMask) {
075: Iterator adaptables = selection.iterator();
076: List result = new ArrayList();
077: while (adaptables.hasNext()) {
078: Object next = adaptables.next();
079: if (next instanceof IAdaptable) {
080: Object resource = ((IAdaptable) next)
081: .getAdapter(IResource.class);
082: if (resource == null) {
083: return null;
084: } else if (resourceIsType((IResource) resource,
085: resourceMask)) {
086: result.add(resource);
087: }
088: } else {
089: return null;
090: }
091: }
092: return new StructuredSelection(result);
093:
094: }
095:
096: /**
097: * Returns whether the type of the given resource is among the specified
098: * resource types.
099: *
100: * @param resource the resource
101: * @param resourceMask resource mask formed by bitwise OR of resource type
102: * constants (defined on <code>IResource</code>)
103: * @return <code>true</code> if the resources has a matching type, and
104: * <code>false</code> otherwise
105: * @see IResource#getType()
106: */
107: public static boolean resourceIsType(IResource resource,
108: int resourceMask) {
109: return (resource.getType() & resourceMask) != 0;
110: }
111:
112: }
|