home *** CD-ROM | disk | FTP | other *** search
Wrap
package lotus.domino; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Hashtable; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipInputStream; import lotus.notes.AgentThreadGroup; import lotus.notes.JavaString; public class AgentLoader extends ClassLoader { private Hashtable files = new Hashtable(); private AgentThreadGroup m_atg; private Thread m_thread; public synchronized Class loadClass(String var1, boolean var2) throws ClassNotFoundException { Class var3 = ((ClassLoader)this).findLoadedClass(var1); String var4 = "--- WARNING! ---\nAttempt to access the old lotus.notes.noi.*\npackage. This package has been renamed to\nlotus.domino.*. Please change and recompile\nyour Java code to use the new package instead."; if (var1.startsWith("lotus.notes.noi")) { System.err.println("Invalid classname = " + var1 + "\n" + var4); throw new ClassNotFoundException(var1); } else { if (var3 == null) { SecurityManager var5 = System.getSecurityManager(); if (var5 != null) { int var6 = var1.lastIndexOf(46); if (var6 >= 0) { var5.checkPackageAccess(var1.substring(0, var6)); } } try { return ((ClassLoader)this).findSystemClass(var1); } catch (ClassNotFoundException var8) { if (var5 != null) { int var9 = var1.lastIndexOf(46); if (var9 >= 0) { var5.checkPackageDefinition(var1.substring(0, var9)); } } String var10 = var1.replace('.', '/') + ".class"; byte[] var7 = (byte[])this.files.get(var10); if (var7 == null) { throw new ClassNotFoundException(var1); } var3 = ((ClassLoader)this).defineClass((String)null, var7, 0, var7.length); this.files.remove(var10); } } if (var2) { ((ClassLoader)this).resolveClass(var3); } return var3; } } public void addAttachment(String var1, byte[] var2) { if (!var1.endsWith(".zip") && !var1.endsWith(".jar")) { if (!this.files.containsKey(var1)) { this.files.put(var1, var2); } } else { this.explodeArchive(var1, var2); } } private native boolean getBreakStatus(); public void runAgent(String var1, long var2, int var4, boolean var5, long var6, boolean var8) { try { try { Class var9 = ((ClassLoader)this).findSystemClass("lotus.notes.AgentBase"); var9 = ((ClassLoader)this).findSystemClass("lotus.domino.AgentBase"); } catch (ClassNotFoundException var22) { System.err.println(JavaString.resource.getString("error_loading_base_class")); return; } String var10 = ".class"; if (var1.endsWith(var10)) { int var11 = var1.length() - var10.length(); var1 = var1.substring(0, var11); } var1 = var1.replace('/', '.'); Class var26; try { var26 = ((ClassLoader)this).loadClass(var1); } catch (NoClassDefFoundError var20) { System.err.println(JavaString.getFormattedString("error_loading_base_class2", var1)); ((Throwable)var20).printStackTrace(); return; } catch (ClassNotFoundException var21) { System.err.println(JavaString.getFormattedString("error_loading_base_class2", var1)); ((Throwable)var21).printStackTrace(System.err); return; } Class var13 = var26; for(int var14 = 0; var14 < 500; ++var14) { Class var12 = var13.getSuperclass(); if (var12 == null) { System.err.println(JavaString.resource.getString("error_loading_base_class")); return; } if (var12.getName().equals("lotus.domino.AgentBase")) { this.m_thread = this.setupAgent(var1, var26, var2, var4, var5, var6, var8); break; } if (var12.getName().equals("lotus.notes.AgentBase")) { lotus.notes.AgentLoader var15 = new lotus.notes.AgentLoader(); this.m_thread = var15.setupAgent(var1, var26, var2, var4, var5, var6, var8); break; } if (var12.getName().equals("java.lang.Object")) { System.err.println(JavaString.resource.getString("error_loading_base_class")); return; } var13 = var12; } if (this.m_thread != null) { this.m_atg = (AgentThreadGroup)this.m_thread.getThreadGroup(); long var27 = System.currentTimeMillis() + var2 * 1000L; this.m_thread.start(); while(this.m_thread.isAlive() && !this.getBreakStatus() && (var2 == 0L || System.currentTimeMillis() < var27)) { this.m_thread.join(1000L); } this.m_atg.stop(); for(; this.m_atg.getActiveNotesThreadCount() > 0; this.m_atg.stop()) { try { Thread.sleep(250L); } catch (InterruptedException var19) { } } if (this.m_atg.activeCount() > 0) { try { Thread.sleep(250L); } catch (InterruptedException var18) { } } try { this.m_atg.destroy(); } catch (IllegalThreadStateException var17) { } } } catch (Throwable var23) { System.err.println(JavaString.getFormattedString("error_executing_agent", var1)); System.err.println("-->" + var23); var23.printStackTrace(System.err); } } private void explodeArchive(String var1, byte[] var2) { try { ZipInputStream var6 = new ZipInputStream(new ByteArrayInputStream(var2)); for(ZipEntry var7 = var6.getNextEntry(); var7 != null; var7 = var6.getNextEntry()) { String var5 = var7.getName(); if (!var7.isDirectory() && !var5.startsWith("META-INF/")) { int var4 = (int)var7.getSize(); byte[] var3; if (var4 == -1) { byte[] var8 = new byte[1024]; ByteArrayOutputStream var10 = new ByteArrayOutputStream(); int var9; while((var9 = var6.read(var8, 0, var8.length)) != -1) { var10.write(var8, 0, var9); } var3 = var10.toByteArray(); } else { var3 = new byte[var4]; var6.read(var3, 0, var4); } if (!this.files.containsKey(var5)) { this.files.put(var5, var3); } } var6.closeEntry(); } } catch (ZipException var11) { System.err.println(JavaString.getFormattedString("ZipException_reading_attachment", var1)); System.err.println("--> " + var11); ((Throwable)var11).printStackTrace(System.err); } catch (IOException var12) { System.err.println(JavaString.getFormattedString("IOException_reading_attachment", var1)); System.err.println("--> " + var12); ((Throwable)var12).printStackTrace(System.err); } } public InputStream getResourceAsStream(String var1) { InputStream var2 = ClassLoader.getSystemResourceAsStream(var1); if (var2 != null) { return var2; } else if (this.files.containsKey(var1)) { byte[] var3 = (byte[])this.files.get(var1); return new ByteArrayInputStream(var3); } else { return null; } } public Thread setupAgent(String var1, Class var2, long var3, int var5, boolean var6, long var7, boolean var9) { try { AgentInfo var10 = new AgentInfo(var2, var3, var5, var6, var7, var9); AgentLauncher var11 = new AgentLauncher(var10); AgentThreadGroup var12 = new AgentThreadGroup(var1); var10.newSecurityContext(var12); return new NotesThread(var12, var11, "Launcher: " + var1); } catch (Throwable var14) { System.err.println(JavaString.getFormattedString("error_executing_agent", var1)); System.err.println("-->" + var14); var14.printStackTrace(System.err); return null; } } }