001: /*
002: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
004: *
005: * This program is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU General Public License version
007: * 2 only, as published by the Free Software Foundation.
008: *
009: * This program is distributed in the hope that it will be useful, but
010: * WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * General Public License version 2 for more details (a copy is
013: * included at /legal/license.txt).
014: *
015: * You should have received a copy of the GNU General Public License
016: * version 2 along with this work; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
018: * 02110-1301 USA
019: *
020: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
021: * Clara, CA 95054 or visit www.sun.com if you need additional
022: * information or have any questions.
023: *
024: */
025:
026: package com.sun.jumpimpl.ixc;
027:
028: import java.awt.Container;
029: import java.util.HashMap;
030: import javax.microedition.xlet.*;
031:
032: /*
033: * An 'fake' XletContext impl for JMP system to utilize.
034: * getClassLoader() method returns the ClassLoader passed in
035: * at the constructor time.
036: */
037:
038: public class XletContextFactory {
039:
040: /**
041: * Returns an 'fake' XletContext to be used for
042: * IxcRegistry.getRegistry(XletContext).
043: *
044: * It is important for this method to convert the parameter classloader
045: * to the right instance before creating a DummyXletContext with it,
046: * because the ClassLoader in the XletContext is later used as a defining
047: * ClassLoader for the generated stubs.
048: *
049: * We want to make sure that the system driven IXC calls result in
050: * the stubs loaded by the system ClassLoader, and application
051: * driven IXC calls to result i the stubs loaded by the ClassLoader
052: * associated with the calling application.
053: *
054: * Invoke this method with the calling Class's ClassLoader as a param,
055: * such as getClassLoader(this.getClass().getClassLoader());
056: **/
057:
058: public static XletContext getXletContext(ClassLoader loader) {
059: return createXletContext(loader);
060: }
061:
062: private static HashMap contextHash = new HashMap(); // CL, DummyXletContext
063:
064: private static XletContext createXletContext(ClassLoader loader) {
065: /*
066: * If loader is null, use system class loader which must be
067: * not null
068: */
069: if (loader == null) {
070: loader = ClassLoader.getSystemClassLoader();
071: if (loader == null) {
072: throw new RuntimeException("Failed to obtain "
073: + "valid class loader for fake xlet context");
074: }
075: }
076:
077: synchronized (contextHash) {
078: XletContext context = (XletContext) contextHash.get(loader);
079: if (context == null) {
080: context = new DummyXletContext(loader);
081: contextHash.put(loader, context);
082: }
083: return context;
084: }
085: }
086:
087: static class DummyXletContext implements
088: javax.microedition.xlet.XletContext {
089:
090: ClassLoader loader;
091:
092: public DummyXletContext(ClassLoader loader) {
093: //if (loader == null)
094: // throw new IllegalArgumentException("ClassLoader is null");
095: this .loader = loader;
096: }
097:
098: public void notifyDestroyed() {
099: }
100:
101: public void notifyPaused() {
102: }
103:
104: public Object getXletProperty(String key) {
105: return null;
106: }
107:
108: public void resumeRequest() {
109: }
110:
111: public Container getContainer()
112: throws UnavailableContainerException {
113: return null;
114: }
115:
116: public java.lang.ClassLoader getClassLoader() {
117: return loader;
118: }
119: }
120:
121: }
|