home *** CD-ROM | disk | FTP | other *** search
- package sun.awt;
-
- import java.awt.Toolkit;
- import java.awt.datatransfer.Clipboard;
- import java.awt.event.InvocationEvent;
- import java.security.AccessController;
- import java.util.Hashtable;
-
- public final class AppContext {
- public static final Object EVENT_QUEUE_KEY = new StringBuffer("EventQueue");
- private static Hashtable threadGroup2appContext = null;
- private static AppContext mainAppContext = null;
- private final Hashtable table;
- private final ThreadGroup threadGroup;
- private boolean isDisposed = false;
- private static int numAppContexts;
- private static MostRecentThreadAppContext mostRecentThreadAppContext;
- private long DISPOSAL_TIMEOUT = 5000L;
- private long THREAD_INTERRUPT_TIMEOUT = 1000L;
- private MostRecentKeyValue mostRecentKeyValue = null;
-
- AppContext(ThreadGroup var1) {
- ++numAppContexts;
- this.table = new Hashtable(2);
- if (threadGroup2appContext == null) {
- threadGroup2appContext = new Hashtable(2, 0.2F);
- }
-
- this.threadGroup = var1;
- threadGroup2appContext.put(var1, this);
- }
-
- public static final AppContext getAppContext() {
- if (numAppContexts == 1) {
- return mainAppContext;
- } else {
- Thread var0 = Thread.currentThread();
- AppContext var1 = null;
- MostRecentThreadAppContext var2 = mostRecentThreadAppContext;
- if (var2 != null && var2.thread == var0) {
- var1 = var2.appContext;
- } else {
- var1 = (AppContext)AccessController.doPrivileged(new 2(var0));
- }
-
- if (var1 == mainAppContext) {
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null && var3 instanceof AWTSecurityManager) {
- AWTSecurityManager var4 = (AWTSecurityManager)var3;
- AppContext var5 = var4.getAppContext();
- if (var5 != null) {
- var1 = var5;
- }
- }
- }
-
- return var1;
- }
- }
-
- public void dispose() throws IllegalThreadStateException {
- if (this.threadGroup.parentOf(Thread.currentThread().getThreadGroup())) {
- throw new IllegalThreadStateException("Current Thread is contained within AppContext to be disposed.");
- } else {
- synchronized(this) {
- if (this.isDisposed) {
- return;
- }
-
- this.isDisposed = true;
- }
-
- this.releaseClipboard();
- Object var2 = new Object();
- 3 var3 = new 3(this, var2);
- synchronized(var2) {
- SunToolkit.postEvent(this, new InvocationEvent(Toolkit.getDefaultToolkit(), var3));
-
- try {
- var2.wait(this.DISPOSAL_TIMEOUT);
- } catch (InterruptedException var18) {
- }
- }
-
- 4 var21 = new 4(this, var2);
- synchronized(var2) {
- SunToolkit.postEvent(this, new InvocationEvent(Toolkit.getDefaultToolkit(), var21));
-
- try {
- var2.wait(this.DISPOSAL_TIMEOUT);
- } catch (InterruptedException var16) {
- }
- }
-
- this.threadGroup.interrupt();
- long var6 = System.currentTimeMillis();
- long var8 = var6 + this.THREAD_INTERRUPT_TIMEOUT;
-
- while(this.threadGroup.activeCount() > 0 && System.currentTimeMillis() < var8) {
- try {
- Thread.sleep(10L);
- } catch (InterruptedException var15) {
- }
- }
-
- this.threadGroup.stop();
- var6 = System.currentTimeMillis();
- var8 = var6 + this.THREAD_INTERRUPT_TIMEOUT;
-
- while(this.threadGroup.activeCount() > 0 && System.currentTimeMillis() < var8) {
- try {
- Thread.sleep(10L);
- } catch (InterruptedException var14) {
- }
- }
-
- int var10 = this.threadGroup.activeGroupCount();
- if (var10 > 0) {
- ThreadGroup[] var11 = new ThreadGroup[var10];
- var10 = this.threadGroup.enumerate(var11);
-
- for(int var12 = 0; var12 < var10; ++var12) {
- threadGroup2appContext.remove(var11[var12]);
- }
- }
-
- threadGroup2appContext.remove(this.threadGroup);
- MostRecentThreadAppContext var25 = mostRecentThreadAppContext;
- if (var25 != null && var25.appContext == this) {
- mostRecentThreadAppContext = null;
- }
-
- try {
- this.threadGroup.destroy();
- } catch (IllegalThreadStateException var13) {
- }
-
- this.table.clear();
- --numAppContexts;
- }
- }
-
- public Object get(Object var1) {
- MostRecentKeyValue var2 = this.mostRecentKeyValue;
- if (var2 != null && var2.key == var1) {
- return var2.value;
- } else {
- Object var3 = this.table.get(var1);
- this.mostRecentKeyValue = new MostRecentKeyValue(var1, var3);
- return var3;
- }
- }
-
- public Object put(Object var1, Object var2) {
- MostRecentKeyValue var3 = this.mostRecentKeyValue;
- if (var3 != null && var3.key == var1) {
- var3.value = var2;
- }
-
- return this.table.put(var1, var2);
- }
-
- public Object remove(Object var1) {
- MostRecentKeyValue var2 = this.mostRecentKeyValue;
- if (var2 != null && var2.key == var1) {
- var2.value = null;
- }
-
- return this.table.remove(var1);
- }
-
- public ThreadGroup getThreadGroup() {
- return this.threadGroup;
- }
-
- public String toString() {
- return this.getClass().getName() + "[threadGroup=" + this.threadGroup.getName() + "]";
- }
-
- private void releaseClipboard() {
- Clipboard var1 = Toolkit.getDefaultToolkit().getSystemClipboard();
- if (var1 instanceof SunClipboard) {
- ((SunClipboard)var1).clearAppContext();
- }
-
- }
-
- // $FF: synthetic method
- static AppContext access$002(AppContext var0) {
- mainAppContext = var0;
- return var0;
- }
-
- // $FF: synthetic method
- static int access$102(int var0) {
- numAppContexts = var0;
- return var0;
- }
-
- // $FF: synthetic method
- static AppContext access$000() {
- return mainAppContext;
- }
-
- // $FF: synthetic method
- static Hashtable access$200() {
- return threadGroup2appContext;
- }
-
- // $FF: synthetic method
- static MostRecentThreadAppContext access$302(MostRecentThreadAppContext var0) {
- mostRecentThreadAppContext = var0;
- return var0;
- }
-
- static {
- AccessController.doPrivileged(new 1());
- mostRecentThreadAppContext = null;
- }
- }
-