blob: d44648aa3b1acb00345c6bb38edf0807c1fb8b09 [file] [log] [blame]
/*
* 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;
}
}
}