src/demo/share/jpackager/JNLPConverter/src/jnlp/converter/parser/ResourcesDesc.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.net.URL;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    27
import java.util.Properties;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    28
import java.util.ArrayList;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    29
import java.util.Arrays;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    30
import java.util.Enumeration;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    31
import java.util.LinkedList;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    32
import java.util.List;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    33
import java.util.concurrent.CopyOnWriteArrayList;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    34
import jnlp.converter.HTTPHelper;
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
/**
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    37
 * This class contains information about the codebase and properties, i.e., how
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    38
 * to locate the classes and optional-packages
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    39
 */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    40
public class ResourcesDesc implements ResourceType {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    41
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    42
    private final List<ResourceType> _list;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    43
    private volatile JNLPDesc _parent = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    44
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
     * Create empty resource list
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    47
     */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    48
    public ResourcesDesc() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    49
        _list = new CopyOnWriteArrayList<>();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    50
    }
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
    public JNLPDesc getParent() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    53
        return _parent;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    56
    void setParent(JNLPDesc parent) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    57
        _parent = parent;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    58
        for (int i = 0; i < _list.size(); i++) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    59
            Object o = _list.get(i);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    60
            if (o instanceof JREDesc) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    61
                JREDesc jredesc = (JREDesc) o;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    62
                if (jredesc.getNestedResources() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    63
                    jredesc.getNestedResources().setParent(parent);
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
            }
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    69
    public void addResource(ResourceType rd) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    70
        if (rd != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    71
            _list.add(rd);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    72
        }
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
    boolean isEmpty() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    76
        return _list.isEmpty();
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
    public JARDesc[] getLocalJarDescs() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    80
        ArrayList<JARDesc> jds = new ArrayList<>(_list.size());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    81
        for (ResourceType rt : _list) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    82
            if (rt instanceof JARDesc) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    83
                jds.add((JARDesc) rt);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    84
            }
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
        return jds.toArray(new JARDesc[jds.size()]);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    87
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    88
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    89
    public JREDesc getJreDesc() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    90
        for (ResourceType rt : _list) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    91
            if (rt instanceof JREDesc) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    92
                return (JREDesc)rt;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    96
        return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
    97
    }
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
    public ExtensionDesc[] getExtensionDescs() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   100
        final ArrayList<ExtensionDesc> extList = new ArrayList<>();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   101
        visit(new ResourceVisitor() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   102
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   103
            public void visitExtensionDesc(ExtensionDesc ed) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   104
              // add all extensiondesc recursively
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   105
                addExtToList(extList);
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
        });
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   108
        return extList.toArray(new ExtensionDesc[extList.size()]);
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
    public JARDesc[] getAllJarDescs() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   112
        List<JARDesc> jarList = new ArrayList<>();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   113
        addJarsToList(jarList);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   114
        return jarList.toArray(new JARDesc[jarList.size()]);
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
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
     * Add to a list of all the ExtensionDesc. This method goes recusivly through
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   119
     * all ExtensionDesc
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   120
     */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   121
    private void addExtToList(final List<ExtensionDesc> list) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   122
        // Iterate through list an add ext jnlp to the list.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   123
        visit(new ResourceVisitor() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   124
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   125
            public void visitExtensionDesc(ExtensionDesc ed) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   126
                if (ed.getExtensionDesc() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   127
                    ed.getExtensionDesc().getMainJar();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   128
                    ResourcesDesc rd = ed.getExtensionDesc().getResourcesDesc();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   129
                    if (rd != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   130
                        rd.addExtToList(list);
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
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   133
                list.add(ed);
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
        });
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   138
    private void addJarsToList(final List<JARDesc> list) throws Exception {
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
        // Iterate through list an add resources to the list.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   141
        // The ordering of resources are preserved
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   142
        visit(new ResourceVisitor() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   143
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   144
            public void visitJARDesc(JARDesc jd) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   145
                list.add(jd);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   146
            }
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
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   149
            public void visitExtensionDesc(ExtensionDesc ed) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   150
                if (ed.getExtensionDesc() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   151
                    ResourcesDesc rd = ed.getExtensionDesc().getResourcesDesc();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   152
                    if (rd != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   153
                        rd.addJarsToList(list);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   154
                    }
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
    }
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
     * Get all the resources needed when a specific resource is requested.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   162
     * Returns null if no resource was found
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   163
     */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   164
    public JARDesc[] getResource(final URL location) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   165
        final JARDesc[] resources = new JARDesc[1];
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   166
        // Find the given resource
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   167
        visit(new ResourceVisitor() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   168
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   169
            public void visitJARDesc(JARDesc jd) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   170
                if (GeneralUtil.sameURLs(jd.getLocation(), location)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   171
                    resources[0] = jd;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   176
        // Found no resource?
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   177
        if (resources[0] == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   178
            return null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   179
        }
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
        // No part, so just one resource
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   182
        return resources;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   183
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   184
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   185
    /* Returns the Expected Main Jar
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   186
     *    first jar with attribute main="true"
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   187
     *    else first jar if none has that attribute
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   188
     *    will look in extensions, and nested resource blocks if matching
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   189
     */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   190
    protected JARDesc getMainJar() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   191
        // Normal trick to get around final arguments to inner classes
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   192
        final JARDesc[] results = new JARDesc[2];
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
        visit(new ResourceVisitor() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   195
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   196
            public void visitJARDesc(JARDesc jd) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   197
                if (jd.isJavaFile()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   198
                    // Keep track of first Java File
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   199
                    if (results[0] == null || results[0].isNativeLib()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   200
                        results[0] = jd;
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
                    // Keep tack of Java File marked main
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   203
                    if (jd.isMainJarFile()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   204
                        results[1] = jd;
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
                } else if (jd.isNativeLib()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   207
                    // if jnlp extension has only native lib
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   208
                    if (results[0] == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   209
                        results[0] = jd;
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
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   213
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   214
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   215
            public void visitExtensionDesc(ExtensionDesc ed) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   216
            // only check if no main yet and it is not an installer
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   217
                if (results[1] == null && !ed.isInstaller()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   218
                    JNLPDesc extLd = ed.getExtensionDesc();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   219
                    if (extLd != null && extLd.isLibrary()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   220
                        ResourcesDesc rd = extLd.getResourcesDesc();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   221
                        if (rd != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   222
                          // look for main jar in extension resource
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   223
                            rd.visit(this);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   224
                        }
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
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   228
        });
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
        // Default is the first, if none is specified as main. This might
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   231
        // return NULL if there is no JAR resources.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   232
        JARDesc first = results[0];
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   233
        JARDesc main = results[1];
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   234
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   235
        // if main is null then return first;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   236
        // libraries have no such thing as a main jar, so return first;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   237
        // otherwise return main
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   238
        // only returns null if there are no jars.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   239
        return (main == null) ? first : main;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   242
    /*
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   243
     *  Get the properties defined for this object
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
    public Properties getResourceProperties() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   246
        final Properties props = new Properties();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   247
        visit(new ResourceVisitor() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   248
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   249
            public void visitPropertyDesc(PropertyDesc pd) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   250
                props.setProperty(pd.getKey(), pd.getValue());
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
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   254
            public void visitExtensionDesc(ExtensionDesc ed) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   255
                JNLPDesc jnlpd = ed.getExtensionDesc();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   256
                ResourcesDesc rd = jnlpd.getResourcesDesc();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   257
                if (rd != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   258
                    Properties extProps = rd.getResourceProperties();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   259
                    Enumeration e = extProps.propertyNames();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   260
                    while (e.hasMoreElements()) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   261
                        String key = (String) e.nextElement();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   262
                        String value = extProps.getProperty(key);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   263
                        props.setProperty(key, value);
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
                }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   266
            }
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
        return props;
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
    /*
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   272
     *  Get the properties defined for this object, in the right order.
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
    public List<Property> getResourcePropertyList() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   275
        final LinkedList<Property> propList = new LinkedList<>();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   276
        visit(new ResourceVisitor() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   277
            @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   278
            public void visitPropertyDesc(PropertyDesc pd) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   279
                propList.add(new Property(pd.getKey(), pd.getValue()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   280
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   281
        });
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   282
        return propList;
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
     * visitor dispatch
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   287
     */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   288
    @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   289
    public void visit(ResourceVisitor rv) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   290
        for (int i = 0; i < _list.size(); i++) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   291
            ResourceType rt = _list.get(i);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   292
            rt.visit(rv);
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
    }
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
    public void addNested(ResourcesDesc nested) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   297
        if (nested != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   298
            nested.visit(new ResourceVisitor() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   299
                @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   300
                public void visitJARDesc(JARDesc jd) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   301
                    _list.add(jd);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   302
                }
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
                @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   305
                public void visitPropertyDesc(PropertyDesc pd) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   306
                    _list.add(pd);
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
                @Override
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   310
                public void visitExtensionDesc(ExtensionDesc ed) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   311
                    _list.add(ed);
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
        }
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
    }
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
    public static class JARDesc implements ResourceType {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   319
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   320
        private URL _location;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   321
        private String _locationString;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   322
        private String _version;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   323
        private boolean _isNativeLib;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   324
        private boolean _isMainFile;  // Only used for Java JAR files (a main JAR file is implicitly eager)
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   325
        private ResourcesDesc _parent;   // Back-pointer to the Resources that contains this JAR
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   326
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   327
        public JARDesc(URL location, String version, boolean isMainFile, boolean isNativeLib, ResourcesDesc parent) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   328
            _location = location;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   329
            _locationString = GeneralUtil.toNormalizedString(location);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   330
            _version = version;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   331
            _isMainFile = isMainFile;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   332
            _isNativeLib = isNativeLib;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   333
            _parent = parent;
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
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
         * Type of JAR resource
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   338
         */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   339
        public boolean isNativeLib() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   340
            return _isNativeLib;
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 boolean isJavaFile() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   344
            return !_isNativeLib;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   345
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   346
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   347
        /**
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   348
         * Returns URL/version for JAR file
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
        public URL getVersionLocation() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   351
            if (getVersion() == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   352
                return _location;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   353
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   354
                return GeneralUtil.getEmbeddedVersionURL(getLocation(), getVersion());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   355
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   356
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   357
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   358
        public URL getLocation() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   359
            return _location;
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
        public String getVersion() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   363
            return _version;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   366
        public String getName() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   367
            // File can be separated by '/' or '\\'
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   368
            int index;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   369
            int index1 = _locationString.lastIndexOf('/');
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   370
            int index2 = _locationString.lastIndexOf('\\');
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
            if (index1 >= index2) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   373
                index = index1;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   374
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   375
                index = index2;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   378
            if (index != -1) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   379
                return _locationString.substring(index + 1, _locationString.length());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   380
            }
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
            return null;
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
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
         * Returns if this is the main JAR file
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   387
         */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   388
        public boolean isMainJarFile() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   389
            return _isMainFile;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   392
        /**
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   393
         * Get parent LaunchDesc
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
        public ResourcesDesc getParent() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   396
            return _parent;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   397
        }
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
         * Visitor dispatch
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
        public void visit(ResourceVisitor rv) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   403
            rv.visitJARDesc(this);
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   407
    public static class PropertyDesc implements ResourceType {
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
        private String _key;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   410
        private String _value;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   411
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   412
        public PropertyDesc(String key, String value) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   413
            _key = key;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   414
            _value = value;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   417
        // Accessors
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   418
        public String getKey() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   419
            return _key;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   420
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   421
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   422
        public String getValue() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   423
            return _value;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   424
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   425
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   426
        /**
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   427
         * Visitor dispatch
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   428
         */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   429
        public void visit(ResourceVisitor rv) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   430
            rv.visitPropertyDesc(this);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   431
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   432
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   433
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   434
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   435
    public static class JREDesc implements ResourceType {
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
        private String _version;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   438
        private long _maxHeap;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   439
        private long _minHeap;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   440
        private String _vmargs;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   441
        private ResourcesDesc _resourceDesc;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   442
        private JNLPDesc _extensioDesc;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   443
        private String _archList;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   444
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   445
        /*
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   446
         * Constructor to create new instance based on the requirements from JNLP file.
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   447
         */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   448
        public JREDesc(String version, long minHeap, long maxHeap, String vmargs,
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   449
                       ResourcesDesc resourcesDesc, String archList) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   450
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   451
            _version = version;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   452
            _maxHeap = maxHeap;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   453
            _minHeap = minHeap;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   454
            _vmargs = vmargs;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   455
            _resourceDesc = resourcesDesc;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   456
            _extensioDesc = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   457
            _archList = archList;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   458
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   459
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   460
        public String[] getArchList() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   461
            return GeneralUtil.getStringList(_archList);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   462
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   463
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   464
        public String getVersion() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   465
            return _version;
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
        public long getMinHeap() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   469
            return _minHeap;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   470
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   471
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   472
        public long getMaxHeap() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   473
            return _maxHeap;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   476
        public String getVmArgs() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   477
            return _vmargs;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   478
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   479
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   480
        public String[] getVmArgsList() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   481
            return GeneralUtil.getStringList(_vmargs);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   482
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   483
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   484
        public ResourcesDesc getNestedResources() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   485
            return _resourceDesc;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   486
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   487
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   488
        public JNLPDesc getExtensionDesc() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   489
            return _extensioDesc;
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
        public void setExtensionDesc(JNLPDesc ld) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   493
            _extensioDesc = ld;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   494
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   495
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   496
        /* visitor dispatch */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   497
        public void visit(ResourceVisitor rv) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   498
            rv.visitJREDesc(this);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   499
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   500
    }
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
    public static class Property implements Cloneable {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   503
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   504
        public static final String JNLP_VERSION_ENABLED = "jnlp.versionEnabled";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   505
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   506
        String key;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   507
        String value;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   508
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   509
        public Property(String spec) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   510
            spec = spec.trim();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   511
            if (!spec.startsWith("-D") || spec.length() < 3) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   512
                throw new IllegalArgumentException("Property invalid");
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
            int endKey = spec.indexOf("=");
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   516
            if (endKey < 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   517
                // it's legal to have no assignment
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   518
                this.key = spec.substring(2); // skip "-D"
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   519
                this.value = "";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   520
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   521
                this.key = spec.substring(2, endKey);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   522
                this.value = spec.substring(endKey + 1);
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   526
        public static Property createProperty(String spec) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   527
            Property prop = null;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   528
            try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   529
                prop = new Property(spec);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   530
            } catch (IllegalArgumentException iae) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   531
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   532
            return prop;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   533
        }
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
        public Property(String key, String value) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   536
            this.key = key;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   537
            if (value != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   538
                this.value = value;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   539
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   540
                this.value = "";
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   541
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   542
        }
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
        public String getKey() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   545
            return key;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   546
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   547
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   548
        public String getValue() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   549
            return value;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   552
        // @return String representation, unquoted, unified presentation
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   553
        public String toString() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   554
            if (value.length() == 0) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   555
                return "-D" + key;
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
            return "-D" + key + "=" + value;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   560
        public void addTo(Properties props) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   561
            props.setProperty(key, value);
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   564
        // Hash Object
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   565
        public boolean equals(Object o) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   566
            if (!(o instanceof Property)) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   567
                return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   568
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   569
            Property op = (Property) o;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   570
            int hashTheirs = op.hashCode();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   571
            int hashThis = hashCode();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   572
            return hashTheirs == hashThis;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   573
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   574
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   575
        public int hashCode() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   576
            return key.hashCode();
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   577
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   578
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   579
        private static List<Object> jnlpProps = Arrays.asList(new Object[]{
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   580
            JNLP_VERSION_ENABLED
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   583
        public static boolean isJnlpProperty(String spec) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   584
            try {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   585
                Property p = new Property(spec);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   586
                return isJnlpPropertyKey(p.getKey());
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   587
            } catch (Exception e) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   588
                return false;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   592
        public static boolean isJnlpPropertyKey(String key) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   593
            return key != null && jnlpProps.contains(key);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   594
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   595
    }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   596
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   597
    public static class ExtensionDesc implements ResourceType {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   598
        // Tag elements
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
        private final URL _location;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   601
        private final String _locationString;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   602
        private final String _version;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   603
        private final URL _codebase;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   604
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   605
        // Link to launchDesc
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   606
        private JNLPDesc _extensionLd; // Link to launchDesc for extension
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
        public ExtensionDesc(URL location, String version) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   609
            _location = location;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   610
            _locationString = GeneralUtil.toNormalizedString(location);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   611
            _version = version;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   612
            _codebase = GeneralUtil.asPathURL(GeneralUtil.getBase(location));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   613
            _extensionLd = null;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   616
        public boolean isInstaller() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   617
            if (getExtensionDesc() != null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   618
                return _extensionLd.isInstaller();
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
            return false;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   621
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   622
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   623
        public URL getLocation() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   624
            return _location;
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
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   627
        public String getVersionLocation() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   628
            if (getVersion() == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   629
                return _locationString;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   630
            } else {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   631
                return GeneralUtil.toNormalizedString(GeneralUtil.getEmbeddedVersionURL(getLocation(), getVersion()));
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   632
            }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   633
        }
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   634
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   635
        public String getVersion() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   636
            return _version;
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
        public URL getCodebase() {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   640
            return _codebase;
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
        /*
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   644
         * Information about the resources
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   645
         */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   646
        public JNLPDesc getExtensionDesc() throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   647
            if (_extensionLd == null) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   648
                byte[] bits = HTTPHelper.getJNLPBits(getVersionLocation(), _locationString);
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   649
                _extensionLd = XMLFormat.parse(bits, getCodebase(), getVersionLocation());
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
            return _extensionLd;
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   652
        }
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
        public void setExtensionDesc(JNLPDesc desc) {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   655
            _extensionLd = desc;
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
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
         * Visitor dispatch
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   660
         */
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   661
        public void visit(ResourceVisitor rv) throws Exception {
eaca4369b068 8198472: Add support for creating bundles from JNLP files
herrick
parents:
diff changeset
   662
            rv.visitExtensionDesc(this);
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
}