package org.esmerilprogramming.overtown.scanner; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.regex.Pattern; import org.jboss.logging.Logger; public class ClassFileVisitor extends SimpleFileVisitor<Path> { private static final Logger LOGGER = Logger.getLogger(ClassFileVisitor.class); private ScannerResult result; private ClassLoader classLoader; private Pattern classPatern = Pattern.compile("\\.class$"); private String pathToReplace = null; public ClassFileVisitor(ClassLoader classLoader) { this.classLoader = classLoader; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (isClass(file)) { LOGGER.info(file.toString()); try { // System.out.println("scanning file: " + file ); // System.out.println("scanning as package: " + asPackageClass(file) ); Class<?> loadedClass = classLoader.loadClass(asPackageClass(file)); //getResult().addClass(loadedClass); } catch (ClassNotFoundException e) { LOGGER.error(e.getMessage()); } } return super.visitFile(file, attrs); } public boolean isClass(Path file) { return classPatern.matcher(file.getFileName().toString()).find(); } public String asPackageClass(Path file) { String strPackage = file.toString(); if(getPathToReplace() != null){ strPackage = strPackage.replace( getPathToReplace() , ""); } String asPackaged = strPackage.replaceAll("\\/|\\\\", ".").replace(".class", ""); if( asPackaged.charAt(0) == ".".charAt(0)) asPackaged = asPackaged.substring(1); return asPackaged; } public ScannerResult getResult() { if (result == null) { result = new ScannerResult(); } return result; } public String getPathToReplace() { return pathToReplace; } public void setPathToReplace(String pathToReplace) { this.pathToReplace = pathToReplace; } }