235 return false; 236 } 237 238 return true; 239 } 240 241 @Override 242 public boolean validate(Map<String, ? super Object> params) 243 throws UnsupportedPlatformException, ConfigException { 244 try { 245 return doValidate(params); 246 } catch (RuntimeException re) { 247 if (re.getCause() instanceof ConfigException) { 248 throw (ConfigException) re.getCause(); 249 } else { 250 throw new ConfigException(re); 251 } 252 } 253 } 254 255 private boolean doValidate(Map<String, ? super Object> p) 256 throws UnsupportedPlatformException, ConfigException { 257 if (Platform.getPlatform() != Platform.MAC) { 258 throw new UnsupportedPlatformException(); 259 } 260 261 imageBundleValidation(p); 262 263 if (StandardBundlerParam.getPredefinedAppImage(p) != null) { 264 return true; 265 } 266 267 // validate short version 268 if (!validCFBundleVersion(MAC_CF_BUNDLE_VERSION.fetchFrom(p))) { 269 throw new ConfigException( 270 I18N.getString("error.invalid-cfbundle-version"), 271 I18N.getString("error.invalid-cfbundle-version.advice")); 272 } 273 274 // reject explicitly set sign to true and no valid signature key 275 if (Optional.ofNullable(MacAppImageBuilder. 276 SIGN_BUNDLE.fetchFrom(p)).orElse(Boolean.FALSE)) { 277 String signingIdentity = DEVELOPER_ID_APP_SIGNING_KEY.fetchFrom(p); 278 if (signingIdentity == null) { 279 throw new ConfigException( 280 I18N.getString("error.explicit-sign-no-cert"), 281 I18N.getString("error.explicit-sign-no-cert.advice")); 282 } 283 } 284 285 return true; 286 } 287 288 File doBundle(Map<String, ? super Object> p, File outputDirectory, 289 boolean dependentTask) throws PackagerException { 290 if (StandardBundlerParam.isRuntimeInstaller(p)) { 291 return PREDEFINED_RUNTIME_IMAGE.fetchFrom(p); 292 } else { 293 return doAppBundle(p, outputDirectory, dependentTask); 294 } 295 } 296 297 File doAppBundle(Map<String, ? super Object> p, File outputDirectory, 298 boolean dependentTask) throws PackagerException { 299 try { 300 File rootDirectory = createRoot(p, outputDirectory, dependentTask, 301 APP_NAME.fetchFrom(p) + ".app"); 302 AbstractAppImageBuilder appBuilder = 303 new MacAppImageBuilder(p, outputDirectory.toPath()); 304 if (PREDEFINED_RUNTIME_IMAGE.fetchFrom(p) == null ) { 305 JLinkBundlerHelper.execute(p, appBuilder); 306 } else { 307 StandardBundlerParam.copyPredefinedRuntimeImage(p, appBuilder); 308 } 309 return rootDirectory; 310 } catch (PackagerException pe) { 311 throw pe; 312 } catch (Exception ex) { 313 Log.verbose(ex); 314 throw new PackagerException(ex); 315 } 316 } 317 318 ///////////////////////////////////////////////////////////////////////// 319 // Implement Bundler 320 ///////////////////////////////////////////////////////////////////////// 321 322 @Override 323 public String getName() { 324 return I18N.getString("app.bundler.name"); 325 } 326 327 @Override | 235 return false; 236 } 237 238 return true; 239 } 240 241 @Override 242 public boolean validate(Map<String, ? super Object> params) 243 throws UnsupportedPlatformException, ConfigException { 244 try { 245 return doValidate(params); 246 } catch (RuntimeException re) { 247 if (re.getCause() instanceof ConfigException) { 248 throw (ConfigException) re.getCause(); 249 } else { 250 throw new ConfigException(re); 251 } 252 } 253 } 254 255 private boolean doValidate(Map<String, ? super Object> params) 256 throws UnsupportedPlatformException, ConfigException { 257 if (Platform.getPlatform() != Platform.MAC) { 258 throw new UnsupportedPlatformException(); 259 } 260 261 imageBundleValidation(params); 262 263 if (StandardBundlerParam.getPredefinedAppImage(params) != null) { 264 return true; 265 } 266 267 // validate short version 268 if (!validCFBundleVersion(MAC_CF_BUNDLE_VERSION.fetchFrom(params))) { 269 throw new ConfigException( 270 I18N.getString("error.invalid-cfbundle-version"), 271 I18N.getString("error.invalid-cfbundle-version.advice")); 272 } 273 274 // reject explicitly set sign to true and no valid signature key 275 if (Optional.ofNullable(MacAppImageBuilder. 276 SIGN_BUNDLE.fetchFrom(params)).orElse(Boolean.FALSE)) { 277 String signingIdentity = 278 DEVELOPER_ID_APP_SIGNING_KEY.fetchFrom(params); 279 if (signingIdentity == null) { 280 throw new ConfigException( 281 I18N.getString("error.explicit-sign-no-cert"), 282 I18N.getString("error.explicit-sign-no-cert.advice")); 283 } 284 } 285 286 return true; 287 } 288 289 File doBundle(Map<String, ? super Object> params, File outputDirectory, 290 boolean dependentTask) throws PackagerException { 291 if (StandardBundlerParam.isRuntimeInstaller(params)) { 292 return PREDEFINED_RUNTIME_IMAGE.fetchFrom(params); 293 } else { 294 return doAppBundle(params, outputDirectory, dependentTask); 295 } 296 } 297 298 File doAppBundle(Map<String, ? super Object> params, File outputDirectory, 299 boolean dependentTask) throws PackagerException { 300 try { 301 File rootDirectory = createRoot(params, outputDirectory, 302 dependentTask, APP_NAME.fetchFrom(params) + ".app"); 303 AbstractAppImageBuilder appBuilder = 304 new MacAppImageBuilder(params, outputDirectory.toPath()); 305 if (PREDEFINED_RUNTIME_IMAGE.fetchFrom(params) == null ) { 306 JLinkBundlerHelper.execute(params, appBuilder); 307 } else { 308 StandardBundlerParam.copyPredefinedRuntimeImage( 309 params, appBuilder); 310 } 311 return rootDirectory; 312 } catch (PackagerException pe) { 313 throw pe; 314 } catch (Exception ex) { 315 Log.verbose(ex); 316 throw new PackagerException(ex); 317 } 318 } 319 320 ///////////////////////////////////////////////////////////////////////// 321 // Implement Bundler 322 ///////////////////////////////////////////////////////////////////////// 323 324 @Override 325 public String getName() { 326 return I18N.getString("app.bundler.name"); 327 } 328 329 @Override |