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<>();
|