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: package com.sun.jumpimpl.isolate.jvmprocess.xlet;
026:
027: import com.sun.jump.isolate.jvmprocess.JUMPIsolateProcess;
028: import com.sun.jump.isolate.jvmprocess.JUMPAppContainer;
029: import com.sun.jump.isolate.jvmprocess.JUMPAppContainerContext;
030: import com.sun.jump.common.JUMPApplication;
031: import com.sun.jump.message.JUMPMessage;
032: import com.sun.jump.message.JUMPMessageHandler;
033:
034: import sun.mtask.xlet.PXletManager;
035: import java.io.IOException;
036: import java.io.File;
037: import java.util.StringTokenizer;
038:
039: /*
040: * Application Container for the xlet app model.
041: *
042: * FIXME: We should move this class into the cdc/fp/pbp repository
043: * and compile it there, to be aligned with midp app container in the
044: * midp repository. The code needs to be compiled before jump api
045: * and after jump impl.
046: */
047:
048: public class AppContainerImpl extends JUMPAppContainer {
049:
050: public static JUMPAppContainer getInstance(
051: JUMPAppContainerContext context) {
052: return new AppContainerImpl();
053: }
054:
055: PXletManager xletManager;
056:
057: public static final String CLASSPATH_KEY = "XLETApplication_classpath";
058: public static final String INITIAL_CLASS_KEY = "XLETApplication_initialClass";
059:
060: private static JUMPApplication currentApp = null;
061:
062: /**
063: * Creates a new instance of JUMPAppContainer
064: * For xlets, there is only one per vm - ignore appId.
065: */
066: public AppContainerImpl() {
067: }
068:
069: /**
070: * Start the application specific by the JUMPApplication object.
071: */
072: public int startApp(JUMPApplication app, String[] args) {
073:
074: try {
075:
076: String className = app.getProperty(INITIAL_CLASS_KEY);
077: String classPath = app.getProperty(CLASSPATH_KEY);
078:
079: StringTokenizer st = new StringTokenizer(classPath,
080: File.pathSeparator);
081: int count = st.countTokens();
082: String[] pathArray = new String[count];
083: count = 0;
084:
085: while (st.hasMoreTokens()) {
086: pathArray[count++] = st.nextToken();
087: }
088:
089: xletManager = PXletManager.createXlet(className, null,
090: null, pathArray, args);
091: xletManager.postInitXlet();
092: xletManager.postStartXlet();
093:
094: // FIXME: xlet manager calls are asynchronous, need to wait.
095:
096: currentApp = app;
097:
098: } catch (IOException e) {
099: e.printStackTrace();
100: return -1;
101: }
102:
103: return Integer
104: .parseInt(app.getProperty(JUMPApplication.ID_KEY));
105: }
106:
107: public void pauseApp(int appId) {
108: xletManager.postPauseXlet();
109: }
110:
111: public void resumeApp(int appId) {
112: xletManager.postStartXlet();
113: }
114:
115: public void destroyApp(int appId, boolean force) {
116: xletManager.postDestroyXlet(force);
117: currentApp = null;
118: }
119:
120: public void handleMessage(JUMPMessage message) {
121: }
122:
123: }
|