001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.midp.main;
028:
029: import com.sun.midp.midlet.MIDletSuite;
030: import com.sun.midp.midlet.MIDletStateHandler;
031: import com.sun.midp.midletsuite.MIDletSuiteStorage;
032:
033: /** Implements utilities that are different for SVM and MVM modes. */
034: public class AmsUtil {
035: /** Cached reference to the MIDletProxyList. */
036: private static MIDletProxyList midletProxyList;
037:
038: /**
039: * Initializes AmsUtil class. shall only be called from
040: * MIDletSuiteLoader's main() in MVM AMS isolate
041: * or in SVM main isolate.
042: * No need in security checks since it is package private method.
043: *
044: * @param theMIDletProxyList MIDletController's container
045: * @param theMidletControllerEventProducer utility to send events
046: */
047: static void initClass(
048: MIDletProxyList theMIDletProxyList,
049: MIDletControllerEventProducer theMidletControllerEventProducer) {
050:
051: midletProxyList = theMIDletProxyList;
052: }
053:
054: /**
055: * Queues the execution of the named Application suite to run.
056: * The current application suite should terminate itself normally
057: * to make resources available to the new application suite. Only
058: * one package and set of MIDlets can be queued in this manner.
059: * If multiple calls to execute are made, the package and MIDlets
060: * specified during the <em>last</em> invokation will be executed
061: * when the current application is terminated.
062: *
063: * @param midletSuiteStorage reference to a MIDletStorage object
064: * @param externalAppId ID of MIDlet to invoke, given by an external
065: * application manager (MVM only)
066: * @param id ID of an installed suite
067: * @param midlet class name of MIDlet to invoke
068: * @param displayName name to display to the user
069: * @param arg0 if not null, this parameter will be available to the
070: * MIDlet as application property arg-0
071: * @param arg1 if not null, this parameter will be available to the
072: * MIDlet as application property arg-1
073: * @param arg2 if not null, this parameter will be available to the
074: * MIDlet as application property arg-2
075: * @param memoryReserved the minimum amount of memory guaranteed to be
076: * available to the isolate at any time; < 0 if not used
077: * @param memoryTotal the total amount of memory that the isolate can
078: reserve; < 0 if not used
079: * @param priority priority to set for the new isolate;
080: * <= 0 if not used
081: * @param profileName name of the profile to set for the new isolate;
082: * null if not used
083: *
084: * @return true to signal that the MIDlet suite MUST first exit before the
085: * MIDlet is run
086: */
087: static boolean executeWithArgs(
088: MIDletSuiteStorage midletSuiteStorage, int externalAppId,
089: int id, String midlet, String displayName, String arg0,
090: String arg1, String arg2, int memoryReserved,
091: int memoryTotal, int priority, String profileName) {
092:
093: if (id != MIDletSuite.UNUSED_SUITE_ID) {
094:
095: // The MIDlet running already shoudln't be started again.
096: // Each started MIDlet has matching MIDletProxy instance
097: // created on MIDLET_CREATED_NOTIFICATION event. In SVM mode
098: // the event system is not used for MIDlet execution, so
099: // MIDletProxy can not exist yet for a MIDlet just started.
100: // Instead of MIDletProxyList browsing the MIDletStateHandler
101: // is checked for the running MIDlet.
102:
103: if (MIDletStateHandler.getMidletStateHandler().isRunning(
104: midlet)) {
105: // No need to exit, MIDlet already loaded
106: return false;
107: }
108: }
109:
110: MIDletSuiteUtils.nextMidletSuiteToRun = id;
111: MIDletSuiteUtils.nextMidletToRun = midlet;
112: MIDletSuiteUtils.arg0ForNextMidlet = arg0;
113: MIDletSuiteUtils.arg1ForNextMidlet = arg1;
114: MIDletSuiteUtils.arg2ForNextMidlet = arg2;
115: MIDletSuiteUtils.memoryReserved = memoryReserved;
116: MIDletSuiteUtils.memoryTotal = memoryTotal;
117: MIDletSuiteUtils.priority = priority;
118: MIDletSuiteUtils.profileName = profileName;
119:
120: return true;
121: }
122:
123: /**
124: * Does nothing in SVM mode
125: *
126: * @param id Isolate Id
127: */
128: static void terminateIsolate(int id) {
129: }
130: }
|