Package com.astav.jsontojava.classmanager

Source Code of com.astav.jsontojava.classmanager.ImportClassManager

package com.astav.jsontojava.classmanager;

import com.google.common.collect.Lists;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Collection;
import java.util.List;

/**
* User: Astav
* Date: 10/21/12
*/
public class ImportClassManager extends BaseClassManager {
    public static final String PACKAGE_SEPERATOR = ".";
    public static final String REPLACE_PACKAGE_SEPERATOR = "\\" + PACKAGE_SEPERATOR;

    public ImportClassManager(String baseDir, List<String> basePackageName) throws ClassNotFoundException, MalformedURLException {
        ClassLoader classLoader = new URLClassLoader(
                new URL[]{
                        new File(baseDir).toURI().toURL()
                },
                ClassLoader.getSystemClassLoader());

        Collection<File> files = findClassFilesList(baseDir, basePackageName);

        System.out.println("Import class manager found " + files.size() + " : " + files);
        System.out.println();

        for (File file : files) {
            if (!file.isFile()) continue;
            String packageFilePath = file.getPath().substring(baseDir.length() + 1);
            String fullyQualifiedClassName = packageFilePath
                    .replaceAll(File.separator, PACKAGE_SEPERATOR)
                    .replaceAll(".class", "");
            addClass(classLoader.loadClass(fullyQualifiedClassName));
        }
    }

    private Collection<File> findClassFilesList(String baseDir, List<String> basePackageNames) {
        Collection<File> files = Lists.newArrayList();
        for (String packageName : basePackageNames) {
            files.addAll(findClassFiles(baseDir, packageName));
        }
        return files;
    }

    private Collection<File> findClassFiles(String baseDir, String basePackageName) {
        String packagePath = basePackageName.replaceAll(REPLACE_PACKAGE_SEPERATOR, File.separator);
        String path = baseDir + File.separator + packagePath;

        if (!path.endsWith(File.separator)) path = path + File.separator;
        File directory = new File(path);
        if (!directory.isDirectory()) {
            System.out.println(String.format("ERROR: %s isn't a valid directory.", directory));
        }
        //noinspection unchecked
        return FileUtils.listFiles(
                directory,
                new WildcardFileFilter("*.class"),
                DirectoryFileFilter.DIRECTORY
        );
    }
}
TOP

Related Classes of com.astav.jsontojava.classmanager.ImportClassManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.