/* JarLoader: (c) 2002 Dalibor Topic
 * License: GPL.
 *
 * Usage:
 * kaffe JarLoader some.jar ...
 *
 * This simple program loads all classes that it can find
 * in the jar files in its paramer list.
 *
 * It is useful when you want to test the verifier, or the
 * class loading mechanism, or the jar file integrity,
 * or ...
 */
import java.io.*;
import java.util.*;
import java.util.jar.*;

public class JarLoader {
    private final List jars = new ArrayList();

    public JarLoader (String [] jars) {
	for (int i = 0; i < jars.length; ++i) {
	    try {
		JarFile jar = new JarFile(jars[i]);
		this.jars.add(jar);
	    }
	    catch (IOException e) {
		System.err.println("Could not open JAR file "
				   + jars[i]
				   + " : "
				   + e.getMessage());
	    }
	}
    }

    public void loadAllClasses() {
	Iterator iter = jars.iterator();
	while(iter.hasNext()) {
	    loadAllClasses((JarFile) iter.next());
	}
    }

    public void loadAllClasses(JarFile jar) {
	Enumeration entries = jar.entries();
	while (entries.hasMoreElements()) {
	    loadClass((JarEntry) entries.nextElement());
	}
    }

    public void loadClass(JarEntry entry) {
	String name = entry.getName();
	if (name.endsWith(".class")) {
	    name = name.substring(0, name.length() - 6);
	    name = name.replace('/','.');
	    try {
		Class loaded = Class.forName(name);
		System.out.println("loaded: " + loaded);
	    }
	    catch (ClassNotFoundException e) {
		System.err.println("not found: " + name);
	    }
	}
    }

    public static void main(String [] args) {
	JarLoader loader = new JarLoader(args);
	loader.loadAllClasses();
    }
}
