
		JavaBeans Activation Framework 1.1
		==================================

Please send comments and feedback to activation-comments@sun.com.

The JavaBeans Activation Framework (JAF) 1.0 has been in use for eight
years.  In that time it has served its original purpose quite well,
with only a few enhancements being requested.

JAF 1.1 proposes a few minor changes to the JAF APIs to address the
most commonly requested enhancements.  Following is a description of
the new APIs that are being introduced in JAF 1.1.  The numbers in
parentheses are bug numbers; you can find more information about the
bug reports at:

    http://bugs.sun.com

The JAF 1.1 RI will require J2SE 1.4 or later.  (The JAF 1.0.2 RI
requires only JDK 1.1.6.)  JAF 1.1 will be included in J2EE 5.0
and J2SE 6.0.

The JAF 1.1 RI and TCK will be available under the same terms as the
JAF 1.0 RI and TCK.


===================================================================

1.  Need way to find all known MIME types (4134676)
---------------------------------------------------

To support this we add a new method to CommandMap:

    /**
     * Get all the MIME types known to this command map.
     * If the command map doesn't support this operation,
     * null is returned.
     *
     * @return		array of MIME types as strings, or null if not supported
     * @since	JAF 1.1
     */
    public String[] getMimeTypes()

The default implementation of this method returns null for
compatibility with applications that have provided a CommandMap
implementation based on JAF 1.0.  The JAF 1.1 implementation of
MailcapCommandMap will return all the MIME types known to the
command map.


===================================================================

2.  CommandMap needs file name to choose proper command on Windows (5090200)
----------------------------------------------------------------------------

This RFE requests additional CommandMap methods that allow
the CommandMap implementation to determine the file name, to
better support systems such as Windows that use the file name
extension to choose between the commands available to support
a given MIME type.  We add the following methods to CommandMap:

    /**
     * Get the preferred command list from a MIME Type. The actual semantics
     * are determined by the implementation of the CommandMap. <p>
     *
     * The <code>DataSource</code> provides extra information, such as
     * the file name, that a CommandMap implementation may use to further
     * refine the list of commands that are returned.  The implementation
     * in this class simply calls the <code>getPreferredCommands</code>
     * method that ignores this argument.
     *
     * @param mimeType	the MIME type
     * @param ds	a DataSource for the data
     * @return the CommandInfo classes that represent the command Beans.
     * @since	JAF 1.1
     */
    public CommandInfo[] getPreferredCommands(String mimeType, DataSource ds)

    /**
     * Get all the available commands for this type. This method
     * should return all the possible commands for this MIME type. <p>
     *
     * The <code>DataSource</code> provides extra information, such as
     * the file name, that a CommandMap implementation may use to further
     * refine the list of commands that are returned.  The implementation
     * in this class simply calls the <code>getAllCommands</code>
     * method that ignores this argument.
     *
     * @param mimeType	the MIME type
     * @param ds	a DataSource for the data
     * @return the CommandInfo objects representing all the commands.
     * @since	JAF 1.1
     */
    public CommandInfo[] getAllCommands(String mimeType, DataSource ds)

    /**
     * Get the default command corresponding to the MIME type. <p>
     *
     * The <code>DataSource</code> provides extra information, such as
     * the file name, that a CommandMap implementation may use to further
     * refine the command that is chosen.  The implementation
     * in this class simply calls the <code>getCommand</code>
     * method that ignores this argument.
     *
     * @param mimeType	the MIME type
     * @param cmdName	the command name
     * @param ds	a DataSource for the data
     * @return the CommandInfo corresponding to the command.
     * @since	JAF 1.1
     */
    public CommandInfo getCommand(String mimeType, String cmdName,
				DataSource ds)

    /**
     * Locate a DataContentHandler that corresponds to the MIME type.
     * The mechanism and semantics for determining this are determined
     * by the implementation of the particular CommandMap. <p>
     *
     * The <code>DataSource</code> provides extra information, such as
     * the file name, that a CommandMap implementation may use to further
     * refine the choice of DataContentHandler.  The implementation
     * in this class simply calls the <code>createDataContentHandler</code>
     * method that ignores this argument.
     *
     * @param mimeType	the MIME type
     * @param ds	a DataSource for the data
     * @return		the DataContentHandler for the MIME type
     * @since	JAF 1.1
     */
    public DataContentHandler createDataContentHandler(String mimeType,
				DataSource ds)


As described, the default implementations of these methods simply
call the existing CommandMap methods that don't require a
DataSource object.  The DataHandler implementation is changed to
call these new methods if created with a DataSource.

The JAF 1.1 Reference Implementation would not provide a CommandMap
implementation that uses these new methods.


===================================================================

3.  MailcapCommandMap needs support for "fallback" entries (6252930)
--------------------------------------------------------------------

This RFE describes a problem with wildcard matching and providing
fallbacks for JAF commands, in particular DataContentHandlers used
by JavaMail.  To support the scenario described in that bug report,
we add a special "command" entry that can be added to a mailcap
entry to indicate that the mailcap entry defines fallback commands
that should only be used if no regular entry is available.  An
attribute of the form

	x-java-fallback-entry=true

in the mailcap entry indicates a fallback entry.  For example:

	text/*;; x-java-fallback-entry=true; x-java-view=com.sun.TextViewer

The MailcapCommandMap implementation supports this attribute.
Methods that return an array of commands will include commands
from fallback entries after commands from regular entries.
Methods that use or return only a single command will search
fallback entries after regular entries.  This two level hierarchy,
in combination with the existing search rules for mailcap files,
is sufficient to handle the common use cases.


===================================================================

4.  MailcapCommandMap should store *ALL* mailcap entries (4848096)
------------------------------------------------------------------

This RFE requests the ability to retrieve the native command
line associated with a mailcap entry.  To support this we add
a method to MailcapCommandMap:

    /**
     * Get the native commands for the given MIME type.
     * Returns an array of strings where each string is
     * an entire mailcap file entry.  The application
     * will need to parse the entry to extract the actual
     * command as well as any attributes it needs. See
     * <A HREF="http://www.ietf.org/rfc/rfc1524.txt">RFC 1524</A>
     * for details of the mailcap entry syntax.  Only mailcap
     * entries that specify a view command for the specified
     * MIME type are returned.
     *
     * @return	array of native command entries
     * @since	JAF 1.1
     */
    public String[] getNativeCommands(String mimeType)

An application can choose to use these native "view" commands
using (e.g.) the Runtime.exec method.
