// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de // Copyright (c) 2011 by Alejandro Serrano package net.sf.eclipsefp.haskell.core.expressions; import java.lang.reflect.Method; import net.sf.eclipsefp.haskell.core.project.HaskellResource; import org.eclipse.core.expressions.PropertyTester; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.core.runtime.Platform; /** * <p> * For plugins that have to check some properties of elements in the workspace, * e.g. whether they are the project executable or the source folder of a * Haskell project. * </p> * * <p> * This is used in the XML Expression language. * </p> * * @author Leif Frenzel * @author Alejandro Serrano */ public class HaskellPropertyTester extends PropertyTester implements IAdapterFactory { // interface methods of PropertyTester // //////////////////////////////////// @Override public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue) { Object resource = Platform.getAdapterManager() .getAdapter(receiver, HaskellResource.class); if (null == resource) { return false; } try { Method method = resource.getClass().getMethod(property); return ( ( Boolean )method.invoke( resource ) ).booleanValue(); } catch (Exception e) { return false; } } @Override public Object getAdapter(final Object adaptable, @SuppressWarnings("rawtypes") final Class adapter) { if ( adaptable instanceof IResource && adapter.equals(HaskellResource.class)) { return new HaskellResource((IResource) adaptable); } return null; } @Override @SuppressWarnings("rawtypes") public Class[] getAdapterList() { return new Class[] {HaskellResource.class}; } }