package com.technophobia.substeps.junit.launcher.model;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jdt.core.IPackageFragment;
import com.technophobia.substeps.FeatureEditorPlugin;
import com.technophobia.substeps.predicate.IsFeatureFolderPredicate;
import com.technophobia.substeps.supplier.Predicate;
public class FeatureFolderPropertyTester extends PropertyTester {
private static final String PROPERTY_NAME = "isFeatureFolder";
private final Predicate<IFolder> predicate;
public FeatureFolderPropertyTester() {
this(new IsFeatureFolderPredicate(FeatureEditorPlugin.instance().projectManager()));
}
public FeatureFolderPropertyTester(final Predicate<IFolder> predicate) {
this.predicate = predicate;
}
@Override
public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue) {
if (PROPERTY_NAME.equals(property)) {
final IFolder folder = asFolder(receiver);
if (folder != null) {
return predicate.forModel(folder);
}
}
return false;
}
private IFolder asFolder(final Object receiver) {
if (receiver instanceof IFolder) {
return (IFolder) receiver;
} else if (receiver instanceof IPackageFragment) {
return asFolder(((IPackageFragment) receiver).getResource());
} else if (receiver instanceof IAdaptable) {
return (IFolder) ((IAdaptable) receiver).getAdapter(IFolder.class);
}
FeatureEditorPlugin.instance().error(
"Unable to convert object " + receiver + " of type " + receiver.getClass().getName() + " to type "
+ IFolder.class.getName() + ". Returning null");
return null;
}
}