src/jdk.packager/share/classes/jdk/packager/internal/SecondaryLauncherArguments.java
branchJDK-8200758-branch
changeset 57017 1b08af362a30
parent 57016 f63f13da91c0
child 57018 9d782e357916
equal deleted inserted replaced
57016:f63f13da91c0 57017:1b08af362a30
     1 /*
       
     2  * Copyright (c) 2018, 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.packager.internal;
       
    27 
       
    28 import java.util.Collection;
       
    29 import java.util.HashMap;
       
    30 import java.util.Map;
       
    31 import java.io.File;
       
    32 import jdk.packager.internal.Arguments.CLIOptions;
       
    33 
       
    34 /*
       
    35  * SecondaryLauncherArguments
       
    36  *
       
    37  * Processes a secondary launcher properties file to create the Map of
       
    38  * bundle params applicable to the secondary launcher:
       
    39  *
       
    40  * BundlerParams p = (new SecondaryLauncherArguments(file)).getLauncherMap();
       
    41  *
       
    42  * A secondary launcher is another executable program generated by either the
       
    43  * create-image mode or the create-installer mode.
       
    44  * The secondary launcher may be the same program with different configuration,
       
    45  * or a completely different program created from the same files.
       
    46  *
       
    47  * There may be multiple secondary launchers, each created by using the
       
    48  * command line arg "--secondary-launcher <file path>
       
    49  *
       
    50  * The secondary launcher properties file may have any of:
       
    51  *
       
    52  * name (required)
       
    53  * version
       
    54  * module
       
    55  * class
       
    56  * icon
       
    57  * arguments
       
    58  * jvm-args
       
    59  * win-menu
       
    60  * win-shortcut
       
    61  * win-console
       
    62  *
       
    63  */
       
    64 public class SecondaryLauncherArguments {
       
    65 
       
    66     private final String filename;
       
    67     private Map<String, String> allArgs;
       
    68     private Map<String, ? super Object> bundleParams;
       
    69 
       
    70     public SecondaryLauncherArguments(String filename) {
       
    71         this.filename = filename;
       
    72     }
       
    73 
       
    74     private void initLauncherMap() {
       
    75         if (bundleParams != null) {
       
    76             return;
       
    77         }
       
    78 
       
    79         allArgs = Arguments.getPropertiesFromFile(filename);
       
    80 
       
    81         bundleParams = new HashMap<>();
       
    82         String mainClass = getOptionValue(CLIOptions.APPCLASS);
       
    83         String module = getOptionValue(CLIOptions.MODULE);
       
    84 
       
    85         if (module != null && mainClass != null) {
       
    86             putUnlessNull(bundleParams, Arguments.CLIOptions.MODULE.getId(),
       
    87                     module + "/" + mainClass);
       
    88         } else if (module != null) {
       
    89             putUnlessNull(bundleParams, Arguments.CLIOptions.MODULE.getId(),
       
    90                     module);
       
    91         } else if (mainClass != null) {
       
    92             putUnlessNull(bundleParams, Arguments.CLIOptions.APPCLASS.getId(),
       
    93                     mainClass);
       
    94         }
       
    95 
       
    96         putUnlessNull(bundleParams, Arguments.CLIOptions.NAME.getId(),
       
    97                 getOptionValue(CLIOptions.NAME));
       
    98         putUnlessNull(bundleParams, Arguments.CLIOptions.VERSION.getId(),
       
    99                 getOptionValue(CLIOptions.VERSION));
       
   100 
       
   101         putUnlessNull(bundleParams, Arguments.CLIOptions.WIN_MENU_HINT.getId(),
       
   102                 getOptionValue(CLIOptions.WIN_MENU_HINT));
       
   103         putUnlessNull(bundleParams,
       
   104                 Arguments.CLIOptions.WIN_SHORTCUT_HINT.getId(),
       
   105                 getOptionValue(CLIOptions.WIN_SHORTCUT_HINT));
       
   106         putUnlessNull(bundleParams,
       
   107                 Arguments.CLIOptions.WIN_CONSOLE_HINT.getId(),
       
   108                 getOptionValue(CLIOptions.WIN_CONSOLE_HINT));
       
   109 
       
   110         putUnlessNull(bundleParams, Arguments.CLIOptions.SINGLETON.getId(),
       
   111                 getOptionValue(CLIOptions.SINGLETON));
       
   112 
       
   113         String value = getOptionValue(CLIOptions.ICON);
       
   114         putUnlessNull(bundleParams, Arguments.CLIOptions.ICON.getId(),
       
   115                 (value == null) ? null : new File(value));
       
   116 
       
   117         String argumentStr = getOptionValue(CLIOptions.ARGUMENTS);
       
   118         putUnlessNullOrEmpty(bundleParams,
       
   119                 CLIOptions.ARGUMENTS.getId(),
       
   120                 Arguments.getArgumentList(argumentStr));
       
   121 
       
   122         String jvmargsStr = getOptionValue(CLIOptions.JVM_ARGS);
       
   123         putUnlessNullOrEmpty(bundleParams,
       
   124                 CLIOptions.JVM_ARGS.getId(),
       
   125                 Arguments.getArgumentList(jvmargsStr));
       
   126     }
       
   127 
       
   128     private String getOptionValue(CLIOptions option) {
       
   129         if (option == null || allArgs == null) {
       
   130             return null;
       
   131         }
       
   132 
       
   133         String id = option.getId();
       
   134 
       
   135         if (allArgs.containsKey(id)) {
       
   136             return allArgs.get(id);
       
   137         }
       
   138 
       
   139         return null;
       
   140     }
       
   141 
       
   142     public Map<String, ? super Object> getLauncherMap() {
       
   143         initLauncherMap();
       
   144         return bundleParams;
       
   145     }
       
   146 
       
   147     private void putUnlessNull(Map<String, ? super Object> params,
       
   148             String param, Object value) {
       
   149         if (value != null) {
       
   150             params.put(param, value);
       
   151         }
       
   152     }
       
   153 
       
   154     private void putUnlessNullOrEmpty(Map<String, ? super Object> params,
       
   155             String param, Collection<?> value) {
       
   156         if (value != null && !value.isEmpty()) {
       
   157             params.put(param, value);
       
   158         }
       
   159     }
       
   160 
       
   161     private void putUnlessNullOrEmpty(Map<String, ? super Object> params,
       
   162             String param, Map<?, ?> value) {
       
   163         if (value != null && !value.isEmpty()) {
       
   164             params.put(param, value);
       
   165         }
       
   166     }
       
   167 }