| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /** |
| * @author Pavel Dolgov |
| * @version $Revision$ |
| */ |
| package org.apache.harmony.awt; |
| |
| import java.awt.*; |
| |
| //???AWT |
| //import org.apache.harmony.awt.datatransfer.*; |
| import org.apache.harmony.awt.internal.nls.Messages; |
| import org.apache.harmony.awt.wtk.*; |
| |
| |
| public final class ContextStorage { |
| |
| private static volatile boolean multiContextMode = false; |
| private volatile boolean shutdownPending = false; |
| |
| private static final ContextStorage globalContext = new ContextStorage(); |
| |
| private Toolkit toolkit; |
| private ComponentInternals componentInternals; |
| //???AWT: private DTK dtk; |
| private WTK wtk; |
| private GraphicsEnvironment graphicsEnvironment; |
| |
| private class ContextLock {} |
| private final Object contextLock = new ContextLock(); |
| private final Synchronizer synchronizer = new Synchronizer(); |
| |
| public static void activateMultiContextMode() { |
| // TODO: checkPermission |
| multiContextMode = true; |
| } |
| |
| public static void setDefaultToolkit(Toolkit newToolkit) { |
| // TODO: checkPermission |
| getCurrentContext().toolkit = newToolkit; |
| } |
| |
| public static Toolkit getDefaultToolkit() { |
| return getCurrentContext().toolkit; |
| } |
| |
| //???AWT |
| /* |
| public static void setDTK(DTK dtk) { |
| // TODO: checkPermission |
| getCurrentContext().dtk = dtk; |
| } |
| |
| public static DTK getDTK() { |
| return getCurrentContext().dtk; |
| } |
| */ |
| |
| public static Synchronizer getSynchronizer() { |
| return getCurrentContext().synchronizer; |
| } |
| |
| public static ComponentInternals getComponentInternals() { |
| return getCurrentContext().componentInternals; |
| } |
| |
| static void setComponentInternals(ComponentInternals internals) { |
| // TODO: checkPermission |
| getCurrentContext().componentInternals = internals; |
| } |
| |
| public static Object getContextLock() { |
| return getCurrentContext().contextLock; |
| } |
| |
| public static WindowFactory getWindowFactory() { |
| return getCurrentContext().wtk.getWindowFactory(); |
| } |
| |
| public static void setWTK(WTK wtk) { |
| getCurrentContext().wtk = wtk; |
| } |
| |
| public static NativeIM getNativeIM() { |
| return getCurrentContext().wtk.getNativeIM(); |
| } |
| |
| public static NativeEventQueue getNativeEventQueue() { |
| return getCurrentContext().wtk.getNativeEventQueue(); |
| } |
| |
| public static GraphicsEnvironment getGraphicsEnvironment() { |
| return getCurrentContext().graphicsEnvironment; |
| } |
| |
| public static void setGraphicsEnvironment(GraphicsEnvironment environment) { |
| getCurrentContext().graphicsEnvironment = environment; |
| } |
| |
| private static ContextStorage getCurrentContext() { |
| return multiContextMode ? getContextThreadGroup().context : globalContext; |
| } |
| |
| private static ContextThreadGroup getContextThreadGroup() { |
| |
| Thread thread = Thread.currentThread(); |
| ThreadGroup group = thread.getThreadGroup(); |
| while (group != null) { |
| if (group instanceof ContextThreadGroup) { |
| return (ContextThreadGroup)group; |
| } |
| group = group.getParent(); |
| } |
| // awt.59=Application has run out of context thread group |
| throw new RuntimeException(Messages.getString("awt.59")); //$NON-NLS-1$ |
| } |
| |
| public static boolean shutdownPending() { |
| return getCurrentContext().shutdownPending; |
| } |
| |
| void shutdown() { |
| if (!multiContextMode) { |
| return; |
| } |
| shutdownPending = true; |
| |
| //???AWT: componentInternals.shutdown(); |
| |
| synchronized(contextLock) { |
| toolkit = null; |
| componentInternals = null; |
| //???AWT: dtk = null; |
| wtk = null; |
| graphicsEnvironment = null; |
| } |
| } |
| |
| } |