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 / AppContext.class (.txt) next >
Encoding:
Java Class File  |  1979-12-31  |  4.6 KB  |  221 lines

  1. package sun.awt;
  2.  
  3. import java.awt.Toolkit;
  4. import java.awt.datatransfer.Clipboard;
  5. import java.awt.event.InvocationEvent;
  6. import java.security.AccessController;
  7. import java.util.Hashtable;
  8.  
  9. public final class AppContext {
  10.    public static final Object EVENT_QUEUE_KEY = new StringBuffer("EventQueue");
  11.    private static Hashtable threadGroup2appContext = null;
  12.    private static AppContext mainAppContext = null;
  13.    private final Hashtable table;
  14.    private final ThreadGroup threadGroup;
  15.    private boolean isDisposed = false;
  16.    private static int numAppContexts;
  17.    private static MostRecentThreadAppContext mostRecentThreadAppContext;
  18.    private long DISPOSAL_TIMEOUT = 5000L;
  19.    private long THREAD_INTERRUPT_TIMEOUT = 1000L;
  20.    private MostRecentKeyValue mostRecentKeyValue = null;
  21.  
  22.    AppContext(ThreadGroup var1) {
  23.       ++numAppContexts;
  24.       this.table = new Hashtable(2);
  25.       if (threadGroup2appContext == null) {
  26.          threadGroup2appContext = new Hashtable(2, 0.2F);
  27.       }
  28.  
  29.       this.threadGroup = var1;
  30.       threadGroup2appContext.put(var1, this);
  31.    }
  32.  
  33.    public static final AppContext getAppContext() {
  34.       if (numAppContexts == 1) {
  35.          return mainAppContext;
  36.       } else {
  37.          Thread var0 = Thread.currentThread();
  38.          AppContext var1 = null;
  39.          MostRecentThreadAppContext var2 = mostRecentThreadAppContext;
  40.          if (var2 != null && var2.thread == var0) {
  41.             var1 = var2.appContext;
  42.          } else {
  43.             var1 = (AppContext)AccessController.doPrivileged(new 2(var0));
  44.          }
  45.  
  46.          if (var1 == mainAppContext) {
  47.             SecurityManager var3 = System.getSecurityManager();
  48.             if (var3 != null && var3 instanceof AWTSecurityManager) {
  49.                AWTSecurityManager var4 = (AWTSecurityManager)var3;
  50.                AppContext var5 = var4.getAppContext();
  51.                if (var5 != null) {
  52.                   var1 = var5;
  53.                }
  54.             }
  55.          }
  56.  
  57.          return var1;
  58.       }
  59.    }
  60.  
  61.    public void dispose() throws IllegalThreadStateException {
  62.       if (this.threadGroup.parentOf(Thread.currentThread().getThreadGroup())) {
  63.          throw new IllegalThreadStateException("Current Thread is contained within AppContext to be disposed.");
  64.       } else {
  65.          synchronized(this) {
  66.             if (this.isDisposed) {
  67.                return;
  68.             }
  69.  
  70.             this.isDisposed = true;
  71.          }
  72.  
  73.          this.releaseClipboard();
  74.          Object var2 = new Object();
  75.          3 var3 = new 3(this, var2);
  76.          synchronized(var2) {
  77.             SunToolkit.postEvent(this, new InvocationEvent(Toolkit.getDefaultToolkit(), var3));
  78.  
  79.             try {
  80.                var2.wait(this.DISPOSAL_TIMEOUT);
  81.             } catch (InterruptedException var18) {
  82.             }
  83.          }
  84.  
  85.          4 var21 = new 4(this, var2);
  86.          synchronized(var2) {
  87.             SunToolkit.postEvent(this, new InvocationEvent(Toolkit.getDefaultToolkit(), var21));
  88.  
  89.             try {
  90.                var2.wait(this.DISPOSAL_TIMEOUT);
  91.             } catch (InterruptedException var16) {
  92.             }
  93.          }
  94.  
  95.          this.threadGroup.interrupt();
  96.          long var6 = System.currentTimeMillis();
  97.          long var8 = var6 + this.THREAD_INTERRUPT_TIMEOUT;
  98.  
  99.          while(this.threadGroup.activeCount() > 0 && System.currentTimeMillis() < var8) {
  100.             try {
  101.                Thread.sleep(10L);
  102.             } catch (InterruptedException var15) {
  103.             }
  104.          }
  105.  
  106.          this.threadGroup.stop();
  107.          var6 = System.currentTimeMillis();
  108.          var8 = var6 + this.THREAD_INTERRUPT_TIMEOUT;
  109.  
  110.          while(this.threadGroup.activeCount() > 0 && System.currentTimeMillis() < var8) {
  111.             try {
  112.                Thread.sleep(10L);
  113.             } catch (InterruptedException var14) {
  114.             }
  115.          }
  116.  
  117.          int var10 = this.threadGroup.activeGroupCount();
  118.          if (var10 > 0) {
  119.             ThreadGroup[] var11 = new ThreadGroup[var10];
  120.             var10 = this.threadGroup.enumerate(var11);
  121.  
  122.             for(int var12 = 0; var12 < var10; ++var12) {
  123.                threadGroup2appContext.remove(var11[var12]);
  124.             }
  125.          }
  126.  
  127.          threadGroup2appContext.remove(this.threadGroup);
  128.          MostRecentThreadAppContext var25 = mostRecentThreadAppContext;
  129.          if (var25 != null && var25.appContext == this) {
  130.             mostRecentThreadAppContext = null;
  131.          }
  132.  
  133.          try {
  134.             this.threadGroup.destroy();
  135.          } catch (IllegalThreadStateException var13) {
  136.          }
  137.  
  138.          this.table.clear();
  139.          --numAppContexts;
  140.       }
  141.    }
  142.  
  143.    public Object get(Object var1) {
  144.       MostRecentKeyValue var2 = this.mostRecentKeyValue;
  145.       if (var2 != null && var2.key == var1) {
  146.          return var2.value;
  147.       } else {
  148.          Object var3 = this.table.get(var1);
  149.          this.mostRecentKeyValue = new MostRecentKeyValue(var1, var3);
  150.          return var3;
  151.       }
  152.    }
  153.  
  154.    public Object put(Object var1, Object var2) {
  155.       MostRecentKeyValue var3 = this.mostRecentKeyValue;
  156.       if (var3 != null && var3.key == var1) {
  157.          var3.value = var2;
  158.       }
  159.  
  160.       return this.table.put(var1, var2);
  161.    }
  162.  
  163.    public Object remove(Object var1) {
  164.       MostRecentKeyValue var2 = this.mostRecentKeyValue;
  165.       if (var2 != null && var2.key == var1) {
  166.          var2.value = null;
  167.       }
  168.  
  169.       return this.table.remove(var1);
  170.    }
  171.  
  172.    public ThreadGroup getThreadGroup() {
  173.       return this.threadGroup;
  174.    }
  175.  
  176.    public String toString() {
  177.       return this.getClass().getName() + "[threadGroup=" + this.threadGroup.getName() + "]";
  178.    }
  179.  
  180.    private void releaseClipboard() {
  181.       Clipboard var1 = Toolkit.getDefaultToolkit().getSystemClipboard();
  182.       if (var1 instanceof SunClipboard) {
  183.          ((SunClipboard)var1).clearAppContext();
  184.       }
  185.  
  186.    }
  187.  
  188.    // $FF: synthetic method
  189.    static AppContext access$002(AppContext var0) {
  190.       mainAppContext = var0;
  191.       return var0;
  192.    }
  193.  
  194.    // $FF: synthetic method
  195.    static int access$102(int var0) {
  196.       numAppContexts = var0;
  197.       return var0;
  198.    }
  199.  
  200.    // $FF: synthetic method
  201.    static AppContext access$000() {
  202.       return mainAppContext;
  203.    }
  204.  
  205.    // $FF: synthetic method
  206.    static Hashtable access$200() {
  207.       return threadGroup2appContext;
  208.    }
  209.  
  210.    // $FF: synthetic method
  211.    static MostRecentThreadAppContext access$302(MostRecentThreadAppContext var0) {
  212.       mostRecentThreadAppContext = var0;
  213.       return var0;
  214.    }
  215.  
  216.    static {
  217.       AccessController.doPrivileged(new 1());
  218.       mostRecentThreadAppContext = null;
  219.    }
  220. }
  221.