34 import com.oracle.tools.packager.StandardBundlerParam;
35 import com.oracle.tools.packager.UnsupportedPlatformException;
36 import jdk.packager.builders.mac.MacAppImageBuilder;
37
38 import jdk.packager.internal.JLinkBundlerHelper;
39
40 import java.io.File;
41 import java.io.IOException;
42 import java.math.BigInteger;
43 import java.text.MessageFormat;
44 import java.util.Arrays;
45 import java.util.Collection;
46 import java.util.HashMap;
47 import java.util.Map;
48 import java.util.Optional;
49 import java.util.ResourceBundle;
50
51 import static com.oracle.tools.packager.StandardBundlerParam.*;
52 import static com.oracle.tools.packager.mac.MacBaseInstallerBundler.*;
53 import jdk.packager.builders.AbstractAppImageBuilder;
54
55 public class MacAppBundler extends AbstractImageBundler {
56
57 private static final ResourceBundle I18N =
58 ResourceBundle.getBundle(MacAppBundler.class.getName());
59
60 public final static String MAC_BUNDLER_PREFIX =
61 BUNDLER_PREFIX + "macosx" + File.separator;
62
63 private static final String TEMPLATE_BUNDLE_ICON = "GenericApp.icns";
64
65 private static Map<String, String> getMacCategories() {
66 Map<String, String> map = new HashMap<>();
67 map.put("Business", "public.app-category.business");
68 map.put("Developer Tools", "public.app-category.developer-tools");
69 map.put("Education", "public.app-category.education");
70 map.put("Entertainment", "public.app-category.entertainment");
71 map.put("Finance", "public.app-category.finance");
72 map.put("Games", "public.app-category.games");
73 map.put("Graphics & Design", "public.app-category.graphics-design");
165 params -> {
166 File configRoot = new File(BUILD_ROOT.fetchFrom(params), "macosx");
167 configRoot.mkdirs();
168 return configRoot;
169 },
170 (s, p) -> new File(s));
171
172 public static final BundlerParamInfo<String> DEFAULT_ICNS_ICON = new StandardBundlerParam<>(
173 I18N.getString("param.default-icon-icns"),
174 I18N.getString("param.default-icon-icns.description"),
175 ".mac.default.icns",
176 String.class,
177 params -> TEMPLATE_BUNDLE_ICON,
178 (s, p) -> s);
179
180 public static final BundlerParamInfo<String> DEVELOPER_ID_APP_SIGNING_KEY = new StandardBundlerParam<>(
181 I18N.getString("param.signing-key-developer-id-app.name"),
182 I18N.getString("param.signing-key-developer-id-app.description"),
183 "mac.signing-key-developer-id-app",
184 String.class,
185 params -> MacBaseInstallerBundler.findKey("Developer ID Application: " + SIGNING_KEY_USER.fetchFrom(params), SIGNING_KEYCHAIN.fetchFrom(params), VERBOSE.fetchFrom(params)),
186 (s, p) -> s);
187
188 public static final BundlerParamInfo<String> BUNDLE_ID_SIGNING_PREFIX = new StandardBundlerParam<>(
189 I18N.getString("param.bundle-id-signing-prefix.name"),
190 I18N.getString("param.bundle-id-signing-prefix.description"),
191 "mac.bundle-id-signing-prefix",
192 String.class,
193 params -> IDENTIFIER.fetchFrom(params) + ".",
194 (s, p) -> s);
195
196 public static final BundlerParamInfo<File> ICON_ICNS = new StandardBundlerParam<>(
197 I18N.getString("param.icon-icns.name"),
198 I18N.getString("param.icon-icns.description"),
199 "icon.icns",
200 File.class,
201 params -> {
202 File f = ICON.fetchFrom(params);
203 if (f != null && !f.getName().toLowerCase().endsWith(".icns")) {
204 Log.info(MessageFormat.format(I18N.getString("message.icon-not-icns"), f));
205 return null;
|
34 import com.oracle.tools.packager.StandardBundlerParam;
35 import com.oracle.tools.packager.UnsupportedPlatformException;
36 import jdk.packager.builders.mac.MacAppImageBuilder;
37
38 import jdk.packager.internal.JLinkBundlerHelper;
39
40 import java.io.File;
41 import java.io.IOException;
42 import java.math.BigInteger;
43 import java.text.MessageFormat;
44 import java.util.Arrays;
45 import java.util.Collection;
46 import java.util.HashMap;
47 import java.util.Map;
48 import java.util.Optional;
49 import java.util.ResourceBundle;
50
51 import static com.oracle.tools.packager.StandardBundlerParam.*;
52 import static com.oracle.tools.packager.mac.MacBaseInstallerBundler.*;
53 import jdk.packager.builders.AbstractAppImageBuilder;
54 import jdk.packager.internal.mac.MacCertificate;
55
56 public class MacAppBundler extends AbstractImageBundler {
57
58 private static final ResourceBundle I18N =
59 ResourceBundle.getBundle(MacAppBundler.class.getName());
60
61 public final static String MAC_BUNDLER_PREFIX =
62 BUNDLER_PREFIX + "macosx" + File.separator;
63
64 private static final String TEMPLATE_BUNDLE_ICON = "GenericApp.icns";
65
66 private static Map<String, String> getMacCategories() {
67 Map<String, String> map = new HashMap<>();
68 map.put("Business", "public.app-category.business");
69 map.put("Developer Tools", "public.app-category.developer-tools");
70 map.put("Education", "public.app-category.education");
71 map.put("Entertainment", "public.app-category.entertainment");
72 map.put("Finance", "public.app-category.finance");
73 map.put("Games", "public.app-category.games");
74 map.put("Graphics & Design", "public.app-category.graphics-design");
166 params -> {
167 File configRoot = new File(BUILD_ROOT.fetchFrom(params), "macosx");
168 configRoot.mkdirs();
169 return configRoot;
170 },
171 (s, p) -> new File(s));
172
173 public static final BundlerParamInfo<String> DEFAULT_ICNS_ICON = new StandardBundlerParam<>(
174 I18N.getString("param.default-icon-icns"),
175 I18N.getString("param.default-icon-icns.description"),
176 ".mac.default.icns",
177 String.class,
178 params -> TEMPLATE_BUNDLE_ICON,
179 (s, p) -> s);
180
181 public static final BundlerParamInfo<String> DEVELOPER_ID_APP_SIGNING_KEY = new StandardBundlerParam<>(
182 I18N.getString("param.signing-key-developer-id-app.name"),
183 I18N.getString("param.signing-key-developer-id-app.description"),
184 "mac.signing-key-developer-id-app",
185 String.class,
186 params -> {
187 String result = MacBaseInstallerBundler.findKey("Developer ID Application: " + SIGNING_KEY_USER.fetchFrom(params),
188 SIGNING_KEYCHAIN.fetchFrom(params),
189 VERBOSE.fetchFrom(params));
190 if (result != null) {
191 MacCertificate certificate = new MacCertificate(result, VERBOSE.fetchFrom(params));
192
193 if (!certificate.isValid()) {
194 Log.info(MessageFormat.format(I18N.getString("error.certificate.expired"), result));
195 }
196 }
197
198 return result;
199 },
200 (s, p) -> s);
201
202 public static final BundlerParamInfo<String> BUNDLE_ID_SIGNING_PREFIX = new StandardBundlerParam<>(
203 I18N.getString("param.bundle-id-signing-prefix.name"),
204 I18N.getString("param.bundle-id-signing-prefix.description"),
205 "mac.bundle-id-signing-prefix",
206 String.class,
207 params -> IDENTIFIER.fetchFrom(params) + ".",
208 (s, p) -> s);
209
210 public static final BundlerParamInfo<File> ICON_ICNS = new StandardBundlerParam<>(
211 I18N.getString("param.icon-icns.name"),
212 I18N.getString("param.icon-icns.description"),
213 "icon.icns",
214 File.class,
215 params -> {
216 File f = ICON.fetchFrom(params);
217 if (f != null && !f.getName().toLowerCase().endsWith(".icns")) {
218 Log.info(MessageFormat.format(I18N.getString("message.icon-not-icns"), f));
219 return null;
|