- private Port(String path, InetAddress bindTo, int port) {
- super(path);
- this.bindTo = bindTo;
- this.port = port;
- }
-
- public void changed(Watched w) {
- //Log.warn(this, "Port: noticed change in " + w);
- super.changed(w);
- }
-
-
- Class isListener(String name) throws ClassNotFoundException {
- final ClassLoader cl = getClassLoader();
- final Class c = cl.loadClass(name);
- if (c == null) return null;
- if (Listener.class.isAssignableFrom(c) && c != Listener.class) return c;
- return null;
- }
-
- Class findListener() throws Exception {
- getClassLoader();
- String[] list = list();
- for(int i=0; i<list.length; i++) {
- if (!list[i].endsWith(".jar")) continue;
- //Log.warn(this, "checking " + (this.path + File.separatorChar + list[i]));
- File f = new File(this.path + File.separatorChar + list[i]);
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(f);
- ZipInputStream zis = new ZipInputStream(fis);
- for(ZipEntry ze = zis.getNextEntry(); ze != null; ze = zis.getNextEntry()) {
- String name = ze.getName();
- if (name.endsWith(".class")) {
- String classname = name.substring(0, name.length() - ".class".length()).replace('/', '.');
- Class c = isListener(classname);
- if (c != null) return c;
- }
- }
- } finally { if (fis != null) fis.close(); }
- }
- return findListener(new File(getAbsolutePath() + File.separatorChar + "BIN"));
- }
-
- Class findListener(File f) throws Exception {
- if (!f.exists()) return null;
- if (!f.isDirectory()) {
- if (!f.getAbsolutePath().endsWith(".class")) return null;
- String name = f.getAbsolutePath().substring(getAbsolutePath().length() + 5);
- name = name.substring(0, name.length() - ".class".length()).replace(File.separatorChar, '.');
- Class c = isListener(name);
- if (c != null) return c;
- } else {
- String[] list = f.list();
- for(int i=0; i<list.length; i++) {
- String classname = f.getAbsolutePath() + File.separatorChar + list[i];
- Class c = findListener(new File(classname));
- if (c != null) return c;
- }
- }
- return null;
- }