package lcm.spy; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import javax.swing.tree.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import java.util.jar.*; import java.util.zip.*; import lcm.util.*; import java.lang.reflect.*; import lcm.lcm.*; /** Searches classpath for objects that implement LCSpyPlugin using reflection. **/ public class LCMTypeDatabase { HashMap<Long, Class> classes = new HashMap<Long, Class>(); public LCMTypeDatabase() { ClassDiscoverer.findClasses(new MyClassVisitor()); System.out.println("Found "+classes.size()+" LCM types"); } class MyClassVisitor implements ClassDiscoverer.ClassVisitor { public void classFound(String jar, Class cls) { try { Field[] fields = cls.getFields(); for (Field f : fields) { if (f.getName().equals("LCM_FINGERPRINT")) { // it's a static member, we don't need an instance long fingerprint = f.getLong(null); classes.put(fingerprint, cls); // System.out.printf("%016x : %s\n", fingerprint, cls); break; } } } catch (IllegalAccessException ex) { System.out.println("Bad LCM Type? "+ex); } } } public Class getClassByFingerprint(long fingerprint) { return classes.get(fingerprint); } }