Home | History | Annotate | Download | only in awt
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 /**
     18  * @author Pavel Dolgov
     19  * @version $Revision$
     20  */
     21 package org.apache.harmony.awt;
     22 
     23 import java.awt.*;
     24 
     25 //???AWT
     26 //import org.apache.harmony.awt.datatransfer.*;
     27 import org.apache.harmony.awt.internal.nls.Messages;
     28 import org.apache.harmony.awt.wtk.*;
     29 
     30 
     31 public final class ContextStorage {
     32 
     33     private static volatile boolean multiContextMode = false;
     34     private volatile boolean shutdownPending = false;
     35 
     36     private static final ContextStorage globalContext = new ContextStorage();
     37 
     38     private Toolkit toolkit;
     39     private ComponentInternals componentInternals;
     40     //???AWT: private DTK dtk;
     41     private WTK wtk;
     42     private GraphicsEnvironment graphicsEnvironment;
     43 
     44     private class ContextLock {}
     45     private final Object contextLock = new ContextLock();
     46     private final Synchronizer synchronizer = new Synchronizer();
     47 
     48     public static void activateMultiContextMode() {
     49         // TODO: checkPermission
     50         multiContextMode = true;
     51     }
     52 
     53     public static void setDefaultToolkit(Toolkit newToolkit) {
     54         // TODO: checkPermission
     55         getCurrentContext().toolkit = newToolkit;
     56     }
     57 
     58     public static Toolkit getDefaultToolkit() {
     59         return getCurrentContext().toolkit;
     60     }
     61 
     62     //???AWT
     63     /*
     64     public static void setDTK(DTK dtk) {
     65         // TODO: checkPermission
     66         getCurrentContext().dtk = dtk;
     67     }
     68 
     69     public static DTK getDTK() {
     70         return getCurrentContext().dtk;
     71     }
     72     */
     73 
     74     public static Synchronizer getSynchronizer() {
     75         return getCurrentContext().synchronizer;
     76     }
     77 
     78     public static ComponentInternals getComponentInternals() {
     79         return getCurrentContext().componentInternals;
     80     }
     81 
     82     static void setComponentInternals(ComponentInternals internals) {
     83         // TODO: checkPermission
     84         getCurrentContext().componentInternals = internals;
     85     }
     86 
     87     public static Object getContextLock() {
     88         return getCurrentContext().contextLock;
     89     }
     90 
     91     public static WindowFactory getWindowFactory() {
     92         return getCurrentContext().wtk.getWindowFactory();
     93     }
     94 
     95     public static void setWTK(WTK wtk) {
     96         getCurrentContext().wtk = wtk;
     97     }
     98 
     99     public static NativeIM getNativeIM() {
    100         return getCurrentContext().wtk.getNativeIM();
    101     }
    102 
    103     public static NativeEventQueue getNativeEventQueue() {
    104         return getCurrentContext().wtk.getNativeEventQueue();
    105     }
    106 
    107     public static GraphicsEnvironment getGraphicsEnvironment() {
    108         return getCurrentContext().graphicsEnvironment;
    109     }
    110 
    111     public static void setGraphicsEnvironment(GraphicsEnvironment environment) {
    112         getCurrentContext().graphicsEnvironment = environment;
    113     }
    114 
    115     private static ContextStorage getCurrentContext() {
    116         return multiContextMode ? getContextThreadGroup().context : globalContext;
    117     }
    118 
    119     private static ContextThreadGroup getContextThreadGroup() {
    120 
    121         Thread thread = Thread.currentThread();
    122         ThreadGroup group = thread.getThreadGroup();
    123         while (group != null) {
    124             if (group instanceof ContextThreadGroup) {
    125                 return (ContextThreadGroup)group;
    126             }
    127             group = group.getParent();
    128         }
    129         // awt.59=Application has run out of context thread group
    130         throw new RuntimeException(Messages.getString("awt.59")); //$NON-NLS-1$
    131     }
    132 
    133     public static boolean shutdownPending() {
    134         return getCurrentContext().shutdownPending;
    135     }
    136 
    137     void shutdown() {
    138         if (!multiContextMode) {
    139             return;
    140         }
    141         shutdownPending = true;
    142 
    143         //???AWT: componentInternals.shutdown();
    144 
    145         synchronized(contextLock) {
    146             toolkit = null;
    147             componentInternals = null;
    148             //???AWT: dtk = null;
    149             wtk = null;
    150             graphicsEnvironment = null;
    151         }
    152     }
    153 
    154 }
    155