package org.pitest.mutationtest.commandline;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.Set;
import org.pitest.functional.F;
import org.pitest.functional.FCollection;
import org.pitest.functional.predicate.Predicate;
import org.pitest.mutationtest.config.PluginServices;
import org.pitest.plugin.ClientClasspathPlugin;
import org.pitest.util.PitError;
public class PluginFilter implements Predicate<String> {
private final Set<String> includedClassPathElement = new HashSet<String>();
public PluginFilter(final PluginServices plugin) {
FCollection.mapTo(plugin.findClientClasspathPlugins(), classToLocation(),
this.includedClassPathElement);
}
private static F<ClientClasspathPlugin, String> classToLocation() {
return new F<ClientClasspathPlugin, String>() {
@Override
public String apply(final ClientClasspathPlugin a) {
try {
return new File(a.getClass().getProtectionDomain().getCodeSource()
.getLocation().toURI()).getCanonicalPath();
} catch (final IOException ex) {
throw createPitErrorForExceptionOnClass(ex, a);
} catch (final URISyntaxException ex) {
throw createPitErrorForExceptionOnClass(ex, a);
}
}
private PitError createPitErrorForExceptionOnClass(final Exception ex,
final ClientClasspathPlugin clazz) {
return new PitError("Error getting location of class " + clazz, ex);
}
};
}
@Override
public Boolean apply(final String a) {
return this.includedClassPathElement.contains(a);
}
}