1 /* 2 * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 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 jdk.jpackage.internal; 27 28 import java.text.MessageFormat; 29 import java.util.Map; 30 import java.util.ResourceBundle; 31 import java.util.function.BiFunction; 32 import java.util.function.Function; 33 34 class WindowsBundlerParam<T> extends StandardBundlerParam<T> { 35 36 private static final ResourceBundle I18N = ResourceBundle.getBundle( 37 "jdk.jpackage.internal.resources.WinResources"); 38 39 WindowsBundlerParam(String id, Class<T> valueType, 40 Function<Map<String, ? super Object>, T> defaultValueFunction, 41 BiFunction<String, 42 Map<String, ? super Object>, T> stringConverter) { 43 super(id, valueType, defaultValueFunction, stringConverter); 44 } 45 46 static final BundlerParamInfo<String> INSTALLER_FILE_NAME = 47 new StandardBundlerParam<> ( 48 "win.installerName", 49 String.class, 50 params -> { 51 String nm = APP_NAME.fetchFrom(params); 52 if (nm == null) return null; 53 54 String version = VERSION.fetchFrom(params); 55 if (version == null) { 56 return nm; 57 } else { 58 return nm + "-" + version; 59 } 60 }, 61 (s, p) -> s); 62 63 static final BundlerParamInfo<String> APP_REGISTRY_NAME = 64 new StandardBundlerParam<> ( 65 Arguments.CLIOptions.WIN_REGISTRY_NAME.getId(), 66 String.class, 67 params -> { 68 String nm = APP_NAME.fetchFrom(params); 69 if (nm == null) return null; 70 71 return nm.replaceAll("[^-a-zA-Z\\.0-9]", ""); 72 }, 73 (s, p) -> s); 74 75 static final StandardBundlerParam<String> MENU_GROUP = 76 new StandardBundlerParam<>( 77 Arguments.CLIOptions.WIN_MENU_GROUP.getId(), 78 String.class, 79 params -> I18N.getString("param.menu-group.default"), 80 (s, p) -> s 81 ); 82 83 static final BundlerParamInfo<Boolean> INSTALLDIR_CHOOSER = 84 new StandardBundlerParam<> ( 85 Arguments.CLIOptions.WIN_DIR_CHOOSER.getId(), 86 Boolean.class, 87 params -> Boolean.FALSE, 88 (s, p) -> Boolean.valueOf(s) 89 ); 90 91 static final BundlerParamInfo<String> WINDOWS_INSTALL_DIR = 92 new StandardBundlerParam<>( 93 "windows-install-dir", 94 String.class, 95 params -> { 96 String dir = INSTALL_DIR.fetchFrom(params); 97 if (dir != null) { 98 if (dir.contains(":") || dir.contains("..")) { 99 Log.error(MessageFormat.format(I18N.getString( 100 "message.invalid.install.dir"), dir, 101 APP_NAME.fetchFrom(params))); 102 } else { 103 if (dir.startsWith("\\")) { 104 dir = dir.substring(1); 105 } 106 if (dir.endsWith("\\")) { 107 dir = dir.substring(0, dir.length() - 1); 108 } 109 return dir; 110 } 111 } 112 return APP_NAME.fetchFrom(params); // Default to app name 113 }, 114 (s, p) -> s 115 ); 116 }