1 /*
   2  * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javax.activation;
  27 
  28 
  29 /**
  30  * The CommandMap class provides an interface to a registry of
  31  * command objects available in the system.
  32  * Developers are expected to either use the CommandMap
  33  * implementation included with this package (MailcapCommandMap) or
  34  * develop their own. Note that some of the methods in this class are
  35  * abstract.
  36  *
  37  * @since 1.6
  38  */
  39 public abstract class CommandMap {
  40     private static CommandMap defaultCommandMap = null;
  41 
  42     /**
  43      * Get the default CommandMap.
  44      * <p>
  45      *
  46      * <ul>
  47      * <li> In cases where a CommandMap instance has been previously set
  48      *      to some value (via <i>setDefaultCommandMap</i>)
  49      *  return the CommandMap.
  50      * <li>
  51      *  In cases where no CommandMap has been set, the CommandMap
  52      *       creates an instance of <code>MailcapCommandMap</code> and
  53      *       set that to the default, returning its value.
  54      *
  55      * </ul>
  56      *
  57      * @return the CommandMap
  58      */
  59     public static CommandMap getDefaultCommandMap() {
  60         if (defaultCommandMap == null)
  61             defaultCommandMap = new MailcapCommandMap();
  62 
  63         return defaultCommandMap;
  64     }
  65 
  66     /**
  67      * Set the default CommandMap. Reset the CommandMap to the default by
  68      * calling this method with <code>null</code>.
  69      *
  70      * @param commandMap The new default CommandMap.
  71      * @exception SecurityException if the caller doesn't have permission
  72      *                                  to change the default
  73      */
  74     public static void setDefaultCommandMap(CommandMap commandMap) {
  75         SecurityManager security = System.getSecurityManager();
  76         if (security != null) {
  77             try {
  78                 // if it's ok with the SecurityManager, it's ok with me...
  79                 security.checkSetFactory();
  80             } catch (SecurityException ex) {
  81                 // otherwise, we also allow it if this code and the
  82                 // factory come from the same class loader (e.g.,
  83                 // the JAF classes were loaded with the applet classes).
  84                 if (CommandMap.class.getClassLoader() !=
  85                             commandMap.getClass().getClassLoader())
  86                     throw ex;
  87             }
  88         }
  89         defaultCommandMap = commandMap;
  90     }
  91 
  92     /**
  93      * Get the preferred command list from a MIME Type. The actual semantics
  94      * are determined by the implementation of the CommandMap.
  95      *
  96      * @param mimeType  the MIME type
  97      * @return the CommandInfo classes that represent the command Beans.
  98      */
  99     abstract public  CommandInfo[] getPreferredCommands(String mimeType);
 100 
 101     /**
 102      * Get the preferred command list from a MIME Type. The actual semantics
 103      * are determined by the implementation of the CommandMap. <p>
 104      *
 105      * The <code>DataSource</code> provides extra information, such as
 106      * the file name, that a CommandMap implementation may use to further
 107      * refine the list of commands that are returned.  The implementation
 108      * in this class simply calls the <code>getPreferredCommands</code>
 109      * method that ignores this argument.
 110      *
 111      * @param mimeType  the MIME type
 112      * @param ds        a DataSource for the data
 113      * @return the CommandInfo classes that represent the command Beans.
 114      * @since   JAF 1.1
 115      */
 116     public CommandInfo[] getPreferredCommands(String mimeType, DataSource ds) {
 117         return getPreferredCommands(mimeType);
 118     }
 119 
 120     /**
 121      * Get all the available commands for this type. This method
 122      * should return all the possible commands for this MIME type.
 123      *
 124      * @param mimeType  the MIME type
 125      * @return the CommandInfo objects representing all the commands.
 126      */
 127     abstract public CommandInfo[] getAllCommands(String mimeType);
 128 
 129     /**
 130      * Get all the available commands for this type. This method
 131      * should return all the possible commands for this MIME type. <p>
 132      *
 133      * The <code>DataSource</code> provides extra information, such as
 134      * the file name, that a CommandMap implementation may use to further
 135      * refine the list of commands that are returned.  The implementation
 136      * in this class simply calls the <code>getAllCommands</code>
 137      * method that ignores this argument.
 138      *
 139      * @param mimeType  the MIME type
 140      * @param ds        a DataSource for the data
 141      * @return the CommandInfo objects representing all the commands.
 142      * @since   JAF 1.1
 143      */
 144     public CommandInfo[] getAllCommands(String mimeType, DataSource ds) {
 145         return getAllCommands(mimeType);
 146     }
 147 
 148     /**
 149      * Get the default command corresponding to the MIME type.
 150      *
 151      * @param mimeType  the MIME type
 152      * @param cmdName   the command name
 153      * @return the CommandInfo corresponding to the command.
 154      */
 155     abstract public CommandInfo getCommand(String mimeType, String cmdName);
 156 
 157     /**
 158      * Get the default command corresponding to the MIME type. <p>
 159      *
 160      * The <code>DataSource</code> provides extra information, such as
 161      * the file name, that a CommandMap implementation may use to further
 162      * refine the command that is chosen.  The implementation
 163      * in this class simply calls the <code>getCommand</code>
 164      * method that ignores this argument.
 165      *
 166      * @param mimeType  the MIME type
 167      * @param cmdName   the command name
 168      * @param ds        a DataSource for the data
 169      * @return the CommandInfo corresponding to the command.
 170      * @since   JAF 1.1
 171      */
 172     public CommandInfo getCommand(String mimeType, String cmdName,
 173                                 DataSource ds) {
 174         return getCommand(mimeType, cmdName);
 175     }
 176 
 177     /**
 178      * Locate a DataContentHandler that corresponds to the MIME type.
 179      * The mechanism and semantics for determining this are determined
 180      * by the implementation of the particular CommandMap.
 181      *
 182      * @param mimeType  the MIME type
 183      * @return          the DataContentHandler for the MIME type
 184      */
 185     abstract public DataContentHandler createDataContentHandler(String
 186                                                                 mimeType);
 187 
 188     /**
 189      * Locate a DataContentHandler that corresponds to the MIME type.
 190      * The mechanism and semantics for determining this are determined
 191      * by the implementation of the particular CommandMap. <p>
 192      *
 193      * The <code>DataSource</code> provides extra information, such as
 194      * the file name, that a CommandMap implementation may use to further
 195      * refine the choice of DataContentHandler.  The implementation
 196      * in this class simply calls the <code>createDataContentHandler</code>
 197      * method that ignores this argument.
 198      *
 199      * @param mimeType  the MIME type
 200      * @param ds        a DataSource for the data
 201      * @return          the DataContentHandler for the MIME type
 202      * @since   JAF 1.1
 203      */
 204     public DataContentHandler createDataContentHandler(String mimeType,
 205                                 DataSource ds) {
 206         return createDataContentHandler(mimeType);
 207     }
 208 
 209     /**
 210      * Get all the MIME types known to this command map.
 211      * If the command map doesn't support this operation,
 212      * null is returned.
 213      *
 214      * @return          array of MIME types as strings, or null if not supported
 215      * @since   JAF 1.1
 216      */
 217     public String[] getMimeTypes() {
 218         return null;
 219     }
 220 }