src/demo/share/jpackager/JNLPConverter/src/jnlp/converter/parser/GeneralUtil.java
author herrick
Fri, 12 Oct 2018 19:00:51 -0400
branchJDK-8200758-branch
changeset 56963 eaca4369b068
permissions -rw-r--r--
8198472: Add support for creating bundles from JNLP files Submitten-by: almatvee Reviewed-by: herrick, kcr, prr, asemenyuk
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
/*
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
     2
 * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
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.parser;
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.util.Locale;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    27
import java.util.ArrayList;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    28
import java.util.StringTokenizer;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    29
import java.io.BufferedInputStream;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    30
import java.io.IOException;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    31
import java.io.InputStream;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    32
import java.net.MalformedURLException;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    33
import java.net.URL;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    34
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    35
/**
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    36
 * Handy class to add some utility methods for dealing with property matching
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    37
 * etc.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    38
 */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    39
public class GeneralUtil {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    40
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    41
    public static boolean prefixMatchStringList(String[] prefixList, String target) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    42
        // No prefixes matches everything
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    43
        if (prefixList == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    44
            return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    45
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    46
        // No target, but a prefix list does not match anything
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    47
        if (target == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    48
            return false;
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
        for (String prefix : prefixList) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    51
            if (target.startsWith(prefix)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    52
                return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    53
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    54
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    55
        return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    56
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    57
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    58
    private static String getOSArch() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    59
        return System.getProperty("os.arch");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    60
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    61
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    62
    public static boolean prefixMatchArch(String[] prefixList) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    63
        // No prefixes matches everything
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    64
        if (prefixList == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    65
            return true;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    68
        // check for the current arch
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    69
        String arch = getOSArch();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    70
        for (String prefix : prefixList) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    71
            if (arch.startsWith(prefix)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    72
                return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    73
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    74
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    75
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    76
        return false;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    79
    /**
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    80
     * Converts a space delimited string to a list of strings
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 static String[] getStringList(String str) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    83
        if (str == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    84
            return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    85
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    86
        ArrayList<String> list = new ArrayList<>();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    87
        int i = 0;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    88
        int length = str.length();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    89
        StringBuffer sb = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    90
        while (i < length) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    91
            char ch = str.charAt(i);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    92
            switch (ch) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    93
                case ' ':
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    94
                    // A space was hit. Add string to list
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    95
                    if (sb != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    96
                        list.add(sb.toString());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    97
                        sb = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    98
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    99
                    break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   100
                case '\\':
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   101
                    // It is a delimiter. Add next character
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   102
                    if (i + 1 < length) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   103
                        ch = str.charAt(++i);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   104
                        if (sb == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   105
                            sb = new StringBuffer();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   106
                        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   107
                        sb.append(ch);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   108
                    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   109
                    break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   110
                default:
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   111
                    if (sb == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   112
                        sb = new StringBuffer();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   113
                    }   sb.append(ch);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   114
                    break;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   115
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   116
            i++; // Next character
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   117
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   118
        // Make sure to add the last part to the list too
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   119
        if (sb != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   120
            list.add(sb.toString());
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
        if (list.isEmpty()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   123
            return null;
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
        String[] results = new String[list.size()];
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   126
        return list.toArray(results);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   127
    }
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
    /**
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   130
     * Checks if string list matches default locale
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   131
     */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   132
    public static boolean matchLocale(String[] localeList, Locale locale) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   133
        // No locale specified matches everything
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   134
        if (localeList == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   135
            return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   136
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   137
        for (String localeList1 : localeList) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   138
            if (matchLocale(localeList1, locale)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   139
                return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   140
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   141
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   142
        return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   143
    }
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
    /**
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   146
     * Checks if string matches default locale
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   147
     */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   148
    public static boolean matchLocale(String localeStr, Locale locale) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   149
        if (localeStr == null || localeStr.length() == 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   150
            return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   151
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   152
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   153
        // Compare against default locale
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   154
        String language;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   155
        String country;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   156
        String variant;
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
        // The locale string is of the form language_country_variant
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   159
        StringTokenizer st = new StringTokenizer(localeStr, "_", false);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   160
        if (st.hasMoreElements() && locale.getLanguage().length() > 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   161
            language = st.nextToken();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   162
            if (!language.equalsIgnoreCase(locale.getLanguage())) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   163
                return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   164
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   165
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   166
        if (st.hasMoreElements() && locale.getCountry().length() > 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   167
            country = st.nextToken();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   168
            if (!country.equalsIgnoreCase(locale.getCountry())) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   169
                return false;
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
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   172
        if (st.hasMoreElements() && locale.getVariant().length() > 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   173
            variant = st.nextToken();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   174
            if (!variant.equalsIgnoreCase(locale.getVariant())) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   175
                return false;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   179
        return true;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   180
    }
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
    public static long heapValToLong(String heapValue) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   183
        if (heapValue == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   184
            return -1;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   185
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   186
        long multiplier = 1;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   187
        if (heapValue.toLowerCase().lastIndexOf('m') != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   188
            // units are megabytes, 1 megabyte = 1024 * 1024 bytes
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   189
            multiplier = 1024 * 1024;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   190
            heapValue = heapValue.substring(0, heapValue.length() - 1);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   191
        } else if (heapValue.toLowerCase().lastIndexOf('k') != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   192
            // units are kilobytes, 1 kilobyte = 1024 bytes
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   193
            multiplier = 1024;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   194
            heapValue = heapValue.substring(0, heapValue.length() - 1);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   195
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   196
        long theValue;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   197
        try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   198
            theValue = Long.parseLong(heapValue);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   199
            theValue = theValue * multiplier;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   200
        } catch (NumberFormatException e) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   201
            theValue = -1;
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
        return theValue;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   204
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   205
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   206
    public static byte[] readBytes(InputStream is, long size) throws IOException {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   207
        // Sanity on file size (restrict to 1M)
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   208
        if (size > 1024 * 1024) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   209
            throw new IOException("File too large");
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
        BufferedInputStream bis;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   213
        if (is instanceof BufferedInputStream) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   214
            bis = (BufferedInputStream) is;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   215
        } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   216
            bis = new BufferedInputStream(is);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   217
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   218
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   219
        if (size <= 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   220
            size = 10 * 1024; // Default to 10K
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   221
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   222
        byte[] b = new byte[(int) size];
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   223
        int n;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   224
        int bytesRead = 0;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   225
        n = bis.read(b, bytesRead, b.length - bytesRead);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   226
        while (n != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   227
            bytesRead += n;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   228
            // Still room in array
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   229
            if (b.length == bytesRead) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   230
                byte[] bb = new byte[b.length * 2];
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   231
                System.arraycopy(b, 0, bb, 0, b.length);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   232
                b = bb;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   233
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   234
            // Read next line
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   235
            n = bis.read(b, bytesRead, b.length - bytesRead);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   236
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   237
        bis.close();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   238
        is.close();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   239
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   240
        if (bytesRead != b.length) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   241
            byte[] bb = new byte[bytesRead];
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   242
            System.arraycopy(b, 0, bb, 0, bytesRead);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   243
            b = bb;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   244
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   245
        return b;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   248
    public static String getOSFullName() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   249
        return System.getProperty("os.name");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   250
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   251
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
     * Makes sure a URL is a path URL, i.e., ends with '/'
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
    public static URL asPathURL(URL url) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   256
        if (url == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   257
            return null;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   260
        String path = url.getFile();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   261
        if (path != null && !path.endsWith("/")) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   262
            try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   263
                return new URL(url.getProtocol(),
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   264
                        url.getHost(),
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   265
                        url.getPort(),
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   266
                        url.getFile() + "/");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   267
            } catch (MalformedURLException mue) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   268
                // Should not happen
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   269
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   270
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   271
        // Just return same URl
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   272
        return url;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   273
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   274
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   275
    public static Locale getDefaultLocale() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   276
        return Locale.getDefault();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   277
    }
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
    public static String toNormalizedString(URL u) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   280
        if (u == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   281
            return "";
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
        try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   285
            if (u.getPort() == u.getDefaultPort()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   286
                u = new URL(u.getProtocol().toLowerCase(),
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   287
                        u.getHost().toLowerCase(), -1, u.getFile());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   288
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   289
                u = new URL(u.getProtocol().toLowerCase(),
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   290
                        u.getHost().toLowerCase(), u.getPort(), u.getFile());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   291
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   292
        } catch (MalformedURLException ex) {
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
        return u.toExternalForm();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   295
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   296
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   297
    public static boolean sameURLs(URL u1, URL u2) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   298
        if (u1 == null || u2 == null || (u1 == u2)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   299
            return (u1 == u2);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   300
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   301
        //NB: do not use URL.sameFile() as it will do DNS lookup
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   302
        // Also, do quick check before slow string comparisons
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   303
        String f1 = u1.getFile();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   304
        String f2 = u2.getFile();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   305
        return (f1.length() == f2.length()) && sameBase(u1, u2)
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   306
                && f1.equalsIgnoreCase(f2);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   307
    }
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
    public static boolean sameBase(URL u1, URL u2) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   310
        return u1 != null && u2 != null &&
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   311
                sameHost(u1, u2) && samePort(u1, u2) && sameProtocol(u1, u2);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   312
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   313
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   314
    private static boolean sameProtocol(URL u1, URL u2) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   315
        //protocols are known to be lowercase
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   316
        return u1.getProtocol().equals(u2.getProtocol());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   317
    }
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
    private static boolean sameHost(URL u1, URL u2) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   320
        String host = u1.getHost();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   321
        String otherHost = u2.getHost();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   322
        if (host == null || otherHost == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   323
            return (host == null && otherHost == null);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   324
        } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   325
            //avoid slow comparison for strings of different length
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   326
            return ((host.length() == otherHost.length())
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   327
                       && host.equalsIgnoreCase(otherHost));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   328
        }
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
    private static boolean samePort(URL u1, URL u2) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   332
        return getPort(u1) == getPort(u2);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   333
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   334
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   335
    public static int getPort(URL u) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   336
        if (u.getPort() != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   337
            return u.getPort();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   338
        } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   339
            return u.getDefaultPort();
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
    public static URL getBase(URL url) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   344
        if (url == null) return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   345
        String file = url.getFile();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   346
        if (file != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   347
            int idx = file.lastIndexOf('/');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   348
            if (idx != -1 ) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   349
                file = file.substring(0, idx + 1);
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
            try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   352
                return new URL(
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   353
                    url.getProtocol(),
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   354
                    url.getHost(),
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   355
                    url.getPort(),
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   356
                    file);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   357
            } catch(MalformedURLException mue) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   358
                System.err.println(mue.getMessage());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   359
            }
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
        // Just return same URL
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   362
        return url;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   365
    private static String getEmbeddedVersionPath(String path, String version) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   366
        int index = path.lastIndexOf("/");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   367
        String filename = path.substring(index + 1);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   368
        path = path.substring(0, index + 1);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   369
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   370
        String ext = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   371
        index = filename.lastIndexOf(".");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   372
        if (index != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   373
            ext = filename.substring(index + 1);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   374
            filename = filename.substring(0, index);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   375
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   376
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   377
        StringBuilder filenameSB = new StringBuilder(filename);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   378
        if (version != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   379
            filenameSB.append("__V");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   380
            filenameSB.append(version);
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
        if (ext != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   383
            filenameSB.append(".");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   384
            filenameSB.append(ext);
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
        path += filenameSB.toString();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   388
        return path;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   389
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   390
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   391
    public static URL getEmbeddedVersionURL(URL u, String version) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   392
        if (u == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   393
            return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   394
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   395
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   396
        if (version == null || version.indexOf("*") != -1
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   397
                || version.indexOf("+") != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   398
            // Do not support * or + in version string
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   399
            return u;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   400
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   401
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   402
        URL versionURL = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   403
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   404
        String protocol = u.getProtocol();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   405
        String host = u.getHost();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   406
        int port = u.getPort();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   407
        String path = u.getPath();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   408
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   409
        path = getEmbeddedVersionPath(path, version);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   410
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   411
        versionURL = new URL(protocol, host, port, path);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   412
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   413
        return versionURL;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   414
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   415
}