private void deletePackage(boolean recursive, final Filter<ArchivePath> filter, String packageName, ClassLoader classLoader) { assert filter != null : "Filter cannot be null"; final URLPackageScanner.Callback callback = new URLPackageScanner.Callback() { @Override public void classFound(String className, Asset asset) { ArchivePath classNamePath = AssetUtil.getFullPathForClassResource(className); if (!filter.include(classNamePath)) { return; } ArchivePath location = new BasicPath(getClassesPath(), classNamePath); delete(location); } }; final URLPackageScanner scanner = URLPackageScanner.newInstance(recursive, classLoader, callback, packageName); scanner.scanPackage(); }
private void handle(File file, String packageName) throws ClassNotFoundException { for (File child : file.listFiles()) { if (!child.isDirectory() && child.getName().endsWith(SUFFIX_CLASS)) { final String packagePrefix = packageName.length() > 0 ? packageName + "." : packageName; String className = packagePrefix + child.getName().substring(0, child.getName().lastIndexOf(SUFFIX_CLASS)); foundClass(className, prefix + className.replace( '.', '/' ) + SUFFIX_CLASS ); } else if (child.isDirectory() && addRecursively) { handle(child, packageName + "." + child.getName()); } } }
private void handle(Set<String> paths) throws IOException, ClassNotFoundException { for (String urlPath : paths) { log.fine("scanning: " + urlPath); File file = new File(urlPath); if (file.isDirectory()) { handle(file, packageName); } else { handleArchiveByFile(file); } } }
@Test(expected = IllegalArgumentException.class) public void shouldThrowExceptionNullPackage() { URLPackageScanner.newInstance(true, URLPackageScannerTestCase.class.getClassLoader(), new URLPackageScanner.Callback() { @Override public void classFound(String className, Asset asset) { } }, null); } }
public void scanPackage() { try { Set<String> paths = new HashSet<String>(); for (URL url : loadResources(packageNamePath)) { String urlPath = url.getFile(); urlPath = URLDecoder.decode(urlPath, "UTF-8"); if (urlPath.startsWith("file:")) { urlPath = urlPath.substring(5); } if (urlPath.indexOf('!') > 0) { urlPath = urlPath.substring(0, urlPath.indexOf('!')); } paths.add(urlPath); } handle(paths); } catch (IOException ioe) { log.log(Level.WARNING, "could not read: " + packageName, ioe); } catch (ClassNotFoundException ioe) { log.log(Level.WARNING, "Class coud not be loaded in package: " + packageName, ioe); } }
/** * Factory method to create an instance of URLPackageScanner. * * @param addRecursively flag to add child packages * @param classLoader class loader that will have classes added * @param callback Callback to invoke when a matching class is found * @param packageName Package that will be scanned * @return new instance of URLPackageScanner */ public static URLPackageScanner newInstance(boolean addRecursively, final ClassLoader classLoader, final Callback callback, final String packageName) { Validate.notNull(packageName, "Package name must be specified"); Validate.notNull(addRecursively, "AddRecursively must be specified"); Validate.notNull(classLoader, "ClassLoader must be specified"); Validate.notNull(callback, "Callback must be specified"); return new URLPackageScanner(packageName, addRecursively, classLoader, callback); }
private void handleArchiveByFile(File file) throws IOException, ClassNotFoundException { try { log.fine("archive: " + file); ZipFile zip = new ZipFile(file); Enumeration<? extends ZipEntry> entries = zip.entries(); while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); String name = entry.getName(); if (name.startsWith(prefix + packageNamePath) && name.endsWith(SUFFIX_CLASS) && (addRecursively || !name.substring((prefix + packageNamePath).length() + 1).contains("/"))) { String className = name.replace("/", ".").substring(prefix.length(), name.length() - SUFFIX_CLASS.length()); foundClass(className, name ); } } } catch (ZipException e) { throw new RuntimeException("Error handling file " + file, e); } }
public void scanPackage() { try { Set<String> paths = new HashSet<String>(); for (URL url : loadResources(packageNamePath)) { String urlPath = url.getFile(); urlPath = URLDecoder.decode(urlPath, "UTF-8"); if (urlPath.startsWith("file:")) { urlPath = urlPath.substring(5); } if (urlPath.indexOf('!') > 0) { urlPath = urlPath.substring(0, urlPath.indexOf('!')); } paths.add(urlPath); } handle(paths); } catch (IOException ioe) { log.log(Level.WARNING, "could not read: " + packageName, ioe); } catch (ClassNotFoundException ioe) { log.log(Level.WARNING, "Class coud not be loaded in package: " + packageName, ioe); } }
/** * Factory method to create an instance of URLPackageScanner. * * @param addRecursively flag to add child packages * @param classLoader class loader that will have classes added * @param callback Callback to invoke when a matching class is found * @param packageName Package that will be scanned * @return new instance of URLPackageScanner */ public static URLPackageScanner newInstance(boolean addRecursively, final ClassLoader classLoader, final Callback callback, final String packageName) { Validate.notNull(packageName, "Package name must be specified"); Validate.notNull(addRecursively, "AddRecursively must be specified"); Validate.notNull(classLoader, "ClassLoader must be specified"); Validate.notNull(callback, "Callback must be specified"); return new URLPackageScanner(packageName, addRecursively, classLoader, callback); }
private void handleArchiveByFile(File file) throws IOException, ClassNotFoundException { try { log.fine("archive: " + file); ZipFile zip = new ZipFile(file); Enumeration<? extends ZipEntry> entries = zip.entries(); while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); String name = entry.getName(); if (name.startsWith(prefix + packageNamePath) && name.endsWith(SUFFIX_CLASS) && (addRecursively || !name.substring((prefix + packageNamePath).length() + 1).contains("/"))) { String className = name.replace("/", ".").substring(prefix.length(), name.length() - SUFFIX_CLASS.length()); foundClass(className, name ); } } } catch (ZipException e) { throw new RuntimeException("Error handling file " + file, e); } }
private void deletePackage(boolean recursive, final Filter<ArchivePath> filter, String packageName, ClassLoader classLoader) { assert filter != null : "Filter cannot be null"; final URLPackageScanner.Callback callback = new URLPackageScanner.Callback() { @Override public void classFound(String className, Asset asset) { ArchivePath classNamePath = AssetUtil.getFullPathForClassResource(className); if (!filter.include(classNamePath)) { return; } ArchivePath location = new BasicPath(getClassesPath(), classNamePath); delete(location); } }; final URLPackageScanner scanner = URLPackageScanner.newInstance(recursive, classLoader, callback, packageName); scanner.scanPackage(); }
private void handle(Set<String> paths) throws IOException, ClassNotFoundException { for (String urlPath : paths) { log.fine("scanning: " + urlPath); File file = new File(urlPath); if (file.isDirectory()) { handle(file, packageName); } else { handleArchiveByFile(file); } } }
private void handle(File file, String packageName) throws ClassNotFoundException { for (File child : file.listFiles()) { if (!child.isDirectory() && child.getName().endsWith(SUFFIX_CLASS)) { final String packagePrefix = packageName.length() > 0 ? packageName + "." : packageName; String className = packagePrefix + child.getName().substring(0, child.getName().lastIndexOf(SUFFIX_CLASS)); foundClass(className, prefix + className.replace( '.', '/' ) + SUFFIX_CLASS ); } else if (child.isDirectory() && addRecursively) { handle(child, packageName + "." + child.getName()); } } }
private void addPackage(final boolean recursive, final Filter<ArchivePath> filter, final ClassLoader classLoader, String packageName) { // precondition checks Validate.notNull(packageName, "Package doesn't exist"); final URLPackageScanner.Callback callback = new URLPackageScanner.Callback() { @Override public void classFound(String className, Asset asset) { ArchivePath classNamePath = AssetUtil.getFullPathForClassResource(className); if (!filter.include(classNamePath)) { return; } //Asset asset = new ClassLoaderAsset(classNamePath.get().substring(1), classLoader); ArchivePath location = new BasicPath(getClassesPath(), classNamePath); add(asset, location); } }; final URLPackageScanner scanner = URLPackageScanner.newInstance(recursive, classLoader, callback, packageName); scanner.scanPackage(); }
private void addPackage(final boolean recursive, final Filter<ArchivePath> filter, final ClassLoader classLoader, String packageName) { // precondition checks Validate.notNull(packageName, "Package doesn't exist"); final URLPackageScanner.Callback callback = new URLPackageScanner.Callback() { @Override public void classFound(String className, Asset asset) { ArchivePath classNamePath = AssetUtil.getFullPathForClassResource(className); if (!filter.include(classNamePath)) { return; } //Asset asset = new ClassLoaderAsset(classNamePath.get().substring(1), classLoader); ArchivePath location = new BasicPath(getClassesPath(), classNamePath); add(asset, location); } }; final URLPackageScanner scanner = URLPackageScanner.newInstance(recursive, classLoader, callback, packageName); scanner.scanPackage(); }
}; URLPackageScanner scanner = URLPackageScanner.newInstance( true, cl, testClass.getJavaClass().getPackage().getName()); scanner.scanPackage();