19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.oracle.bundlers.windows; 27 28 import com.oracle.bundlers.StandardBundlerParam; 29 import com.sun.javafx.tools.packager.Log; 30 import com.sun.javafx.tools.packager.bundlers.IOUtils; 31 import com.sun.javafx.tools.packager.bundlers.RelativeFileSet; 32 33 import java.io.ByteArrayOutputStream; 34 import java.io.File; 35 import java.io.IOException; 36 import java.io.PrintStream; 37 import java.util.Map; 38 import java.util.ResourceBundle; 39 import java.util.function.Function; 40 import java.util.regex.Matcher; 41 import java.util.regex.Pattern; 42 43 44 public class WindowsBundlerParam<T> extends StandardBundlerParam<T> { 45 46 private static final ResourceBundle I18N = ResourceBundle.getBundle("com.oracle.bundlers.windows.WindowsBundlerParam"); 47 48 public WindowsBundlerParam(String name, String description, String id, Class<T> valueType, String[] fallbackIDs, Function<Map<String, ? super Object>, T> defaultValueFunction, boolean requiresUserSetting, Function<String, T> stringConverter) { 49 super(name, description, id, valueType, fallbackIDs, defaultValueFunction, requiresUserSetting, stringConverter); 50 } 51 52 public static final StandardBundlerParam<String> MENU_GROUP = 53 new StandardBundlerParam<>( 54 I18N.getString("param.menu-group.name"), 55 I18N.getString("param.menu-group.description"), 56 "winMenuGroup", //KEY 57 String.class, 58 new String[] {CATEGORY.getID(), VENDOR.getID()}, 59 params -> I18N.getString("param.menu-group.default"), 60 false, 61 s -> s 62 ); 63 64 public static final StandardBundlerParam<Boolean> BIT_ARCH_64 = 65 new StandardBundlerParam<>( 66 I18N.getString("param.64-bit.name"), 67 I18N.getString("param.64-bit.description"), 68 "win64Bit", //KEY 69 Boolean.class, 70 null, 71 params -> System.getProperty("os.arch").contains("64"), 72 false, 73 Boolean::valueOf 74 ); 75 76 public static final StandardBundlerParam<Boolean> BIT_ARCH_64_RUNTIME = 77 new StandardBundlerParam<>( 78 I18N.getString("param.runtime-64-bit.name"), 79 I18N.getString("param.runtime-64-bit.description"), 80 "win64BitJreRuntime", //KEY 81 Boolean.class, 82 null, 83 params -> {extractFlagsFromRuntime(params); return "64".equals(params.get(".runtime.bit-arc"));}, 84 false, 85 Boolean::valueOf 86 ); 87 88 public static void extractFlagsFromRuntime(Map<String, ? super Object> params) { 89 if (params.containsKey(".runtime.autodetect")) return; 90 91 params.put(".runtime.autodetect", "attempted"); 92 RelativeFileSet runtime = RUNTIME.fetchFrom(params); 93 String commandline; 94 if (runtime == null) { 95 //its ok, request to use system JRE 96 //TODO extract from system properties 97 commandline = "java version \"" + System.getProperty("java.version") + "\"\n" 98 + System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.version") + ", " + System.getProperty("java.vm.info") + ")\n"; 99 } else { 100 File runtimePath = runtime.getBaseDirectory(); 101 File launcherPath = new File(runtimePath, "bin\\java"); 102 103 ProcessBuilder pb = new ProcessBuilder(launcherPath.getAbsolutePath(), "-version"); 104 try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { 105 try (PrintStream pout = new PrintStream(baos)) { | 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.oracle.bundlers.windows; 27 28 import com.oracle.bundlers.StandardBundlerParam; 29 import com.sun.javafx.tools.packager.Log; 30 import com.sun.javafx.tools.packager.bundlers.IOUtils; 31 import com.sun.javafx.tools.packager.bundlers.RelativeFileSet; 32 33 import java.io.ByteArrayOutputStream; 34 import java.io.File; 35 import java.io.IOException; 36 import java.io.PrintStream; 37 import java.util.Map; 38 import java.util.ResourceBundle; 39 import java.util.function.BiFunction; 40 import java.util.function.Function; 41 import java.util.regex.Matcher; 42 import java.util.regex.Pattern; 43 44 45 public class WindowsBundlerParam<T> extends StandardBundlerParam<T> { 46 47 private static final ResourceBundle I18N = ResourceBundle.getBundle("com.oracle.bundlers.windows.WindowsBundlerParam"); 48 49 public WindowsBundlerParam(String name, String description, String id, Class<T> valueType, String[] fallbackIDs, Function<Map<String, ? super Object>, T> defaultValueFunction, boolean requiresUserSetting, BiFunction<String, Map<String, ? super Object>, T> stringConverter) { 50 super(name, description, id, valueType, fallbackIDs, defaultValueFunction, requiresUserSetting, stringConverter); 51 } 52 53 public static final StandardBundlerParam<String> MENU_GROUP = 54 new StandardBundlerParam<>( 55 I18N.getString("param.menu-group.name"), 56 I18N.getString("param.menu-group.description"), 57 "win.menuGroup", 58 String.class, 59 new String[] {VENDOR.getID(), CATEGORY.getID(), }, 60 params -> I18N.getString("param.menu-group.default"), 61 false, 62 (s, p) -> s 63 ); 64 65 public static final StandardBundlerParam<Boolean> BIT_ARCH_64 = 66 new StandardBundlerParam<>( 67 I18N.getString("param.64-bit.name"), 68 I18N.getString("param.64-bit.description"), 69 "win.64Bit", 70 Boolean.class, 71 null, 72 params -> System.getProperty("os.arch").contains("64"), 73 false, 74 (s, p) -> Boolean.valueOf(s) 75 ); 76 77 public static final StandardBundlerParam<Boolean> BIT_ARCH_64_RUNTIME = 78 new StandardBundlerParam<>( 79 I18N.getString("param.runtime-64-bit.name"), 80 I18N.getString("param.runtime-64-bit.description"), 81 "win.64BitJreRuntime", 82 Boolean.class, 83 null, 84 params -> {extractFlagsFromRuntime(params); return "64".equals(params.get(".runtime.bit-arc"));}, 85 false, 86 (s, p) -> Boolean.valueOf(s) 87 ); 88 89 public static void extractFlagsFromRuntime(Map<String, ? super Object> params) { 90 if (params.containsKey(".runtime.autodetect")) return; 91 92 params.put(".runtime.autodetect", "attempted"); 93 RelativeFileSet runtime = RUNTIME.fetchFrom(params); 94 String commandline; 95 if (runtime == null) { 96 //its ok, request to use system JRE 97 //TODO extract from system properties 98 commandline = "java version \"" + System.getProperty("java.version") + "\"\n" 99 + System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.version") + ", " + System.getProperty("java.vm.info") + ")\n"; 100 } else { 101 File runtimePath = runtime.getBaseDirectory(); 102 File launcherPath = new File(runtimePath, "bin\\java"); 103 104 ProcessBuilder pb = new ProcessBuilder(launcherPath.getAbsolutePath(), "-version"); 105 try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { 106 try (PrintStream pout = new PrintStream(baos)) { |