/******************************************************************************* * Copyright (c) 2005, 2006 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 *******************************************************************************/ package org.eclipse.core.internal.propertytester; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.mapping.ResourceMapping; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.QualifiedName; /** * A property tester for various properties of resource mappings * * @since 3.2 */ public class ResourceMappingPropertyTester extends ResourcePropertyTester { public boolean test(Object receiver, String method, Object[] args, Object expectedValue) { if (!(receiver instanceof ResourceMapping)) return false; if (!method.equals(PROJECT_PERSISTENT_PROPERTY)) return false; //Note: we currently say the test is satisfied if any project associated //with the mapping satisfies the test. IProject[] projects= ((ResourceMapping)receiver).getProjects(); if (projects.length == 0) return false; String propertyName; String expectedVal; if (args.length == 0) { propertyName= toString(expectedValue); expectedVal= null;//any value will do } else if (args.length == 1) { propertyName= toString(args[0]); expectedVal= null;//any value will do } else { propertyName= toString(args[0]); expectedVal= toString(args[1]); } QualifiedName key= toQualifedName(propertyName); boolean found= false; for (int i= 0; i < projects.length; i++) { try { Object actualVal= projects[i].getPersistentProperty(key); //the value is not set, so keep looking on other projects if (actualVal == null) continue; //record that we have found at least one value found= true; //expected value of null means we expect *any* value, rather than expecting no value if (expectedVal == null) continue; //if the value we find does not match, then the property is not satisfied if (!expectedVal.equals(actualVal.toString())) return false; } catch (CoreException e) { // ignore } } //if any projects had the property set, the condition is satisfied return found; } }