< prev index next >

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacBaseInstallerBundler.java

Print this page




  34 import java.util.ArrayList;
  35 import java.util.Arrays;
  36 import java.util.Collection;
  37 import java.util.LinkedHashSet;
  38 import java.util.List;
  39 import java.util.Map;
  40 import java.util.ResourceBundle;
  41 import java.util.regex.Matcher;
  42 import java.util.regex.Pattern;
  43 
  44 import static jdk.jpackage.internal.StandardBundlerParam.*;
  45 
  46 public abstract class MacBaseInstallerBundler extends AbstractBundler {
  47 
  48     private static final ResourceBundle I18N = ResourceBundle.getBundle(
  49             "jdk.jpackage.internal.resources.MacResources");
  50 
  51     // This could be generalized more to be for any type of Image Bundler
  52     public static final BundlerParamInfo<MacAppBundler> APP_BUNDLER =
  53             new StandardBundlerParam<>(
  54             I18N.getString("param.app-bundler.name"),
  55             I18N.getString("param.app-bundle.description"),
  56             "mac.app.bundler",
  57             MacAppBundler.class,
  58             params -> new MacAppBundler(),
  59             (s, p) -> null);
  60 
  61     public final BundlerParamInfo<File> APP_IMAGE_BUILD_ROOT =
  62             new StandardBundlerParam<>(
  63             I18N.getString("param.app-image-build-root.name"),
  64             I18N.getString("param.app-image-build-root.description"),
  65             "mac.app.imageRoot",
  66             File.class,
  67             params -> {
  68                 File imageDir = IMAGES_ROOT.fetchFrom(params);
  69                 if (!imageDir.exists()) imageDir.mkdirs();
  70                 try {
  71                     return Files.createTempDirectory(
  72                             imageDir.toPath(), "image-").toFile();
  73                 } catch (IOException e) {
  74                     return new File(imageDir, getID()+ ".image");
  75                 }
  76             },
  77             (s, p) -> new File(s));
  78 
  79     public static final BundlerParamInfo<String> SIGNING_KEY_USER =
  80             new StandardBundlerParam<>(
  81             I18N.getString("param.signing-key-name.name"),
  82             I18N.getString("param.signing-key-name.description"),
  83             Arguments.CLIOptions.MAC_SIGNING_KEY_NAME.getId(),
  84             String.class,
  85             params -> "",
  86             null);
  87 
  88     public static final BundlerParamInfo<String> SIGNING_KEYCHAIN =
  89             new StandardBundlerParam<>(
  90             I18N.getString("param.signing-keychain.name"),
  91             I18N.getString("param.signing-keychain.description"),
  92             Arguments.CLIOptions.MAC_SIGNING_KEYCHAIN.getId(),
  93             String.class,
  94             params -> "",
  95             null);
  96 
  97     public static final BundlerParamInfo<String> INSTALLER_NAME =
  98             new StandardBundlerParam<> (
  99             I18N.getString("param.installer-name.name"),
 100             I18N.getString("param.installer-name.description"),
 101             "mac.installerName",
 102             String.class,
 103             params -> {
 104                 String nm = APP_NAME.fetchFrom(params);
 105                 if (nm == null) return null;
 106 
 107                 String version = VERSION.fetchFrom(params);
 108                 if (version == null) {
 109                     return nm;
 110                 } else {
 111                     return nm + "-" + version;
 112                 }
 113             },
 114             (s, p) -> s);
 115 
 116     protected void validateAppImageAndBundeler(
 117             Map<String, ? super Object> params)
 118             throws ConfigException, UnsupportedPlatformException {
 119         if (PREDEFINED_APP_IMAGE.fetchFrom(params) != null) {
 120             File applicationImage = PREDEFINED_APP_IMAGE.fetchFrom(params);


 134                         I18N.getString(
 135                             "message.app-image-requires-app-name.advice"));
 136             }
 137             if (IDENTIFIER.fetchFrom(params) == null) {
 138                 throw new ConfigException(
 139                         I18N.getString("message.app-image-requires-identifier"),
 140                         I18N.getString(
 141                             "message.app-image-requires-identifier.advice"));
 142             }
 143         } else {
 144             APP_BUNDLER.fetchFrom(params).validate(params);
 145         }
 146     }
 147 
 148     protected File prepareAppBundle(Map<String, ? super Object> p,
 149             boolean pkg) throws PackagerException {
 150         File predefinedImage = StandardBundlerParam.getPredefinedAppImage(p);
 151         if (predefinedImage != null) {
 152             return predefinedImage;
 153         }
 154         File appImageRoot = APP_IMAGE_BUILD_ROOT.fetchFrom(p);
 155         if (pkg) {
 156             // create pkg in dmg
 157             return new MacPkgBundler().bundle(p, appImageRoot);
 158         } else {
 159             return APP_BUNDLER.fetchFrom(p).doBundle(p, appImageRoot, true);
 160         }
 161     }
 162 
 163     @Override
 164     public Collection<BundlerParamInfo<?>> getBundleParameters() {
 165         Collection<BundlerParamInfo<?>> results = new LinkedHashSet<>();
 166 
 167         results.addAll(MacAppBundler.getAppBundleParameters());
 168         results.addAll(Arrays.asList(
 169                 APP_BUNDLER,
 170                 CONFIG_ROOT,
 171                 APP_IMAGE_BUILD_ROOT,
 172                 PREDEFINED_APP_IMAGE
 173         ));
 174 
 175         return results;
 176     }
 177 
 178     @Override
 179     public String getBundleType() {
 180         return "INSTALLER";
 181     }
 182 
 183     public static String findKey(String key, String keychainName,
 184             boolean verbose) {
 185         if (Platform.getPlatform() != Platform.MAC) {
 186             return null;
 187         }
 188 
 189         try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
 190                 PrintStream ps = new PrintStream(baos)) {
 191             List<String> searchOptions = new ArrayList<>();




  34 import java.util.ArrayList;
  35 import java.util.Arrays;
  36 import java.util.Collection;
  37 import java.util.LinkedHashSet;
  38 import java.util.List;
  39 import java.util.Map;
  40 import java.util.ResourceBundle;
  41 import java.util.regex.Matcher;
  42 import java.util.regex.Pattern;
  43 
  44 import static jdk.jpackage.internal.StandardBundlerParam.*;
  45 
  46 public abstract class MacBaseInstallerBundler extends AbstractBundler {
  47 
  48     private static final ResourceBundle I18N = ResourceBundle.getBundle(
  49             "jdk.jpackage.internal.resources.MacResources");
  50 
  51     // This could be generalized more to be for any type of Image Bundler
  52     public static final BundlerParamInfo<MacAppBundler> APP_BUNDLER =
  53             new StandardBundlerParam<>(


  54             "mac.app.bundler",
  55             MacAppBundler.class,
  56             params -> new MacAppBundler(),
  57             (s, p) -> null);
  58 
  59     public final BundlerParamInfo<File> APP_IMAGE_TEMP_ROOT =
  60             new StandardBundlerParam<>(


  61             "mac.app.imageRoot",
  62             File.class,
  63             params -> {
  64                 File imageDir = IMAGES_ROOT.fetchFrom(params);
  65                 if (!imageDir.exists()) imageDir.mkdirs();
  66                 try {
  67                     return Files.createTempDirectory(
  68                             imageDir.toPath(), "image-").toFile();
  69                 } catch (IOException e) {
  70                     return new File(imageDir, getID()+ ".image");
  71                 }
  72             },
  73             (s, p) -> new File(s));
  74 
  75     public static final BundlerParamInfo<String> SIGNING_KEY_USER =
  76             new StandardBundlerParam<>(


  77             Arguments.CLIOptions.MAC_SIGNING_KEY_NAME.getId(),
  78             String.class,
  79             params -> "",
  80             null);
  81 
  82     public static final BundlerParamInfo<String> SIGNING_KEYCHAIN =
  83             new StandardBundlerParam<>(


  84             Arguments.CLIOptions.MAC_SIGNING_KEYCHAIN.getId(),
  85             String.class,
  86             params -> "",
  87             null);
  88 
  89     public static final BundlerParamInfo<String> INSTALLER_NAME =
  90             new StandardBundlerParam<> (


  91             "mac.installerName",
  92             String.class,
  93             params -> {
  94                 String nm = APP_NAME.fetchFrom(params);
  95                 if (nm == null) return null;
  96 
  97                 String version = VERSION.fetchFrom(params);
  98                 if (version == null) {
  99                     return nm;
 100                 } else {
 101                     return nm + "-" + version;
 102                 }
 103             },
 104             (s, p) -> s);
 105 
 106     protected void validateAppImageAndBundeler(
 107             Map<String, ? super Object> params)
 108             throws ConfigException, UnsupportedPlatformException {
 109         if (PREDEFINED_APP_IMAGE.fetchFrom(params) != null) {
 110             File applicationImage = PREDEFINED_APP_IMAGE.fetchFrom(params);


 124                         I18N.getString(
 125                             "message.app-image-requires-app-name.advice"));
 126             }
 127             if (IDENTIFIER.fetchFrom(params) == null) {
 128                 throw new ConfigException(
 129                         I18N.getString("message.app-image-requires-identifier"),
 130                         I18N.getString(
 131                             "message.app-image-requires-identifier.advice"));
 132             }
 133         } else {
 134             APP_BUNDLER.fetchFrom(params).validate(params);
 135         }
 136     }
 137 
 138     protected File prepareAppBundle(Map<String, ? super Object> p,
 139             boolean pkg) throws PackagerException {
 140         File predefinedImage = StandardBundlerParam.getPredefinedAppImage(p);
 141         if (predefinedImage != null) {
 142             return predefinedImage;
 143         }
 144         File appImageRoot = APP_IMAGE_TEMP_ROOT.fetchFrom(p);
 145         if (pkg) {
 146             // create pkg in dmg
 147             return new MacPkgBundler().bundle(p, appImageRoot);
 148         } else {
 149             return APP_BUNDLER.fetchFrom(p).doBundle(p, appImageRoot, true);
 150         }
 151     }
 152 
 153     @Override
 154     public Collection<BundlerParamInfo<?>> getBundleParameters() {
 155         Collection<BundlerParamInfo<?>> results = new LinkedHashSet<>();
 156 
 157         results.addAll(MacAppBundler.getAppBundleParameters());
 158         results.addAll(Arrays.asList(
 159                 APP_BUNDLER,
 160                 CONFIG_ROOT,
 161                 APP_IMAGE_TEMP_ROOT,
 162                 PREDEFINED_APP_IMAGE
 163         ));
 164 
 165         return results;
 166     }
 167 
 168     @Override
 169     public String getBundleType() {
 170         return "INSTALLER";
 171     }
 172 
 173     public static String findKey(String key, String keychainName,
 174             boolean verbose) {
 175         if (Platform.getPlatform() != Platform.MAC) {
 176             return null;
 177         }
 178 
 179         try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
 180                 PrintStream ps = new PrintStream(baos)) {
 181             List<String> searchOptions = new ArrayList<>();


< prev index next >