home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / awt / image / InputStreamImageSource.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.9 KB  |  393 lines

  1. package sun.awt.image;
  2.  
  3. import java.awt.image.ImageConsumer;
  4. import java.awt.image.ImageProducer;
  5. import java.io.BufferedInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8.  
  9. public abstract class InputStreamImageSource implements ImageProducer, ImageFetchable {
  10.    PixelStore pixelstore;
  11.    ImageConsumerQueue consumers;
  12.    ImageDecoder decoder;
  13.    ImageDecoder decoders;
  14.    boolean awaitingFetch = false;
  15.  
  16.    abstract boolean checkSecurity(Object var1, boolean var2);
  17.  
  18.    int countConsumers(ImageConsumerQueue var1) {
  19.       int var2;
  20.       for(var2 = 0; var1 != null; var1 = var1.next) {
  21.          ++var2;
  22.       }
  23.  
  24.       return var2;
  25.    }
  26.  
  27.    synchronized int countConsumers() {
  28.       ImageDecoder var1 = this.decoders;
  29.  
  30.       int var2;
  31.       for(var2 = this.countConsumers(this.consumers); var1 != null; var1 = var1.next) {
  32.          var2 += this.countConsumers(var1.queue);
  33.       }
  34.  
  35.       return var2;
  36.    }
  37.  
  38.    public void addConsumer(ImageConsumer var1) {
  39.       this.addConsumer(var1, false);
  40.    }
  41.  
  42.    synchronized void printQueue(ImageConsumerQueue var1, String var2) {
  43.       while(var1 != null) {
  44.          System.out.println(var2 + var1);
  45.          var1 = var1.next;
  46.       }
  47.  
  48.    }
  49.  
  50.    synchronized void printQueues(String var1) {
  51.       System.out.println(var1 + "[ -----------");
  52.       this.printQueue(this.consumers, "  ");
  53.  
  54.       for(ImageDecoder var2 = this.decoders; var2 != null; var2 = var2.next) {
  55.          System.out.println("    " + var2);
  56.          this.printQueue(var2.queue, "      ");
  57.       }
  58.  
  59.       System.out.println("----------- ]" + var1);
  60.    }
  61.  
  62.    synchronized void addConsumer(ImageConsumer var1, boolean var2) {
  63.       this.checkSecurity((Object)null, false);
  64.  
  65.       for(ImageDecoder var3 = this.decoders; var3 != null; var3 = var3.next) {
  66.          if (var3.isConsumer(var1)) {
  67.             return;
  68.          }
  69.       }
  70.  
  71.       ImageConsumerQueue var4;
  72.       for(var4 = this.consumers; var4 != null && var4.consumer != var1; var4 = var4.next) {
  73.       }
  74.  
  75.       if (var4 == null) {
  76.          var4 = new ImageConsumerQueue(this, var1);
  77.          var4.next = this.consumers;
  78.          this.consumers = var4;
  79.       } else {
  80.          if (!var4.secure) {
  81.             Object var5 = null;
  82.             SecurityManager var6 = System.getSecurityManager();
  83.             if (var6 != null) {
  84.                var5 = var6.getSecurityContext();
  85.             }
  86.  
  87.             if (var4.securityContext == null) {
  88.                var4.securityContext = var5;
  89.             } else if (!var4.securityContext.equals(var5)) {
  90.                this.errorConsumer(var4);
  91.                throw new SecurityException("Applets are trading image data!");
  92.             }
  93.          }
  94.  
  95.          var4.interested = true;
  96.       }
  97.  
  98.       if (var2 && this.decoder == null) {
  99.          this.startProduction();
  100.       }
  101.  
  102.    }
  103.  
  104.    public synchronized boolean isConsumer(ImageConsumer var1) {
  105.       for(ImageDecoder var2 = this.decoders; var2 != null; var2 = var2.next) {
  106.          if (var2.isConsumer(var1)) {
  107.             return true;
  108.          }
  109.       }
  110.  
  111.       return ImageConsumerQueue.isConsumer(this.consumers, var1);
  112.    }
  113.  
  114.    private void errorAllConsumers(ImageConsumerQueue var1) {
  115.       for(; var1 != null; var1 = var1.next) {
  116.          if (var1.interested) {
  117.             this.errorConsumer(var1);
  118.          }
  119.       }
  120.  
  121.    }
  122.  
  123.    private void errorConsumer(ImageConsumerQueue var1) {
  124.       var1.consumer.imageComplete(1);
  125.       this.removeConsumer(var1.consumer);
  126.    }
  127.  
  128.    public synchronized void removeConsumer(ImageConsumer var1) {
  129.       for(ImageDecoder var2 = this.decoders; var2 != null; var2 = var2.next) {
  130.          var2.removeConsumer(var1);
  131.       }
  132.  
  133.       this.consumers = ImageConsumerQueue.removeConsumer(this.consumers, var1, false);
  134.       if (this.consumers == null) {
  135.          this.stopProduction();
  136.       }
  137.  
  138.    }
  139.  
  140.    public void startProduction(ImageConsumer var1) {
  141.       this.addConsumer(var1, true);
  142.    }
  143.  
  144.    private synchronized void startProduction() {
  145.       if (!this.awaitingFetch) {
  146.          ImageFetcher.add(this);
  147.          this.awaitingFetch = true;
  148.       }
  149.  
  150.    }
  151.  
  152.    private synchronized void stopProduction() {
  153.       if (this.awaitingFetch) {
  154.          ImageFetcher.remove(this);
  155.          this.awaitingFetch = false;
  156.       }
  157.  
  158.    }
  159.  
  160.    public void requestTopDownLeftRightResend(ImageConsumer var1) {
  161.       for(ImageDecoder var2 = this.decoders; var2 != null; var2 = var2.next) {
  162.          if (var2.isConsumer(var1)) {
  163.             var2.replayConsumer(var1);
  164.          }
  165.       }
  166.  
  167.    }
  168.  
  169.    protected abstract ImageDecoder getDecoder();
  170.  
  171.    protected ImageDecoder decoderForType(InputStream var1, String var2) {
  172.       return null;
  173.    }
  174.  
  175.    protected ImageDecoder getDecoder(InputStream var1) {
  176.       if (!((InputStream)var1).markSupported()) {
  177.          var1 = new BufferedInputStream((InputStream)var1);
  178.       }
  179.  
  180.       try {
  181.          ((InputStream)var1).mark(8);
  182.          int var2 = ((InputStream)var1).read();
  183.          int var3 = ((InputStream)var1).read();
  184.          int var4 = ((InputStream)var1).read();
  185.          int var5 = ((InputStream)var1).read();
  186.          int var6 = ((InputStream)var1).read();
  187.          int var7 = ((InputStream)var1).read();
  188.          int var8 = ((InputStream)var1).read();
  189.          int var9 = ((InputStream)var1).read();
  190.          ((InputStream)var1).reset();
  191.          ((InputStream)var1).mark(-1);
  192.          if (var2 == 71 && var3 == 73 && var4 == 70 && var5 == 56) {
  193.             return new GifImageDecoder(this, (InputStream)var1);
  194.          }
  195.  
  196.          if (var2 == 255 && var3 == 216 && var4 == 255) {
  197.             return new JPEGImageDecoder(this, (InputStream)var1);
  198.          }
  199.  
  200.          if (var2 == 35 && var3 == 100 && var4 == 101 && var5 == 102) {
  201.             return new XbmImageDecoder(this, (InputStream)var1);
  202.          }
  203.  
  204.          if (var2 == 137 && var3 == 80 && var4 == 78 && var5 == 71 && var6 == 13 && var7 == 10 && var8 == 26 && var9 == 10) {
  205.             return new PNGImageDecoder(this, (InputStream)var1);
  206.          }
  207.       } catch (IOException var10) {
  208.       }
  209.  
  210.       return null;
  211.    }
  212.  
  213.    public void doFetch() {
  214.       this.updateFromStore();
  215.       synchronized(this) {
  216.          if (this.consumers == null) {
  217.             this.awaitingFetch = false;
  218.             return;
  219.          }
  220.       }
  221.  
  222.       ImageDecoder var2 = this.getDecoder();
  223.       if (var2 == null) {
  224.          this.badDecoder();
  225.       } else {
  226.          this.setDecoder(var2);
  227.  
  228.          try {
  229.             var2.produceImage();
  230.          } catch (IOException var11) {
  231.             ((Throwable)var11).printStackTrace();
  232.          } catch (ImageFormatException var12) {
  233.             ((Throwable)var12).printStackTrace();
  234.          } finally {
  235.             this.removeDecoder(var2);
  236.             this.errorAllConsumers(var2.queue);
  237.          }
  238.       }
  239.  
  240.    }
  241.  
  242.    private boolean updateFromStore() {
  243.       PixelStore var1;
  244.       ImageConsumerQueue var2;
  245.       synchronized(this) {
  246.          var1 = this.pixelstore;
  247.          if (var1 == null) {
  248.             boolean var11 = false;
  249.             return var11;
  250.          }
  251.  
  252.          var2 = this.consumers;
  253.       }
  254.  
  255.       while(var2 != null) {
  256.          boolean var4;
  257.          synchronized(this) {
  258.             if (!var2.interested) {
  259.                var2 = var2.next;
  260.                continue;
  261.             }
  262.  
  263.             var4 = this.checkSecurity(var2.securityContext, true);
  264.          }
  265.  
  266.          if (var4) {
  267.             if (!var1.replay(this, var2.consumer)) {
  268.                return false;
  269.             }
  270.          } else {
  271.             this.errorConsumer(var2);
  272.          }
  273.  
  274.          synchronized(this) {
  275.             var2 = var2.next;
  276.          }
  277.       }
  278.  
  279.       return true;
  280.    }
  281.  
  282.    private void badDecoder() {
  283.       ImageConsumerQueue var1;
  284.       synchronized(this) {
  285.          var1 = this.consumers;
  286.          this.consumers = null;
  287.          this.awaitingFetch = false;
  288.       }
  289.  
  290.       this.errorAllConsumers(var1);
  291.    }
  292.  
  293.    private void setDecoder(ImageDecoder var1) {
  294.       ImageConsumerQueue var2;
  295.       synchronized(this) {
  296.          var1.next = this.decoders;
  297.          this.decoders = var1;
  298.          this.decoder = var1;
  299.          var2 = this.consumers;
  300.          var1.queue = var2;
  301.          this.consumers = null;
  302.          this.awaitingFetch = false;
  303.       }
  304.  
  305.       for(; var2 != null; var2 = var2.next) {
  306.          if (var2.interested && !this.checkSecurity(var2.securityContext, true)) {
  307.             this.errorConsumer(var2);
  308.          }
  309.       }
  310.  
  311.    }
  312.  
  313.    private synchronized void removeDecoder(ImageDecoder var1) {
  314.       this.doneDecoding(var1);
  315.       ImageDecoder var2 = null;
  316.  
  317.       for(ImageDecoder var3 = this.decoders; var3 != null; var3 = var3.next) {
  318.          if (var3 == var1) {
  319.             if (var2 == null) {
  320.                this.decoders = var3.next;
  321.             } else {
  322.                var2.next = var3.next;
  323.             }
  324.             break;
  325.          }
  326.  
  327.          var2 = var3;
  328.       }
  329.  
  330.    }
  331.  
  332.    synchronized void doneDecoding(ImageDecoder var1) {
  333.       if (this.decoder == var1) {
  334.          this.decoder = null;
  335.          if (this.consumers != null) {
  336.             this.startProduction();
  337.          }
  338.       }
  339.  
  340.    }
  341.  
  342.    void latchConsumers(ImageDecoder var1) {
  343.       ImageConsumerQueue var2;
  344.       synchronized(this) {
  345.          if (var1 != this.decoder) {
  346.             return;
  347.          }
  348.  
  349.          var2 = this.consumers;
  350.       }
  351.  
  352.       while(var2 != null) {
  353.          synchronized(this) {
  354.             if (!var2.interested) {
  355.                var2 = var2.next;
  356.                continue;
  357.             }
  358.          }
  359.  
  360.          if (!var1.catchupConsumer(this, var2.consumer)) {
  361.             synchronized(this) {
  362.                this.doneDecoding(var1);
  363.                return;
  364.             }
  365.          }
  366.  
  367.          synchronized(this) {
  368.             ImageConsumerQueue var6 = var2.next;
  369.             if (var2.interested) {
  370.                this.consumers = ImageConsumerQueue.removeConsumer(this.consumers, var2.consumer, true);
  371.                var2.next = var1.queue;
  372.                var1.queue = var2;
  373.             }
  374.  
  375.             var2 = var6;
  376.          }
  377.       }
  378.  
  379.    }
  380.  
  381.    synchronized void flush() {
  382.       this.pixelstore = null;
  383.       this.decoder = null;
  384.    }
  385.  
  386.    synchronized void setPixelStore(ImageDecoder var1, PixelStore var2) {
  387.       if (var1 == this.decoder) {
  388.          this.pixelstore = var2;
  389.       }
  390.  
  391.    }
  392. }
  393.