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