package com.oopdev.io.loader.finder.classes.loader; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Logger; import com.oopdev.io.loader.finder.classes.IOClassPathFinder; import com.oopdev.io.loader.finder.classes.IOJarFinder; import com.oopdev.io.loader.finder.classes.IOSystemClassLoader; /** * * @author Kamil BUKUM * */ public class IOClassLoader { private static Logger logger = Logger.getLogger(IOClassLoader.class.getName()); /** * * @param library jar files * @param packageName * @return allClasses in jar files by packageName * <pre> * <b>Desciription:The find classes by package name in libraries</b> * </pre> */ public static List<Class<?>> getClasses(List<File> libFiles, String packageName) { List<Class<?>> classList = new ArrayList<Class<?>>(); for (File file : libFiles) { classList.addAll(getClasses(file, packageName)); } return (classList); } /** * * @param library jar file * @return allClasses in jar file * <pre> * <b>Desciription:The find classes in libraries</b> * </pre> */ public static List<Class<?>> getClasses(List<File> libFiles) { return getClasses(libFiles, ""); } /** * * @param packageName * @return allClasses by packageName * <pre> * <b>Desciription:The find classes by packageName in classpath and all libraries</b> * </pre> */ public static List<Class<?>> getClasses(String packageName) { List<Class<?>> classList = new ArrayList<Class<?>>(); if (packageName == null) packageName = ""; List<File> files = IOClassPathFinder.getLibDirectories(packageName); for (File file : files) { classList.addAll(getClasses(file, packageName)); } return classList; } /** * * @return All Classes * <pre> * <b>Desciription:The find classes in classpath and all libraries</b> * </pre> */ public static List<Class<?>> getClasses() { return getClasses(""); } /** * * @param library jar file * @param packageName * @return allClasses in library by packageName * <pre> * <b>Desciription:The find classes by package name in a library</b> * </pre> */ public static List<Class<?>> getClasses(File libFile, String packageName) { List<Class<?>> classList = new ArrayList<Class<?>>(); if (packageName == null) packageName = ""; String filePath = libFile.getPath(); if (filePath.endsWith(".jar")) { IOJarFinder finder = IOJarFinder.getInstance(libFile, packageName); if (finder != null) classList.addAll(finder.getClasses()); } else { IOSystemClassLoader finder = IOSystemClassLoader.getInstance( libFile, packageName); if (finder != null) classList.addAll(finder.getClasses()); } return classList; } /** * * @param libFile * @return allClasses in library * <pre> * <b>Desciription:The find classes in a library</b> * </pre> */ public static List<Class<?>> getClasses(File libFile) { return getClasses(libFile, ""); } /** * * @param packageNames * @return AllClasses in packageNames * <pre> * <b>Desciription:The find classes by package name in classpath and libraries</b> * </pre> */ public static List<Class<?>> getAllClasses(String packageNames){ List<String> realPackageNames = new ArrayList<String>(); if (packageNames == null) { logger.warning("Package Name is Not Define ! Because Of Server initialize can take long time ..."); realPackageNames.add(""); } else { List<String> packNames = Arrays.asList(packageNames.split(",")); if (packNames.size() > 0) { for (int i = 0; i < packNames.size(); i++) { boolean isExist = false; for (int j = 1; j < packNames.size(); j++) { if (i != j) { if (packNames.get(i).contains(packNames.get(j))) { isExist = true; break; } } } if (!isExist) { realPackageNames.add(packNames.get(i)); } } } else { realPackageNames.add(""); } } List<Class<?>> ioJarClassList = new ArrayList<Class<?>>(); for (String packageName : realPackageNames) { ioJarClassList.addAll(getClasses(packageName)); } return ioJarClassList; } }