FileDocCategorySizeDatePackage
MLetContent.javaAPI DocJava SE 5 API9271Fri Aug 26 14:57:34 BST 2005javax.management.loading

MLetContent.java

/*
 * @(#)MLetContent.java	1.20 03/12/19
 * 
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

package javax.management.loading;


// java import

import java.net.URL;
import java.net.MalformedURLException;
import java.util.Map;

/**
 * This class represents the contents of the <CODE>MLET</CODE> tag.
 * <p>
 * The <CODE>MLET</CODE> tag has the following syntax:
 * <p>
 * <<CODE>MLET</CODE><BR>
 *      <CODE>CODE = </CODE><VAR>class</VAR><CODE> | OBJECT = </CODE><VAR>serfile</VAR><BR>
 *      <CODE>ARCHIVE = "</CODE><VAR>archiveList</VAR><CODE>"</CODE><BR>
 *      <CODE>[CODEBASE = </CODE><VAR>codebaseURL</VAR><CODE>]</CODE><BR>
 *      <CODE>[NAME = </CODE><VAR>mbeanname</VAR><CODE>]</CODE><BR>
 *      <CODE>[VERSION = </CODE><VAR>version</VAR><CODE>]</CODE><BR>
 * ><BR>
 *	<CODE>[</CODE><VAR>arglist</VAR><CODE>]</CODE><BR>
 * <<CODE>/MLET</CODE>>
 * <p>
 * where:
 * <DL>
 * <DT><CODE>CODE = </CODE><VAR>class</VAR></DT>
 * <DD>
 * This attribute specifies the full Java class name, including package name, of the MBean to be obtained.
 * The compiled <CODE>.class</CODE> file of the MBean must be contained in one of the <CODE>.jar</CODE> files specified by the <CODE>ARCHIVE</CODE>
 * attribute. Either <CODE>CODE</CODE> or <CODE>OBJECT</CODE> must be present.
 * </DD>
 * <DT><CODE>OBJECT = </CODE><VAR>serfile</VAR></DT>
 * <DD>
 * This attribute specifies the <CODE>.ser</CODE> file that contains a serialized representation of the MBean to be obtained.
 * This file must be contained in one of the <CODE>.jar</CODE> files specified by the <CODE>ARCHIVE</CODE> attribute. If the <CODE>.jar</CODE> file contains a directory hierarchy, specify the path of the file within this hierarchy. Otherwise  a match will not be found. Either <CODE>CODE</CODE> or <CODE>OBJECT</CODE> must be present.
 * </DD>
 * <DT><CODE>ARCHIVE = "</CODE><VAR>archiveList</VAR><CODE>"</CODE></DT>
 * <DD>
 * This mandatory attribute specifies one or more <CODE>.jar</CODE> files 
 * containing MBeans or other resources used by
 * the MBean to be obtained. One of the <CODE>.jar</CODE> files must contain the file specified by the <CODE>CODE</CODE> or <CODE>OBJECT</CODE> attribute.
 * If archivelist contains more than one file:
 * <UL>
 * <LI>Each file must be separated from the one that follows it by a comma (,).
 * <LI><VAR>archivelist</VAR> must be enclosed in double quote marks.
 * </UL>
 * All <CODE>.jar</CODE> files in <VAR>archivelist</VAR> must be stored in the directory specified by the code base URL.
 * </DD>
 * <DT><CODE>CODEBASE = </CODE><VAR>codebaseURL</VAR></DT>
 * <DD>
 * This optional attribute specifies the code base URL of the MBean to be obtained. It identifies the directory that contains
 * the <CODE>.jar</CODE> files specified by the <CODE>ARCHIVE</CODE> attribute. Specify this attribute only if the <CODE>.jar</CODE> files are not in the same
 * directory as the MLet text file. If this attribute is not specified, the base URL of the MLet text file is used.
 * </DD>
 * <DT><CODE>NAME = </CODE><VAR>mbeanname</VAR></DT>
 * <DD>
 * This optional attribute specifies the object name to be assigned to the
 * MBean instance when the MLet service registers it. If 
 * <VAR>mbeanname</VAR> starts with the colon character (:), the domain 
 * part of the object name is the domain of the agent. The MLet service 
 * invokes the <CODE>getDomain()</CODE> method of the Framework class to 
 * obtain this information.
 * </DD>
 * <DT><CODE>PERSISTENT = </CODE><VAR>true | false</VAR></DT>
 * <DD>
 * This optional attribute specifies the persistency or not persistency of the
 * MBean instance when the MLet service registers it.
 * </DD>
 * <DT><CODE>VERSION = </CODE><VAR>version</VAR></DT>
 * <DD>
 * This optional attribute specifies the version number of the MBean and 
 * associated <CODE>.jar</CODE> files to be obtained. This version number can 
 * be used to specify that the <CODE>.jar</CODE> files are loaded from the 
 * server to update those stored locally in the cache the next time the MLet
 * text file is loaded. <VAR>version</VAR> must be a series of non-negative 
 * decimal integers each separated by a period from the one that precedes it.
 * </DD>
 * <DT><VAR>paramlist</VAR></DT>
 * <DD>
 * This optional attribute specifies a list of one or more parameters for the 
 * MBean to be instantiated. Each parameter in <VAR>paramlist</VAR> corresponds to a modification in the 
 * modification list. Use the following syntax to specify each item in
 * <VAR>paramlist</VAR>:</DD>
 * <DL>
 * <P>
 * <DT><<CODE>PARAM NAME=</CODE><VAR>propertyName</VAR> <CODE>VALUE=</CODE><VAR>value</VAR>></DT>
 * <P>
 * <DD>where:</DD>
 * <UL>
 * <LI><VAR>propertyName</VAR> is the name of the property in the modification
 * <LI><VAR>value</VAR> is the value in the modification</UL>
 * </DL>
 * <P>The MLet service passes all the values in the modification list as 
 * <CODE>String</CODE> objects. 
 * </DL>
 * 
 * <p><STRONG>Note - </STRONG>Multiple <CODE>MLET</CODE> tags with the same 
 * code base URL share the same instance of the <CODE>MLetClassLoader</CODE> 
 * class.
 *
 * @version     3.3     02/08/99
 * @author      Sun Microsystems, Inc
 *
 * @since 1.5
 */
 class MLetContent {

  
    /**
     * A hash table of the attributes of the <CODE>MLET</CODE> tag 
     * and their values.
     * @serial
     */
    private Map attributes;
  
    /**
     * The MLet text file's base URL.
     * @serial
     */
    private URL documentURL;
  
    /**
     * The base URL.
     * @serial
     */
    private URL baseURL;


    /**
     * Creates an <CODE>MLet</CODE> instance initialized with attributes read
     * from an <CODE>MLET</CODE> tag in an MLet text file.
     *
     * @param url The URL of the MLet text file containing the <CODE>MLET</CODE> tag.
     * @param attributes A list of the attributes of the <CODE>MLET</CODE> tag.
     */
    public MLetContent(URL url, Map attributes) {
	this.documentURL = url;
	this.attributes = attributes;

	// Initialize baseURL
	//
	String att = (String)getParameter("codebase");
	if (att != null) {
	    if (!att.endsWith("/")) {
		att += "/";
	    }
	    try {
		baseURL = new URL(documentURL, att);
	    } catch (MalformedURLException e) {
		// OK : Move to next block as baseURL could not be initialized.
	    }
	}
	if (baseURL == null) {
	    String file = documentURL.getFile();
	    int i = file.lastIndexOf('/');
	    if (i > 0 && i < file.length() - 1) {
		try {
		    baseURL = new URL(documentURL, file.substring(0, i + 1));
		} catch (MalformedURLException e) {
		    // OK : Move to next block as baseURL could not be initialized.
		}
	    }
	}
	if (baseURL == null)
	    baseURL = documentURL;

    }
    
    // GETTERS AND SETTERS
    //--------------------

    /**
     * Gets the attributes of the <CODE>MLET</CODE> tag.
     * @return A hash table of the attributes of the <CODE>MLET</CODE> tag 
     * and their values.
     */
    public Map getAttributes() {
	return attributes;
    }
  
    /**
     * Gets the MLet text file's base URL.
     * @return The MLet text file's base URL.
     */
    public URL getDocumentBase() {
	return documentURL;
    }

    /**
     * Gets the code base URL.
     * @return The code base URL.
     */
    public URL getCodeBase() {
	return baseURL;
    }
  
    /**
     * Gets the list of <CODE>.jar</CODE> files specified by the <CODE>ARCHIVE</CODE> 
     * attribute of the <CODE>MLET</CODE> tag.
     * @return A comma-separated list of <CODE>.jar</CODE> file names.
     */
    public String getJarFiles() {
	return (String)getParameter("archive");
    }

    /**
     * Gets the value of the <CODE>CODE</CODE> 
     * attribute of the <CODE>MLET</CODE> tag.
     * @return The value of the <CODE>CODE</CODE> 
     * attribute of the <CODE>MLET</CODE> tag.
     */
    public String getCode() {
	return (String)getParameter("code");
    }

    /**
     * Gets the value of the <CODE>OBJECT</CODE>
     * attribute of the <CODE>MLET</CODE> tag.
     * @return The value of the <CODE>OBJECT</CODE> 
     * attribute of the <CODE>MLET</CODE> tag.
     */
    public String getSerializedObject() {
	return (String)getParameter("object");
    }

    /**
     * Gets the value of the <CODE>NAME</CODE>
     * attribute of the <CODE>MLET</CODE> tag.
     * @return The value of the <CODE>NAME</CODE>
     * attribute of the <CODE>MLET</CODE> tag.
     */
    public String getName() {
	return (String)getParameter("name");
    }

 
    /**
     * Gets the value of the <CODE>VERSION</CODE>
     * attribute of the <CODE>MLET</CODE> tag.
     * @return The value of the <CODE>VERSION</CODE>
     * attribute of the <CODE>MLET</CODE> tag.
     */
    public String getVersion() {
	return (String)getParameter("version");
    }

    /**
     * Gets the value of the specified    
     * attribute of the <CODE>MLET</CODE> tag.
     *
     * @param name A string representing the name of the attribute.
     * @return The value of the specified    
     * attribute of the <CODE>MLET</CODE> tag.
     */
    public Object getParameter(String name) {
	return (Object) attributes.get(name.toLowerCase());
    }
  
}