/*
*
*
* Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
package com.sun.midp.content;
import javax.microedition.midlet.MIDlet;
import com.sun.j2me.security.AccessController;
import com.sun.midp.main.MIDletProxyList;
import com.sun.midp.midlet.MIDletSuite;
import com.sun.midp.installer.InvalidJadException;
import com.sun.midp.security.Permissions;
import com.sun.midp.security.SecurityToken;
import com.sun.midp.events.EventListener;
import com.sun.midp.events.EventQueue;
import com.sun.midp.events.Event;
import com.sun.midp.events.EventTypes;
/**
* Stub interface to handle ContentHandlers functions.
* If ContentHandlers are not supported it provides a no-op
* implementation.
* The "real" Content Handler implementation is
* {@link com.sun.midp.content.CHInstallerImpl}.
* The methods here are called at by the {@link Installer}
* at the appropriate times to
* {@link #preInstall parse and verify the JAD/Manifest attributes} and
* {@link #install remove old content handlers and register new ones}.
* When a suite is to be removed the content handlers are
* {@link #uninstall uninstalled}.
* At startup {@link #init} to initialize any
* necessary cleanup handling when the application exits.
* When a MIDlet is about to created the
* {@link #midletAdded} method is called.
* When a MIDlet has been destroyed the
* {@link #midletRemoved} method is called.
* <p>
* The {@link GraphicalInstaller}, when it is invoked,
* calls the Invocation mechanism via the
* {@link #getInstallURL} method to check if a URL is available
* and should be installed. When it succeeds or fails the
* {@link #installDone} method is called to complete the invocation.
* The registration of the GraphicalInstaller as a content handler
* for the types and suffixes for java archives and
* java application descriptors is handled by
* {@link com.sun.midp.content.Registry#initGraphicalInstaller}.
*
* @see GraphicalInstaller
* @see Installer
* @see CHInstallerImpl
*/
public class CHManager {
/** The CHManager instance for this application context. */
private static CHManager manager = null;
static final String implClass = "com.sun.j2me.content.CHManagerImpl";
static {
try {
Class.forName(implClass);
} catch(Throwable t) {
// Class might not be found -- it's OK.
}
}
public static void setCHManager(SecurityToken classSecurityToken, CHManager imp) {
if (manager != null) {
throw new SecurityException(
"CHManager implementation might be set only once.");
}
manager = imp;
}
/**
* Creates a new instance of CHInstaller.
*/
protected CHManager() {
}
/**
* Get the Content Handler manager if the system is configured
* to implement content handlers. A dummy handler is returned
* if content handlers are not supported.
* @param token the SecurityToken to get the CHManager
* @return the CHInstaller instance to be used to handle
* management and installation of content handlers.
* @see com.sun.midp.content.CHInstaller
* @exception SecurityException if the token or suite is not allowed
*/
public static CHManager getManager(SecurityToken token) {
if (token != null) {
token.checkIfPermissionAllowed(Permissions.AMS);
} else {
AccessController.checkPermission(Permissions.AMS_PERMISSION_NAME);
}
if (manager == null) {
manager = new CHManager();
}
return manager;
}
/**
* Install the content handlers found and verified by preInstall.
* Register any content handlers parsed from the JAD/Manifest
* attributes.
* @exception InvalidJadException thrown if the application
* descriptor is invalid
*/
public void install() throws InvalidJadException {
}
/**
* Uninstall the Content handler specific information for
* the specified suiteId.
* @param suiteId the suite ID
*/
public void uninstall(int suiteId) {
}
/**
* Check for a URL to install from the Invocation mechanism,
* if one has been queued.
* @param midlet the MIDlet that is the content handler.
* @return the URL to install; <code>null</code> if none is available
* @see com.sun.midp.content.CHInstallerImpl
*/
public String getInstallURL(MIDlet midlet) {
return null;
}
/**
* Notify the invocation mechanism that the install
* of the URL provided by {@link #getURLToInstall}
* succeeded or failed.
* @param success <code>true</code> if the install was a success;
* <code>false</code> otherwise
* @see com.sun.midp.content.CHInstallerImpl
*/
public void installDone(boolean success) {
}
/**
* Setup to monitor for MIDlets exiting and check
* for incompletely handled Invocation requests.
*
* @param midletProxyList reference to the MIDlet proxy list
* @param eventQueue reference to AMS isolate event queue
*/
public void init(MIDletProxyList midletProxyList, EventQueue eventQueue) {
}
/**
* Notification that a MIDlet is about to be created.
* Stub implementation used when CHAPI is not present.
*
* @param suiteId the storage name of the MIDlet suite
* @param classname the midlet classname
* @see com.sun.midp.midlet.MIDletState
*/
public void midletInit(int suiteId, String classname) {
}
}