home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 January / PCO0198.ISO / browser / net_linx / java40.jar / netscape / plugin / composer / PluginManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  8.2 KB  |  317 lines

  1. package netscape.plugin.composer;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.StringBufferInputStream;
  7. import java.net.URL;
  8. import java.util.Enumeration;
  9. import java.util.Hashtable;
  10. import java.util.Properties;
  11. import java.util.StringTokenizer;
  12. import java.util.Vector;
  13.  
  14. class PluginManager {
  15.    private SortedStringTable categories = new SortedStringTable();
  16.    private SortedStringTable encoders = new SortedStringTable();
  17.    private SortedStringTable events = new SortedStringTable();
  18.    private Hashtable pluginThreads = new Hashtable();
  19.    private PluginKiller pluginKiller = new PluginKiller();
  20.  
  21.    public PluginManager() {
  22.    }
  23.  
  24.    public void registerPlugin(String var1, String var2) {
  25.       Properties var3 = new Properties();
  26.       File var4 = new File(var1);
  27.  
  28.       try {
  29.          StringBufferInputStream var5 = new StringBufferInputStream(var2);
  30.          var3.load(var5);
  31.          ((InputStream)var5).close();
  32.       } catch (IOException var6) {
  33.          System.err.println("Caught exception while parsing .ini contents:\n" + var2);
  34.          ((Throwable)var6).printStackTrace();
  35.       }
  36.  
  37.       this.registerPlugins(var4, var3);
  38.       this.registerEncoders(var4, var3);
  39.       this.registerEvents(var3);
  40.    }
  41.  
  42.    public void registerPlugins(File var1, Properties var2) {
  43.       Enumeration var3 = null;
  44.       Object var4 = null;
  45.  
  46.       try {
  47.          String var7 = trimWhitespace(var2.getProperty("netscape.plugin.composer.Factory", "netscape.plugin.composer.Factory"));
  48.          Factory var5 = (Factory)Class.forName(var7).newInstance();
  49.          var3 = var5.getPlugins(var1, var2);
  50.       } catch (Throwable var6) {
  51.          System.err.println("Caught exception while instantiating " + var4);
  52.          var6.printStackTrace();
  53.       }
  54.  
  55.       registerPlugins(this.categories, var3);
  56.    }
  57.  
  58.    public static Enumeration instantiateClassList(String var0) {
  59.       Vector var1 = new Vector();
  60.       if (var0 != null) {
  61.          StringTokenizer var2 = new StringTokenizer(var0, ":");
  62.  
  63.          while(var2.hasMoreTokens()) {
  64.             String var3 = trimWhitespace(var2.nextToken());
  65.  
  66.             try {
  67.                Object var4 = Class.forName(var3).newInstance();
  68.                var1.addElement(var4);
  69.             } catch (Throwable var5) {
  70.                System.err.println("Caught exception while instantiating " + var3);
  71.                var5.printStackTrace();
  72.             }
  73.          }
  74.       }
  75.  
  76.       return var1.elements();
  77.    }
  78.  
  79.    protected void registerEvents(Properties var1) {
  80.       String var2 = var1.getProperty("netscape.plugin.composer.eventHandlers", "");
  81.       registerPlugins(this.events, var2);
  82.    }
  83.  
  84.    protected static void registerPlugins(SortedStringTable var0, String var1) {
  85.       registerPlugins(var0, instantiateClassList(var1));
  86.    }
  87.  
  88.    protected static void registerPlugins(SortedStringTable var0, Enumeration var1) {
  89.       if (var1 != null) {
  90.          while(var1.hasMoreElements()) {
  91.             Plugin var2 = (Plugin)var1.nextElement();
  92.             if (var2 != null) {
  93.                try {
  94.                   var0.getOrCreateTable(var2.getCategory()).put(var2.getName(), var2);
  95.                } catch (Throwable var4) {
  96.                   System.err.println("Trouble registering plugin:" + var2);
  97.                   var4.printStackTrace();
  98.                }
  99.             }
  100.          }
  101.       }
  102.  
  103.    }
  104.  
  105.    public static String trimWhitespace(String var0) {
  106.       int var1 = var0.length();
  107.       StringBuffer var2 = new StringBuffer(var1);
  108.  
  109.       for(int var3 = 0; var3 < var1; ++var3) {
  110.          char var4 = var0.charAt(var3);
  111.          if (!Character.isSpace(var4)) {
  112.             var2.append(var4);
  113.          }
  114.       }
  115.  
  116.       return var2.toString();
  117.    }
  118.  
  119.    public void registerEncoders(File var1, Properties var2) {
  120.       Enumeration var3 = null;
  121.       Object var4 = null;
  122.  
  123.       try {
  124.          String var9 = trimWhitespace(var2.getProperty("netscape.plugin.composer.ImageEncoderFactory", "netscape.plugin.composer.ImageEncoderFactory"));
  125.          ImageEncoderFactory var5 = (ImageEncoderFactory)Class.forName(var9).newInstance();
  126.          var3 = var5.getImageEncoders(var1, var2);
  127.       } catch (Throwable var8) {
  128.          System.err.println("Caught exception while instantiating " + var4);
  129.          var8.printStackTrace();
  130.       }
  131.  
  132.       if (var3 != null) {
  133.          while(var3.hasMoreElements()) {
  134.             Object var10 = null;
  135.  
  136.             try {
  137.                var10 = var3.nextElement();
  138.                ImageEncoder var6 = (ImageEncoder)var10;
  139.                this.registerEncoderInstance(var6);
  140.             } catch (Throwable var7) {
  141.                System.err.println("Caught exception while processing " + var10);
  142.                var7.printStackTrace();
  143.             }
  144.          }
  145.       }
  146.  
  147.    }
  148.  
  149.    private void registerEncoderInstance(ImageEncoder var1) {
  150.       ImageEncoder.register(var1);
  151.       String var2 = var1.getName();
  152.       this.encoders.put(var2, var1);
  153.    }
  154.  
  155.    public int getNumberOfCategories() {
  156.       return this.categories.length();
  157.    }
  158.  
  159.    public int getNumberOfPlugins(int var1) {
  160.       SortedStringTable var2 = (SortedStringTable)this.categories.get(var1);
  161.       return var2 == null ? 0 : var2.length();
  162.    }
  163.  
  164.    public String getCategoryName(int var1) {
  165.       return this.categories.getKey(var1);
  166.    }
  167.  
  168.    public String getPluginName(int var1, int var2) {
  169.       return this.getPlugin(var1, var2).getName();
  170.    }
  171.  
  172.    public String getPluginHint(int var1, int var2) {
  173.       return this.getPlugin(var1, var2).getHint();
  174.    }
  175.  
  176.    public boolean performPlugin(Composer var1, int var2, int var3, String var4, String var5, String var6, String var7) {
  177.       return this.performPlugin2(var1, this.getPlugin(var2, var3), var4, var5, var6, var7, (String)null, (String)null);
  178.    }
  179.  
  180.    public boolean performPluginByName(Composer var1, String var2, String var3, String var4, String var5, String var6) {
  181.       Object var7 = null;
  182.       String var8 = null;
  183.       String var9 = null;
  184.  
  185.       try {
  186.          int var10 = var2.indexOf(58);
  187.          if (var10 >= 0) {
  188.             var9 = var2.substring(0, var10);
  189.             var8 = var2.substring(var10 + 1);
  190.             if (var8.length() == 0) {
  191.                var8 = null;
  192.             }
  193.  
  194.             SortedStringTable var11 = this.events;
  195.             if (var11 != null) {
  196.                var7 = new GroupPlugin(var11);
  197.             }
  198.          } else {
  199.             var7 = (Plugin)Class.forName(var2).newInstance();
  200.          }
  201.  
  202.          if (var7 != null) {
  203.             return this.performPlugin2(var1, (Plugin)var7, var3, var4, var5, var6, var9, var8);
  204.          }
  205.       } catch (Throwable var12) {
  206.          var12.printStackTrace();
  207.       }
  208.  
  209.       return false;
  210.    }
  211.  
  212.    public boolean performPlugin2(Composer var1, Plugin var2, String var3, String var4, String var5, String var6, String var7, String var8) {
  213.       if (var2 != null) {
  214.          try {
  215.             URL var9 = var4 != null ? new URL(var4) : null;
  216.             URL var10 = null;
  217.             URL var11 = null;
  218.             if (var6 != null) {
  219.                if (!var6.endsWith("/")) {
  220.                   var6 = var6 + "/";
  221.                }
  222.  
  223.                if (var6.indexOf("file:") == 0) {
  224.                   var10 = new URL("file", "", var6.substring("file:".length()));
  225.                } else {
  226.                   var10 = new URL(var6);
  227.                }
  228.             }
  229.  
  230.             if (var8 != null) {
  231.                if (var8.indexOf("file:") == 0) {
  232.                   var11 = new URL("file", "", var8.substring("file:".length()));
  233.                } else {
  234.                   var11 = new URL(var8);
  235.                }
  236.             }
  237.  
  238.             ComposerDocument var12 = new ComposerDocument(var1, var3, var9, var5, var10, var7, var11);
  239.             SecurityManager.enablePrivilege("SuperUser");
  240.             ThreadGroup var13 = new ThreadGroup(Thread.currentThread().getThreadGroup(), var2.getName());
  241.             Thread var14 = new Thread(var13, new PluginRunner(var2, var12, this), var2.getName());
  242.             var14.start();
  243.             this.pluginThreads.put(var1, var13);
  244.             return true;
  245.          } catch (IOException var15) {
  246.             System.err.println("Composer plugin runner threw this exception:");
  247.             ((Throwable)var15).printStackTrace();
  248.             return false;
  249.          }
  250.       } else {
  251.          return false;
  252.       }
  253.    }
  254.  
  255.    public void stopPlugin(Composer var1) {
  256.       this.killGroup(var1);
  257.    }
  258.  
  259.    public int getNumberOfEncoders() {
  260.       return this.encoders.length();
  261.    }
  262.  
  263.    public String getEncoderName(int var1) {
  264.       return this.getEncoder(var1).getName();
  265.    }
  266.  
  267.    public String getEncoderFileType(int var1) {
  268.       byte[] var2 = new byte[4];
  269.       this.getEncoder(var1).getFileType(var2);
  270.       return new String(var2, 0);
  271.    }
  272.  
  273.    public boolean getEncoderNeedsQuantizedSource(int var1) {
  274.       return this.getEncoder(var1).needsQuantizedSource();
  275.    }
  276.  
  277.    public String getEncoderFileExtension(int var1) {
  278.       return this.getEncoder(var1).getFileExtension();
  279.    }
  280.  
  281.    public String getEncoderHint(int var1) {
  282.       return this.getEncoder(var1).getHint();
  283.    }
  284.  
  285.    protected ImageEncoder getEncoder(int var1) {
  286.       return (ImageEncoder)this.encoders.get(var1);
  287.    }
  288.  
  289.    public boolean startEncoder(Composer var1, int var2, int var3, int var4, byte[][] var5, String var6) {
  290.       ImageEncoderPlugin var7 = new ImageEncoderPlugin(this.getEncoder(var2), var3, var4, var5, var6);
  291.       return this.performPlugin2(var1, var7, (String)null, (String)null, (String)null, (String)null, (String)null, (String)null);
  292.    }
  293.  
  294.    protected Plugin getPlugin(int var1, int var2) {
  295.       Plugin var3 = null;
  296.       SortedStringTable var4 = (SortedStringTable)this.categories.get(var1);
  297.       if (var4 != null) {
  298.          var3 = (Plugin)var4.get(var2);
  299.       }
  300.  
  301.       return var3;
  302.    }
  303.  
  304.    void pluginFinished(Composer var1, int var2, Object var3) {
  305.       var1.pluginFinished(var2, var3);
  306.       this.killGroup(var1);
  307.    }
  308.  
  309.    void killGroup(Composer var1) {
  310.       ThreadGroup var2 = (ThreadGroup)this.pluginThreads.remove(var1);
  311.       if (var2 != null) {
  312.          this.pluginKiller.kill(var2);
  313.       }
  314.  
  315.    }
  316. }
  317.