home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / Notes.jar / lotus / domino / AgentLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-15  |  6.5 KB  |  243 lines

  1. package lotus.domino;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.util.Hashtable;
  8. import java.util.zip.ZipEntry;
  9. import java.util.zip.ZipException;
  10. import java.util.zip.ZipInputStream;
  11. import lotus.notes.AgentThreadGroup;
  12. import lotus.notes.JavaString;
  13.  
  14. public class AgentLoader extends ClassLoader {
  15.    private Hashtable files = new Hashtable();
  16.    private AgentThreadGroup m_atg;
  17.    private Thread m_thread;
  18.  
  19.    public synchronized Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  20.       Class var3 = ((ClassLoader)this).findLoadedClass(var1);
  21.       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.";
  22.       if (var1.startsWith("lotus.notes.noi")) {
  23.          System.err.println("Invalid classname = " + var1 + "\n" + var4);
  24.          throw new ClassNotFoundException(var1);
  25.       } else {
  26.          if (var3 == null) {
  27.             SecurityManager var5 = System.getSecurityManager();
  28.             if (var5 != null) {
  29.                int var6 = var1.lastIndexOf(46);
  30.                if (var6 >= 0) {
  31.                   var5.checkPackageAccess(var1.substring(0, var6));
  32.                }
  33.             }
  34.  
  35.             try {
  36.                return ((ClassLoader)this).findSystemClass(var1);
  37.             } catch (ClassNotFoundException var8) {
  38.                if (var5 != null) {
  39.                   int var9 = var1.lastIndexOf(46);
  40.                   if (var9 >= 0) {
  41.                      var5.checkPackageDefinition(var1.substring(0, var9));
  42.                   }
  43.                }
  44.  
  45.                String var10 = var1.replace('.', '/') + ".class";
  46.                byte[] var7 = (byte[])this.files.get(var10);
  47.                if (var7 == null) {
  48.                   throw new ClassNotFoundException(var1);
  49.                }
  50.  
  51.                var3 = ((ClassLoader)this).defineClass((String)null, var7, 0, var7.length);
  52.                this.files.remove(var10);
  53.             }
  54.          }
  55.  
  56.          if (var2) {
  57.             ((ClassLoader)this).resolveClass(var3);
  58.          }
  59.  
  60.          return var3;
  61.       }
  62.    }
  63.  
  64.    public void addAttachment(String var1, byte[] var2) {
  65.       if (!var1.endsWith(".zip") && !var1.endsWith(".jar")) {
  66.          if (!this.files.containsKey(var1)) {
  67.             this.files.put(var1, var2);
  68.          }
  69.  
  70.       } else {
  71.          this.explodeArchive(var1, var2);
  72.       }
  73.    }
  74.  
  75.    private native boolean getBreakStatus();
  76.  
  77.    public void runAgent(String var1, long var2, int var4, boolean var5, long var6, boolean var8) {
  78.       try {
  79.          try {
  80.             Class var9 = ((ClassLoader)this).findSystemClass("lotus.notes.AgentBase");
  81.             var9 = ((ClassLoader)this).findSystemClass("lotus.domino.AgentBase");
  82.          } catch (ClassNotFoundException var22) {
  83.             System.err.println(JavaString.resource.getString("error_loading_base_class"));
  84.             return;
  85.          }
  86.  
  87.          String var10 = ".class";
  88.          if (var1.endsWith(var10)) {
  89.             int var11 = var1.length() - var10.length();
  90.             var1 = var1.substring(0, var11);
  91.          }
  92.  
  93.          var1 = var1.replace('/', '.');
  94.  
  95.          Class var26;
  96.          try {
  97.             var26 = ((ClassLoader)this).loadClass(var1);
  98.          } catch (NoClassDefFoundError var20) {
  99.             System.err.println(JavaString.getFormattedString("error_loading_base_class2", var1));
  100.             ((Throwable)var20).printStackTrace();
  101.             return;
  102.          } catch (ClassNotFoundException var21) {
  103.             System.err.println(JavaString.getFormattedString("error_loading_base_class2", var1));
  104.             ((Throwable)var21).printStackTrace(System.err);
  105.             return;
  106.          }
  107.  
  108.          Class var13 = var26;
  109.  
  110.          for(int var14 = 0; var14 < 500; ++var14) {
  111.             Class var12 = var13.getSuperclass();
  112.             if (var12 == null) {
  113.                System.err.println(JavaString.resource.getString("error_loading_base_class"));
  114.                return;
  115.             }
  116.  
  117.             if (var12.getName().equals("lotus.domino.AgentBase")) {
  118.                this.m_thread = this.setupAgent(var1, var26, var2, var4, var5, var6, var8);
  119.                break;
  120.             }
  121.  
  122.             if (var12.getName().equals("lotus.notes.AgentBase")) {
  123.                lotus.notes.AgentLoader var15 = new lotus.notes.AgentLoader();
  124.                this.m_thread = var15.setupAgent(var1, var26, var2, var4, var5, var6, var8);
  125.                break;
  126.             }
  127.  
  128.             if (var12.getName().equals("java.lang.Object")) {
  129.                System.err.println(JavaString.resource.getString("error_loading_base_class"));
  130.                return;
  131.             }
  132.  
  133.             var13 = var12;
  134.          }
  135.  
  136.          if (this.m_thread != null) {
  137.             this.m_atg = (AgentThreadGroup)this.m_thread.getThreadGroup();
  138.             long var27 = System.currentTimeMillis() + var2 * 1000L;
  139.             this.m_thread.start();
  140.  
  141.             while(this.m_thread.isAlive() && !this.getBreakStatus() && (var2 == 0L || System.currentTimeMillis() < var27)) {
  142.                this.m_thread.join(1000L);
  143.             }
  144.  
  145.             this.m_atg.stop();
  146.  
  147.             for(; this.m_atg.getActiveNotesThreadCount() > 0; this.m_atg.stop()) {
  148.                try {
  149.                   Thread.sleep(250L);
  150.                } catch (InterruptedException var19) {
  151.                }
  152.             }
  153.  
  154.             if (this.m_atg.activeCount() > 0) {
  155.                try {
  156.                   Thread.sleep(250L);
  157.                } catch (InterruptedException var18) {
  158.                }
  159.             }
  160.  
  161.             try {
  162.                this.m_atg.destroy();
  163.             } catch (IllegalThreadStateException var17) {
  164.             }
  165.          }
  166.       } catch (Throwable var23) {
  167.          System.err.println(JavaString.getFormattedString("error_executing_agent", var1));
  168.          System.err.println("-->" + var23);
  169.          var23.printStackTrace(System.err);
  170.       }
  171.    }
  172.  
  173.    private void explodeArchive(String var1, byte[] var2) {
  174.       try {
  175.          ZipInputStream var6 = new ZipInputStream(new ByteArrayInputStream(var2));
  176.  
  177.          for(ZipEntry var7 = var6.getNextEntry(); var7 != null; var7 = var6.getNextEntry()) {
  178.             String var5 = var7.getName();
  179.             if (!var7.isDirectory() && !var5.startsWith("META-INF/")) {
  180.                int var4 = (int)var7.getSize();
  181.                byte[] var3;
  182.                if (var4 == -1) {
  183.                   byte[] var8 = new byte[1024];
  184.                   ByteArrayOutputStream var10 = new ByteArrayOutputStream();
  185.  
  186.                   int var9;
  187.                   while((var9 = var6.read(var8, 0, var8.length)) != -1) {
  188.                      var10.write(var8, 0, var9);
  189.                   }
  190.  
  191.                   var3 = var10.toByteArray();
  192.                } else {
  193.                   var3 = new byte[var4];
  194.                   var6.read(var3, 0, var4);
  195.                }
  196.  
  197.                if (!this.files.containsKey(var5)) {
  198.                   this.files.put(var5, var3);
  199.                }
  200.             }
  201.  
  202.             var6.closeEntry();
  203.          }
  204.  
  205.       } catch (ZipException var11) {
  206.          System.err.println(JavaString.getFormattedString("ZipException_reading_attachment", var1));
  207.          System.err.println("--> " + var11);
  208.          ((Throwable)var11).printStackTrace(System.err);
  209.       } catch (IOException var12) {
  210.          System.err.println(JavaString.getFormattedString("IOException_reading_attachment", var1));
  211.          System.err.println("--> " + var12);
  212.          ((Throwable)var12).printStackTrace(System.err);
  213.       }
  214.    }
  215.  
  216.    public InputStream getResourceAsStream(String var1) {
  217.       InputStream var2 = ClassLoader.getSystemResourceAsStream(var1);
  218.       if (var2 != null) {
  219.          return var2;
  220.       } else if (this.files.containsKey(var1)) {
  221.          byte[] var3 = (byte[])this.files.get(var1);
  222.          return new ByteArrayInputStream(var3);
  223.       } else {
  224.          return null;
  225.       }
  226.    }
  227.  
  228.    public Thread setupAgent(String var1, Class var2, long var3, int var5, boolean var6, long var7, boolean var9) {
  229.       try {
  230.          AgentInfo var10 = new AgentInfo(var2, var3, var5, var6, var7, var9);
  231.          AgentLauncher var11 = new AgentLauncher(var10);
  232.          AgentThreadGroup var12 = new AgentThreadGroup(var1);
  233.          var10.newSecurityContext(var12);
  234.          return new NotesThread(var12, var11, "Launcher: " + var1);
  235.       } catch (Throwable var14) {
  236.          System.err.println(JavaString.getFormattedString("error_executing_agent", var1));
  237.          System.err.println("-->" + var14);
  238.          var14.printStackTrace(System.err);
  239.          return null;
  240.       }
  241.    }
  242. }
  243.