package com.manydesigns.portofino.stripes; import net.sourceforge.stripes.vfs.VFS; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.List; /** * @author Paolo Predonzani - paolo.predonzani@manydesigns.com * @author Angelo Lupo - angelo.lupo@manydesigns.com * @author Giampiero Granatella - giampiero.granatella@manydesigns.com * @author Alessio Stalla - alessio.stalla@manydesigns.com */ public class ResolverUtil<T> extends net.sourceforge.stripes.util.ResolverUtil<T> { public static final Logger logger = LoggerFactory.getLogger(ResolverUtil.class); protected String[] extensions = { ".class" }; @Override public ResolverUtil<T> find(Test test, String packageName) { String path = getPackagePath(packageName); ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try { ClassLoader classLoader = getClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); logger.debug("Listing path {} using classloader {}", path, classLoader); List<String> children = VFS.getInstance().list(path); logger.debug("Found: {}", children); for (String child : children) { for(String extension : extensions) { if (child.endsWith(extension)) { addIfMatching(test, child); break; } } } } catch (IOException ioe) { logger.warn("Could not read package: " + packageName, ioe); } finally { Thread.currentThread().setContextClassLoader(contextClassLoader); } return this; } public String[] getExtensions() { return extensions; } public void setExtensions(String... extensions) { this.extensions = extensions; } }