home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / netscape / plugin / composer / PluginManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  9.3 KB  |  320 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.                String var12 = "/";
  220.                if (!var6.endsWith(var12)) {
  221.                   var6 = var6 + var12;
  222.                }
  223.  
  224.                String var13 = "file:";
  225.                if (var6.indexOf(var13) == 0) {
  226.                   var10 = new URL("file", "", var6.substring(var13.length()));
  227.                } else {
  228.                   var10 = new URL(var6);
  229.                }
  230.             }
  231.  
  232.             if (var8 != null) {
  233.                String var16 = "file:";
  234.                if (var8.indexOf(var16) == 0) {
  235.                   var11 = new URL("file", "", var8.substring(var16.length()));
  236.                } else {
  237.                   var11 = new URL(var8);
  238.                }
  239.             }
  240.  
  241.             ComposerDocument var17 = new ComposerDocument(var1, var3, var9, var5, var10, var7, var11);
  242.             SecurityManager.enablePrivilege("SuperUser");
  243.             ThreadGroup var18 = new ThreadGroup(Thread.currentThread().getThreadGroup(), var2.getName());
  244.             Thread var14 = new Thread(var18, new PluginRunner(var2, var17, this), var2.getName());
  245.             var14.start();
  246.             this.pluginThreads.put(var1, var18);
  247.             return true;
  248.          } catch (IOException var15) {
  249.             System.err.println("Composer plugin runner threw this exception:");
  250.             ((Throwable)var15).printStackTrace();
  251.             return false;
  252.          }
  253.       } else {
  254.          return false;
  255.       }
  256.    }
  257.  
  258.    public void stopPlugin(Composer var1) {
  259.       this.killGroup(var1);
  260.    }
  261.  
  262.    public int getNumberOfEncoders() {
  263.       return this.encoders.length();
  264.    }
  265.  
  266.    public String getEncoderName(int var1) {
  267.       return this.getEncoder(var1).getName();
  268.    }
  269.  
  270.    public String getEncoderFileType(int var1) {
  271.       byte[] var2 = new byte[4];
  272.       this.getEncoder(var1).getFileType(var2);
  273.       return new String(var2, 0);
  274.    }
  275.  
  276.    public boolean getEncoderNeedsQuantizedSource(int var1) {
  277.       return this.getEncoder(var1).needsQuantizedSource();
  278.    }
  279.  
  280.    public String getEncoderFileExtension(int var1) {
  281.       return this.getEncoder(var1).getFileExtension();
  282.    }
  283.  
  284.    public String getEncoderHint(int var1) {
  285.       return this.getEncoder(var1).getHint();
  286.    }
  287.  
  288.    protected ImageEncoder getEncoder(int var1) {
  289.       return (ImageEncoder)this.encoders.get(var1);
  290.    }
  291.  
  292.    public boolean startEncoder(Composer var1, int var2, int var3, int var4, byte[][] var5, String var6) {
  293.       ImageEncoderPlugin var7 = new ImageEncoderPlugin(this.getEncoder(var2), var3, var4, var5, var6);
  294.       return this.performPlugin2(var1, var7, (String)null, (String)null, (String)null, (String)null, (String)null, (String)null);
  295.    }
  296.  
  297.    protected Plugin getPlugin(int var1, int var2) {
  298.       Plugin var3 = null;
  299.       SortedStringTable var4 = (SortedStringTable)this.categories.get(var1);
  300.       if (var4 != null) {
  301.          var3 = (Plugin)var4.get(var2);
  302.       }
  303.  
  304.       return var3;
  305.    }
  306.  
  307.    void pluginFinished(Composer var1, int var2, Object var3) {
  308.       var1.pluginFinished(var2, var3);
  309.       this.killGroup(var1);
  310.    }
  311.  
  312.    void killGroup(Composer var1) {
  313.       ThreadGroup var2 = (ThreadGroup)this.pluginThreads.remove(var1);
  314.       if (var2 != null) {
  315.          this.pluginKiller.kill(var2);
  316.       }
  317.  
  318.    }
  319. }
  320.