src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java
branchJDK-8200758-branch
changeset 58647 2c43b89b1679
parent 58538 12c965587689
child 58670 6fb9e12d5595
equal deleted inserted replaced
58608:a561014c28d0 58647:2c43b89b1679
    23  * questions.
    23  * questions.
    24  */
    24  */
    25 
    25 
    26 package jdk.jpackage.internal;
    26 package jdk.jpackage.internal;
    27 
    27 
    28 import java.io.BufferedWriter;
       
    29 import java.io.File;
    28 import java.io.File;
    30 import java.io.FileInputStream;
    29 import java.io.FileInputStream;
    31 import java.io.FileOutputStream;
       
    32 import java.io.FileWriter;
       
    33 import java.io.IOException;
    30 import java.io.IOException;
    34 import java.io.InputStream;
    31 import java.io.InputStream;
    35 import java.io.OutputStream;
       
    36 import java.io.OutputStreamWriter;
       
    37 import java.io.UncheckedIOException;
       
    38 import java.io.Writer;
    32 import java.io.Writer;
    39 import java.math.BigInteger;
    33 import java.math.BigInteger;
    40 import java.nio.file.Files;
    34 import java.nio.file.Files;
    41 import java.nio.file.Path;
    35 import java.nio.file.Path;
    42 import java.nio.file.StandardCopyOption;
    36 import java.nio.file.StandardCopyOption;
    61 import javax.xml.xpath.XPathFactory;
    55 import javax.xml.xpath.XPathFactory;
    62 
    56 
    63 import static jdk.jpackage.internal.StandardBundlerParam.*;
    57 import static jdk.jpackage.internal.StandardBundlerParam.*;
    64 import static jdk.jpackage.internal.MacBaseInstallerBundler.*;
    58 import static jdk.jpackage.internal.MacBaseInstallerBundler.*;
    65 import static jdk.jpackage.internal.MacAppBundler.*;
    59 import static jdk.jpackage.internal.MacAppBundler.*;
       
    60 import static jdk.jpackage.internal.OverridableResource.createResource;
    66 
    61 
    67 public class MacAppImageBuilder extends AbstractAppImageBuilder {
    62 public class MacAppImageBuilder extends AbstractAppImageBuilder {
    68 
    63 
    69     private static final ResourceBundle I18N = ResourceBundle.getBundle(
    64     private static final ResourceBundle I18N = ResourceBundle.getBundle(
    70             "jdk.jpackage.internal.resources.MacResources");
    65             "jdk.jpackage.internal.resources.MacResources");
   140                         } else {
   135                         } else {
   141                             return "100";
   136                             return "100";
   142                         }
   137                         }
   143                     },
   138                     },
   144                     (s, p) -> s);
   139                     (s, p) -> s);
   145 
       
   146     public static final BundlerParamInfo<String> DEFAULT_ICNS_ICON =
       
   147             new StandardBundlerParam<>(
       
   148             ".mac.default.icns",
       
   149             String.class,
       
   150             params -> TEMPLATE_BUNDLE_ICON,
       
   151             (s, p) -> s);
       
   152 
   140 
   153     public static final BundlerParamInfo<File> ICON_ICNS =
   141     public static final BundlerParamInfo<File> ICON_ICNS =
   154             new StandardBundlerParam<>(
   142             new StandardBundlerParam<>(
   155             "icon.icns",
   143             "icon.icns",
   156             File.class,
   144             File.class,
   310 
   298 
   311         // Copy class path entries to Java folder
   299         // Copy class path entries to Java folder
   312         copyClassPathEntries(appDir, params);
   300         copyClassPathEntries(appDir, params);
   313 
   301 
   314         /*********** Take care of "config" files *******/
   302         /*********** Take care of "config" files *******/
   315         File icon = ICON_ICNS.fetchFrom(params);
   303 
   316 
   304         createResource(TEMPLATE_BUNDLE_ICON, params)
   317         InputStream in = locateResource(
   305                 .setCategory("icon")
   318                 APP_NAME.fetchFrom(params) + ".icns",
   306                 .setExternal(ICON_ICNS.fetchFrom(params))
   319                 "icon",
   307                 .saveToFile(resourcesDir.resolve(APP_NAME.fetchFrom(params)
   320                 DEFAULT_ICNS_ICON.fetchFrom(params),
   308                         + ".icns"));
   321                 icon,
       
   322                 VERBOSE.fetchFrom(params),
       
   323                 RESOURCE_DIR.fetchFrom(params));
       
   324         Files.copy(in,
       
   325                 resourcesDir.resolve(APP_NAME.fetchFrom(params) + ".icns"),
       
   326                 StandardCopyOption.REPLACE_EXISTING);
       
   327 
   309 
   328         // copy file association icons
   310         // copy file association icons
   329         for (Map<String, ?
   311         for (Map<String, ?
   330                 super Object> fa : FILE_ASSOCIATIONS.fetchFrom(params)) {
   312                 super Object> fa : FILE_ASSOCIATIONS.fetchFrom(params)) {
   331             File f = FA_ICON.fetchFrom(fa);
   313             File f = FA_ICON.fetchFrom(fa);
   455                 getBundleName(params): "Java Runtime Image";
   437                 getBundleName(params): "Java Runtime Image";
   456         data.put("CF_BUNDLE_NAME", name);
   438         data.put("CF_BUNDLE_NAME", name);
   457         data.put("CF_BUNDLE_VERSION", VERSION.fetchFrom(params));
   439         data.put("CF_BUNDLE_VERSION", VERSION.fetchFrom(params));
   458         data.put("CF_BUNDLE_SHORT_VERSION_STRING", VERSION.fetchFrom(params));
   440         data.put("CF_BUNDLE_SHORT_VERSION_STRING", VERSION.fetchFrom(params));
   459 
   441 
   460         try (Writer w = Files.newBufferedWriter(file.toPath())) {
   442         createResource(TEMPLATE_RUNTIME_INFO_PLIST, params)
   461             w.write(preprocessTextResource("Runtime-Info.plist",
   443                 .setPublicName("Runtime-Info.plist")
   462                     I18N.getString("resource.runtime-info-plist"),
   444                 .setCategory(I18N.getString("resource.runtime-info-plist"))
   463                     TEMPLATE_RUNTIME_INFO_PLIST,
   445                 .setSubstitutionData(data)
   464                     data,
   446                 .saveToFile(file);
   465                     VERBOSE.fetchFrom(params),
       
   466                     RESOURCE_DIR.fetchFrom(params)));
       
   467         }
       
   468     }
   447     }
   469 
   448 
   470     private void writeInfoPlist(File file, Map<String, ? super Object> params)
   449     private void writeInfoPlist(File file, Map<String, ? super Object> params)
   471             throws IOException {
   450             throws IOException {
   472         Log.verbose(MessageFormat.format(I18N.getString(
   451         Log.verbose(MessageFormat.format(I18N.getString(
   662         } else {
   641         } else {
   663             associationData = "";
   642             associationData = "";
   664         }
   643         }
   665         data.put("DEPLOY_FILE_ASSOCIATIONS", associationData);
   644         data.put("DEPLOY_FILE_ASSOCIATIONS", associationData);
   666 
   645 
   667 
   646         createResource(TEMPLATE_INFO_PLIST_LITE, params)
   668         try (Writer w = Files.newBufferedWriter(file.toPath())) {
   647                 .setCategory(I18N.getString("resource.app-info-plist"))
   669             w.write(preprocessTextResource(
   648                 .setSubstitutionData(data)
   670                     // getConfig_InfoPlist(params).getName(),
   649                 .setPublicName("Info.plist")
   671                     "Info.plist",
   650                 .saveToFile(file);
   672                     I18N.getString("resource.app-info-plist"),
       
   673                     TEMPLATE_INFO_PLIST_LITE,
       
   674                     data, VERBOSE.fetchFrom(params),
       
   675                     RESOURCE_DIR.fetchFrom(params)));
       
   676         }
       
   677     }
   651     }
   678 
   652 
   679     private void writePkgInfo(File file) throws IOException {
   653     private void writePkgInfo(File file) throws IOException {
   680         //hardcoded as it does not seem we need to change it ever
   654         //hardcoded as it does not seem we need to change it ever
   681         String signature = "????";
   655         String signature = "????";