src/jdk.packager/share/classes/jdk/packager/internal/Bundler.java
branchJDK-8200758-branch
changeset 57017 1b08af362a30
parent 57016 f63f13da91c0
child 57018 9d782e357916
equal deleted inserted replaced
57016:f63f13da91c0 57017:1b08af362a30
     1 /*
       
     2  * Copyright (c) 2014, 2018, 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 jdk.packager.internal;
       
    27 
       
    28 import java.io.File;
       
    29 import java.util.Collection;
       
    30 import java.util.Map;
       
    31 
       
    32 /**
       
    33  * Bundler
       
    34  *
       
    35  * The basic interface implemented by all Bundlers.
       
    36  */
       
    37 public interface Bundler {
       
    38     /**
       
    39      * @return User Friendly name of this bundler.
       
    40      */
       
    41     String getName();
       
    42 
       
    43     /**
       
    44      * @return A more verbose description of the bundler.
       
    45      */
       
    46     String getDescription();
       
    47 
       
    48     /**
       
    49      * @return Command line identifier of the bundler.  Should be unique.
       
    50      */
       
    51     String getID();
       
    52 
       
    53     /**
       
    54      * @return The bundle type of the bundle that is created by this bundler.
       
    55      */
       
    56     String getBundleType();
       
    57 
       
    58     /**
       
    59      * The parameters that this bundler uses to generate it's bundle.
       
    60      * @return immutable collection
       
    61      */
       
    62     Collection<BundlerParamInfo<?>> getBundleParameters();
       
    63 
       
    64     /**
       
    65      * Determines if this bundler will execute with the given parameters.
       
    66      *
       
    67      * @param params The parameters to be validate.  Validation may modify
       
    68      *               the map, so if you are going to be using the same map
       
    69      *               across multiple bundlers you should pass in a deep copy.
       
    70      * @return true if valid
       
    71      * @throws UnsupportedPlatformException If the bundler cannot run on this
       
    72      *         platform (i.e. creating mac apps on windows)
       
    73      * @throws ConfigException If the configuration params are incorrect.  The
       
    74      *         exception may contain advice on how to modify the params map
       
    75      *         to make it valid.
       
    76      */
       
    77     boolean validate(Map<String, ? super Object> params)
       
    78             throws UnsupportedPlatformException, ConfigException;
       
    79 
       
    80     /**
       
    81      * Creates a bundle from existing content.
       
    82      *
       
    83      * If a call to {@link #validate(java.util.Map)} date} returns true with
       
    84      * the parameters map, then you can expect a valid output.
       
    85      * However if an exception was thrown out of validate or it returned
       
    86      * false then you should not expect sensible results from this call.
       
    87      * It may or may not return a value, and it may or may not throw an
       
    88      * exception.  But any output should not be considered valid or sane.
       
    89      *
       
    90      * @param params The parameters as specified by getBundleParameters.
       
    91      *               Keyed by the id from the ParamInfo.  Execution may
       
    92      *               modify the map, so if you are going to be using the
       
    93      *               same map across multiple bundlers you should pass
       
    94      *               in a deep copy.
       
    95      * @param outputParentDir
       
    96      *   The parent dir that the returned bundle will be placed in.
       
    97      * @return The resulting bundled file
       
    98      *
       
    99      * For a bundler that produces a single artifact file this will be the
       
   100      * location of that artifact (.exe file, .deb file, etc)
       
   101      *
       
   102      * For a bundler that produces a specific directory format output this will
       
   103      * be the location of that specific directory (.app file, etc).
       
   104      *
       
   105      * For a bundler that produce multiple files, this will be a parent
       
   106      * directory of those files (linux and windows images), whose name is not
       
   107      * relevant to the result.
       
   108      *
       
   109      * @throws java.lang.IllegalArgumentException for any of the following
       
   110      * reasons:
       
   111      *  <ul>
       
   112      *      <li>A required parameter is not found in the params list, for
       
   113      *      example missing the main class.</li>
       
   114      *      <li>A parameter has the wrong type of an object, for example a
       
   115      *      String where a File is required</li>
       
   116      *      <li>Bundler specific incompatibilities with the parameters, for
       
   117      *      example a bad version number format or an application id with
       
   118      *      forward slashes.</li>
       
   119      *  </ul>
       
   120      */
       
   121     public File execute(
       
   122             Map<String, ? super Object> params, File outputParentDir);
       
   123 
       
   124      /**
       
   125      * Removes temporary files that are used for bundling.
       
   126      */
       
   127     public void cleanup(Map<String, ? super Object> params);
       
   128 
       
   129     /**
       
   130      * Returns "true" if this bundler is supported on current platform.
       
   131      */
       
   132     public boolean supported();
       
   133 }