src/demo/share/jpackage/JNLPConverter/src/jnlp/converter/JNLPConverter.java
author herrick
Thu, 28 Mar 2019 13:47:40 -0400
branchJDK-8200758-branch
changeset 57291 f2d429260ad4
parent 57282 c9c2c08854f5
child 57315 4f1efc26b577
permissions -rw-r--r--
8221582: Rename jvm-args option to java-options Reviewed-by: kbr, ssadetski
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     1
/*
57106
ea870b9ce89a 8216492: Update copyright of all new jpackage fils to 2019
kcr
parents: 57039
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     4
 *
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     7
 * published by the Free Software Foundation.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     8
 *
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    13
 * accompanied this code).
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    14
 *
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    18
 *
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    21
 * questions.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    22
 */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    23
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    24
package jnlp.converter;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    25
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    26
import java.io.BufferedWriter;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    27
import java.io.File;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    28
import java.io.FileNotFoundException;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    29
import java.io.FileOutputStream;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    30
import java.io.FileWriter;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    31
import java.io.IOException;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    32
import java.io.InputStream;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    33
import java.io.PrintWriter;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    34
import java.net.HttpURLConnection;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    35
import java.net.URI;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    36
import java.net.URL;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    37
import java.nio.file.Files;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    38
import java.nio.file.Path;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    39
import java.util.ArrayList;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    40
import java.util.Enumeration;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    41
import java.util.List;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    42
import java.util.jar.JarEntry;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    43
import java.util.jar.JarFile;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    44
import jnlp.converter.parser.JNLPDesc;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    45
import jnlp.converter.parser.JNLPDesc.AssociationDesc;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    46
import jnlp.converter.parser.JNLPDesc.IconDesc;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    47
import jnlp.converter.parser.ResourcesDesc.JARDesc;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    48
import jnlp.converter.parser.XMLFormat;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    49
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    50
public class JNLPConverter {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    51
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    52
    private final Options options;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    53
    private JNLPDesc jnlpd = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    54
    private final List<String> launchArgs = new ArrayList<>();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    55
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    56
    private String downloadFolder = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    57
    private String jnlpDownloadFolder = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    58
    private static String jnlpDownloadFolderStatic;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    59
    private String jarDownloadFolder = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    60
    private String iconDownloadFolder = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    61
    private String propDownloadFolder = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    62
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
    63
    private static String jpackagePath = null;
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    64
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    65
    private static boolean markFileToDelete = false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    66
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    67
    private static final String FA_EXTENSIONS = "extension";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    68
    private static final String FA_CONTENT_TYPE = "mime-type";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    69
    private static final String FA_DESCRIPTION = "description";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    70
    private static final String FA_ICON = "icon";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    71
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    72
    public JNLPConverter(Options options) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    73
        this.options = options;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    74
        jnlpDownloadFolderStatic = getJnlpDownloadFolder();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    75
        markFileToDelete = (options.keep() == null);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    76
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    77
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    78
    public String [] getLaunchArgs() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    79
        return launchArgs.toArray(new String[0]);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    80
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    81
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    82
    public void convert() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    83
        try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    84
            loadJNLPDesc();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    85
            downloadResources();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    86
            validate();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    87
            buildLaunchArgs();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    88
            saveLaunchArgs();
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
    89
            runJPackage();
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    90
        } catch (Exception ex) {
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
    91
            Log.error(ex.getMessage());
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    92
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    93
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    94
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    95
    private JNLPDesc getJNLPD(String jnlp) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    96
        URL codebase = getCodeBase(jnlp);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    97
        byte[] bits = HTTPHelper.getJNLPBits(jnlp, jnlp);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    98
        return XMLFormat.parse(bits, codebase, jnlp);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    99
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   100
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   101
    private void loadJNLPDesc() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   102
        String jnlp = options.getJNLP();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   103
        jnlpd = getJNLPD(jnlp);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   104
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   105
        // Check for required options in case of FX
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   106
        if (jnlpd.isFXApp()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   107
            if (!options.isRuntimeImageSet()) {
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   108
                throw new Exception("This is a JavaFX Web-Start application which requires a runtime image capable of running JavaFX applications, which can be specified by the jpackage option --runtime-image (using --jpackage-options).");
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   109
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   110
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   111
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   112
        // Check href. It can be same as URL we provided or new one
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   113
        // if JNLP has different href or codebase. We assume that
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   114
        // XMLFormat.parse() will handle any errors in href and codebase
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   115
        // correctly.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   116
        String href = jnlpd.getHref();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   117
        if (href != null && !href.equalsIgnoreCase(jnlp)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   118
            if (href.startsWith("file:")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   119
                URI hrefURI = new URI(href);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   120
                URI jnlpURI = new URI(jnlp);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   121
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   122
                String hrefPath = hrefURI.getPath();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   123
                String jnlpPath = jnlpURI.getPath();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   124
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   125
                if (!hrefPath.equalsIgnoreCase(jnlpPath)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   126
                    jnlp = href;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   127
                    jnlpd = getJNLPD(jnlp);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   128
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   129
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   130
                jnlp = href;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   131
                jnlpd = getJNLPD(jnlp);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   132
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   133
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   134
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   135
        if (jnlpd.getName() == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   136
            jnlpd.setName(getNameFromURL(jnlp));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   137
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   138
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   139
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   140
    private static String getNameFromURL(String url) throws IOException {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   141
        int index;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   142
        int index1 = url.lastIndexOf('/');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   143
        int index2 = url.lastIndexOf('\\');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   144
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   145
        if (index1 >= index2) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   146
            index = index1;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   147
        } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   148
            index = index2;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   149
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   150
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   151
        if (index != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   152
            String name = url.substring(index + 1, url.length());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   153
            if (name.endsWith(".jnlp")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   154
                return name.substring(0, name.length() - 5);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   155
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   156
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   157
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   158
        return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   159
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   160
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   161
    private URL getCodeBase(String jnlp) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   162
        int index = jnlp.lastIndexOf('/');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   163
        if (index != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   164
            if (HTTPHelper.isHTTPUrl(jnlp)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   165
                return new URL(jnlp.substring(0, index + 1));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   166
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   167
                String codeBasePath = jnlp.substring(0, index);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   168
                if (!codeBasePath.endsWith("/")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   169
                    codeBasePath += "/";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   170
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   171
                return new URI(codeBasePath).toURL();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   172
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   173
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   174
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   175
        return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   176
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   177
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   178
    public static void markFileToDelete(String file) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   179
        if (file == null || file.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   180
            return;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   181
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   182
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   183
        if (markFileToDelete) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   184
            try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   185
                File f = new File(file);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   186
                f.deleteOnExit();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   187
            } catch (Exception e) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   188
                // Print exception, but do not fail conversion.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   189
                Log.warning(e.getLocalizedMessage());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   190
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   191
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   192
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   193
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   194
    public static void deleteFile(String file) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   195
        try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   196
            File f = new File(file);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   197
            f.delete();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   198
        } catch (Exception e) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   199
            Log.warning(e.getLocalizedMessage());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   200
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   201
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   202
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   203
    private void downloadResources() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   204
        List<JARDesc> jars = jnlpd.getResources();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   205
        for (JARDesc jar : jars) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   206
            if (jar.getVersion() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   207
                if (!jnlpd.isVersionEnabled()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   208
                    throw new Exception("Error: Version based download protocol is not supported without -Djnlp.versionEnabled=true.");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   209
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   210
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   211
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   212
            String destFile = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   213
            if (HTTPHelper.isHTTPUrl(jar.getLocation().toString())) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   214
                if (jar.getVersion() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   215
                    try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   216
                        destFile = HTTPHelper.downloadFile(jar.getVersionLocation().toString(), getJarDownloadFolder(), HTTPHelper.getFileNameFromURL(jar.getLocation().toString()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   217
                    } catch (HTTPHelperException ex) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   218
                        if (ex.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   219
                            System.out.println("Error downloading versioned JAR from " + jar.getVersionLocation());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   220
                            System.out.println(ex.getMessage());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   221
                            System.out.println("Downloading " + jar.getLocation() + " instead.");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   222
                            destFile = HTTPHelper.downloadFile(jar.getLocation().toString(), getJarDownloadFolder(), HTTPHelper.getFileNameFromURL(jar.getLocation().toString()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   223
                        } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   224
                            throw ex;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   225
                        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   226
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   227
                } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   228
                    destFile = HTTPHelper.downloadFile(jar.getLocation().toString(), getJarDownloadFolder(), HTTPHelper.getFileNameFromURL(jar.getLocation().toString()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   229
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   230
                markFileToDelete(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   231
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   232
                if (jar.getVersion() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   233
                    try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   234
                        destFile = HTTPHelper.copyFile(jar.getVersionLocation().toString(), getJarDownloadFolder(), HTTPHelper.getFileNameFromURL(jar.getLocation().toString()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   235
                    } catch (FileNotFoundException ex) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   236
                        System.out.println("Error copying versioned JAR from " + jar.getVersionLocation());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   237
                        System.out.println(ex.getMessage());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   238
                        System.out.println("Copying " + jar.getLocation() + " instead.");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   239
                        destFile = HTTPHelper.copyFile(jar.getLocation().toString(), getJarDownloadFolder(), HTTPHelper.getFileNameFromURL(jar.getLocation().toString()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   240
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   241
                } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   242
                    destFile = HTTPHelper.copyFile(jar.getLocation().toString(), getJarDownloadFolder(), HTTPHelper.getFileNameFromURL(jar.getLocation().toString()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   243
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   244
                markFileToDelete(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   245
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   246
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   247
            if (jar.isNativeLib()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   248
                unpackNativeLib(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   249
                deleteFile(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   250
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   251
                jnlpd.addFile(jar.getName());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   252
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   253
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   254
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   255
        IconDesc icon = jnlpd.getIcon();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   256
        if (icon != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   257
            String destFile;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   258
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   259
            if (HTTPHelper.isHTTPUrl(icon.getLocation())) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   260
                destFile = HTTPHelper.downloadFile(icon.getLocation(), getIconDownloadFolder(), HTTPHelper.getFileNameFromURL(icon.getLocation()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   261
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   262
                destFile = HTTPHelper.copyFile(icon.getLocation(), getIconDownloadFolder(), HTTPHelper.getFileNameFromURL(icon.getLocation()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   263
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   264
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   265
            markFileToDelete(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   266
            icon.setLocalLocation(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   267
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   268
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   269
        AssociationDesc [] associations = jnlpd.getAssociations();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   270
        if (associations != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   271
            for (AssociationDesc association : associations) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   272
                if (association.getIconUrl() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   273
                    String destFile;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   274
                    if (HTTPHelper.isHTTPUrl(association.getIconUrl())) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   275
                        destFile = HTTPHelper.downloadFile(association.getIconUrl(), getIconDownloadFolder(), HTTPHelper.getFileNameFromURL(association.getIconUrl()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   276
                    } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   277
                        destFile = HTTPHelper.copyFile(association.getIconUrl(), getIconDownloadFolder(), HTTPHelper.getFileNameFromURL(association.getIconUrl()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   278
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   279
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   280
                    markFileToDelete(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   281
                    association.setIconLocalLocation(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   282
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   283
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   284
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   285
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   286
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   287
    public void unpackNativeLib(String file) throws IOException {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   288
        try (JarFile jarFile = new JarFile(file)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   289
            Enumeration entries = jarFile.entries();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   290
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   291
            while (entries.hasMoreElements()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   292
                JarEntry entry = (JarEntry) entries.nextElement();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   293
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   294
                // Skip directories
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   295
                if (entry.isDirectory()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   296
                    continue;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   297
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   298
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   299
                String entryName = entry.getName();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   300
                // Skip anything in sub-directories
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   301
                if (entryName.contains("\\") || entryName.contains("/")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   302
                    continue;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   303
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   304
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   305
                // Skip anything not ending with .dll, .dylib or .so
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   306
                if (!entryName.endsWith(".dll") && !entryName.endsWith(".dylib") && !entryName.endsWith(".so")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   307
                    continue;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   308
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   309
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   310
                File destFile = new File(getJarDownloadFolder(), entryName);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   311
                if (destFile.exists()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   312
                    Log.warning(destFile.getAbsolutePath() + " already exist and will not be overwriten by native library from " + file + ".");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   313
                    continue;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   314
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   315
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   316
                InputStream inputStream = jarFile.getInputStream(entry);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   317
                FileOutputStream outputStream = new FileOutputStream(destFile);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   318
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   319
                byte[] buffer = new byte[HTTPHelper.BUFFER_SIZE];
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   320
                int length;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   321
                do {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   322
                    length = inputStream.read(buffer);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   323
                    if (length > 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   324
                        outputStream.write(buffer, 0, length);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   325
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   326
                } while (length > 0);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   327
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   328
                jnlpd.addFile(entryName);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   329
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   330
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   331
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   332
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   333
    private void validate() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   334
        if (jnlpd.getMainJar() == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   335
            Log.error("Cannot find main jar");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   336
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   337
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   338
        if (jnlpd.getMainClass() == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   339
            Log.error("Cannot find main class");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   340
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   341
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   342
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   343
    private void addLaunchArg(String arg, List<String> launchArgs) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   344
        if (arg != null && !arg.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   345
            if (!options.isOptionPresent(arg)){
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   346
                launchArgs.add(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   347
            } else {
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   348
                Log.info(arg + " generated by JNLPConverter is dropped, since it is overwriten via --jpackage-options");
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   349
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   350
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   351
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   352
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   353
    private void addLaunchArg(String arg, String value, List<String> launchArgs) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   354
        if (arg != null && !arg.isEmpty() && value != null && !value.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   355
            if (!options.isOptionPresent(arg)){
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   356
                launchArgs.add(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   357
                launchArgs.add(value);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   358
            } else {
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   359
                Log.info(arg + "=" + value +" generated by JNLPConverter is dropped, since it is overwriten via --jpackage-options");
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   360
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   361
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   362
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   363
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   364
    private void displayLaunchArgs() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   365
        if (Log.isVerbose()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   366
            System.out.println();
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   367
            System.out.println("jpackage launch arguments (each argument starts on new line):");
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   368
            launchArgs.forEach((arg) -> {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   369
                System.out.println(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   370
            });
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   371
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   372
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   373
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   374
    private static int fileAssociationsCount = 0;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   375
    private String getFileAssociationsFile() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   376
        String file = getPropDownloadFolder();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   377
        file += File.separator;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   378
        file += "fileAssociation";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   379
        file += String.valueOf(fileAssociationsCount);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   380
        file += ".properties";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   381
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   382
        fileAssociationsCount++;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   383
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   384
        return file;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   385
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   386
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   387
    private void buildLaunchArgs() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   388
        if (options.createImage()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   389
            addLaunchArg("create-image", launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   390
        } else if (options.createInstaller()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   391
            if (options.getInstallerType() == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   392
                addLaunchArg("create-installer", launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   393
            } else {
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   394
                addLaunchArg("create-installer", launchArgs);
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   395
                if (options.getInstallerType() != null) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   396
                    addLaunchArg("--installer-type", options.getInstallerType(), launchArgs);
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   397
                }
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   398
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   399
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   400
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   401
        // Set verbose for jpackage if it is set for us.
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   402
        if (options.verbose()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   403
            addLaunchArg("--verbose", launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   404
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   405
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   406
        addLaunchArg("--input", getJarDownloadFolder(), launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   407
        addLaunchArg("--output", options.getOutput(), launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   408
        addLaunchArg("--name", jnlpd.getName(), launchArgs);
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   409
        addLaunchArg("--app-version", jnlpd.getVersion(), launchArgs);
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   410
        addLaunchArg("--vendor", jnlpd.getVendor(), launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   411
        addLaunchArg("--description", jnlpd.getDescription(), launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   412
        addLaunchArg("--icon", jnlpd.getIconLocation(), launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   413
        addLaunchArg("--main-jar", jnlpd.getMainJar(), launchArgs);
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   414
        addLaunchArg("--main-class", jnlpd.getMainClass(), launchArgs);
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   415
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   416
        addFiles(launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   417
        addArguments(launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   418
        addJVMArgs(launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   419
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   420
        if (options.createInstaller()) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   421
            if (jnlpd.isDesktopHint()) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   422
                if (Platform.isWindows()) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   423
                    addLaunchArg("--win-shortcut", launchArgs);
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   424
                } else {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   425
                    Log.warning("Ignoring shortcut hint, since it is not supported on current platform.");
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   426
                }
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   427
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   428
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   429
            if (jnlpd.isMenuHint()) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   430
                if (Platform.isWindows()) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   431
                    addLaunchArg("--win-menu", launchArgs);
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   432
                    addLaunchArg("--win-menu-group", jnlpd.getSubMenu(), launchArgs);
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   433
                } else {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   434
                    Log.warning("Ignoring menu hint, since it is not supported on current platform.");
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   435
                }
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   436
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   437
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   438
            AssociationDesc[] associations = jnlpd.getAssociations();
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   439
            if (associations != null) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   440
                for (AssociationDesc association : associations) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   441
                    String file = getFileAssociationsFile();
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   442
                    markFileToDelete(file);
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   443
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   444
                    try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file)))) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   445
                        if (association.getExtensions() != null && association.getMimeType() != null) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   446
                            out.println(FA_EXTENSIONS + "=" + quote(association.getExtensions()));
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   447
                            out.println(FA_CONTENT_TYPE + "=" + quote(association.getMimeType()));
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   448
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   449
                            if (association.getMimeDescription() != null) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   450
                                out.println(FA_DESCRIPTION + "=" + association.getMimeDescription());
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   451
                            }
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   452
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   453
                            if (association.getIconLocalLocation() != null) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   454
                                out.println(FA_ICON + "=" + quote(association.getIconLocalLocation()));
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   455
                            }
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   456
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   457
                            addLaunchArg("--file-associations", file, launchArgs);
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   458
                        }
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   459
                    } catch (Exception ex) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   460
                        Log.warning(ex.toString());
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   461
                        if (association.getExtensions() != null) {
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   462
                            Log.warning("File assoication for " + association.getExtensions() + " will be ignored due to exception above.");
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   463
                        }
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   464
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   465
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   466
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   467
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   468
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   469
        // Add options from --jpackage-options
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   470
        List<String> jpackageOptions = options.getJPackageOptions();
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   471
        jpackageOptions.forEach((option) -> {
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   472
            launchArgs.add(option);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   473
        });
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   474
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   475
        displayLaunchArgs();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   476
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   477
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   478
    private String getCommandFileName() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   479
        Platform platform = Platform.getPlatform();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   480
        switch (platform) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   481
            case WINDOWS:
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   482
                return "run_jpackage.bat";
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   483
            case LINUX:
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   484
                return "run_jpackage.sh";
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   485
            case MAC:
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   486
                return "run_jpackage.sh";
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   487
            default:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   488
                Log.error("Cannot determine platform type.");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   489
                return "";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   490
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   491
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   492
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   493
    private void saveLaunchArgs() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   494
        if (options.keep() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   495
            File keepFolder = new File(options.keep());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   496
            String cmdFile = keepFolder.getAbsolutePath() + File.separator + getCommandFileName();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   497
            try (PrintWriter out = new PrintWriter(cmdFile)) {
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   498
                out.print(getJPackagePath());
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   499
                launchArgs.forEach((arg) -> {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   500
                    out.print(" ");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   501
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   502
                    if (arg.contains(" ")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   503
                        int len = arg.length();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   504
                        if (len >= 1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   505
                            if (arg.charAt(0) != '"' && arg.charAt(len - 1) != '"') {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   506
                                out.print("\"" + arg + "\"");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   507
                            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   508
                                if (Platform.isWindows()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   509
                                    out.print(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   510
                                } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   511
                                    arg = escapeQuote(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   512
                                    out.print("\"" + arg + "\"");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   513
                                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   514
                            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   515
                        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   516
                    } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   517
                        out.print(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   518
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   519
                });
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   520
            } catch (FileNotFoundException ex) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   521
                Log.error("Cannot save file with command line: " + ex.getLocalizedMessage());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   522
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   523
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   524
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   525
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   526
    private void runJPackage() {
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   527
        List<String> command = new ArrayList<>();
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   528
        command.add(getJPackagePath());
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   529
        command.addAll(launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   530
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   531
        ProcessBuilder builder = new ProcessBuilder();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   532
        builder.inheritIO();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   533
        builder.command(command);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   534
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   535
        try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   536
            Process process = builder.start();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   537
            int exitCode = process.waitFor();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   538
            if (exitCode != 0) {
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   539
                Log.warning("jpackage retrun non zero code: " + exitCode);
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   540
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   541
        } catch (IOException | InterruptedException ex) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   542
            Log.error(ex.getMessage());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   543
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   544
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   545
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   546
    private void addFileList(String arg, List<String> filesToAdd, List<String> launchArgs) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   547
        if (filesToAdd.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   548
            return;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   549
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   550
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   551
        String filesArg = "";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   552
        for (int i = 0; i < filesToAdd.size(); i++) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   553
            filesArg += quote(filesToAdd.get(i));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   554
            if ((i + 1) != filesToAdd.size()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   555
                filesArg += File.pathSeparator;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   556
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   557
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   558
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   559
        launchArgs.add(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   560
        launchArgs.add(filesArg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   561
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   562
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   563
    private void addFiles(List<String> launchArgs) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   564
        addFileList("--files", jnlpd.getFiles(), launchArgs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   565
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   566
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   567
    private void addArguments(List<String> launchArgs) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   568
        List<String> arguments = jnlpd.getArguments();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   569
        if (arguments.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   570
            return;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   571
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   572
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   573
        String argsStr = "";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   574
        for (int i = 0; i < arguments.size(); i++) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   575
            String arg = arguments.get(i);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   576
            argsStr += quote(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   577
            if ((i + 1) != arguments.size()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   578
                argsStr += " ";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   579
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   580
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   581
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   582
        launchArgs.add("--arguments");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   583
        if (Platform.isWindows()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   584
            if (argsStr.contains(" ")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   585
                if (argsStr.contains("\"")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   586
                    argsStr = escapeQuote(argsStr);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   587
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   588
                argsStr = "\"" + argsStr + "\"";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   589
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   590
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   591
        launchArgs.add(argsStr);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   592
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   593
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   594
    private void addJVMArgs(List<String> launchArgs) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   595
        List<String> jvmArgs = jnlpd.getVMArgs();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   596
        if (jvmArgs.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   597
            return;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   598
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   599
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   600
        String jvmArgsStr = "";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   601
        for (int i = 0; i < jvmArgs.size(); i++) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   602
            String arg = jvmArgs.get(i);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   603
            jvmArgsStr += quote(arg);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   604
            if ((i + 1) != jvmArgs.size()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   605
                jvmArgsStr += " ";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   606
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   607
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   608
57291
f2d429260ad4 8221582: Rename jvm-args option to java-options
herrick
parents: 57282
diff changeset
   609
        launchArgs.add("--java-options");
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   610
        if (Platform.isWindows()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   611
            if (jvmArgsStr.contains(" ")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   612
                if (jvmArgsStr.contains("\"")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   613
                    jvmArgsStr = escapeQuote(jvmArgsStr);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   614
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   615
                jvmArgsStr = "\"" + jvmArgsStr + "\"";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   616
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   617
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   618
        launchArgs.add(jvmArgsStr);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   619
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   620
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   621
    private String quote(String in) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   622
        if (in == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   623
            return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   624
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   625
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   626
        if (in.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   627
            return "";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   628
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   629
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   630
        if (!in.contains("=")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   631
            // Not a property
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   632
            if (in.contains(" ")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   633
                in = escapeQuote(in);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   634
                return "\"" + in + "\"";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   635
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   636
            return in;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   637
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   638
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   639
        if (!in.contains(" ")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   640
            return in; // No need to quote
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   641
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   642
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   643
        int paramIndex = in.indexOf("=");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   644
        if (paramIndex <= 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   645
            return in; // Something wrong, just skip quoting
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   646
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   647
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   648
        String param = in.substring(0, paramIndex);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   649
        String value = in.substring(paramIndex + 1);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   650
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   651
        if (value.length() == 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   652
            return in; // No need to quote
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   653
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   654
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   655
        value = escapeQuote(value);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   656
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   657
        return param + "=" + "\"" + value + "\"";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   658
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   659
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   660
    private String escapeQuote(String in) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   661
        if (in == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   662
            return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   663
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   664
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   665
        if (in.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   666
            return "";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   667
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   668
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   669
        if (in.contains("\"")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   670
            // Use code points to preserve non-ASCII chars
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   671
            StringBuilder sb = new StringBuilder();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   672
            int codeLen = in.codePointCount(0, in.length());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   673
            for (int i = 0; i < codeLen; i++) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   674
                int code = in.codePointAt(i);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   675
                // Note: No need to escape '\' on Linux or OS X.
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   676
                // jpackage expects us to pass arguments and properties with quotes and spaces as a map
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   677
                // with quotes being escaped with additional \ for internal quotes.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   678
                // So if we want two properties below:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   679
                // -Djnlp.Prop1=Some "Value" 1
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   680
                // -Djnlp.Prop2=Some Value 2
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   681
                // jpackage will need:
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   682
                // "-Djnlp.Prop1=\"Some \\"Value\\" 1\" -Djnlp.Prop2=\"Some Value 2\""
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   683
                // but since we using ProcessBuilder to run jpackage we will need to escape
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   684
                // our escape symbols as well, so we will need to pass string below to ProcessBuilder:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   685
                // "-Djnlp.Prop1=\\\"Some \\\\\\\"Value\\\\\\\" 1\\\" -Djnlp.Prop2=\\\"Some Value 2\\\""
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   686
                switch (code) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   687
                    case '"':
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   688
                        // " -> \" -> \\\"
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   689
                        if (i == 0 || in.codePointAt(i - 1) != '\\') {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   690
                                sb.appendCodePoint('\\');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   691
                            sb.appendCodePoint(code);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   692
                        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   693
                        break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   694
                    case '\\':
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   695
                        // We need to escape already escaped symbols as well
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   696
                        if ((i + 1) < codeLen) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   697
                            int nextCode = in.codePointAt(i + 1);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   698
                            if (nextCode == '"') {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   699
                                // \" -> \\\"
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   700
                                sb.appendCodePoint('\\');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   701
                                sb.appendCodePoint('\\');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   702
                                sb.appendCodePoint('\\');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   703
                                sb.appendCodePoint(nextCode);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   704
                            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   705
                                sb.appendCodePoint('\\');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   706
                                sb.appendCodePoint(code);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   707
                            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   708
                        } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   709
                            sb.appendCodePoint(code);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   710
                        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   711
                        break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   712
                    default:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   713
                        sb.appendCodePoint(code);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   714
                        break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   715
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   716
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   717
            return sb.toString();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   718
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   719
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   720
        return in;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   721
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   722
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   723
    public synchronized String getDownloadFolder() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   724
        if (downloadFolder == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   725
            try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   726
                File file;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   727
                if (options.keep() == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   728
                    Path path = Files.createTempDirectory("JNLPConverter");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   729
                    file = path.toFile();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   730
                    file.deleteOnExit();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   731
                } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   732
                    file = new File(options.keep());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   733
                    if (!file.exists()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   734
                        file.mkdir();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   735
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   736
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   737
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   738
                downloadFolder = file.getAbsolutePath();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   739
            } catch (IOException e) {
57282
c9c2c08854f5 8221101: Update JNLPConverter to support latest jpackage CLI changes
herrick
parents: 57106
diff changeset
   740
                Log.error(e.getMessage());
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   741
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   742
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   743
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   744
        return downloadFolder;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   745
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   746
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   747
    public final synchronized String getJnlpDownloadFolder() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   748
        if (jnlpDownloadFolder == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   749
            File file = new File(getDownloadFolder() + File.separator + "jnlp");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   750
            file.mkdir();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   751
            markFileToDelete(getDownloadFolder() + File.separator + "jnlp");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   752
            jnlpDownloadFolder = file.getAbsolutePath();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   753
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   754
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   755
        return jnlpDownloadFolder;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   756
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   757
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   758
    public static String getJnlpDownloadFolderStatic() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   759
        return jnlpDownloadFolderStatic;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   760
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   761
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   762
    public synchronized String getJarDownloadFolder() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   763
        if (jarDownloadFolder == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   764
            File file = new File(getDownloadFolder() + File.separator + "jar");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   765
            file.mkdir();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   766
            markFileToDelete(getDownloadFolder() + File.separator + "jar");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   767
            jarDownloadFolder = file.getAbsolutePath();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   768
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   769
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   770
        return jarDownloadFolder;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   771
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   772
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   773
    public synchronized String getIconDownloadFolder() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   774
        if (iconDownloadFolder == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   775
            File file = new File(getDownloadFolder() + File.separator + "icon");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   776
            file.mkdir();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   777
            markFileToDelete(getDownloadFolder() + File.separator + "icon");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   778
            iconDownloadFolder = file.getAbsolutePath();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   779
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   780
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   781
        return iconDownloadFolder;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   782
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   783
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   784
    public synchronized String getPropDownloadFolder() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   785
        if (propDownloadFolder == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   786
            File file = new File(getDownloadFolder() + File.separator + "prop");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   787
            file.mkdir();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   788
            markFileToDelete(getDownloadFolder() + File.separator + "prop");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   789
            propDownloadFolder = file.getAbsolutePath();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   790
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   791
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   792
        return propDownloadFolder;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   793
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   794
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   795
    public synchronized static String getJPackagePath() {
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   796
        if (jpackagePath == null) {
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   797
            jpackagePath = System.getProperty("java.home");
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   798
            jpackagePath += File.separator;
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   799
            jpackagePath += "bin";
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   800
            jpackagePath += File.separator;
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   801
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   802
            Platform platform = Platform.getPlatform();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   803
            switch (platform) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   804
                case WINDOWS:
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   805
                    jpackagePath += "jpackage.exe";
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   806
                    break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   807
                case LINUX:
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   808
                    jpackagePath += "jpackage";
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   809
                    break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   810
                case MAC:
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   811
                    jpackagePath += "jpackage";
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   812
                    break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   813
                default:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   814
                    Log.error("Cannot determine platform type.");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   815
                    break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   816
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   817
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   818
            Log.verbose("jpackage: " + jpackagePath);
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   819
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   820
57039
98d3963b0b7b 8214051: rename jpackager tool to jpackage
herrick
parents: 56963
diff changeset
   821
        return jpackagePath;
56963
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   822
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   823
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   824
    public static String getIconFormat(String icon) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   825
        // GIF, JPEG, ICO, or PNG
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   826
        if (icon.toLowerCase().endsWith(".gif")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   827
            return "GIF";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   828
        } else if (icon.toLowerCase().endsWith(".jpg")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   829
            return "JPEG";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   830
        } else if (icon.toLowerCase().endsWith(".ico")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   831
            return "ICO";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   832
        } else if (icon.toLowerCase().endsWith(".png")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   833
            return "PNG";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   834
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   835
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   836
        return "UNKNOWN";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   837
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   838
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   839
    public static boolean isIconSupported(String icon) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   840
        Platform platform = Platform.getPlatform();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   841
        switch (platform) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   842
            case WINDOWS:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   843
                if (icon.endsWith(".ico")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   844
                    return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   845
                } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   846
                    Log.warning("Icon file format (" + getIconFormat(icon) + ") is not supported on Windows for file " + icon + ".");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   847
                    return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   848
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   849
            case LINUX:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   850
                if (icon.endsWith(".png")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   851
                    return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   852
                } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   853
                    Log.warning("Icon file format (" + getIconFormat(icon) + ") is not supported on Linux for file " + icon + ".");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   854
                    return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   855
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   856
            case MAC:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   857
                Log.warning("Icon file format (" + getIconFormat(icon) + ") is not supported on OS X for file " + icon + ".");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   858
                return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   859
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   860
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   861
        return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   862
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   863
}