home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.image;
-
- import java.awt.image.ImageConsumer;
- import java.awt.image.ImageProducer;
- import java.io.BufferedInputStream;
- import java.io.IOException;
- import java.io.InputStream;
-
- public abstract class InputStreamImageSource implements ImageProducer, ImageFetchable {
- PixelStore pixelstore;
- ImageConsumerQueue consumers;
- ImageDecoder decoder;
- ImageDecoder decoders;
- boolean awaitingFetch = false;
-
- abstract boolean checkSecurity(Object var1, boolean var2);
-
- int countConsumers(ImageConsumerQueue var1) {
- int var2;
- for(var2 = 0; var1 != null; var1 = var1.next) {
- ++var2;
- }
-
- return var2;
- }
-
- synchronized int countConsumers() {
- ImageDecoder var1 = this.decoders;
-
- int var2;
- for(var2 = this.countConsumers(this.consumers); var1 != null; var1 = var1.next) {
- var2 += this.countConsumers(var1.queue);
- }
-
- return var2;
- }
-
- public void addConsumer(ImageConsumer var1) {
- this.addConsumer(var1, false);
- }
-
- synchronized void printQueue(ImageConsumerQueue var1, String var2) {
- while(var1 != null) {
- System.out.println(var2 + var1);
- var1 = var1.next;
- }
-
- }
-
- synchronized void printQueues(String var1) {
- System.out.println(var1 + "[ -----------");
- this.printQueue(this.consumers, " ");
-
- for(ImageDecoder var2 = this.decoders; var2 != null; var2 = var2.next) {
- System.out.println(" " + var2);
- this.printQueue(var2.queue, " ");
- }
-
- System.out.println("----------- ]" + var1);
- }
-
- synchronized void addConsumer(ImageConsumer var1, boolean var2) {
- this.checkSecurity((Object)null, false);
-
- for(ImageDecoder var3 = this.decoders; var3 != null; var3 = var3.next) {
- if (var3.isConsumer(var1)) {
- return;
- }
- }
-
- ImageConsumerQueue var4;
- for(var4 = this.consumers; var4 != null && var4.consumer != var1; var4 = var4.next) {
- }
-
- if (var4 == null) {
- var4 = new ImageConsumerQueue(this, var1);
- var4.next = this.consumers;
- this.consumers = var4;
- } else {
- if (!var4.secure) {
- Object var5 = null;
- SecurityManager var6 = System.getSecurityManager();
- if (var6 != null) {
- var5 = var6.getSecurityContext();
- }
-
- if (var4.securityContext == null) {
- var4.securityContext = var5;
- } else if (var4.securityContext != var5) {
- this.errorConsumer(var4);
- throw new SecurityException("Applets are trading image data!");
- }
- }
-
- var4.interested = true;
- }
-
- if (var2 && this.decoder == null) {
- this.startProduction();
- }
-
- }
-
- public synchronized boolean isConsumer(ImageConsumer var1) {
- for(ImageDecoder var2 = this.decoders; var2 != null; var2 = var2.next) {
- if (var2.isConsumer(var1)) {
- return true;
- }
- }
-
- return ImageConsumerQueue.isConsumer(this.consumers, var1);
- }
-
- private void errorAllConsumers(ImageConsumerQueue var1) {
- for(; var1 != null; var1 = var1.next) {
- if (var1.interested) {
- this.errorConsumer(var1);
- }
- }
-
- }
-
- private void errorConsumer(ImageConsumerQueue var1) {
- var1.consumer.imageComplete(1);
- this.removeConsumer(var1.consumer);
- }
-
- public synchronized void removeConsumer(ImageConsumer var1) {
- for(ImageDecoder var2 = this.decoders; var2 != null; var2 = var2.next) {
- var2.removeConsumer(var1);
- }
-
- this.consumers = ImageConsumerQueue.removeConsumer(this.consumers, var1, false);
- if (this.consumers == null) {
- this.stopProduction();
- }
-
- }
-
- public void startProduction(ImageConsumer var1) {
- this.addConsumer(var1, true);
- }
-
- private synchronized void startProduction() {
- if (!this.awaitingFetch) {
- ImageFetcher.add(this);
- this.awaitingFetch = true;
- }
-
- }
-
- private synchronized void stopProduction() {
- if (this.awaitingFetch && ImageFetcher.remove(this)) {
- this.awaitingFetch = false;
- }
-
- }
-
- public void requestTopDownLeftRightResend(ImageConsumer var1) {
- for(ImageDecoder var2 = this.decoders; var2 != null; var2 = var2.next) {
- if (var2.isConsumer(var1)) {
- var2.replayConsumer(var1);
- }
- }
-
- }
-
- protected abstract ImageDecoder getDecoder();
-
- protected ImageDecoder decoderForType(InputStream var1, String var2) {
- return null;
- }
-
- protected ImageDecoder getDecoder(InputStream var1) {
- if (!((InputStream)var1).markSupported()) {
- var1 = new BufferedInputStream((InputStream)var1);
- }
-
- try {
- ((InputStream)var1).mark(6);
- int var2 = ((InputStream)var1).read();
- int var3 = ((InputStream)var1).read();
- int var4 = ((InputStream)var1).read();
- int var5 = ((InputStream)var1).read();
- ((InputStream)var1).read();
- ((InputStream)var1).read();
- ((InputStream)var1).reset();
- ((InputStream)var1).mark(-1);
- if (var2 == 71 && var3 == 73 && var4 == 70 && var5 == 56) {
- return new GifImageDecoder(this, (InputStream)var1);
- }
-
- if (var2 == 255 && var3 == 216 && var4 == 255) {
- return new JPEGImageDecoder(this, (InputStream)var1);
- }
-
- if (var2 == 35 && var3 == 100 && var4 == 101 && var5 == 102) {
- return new XbmImageDecoder(this, (InputStream)var1);
- }
- } catch (IOException var6) {
- }
-
- return null;
- }
-
- public void doFetch() {
- do {
- synchronized(this){}
-
- try {
- if (this.consumers == null) {
- this.awaitingFetch = false;
- return;
- }
- } catch (Throwable var16) {
- throw var16;
- }
- } while(this.updateFromStore());
-
- ImageDecoder var1 = this.getDecoder();
- if (var1 == null) {
- this.badDecoder();
- } else {
- this.setDecoder(var1);
-
- try {
- var1.produceImage();
- } catch (IOException var13) {
- ((Throwable)var13).printStackTrace();
- } catch (ImageFormatException var14) {
- ((Throwable)var14).printStackTrace();
- } finally {
- this.removeDecoder(var1);
- this.errorAllConsumers(var1.queue);
- }
-
- }
- }
-
- private boolean updateFromStore() {
- synchronized(this){}
-
- PixelStore var1;
- ImageConsumerQueue var2;
- try {
- var1 = this.pixelstore;
- if (var1 == null) {
- boolean var18 = false;
- return var18;
- }
-
- var2 = this.consumers;
- } catch (Throwable var17) {
- throw var17;
- }
-
- while(var2 != null) {
- synchronized(this){}
-
- boolean var3;
- try {
- if (!var2.interested) {
- var2 = var2.next;
- continue;
- }
-
- var3 = this.checkSecurity(var2.securityContext, true);
- } catch (Throwable var16) {
- throw var16;
- }
-
- if (var3 && !var1.replay(this, var2.consumer)) {
- return false;
- }
-
- synchronized(this){}
-
- try {
- if (var2.interested) {
- this.errorConsumer(var2);
- }
-
- var2 = var2.next;
- } catch (Throwable var15) {
- throw var15;
- }
- }
-
- return true;
- }
-
- private void badDecoder() {
- synchronized(this){}
-
- ImageConsumerQueue var1;
- try {
- var1 = this.consumers;
- this.consumers = null;
- this.awaitingFetch = false;
- } catch (Throwable var4) {
- throw var4;
- }
-
- this.errorAllConsumers(var1);
- }
-
- private void setDecoder(ImageDecoder var1) {
- synchronized(this){}
-
- ImageConsumerQueue var2;
- try {
- var1.next = this.decoders;
- this.decoders = var1;
- this.decoder = var1;
- var2 = this.consumers;
- var1.queue = var2;
- this.consumers = null;
- this.awaitingFetch = false;
- } catch (Throwable var5) {
- throw var5;
- }
-
- for(; var2 != null; var2 = var2.next) {
- if (var2.interested && !this.checkSecurity(var2.securityContext, true)) {
- this.errorConsumer(var2);
- }
- }
-
- }
-
- private synchronized void removeDecoder(ImageDecoder var1) {
- this.doneDecoding(var1);
- ImageDecoder var2 = null;
-
- for(ImageDecoder var3 = this.decoders; var3 != null; var3 = var3.next) {
- if (var3 == var1) {
- if (var2 == null) {
- this.decoders = var3.next;
- return;
- }
-
- var2.next = var3.next;
- return;
- }
-
- var2 = var3;
- }
-
- }
-
- synchronized void doneDecoding(ImageDecoder var1) {
- if (this.decoder == var1) {
- this.decoder = null;
- if (this.consumers != null) {
- this.startProduction();
- }
- }
-
- }
-
- void latchConsumers(ImageDecoder var1) {
- synchronized(this){}
-
- ImageConsumerQueue var2;
- try {
- if (var1 != this.decoder) {
- return;
- }
-
- var2 = this.consumers;
- } catch (Throwable var25) {
- throw var25;
- }
-
- while(var2 != null) {
- synchronized(this){}
-
- try {
- if (!var2.interested) {
- var2 = var2.next;
- continue;
- }
- } catch (Throwable var24) {
- throw var24;
- }
-
- if (!var1.catchupConsumer(this, var2.consumer)) {
- synchronized(this){}
-
- try {
- this.doneDecoding(var1);
- } catch (Throwable var22) {
- throw var22;
- }
-
- return;
- }
-
- synchronized(this){}
-
- try {
- ImageConsumerQueue var5 = var2.next;
- if (var2.interested) {
- this.consumers = ImageConsumerQueue.removeConsumer(this.consumers, var2.consumer, true);
- var2.next = var1.queue;
- var1.queue = var2;
- }
-
- var2 = var5;
- } catch (Throwable var23) {
- throw var23;
- }
- }
-
- }
-
- synchronized void flush() {
- this.pixelstore = null;
- this.decoder = null;
- }
-
- synchronized void setPixelStore(ImageDecoder var1, PixelStore var2) {
- if (var1 == this.decoder) {
- this.pixelstore = var2;
- }
-
- }
- }
-