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.automation;
028:
029: import com.sun.midp.midletsuite.*;
030: import com.sun.midp.main.*;
031:
032: /**
033: * AutoMIDletDescriptor implementation
034: */
035: final class AutoMIDletDescriptorImpl implements AutoMIDletDescriptor {
036: /** MIDlet info */
037: private MIDletInfo midletInfo;
038:
039: /** MIDlet's suite */
040: private AutoSuiteDescriptorImpl suite;
041:
042: /** If MIDlet corresponding to this descriptor is started */
043: boolean isStarted;
044:
045: /** Lock used when starting MIDlet */
046: Object midletStartLock;
047:
048: /**
049: * Constructor
050: *
051: * @param suite MIDlet's suite
052: * @param midletAttr MIDlet's attributes
053: */
054: AutoMIDletDescriptorImpl(AutoSuiteDescriptorImpl suite,
055: String midletAttr) {
056: this .suite = suite;
057: this .midletInfo = new MIDletInfo(midletAttr);
058: this .midletStartLock = new Object();
059: this .isStarted = false;
060: }
061:
062: /**
063: * Constructor
064: *
065: * @param suite MIDlet's suite
066: * @param midletName MIDlet's name
067: * @param midletClassName MIDlet's class name
068: */
069: AutoMIDletDescriptorImpl(AutoSuiteDescriptorImpl suite,
070: String midletName, String midletClassName) {
071: this .suite = suite;
072: this .midletInfo = new MIDletInfo(midletName, null,
073: midletClassName);
074: }
075:
076: /**
077: * Called when MIDlet corresponding to this suite gets destroyed
078: */
079: void midletDestroyed() {
080: synchronized (midletStartLock) {
081: isStarted = false;
082: }
083: }
084:
085: /**
086: * AutoMIDletDescriptor implementation
087: */
088:
089: /**
090: * Gets MIDlet's suite descriptor.
091: *
092: * @return AutoMIDletSuiteDescriptor representing MIDlet's suite
093: */
094: public AutoSuiteDescriptor getSuiteDescriptor() {
095: return suite;
096: }
097:
098: /**
099: * Gets MIDlet's name.
100: *
101: * @return MIDlet's name as specified in jad/jar file
102: */
103: public String getMIDletName() {
104: suite.guaranteeSuiteValid("getMIDletName");
105:
106: return midletInfo.name;
107: }
108:
109: /**
110: * Gets name of the class implementing MIDlet interface
111: * for this MIDlet.
112: *
113: * @return name of the class implementing MIDlet interface
114: * as specified in jad/jar file
115: */
116: public String getMIDletClassName() {
117: suite.guaranteeSuiteValid("getMIDletClassName");
118:
119: return midletInfo.classname;
120: }
121:
122: /**
123: * Starts this MIDlet.
124: *
125: * @param args MIDlet's arguments
126: * @throws throws RuntimeException if MIDlet couldn't be started
127: * @return AutoMIDlet representing started MIDlet
128: */
129: public AutoMIDlet start(String[] args) {
130: suite.guaranteeSuiteValid("start");
131:
132: AutoMIDlet midlet = null;
133: synchronized (midletStartLock) {
134: if (isStarted) {
135: throw new RuntimeException("MIDlet is already started");
136: }
137:
138: AutoMIDletStateController stateController = AutoMIDletStateController
139: .getMIDletStateController();
140:
141: midlet = stateController.startMIDlet(this , args);
142: isStarted = true;
143: }
144:
145: return midlet;
146: }
147: }
|