| // |
| // ======================================================================== |
| // Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| |
| package org.eclipse.jetty.osgi.boot.utils; |
| |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.ArrayList; |
| import java.util.Dictionary; |
| import java.util.List; |
| import java.util.StringTokenizer; |
| |
| /** |
| * Various useful functions utility methods for OSGi wide use. |
| */ |
| public class Util |
| { |
| public static final String DEFAULT_DELIMS = ",;"; |
| |
| |
| /** |
| * Get the value of a manifest header. |
| * |
| * @param name the name of the header |
| * @param altName an alternative name for the header (useful for deprecated names) |
| * @param manifest the dictionary |
| * @return the value from the manifest |
| */ |
| public static String getManifestHeaderValue (String name, String altName, Dictionary manifest) |
| { |
| if (manifest == null) |
| return null; |
| if (name == null && altName == null) |
| return null; |
| if (name != null) |
| return (String)manifest.get(name); |
| return (String)manifest.get(altName); |
| } |
| |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * Treating the string as a separated list of filenames, |
| * convert and return the list of urls. |
| * |
| * @param val the separated list of filenames |
| * @param delims the separators (default is <code>,;</code>) |
| * @return the list of URLs found in the input list |
| * @throws Exception if unable to convert entry to a URL |
| */ |
| public static List<URL> fileNamesAsURLs(String val, String delims) |
| throws Exception |
| { |
| String separators = DEFAULT_DELIMS; |
| if (delims == null) |
| delims = separators; |
| |
| StringTokenizer tokenizer = new StringTokenizer(val, delims, false); |
| List<URL> urls = new ArrayList<URL>(); |
| while (tokenizer.hasMoreTokens()) |
| { |
| urls.add(BundleFileLocatorHelperFactory.getFactory().getHelper().getLocalURL(new URL(tokenizer.nextToken()))); |
| } |
| return urls; |
| } |
| |
| |
| /* ------------------------------------------------------------ */ |
| public static void setProperty(Dictionary<String,String> properties, String key, String value) |
| { |
| if (value != null) |
| { |
| properties.put(key, value); |
| } |
| } |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * recursively substitute the <code>${sysprop}</code> by their actual system property. |
| * <code>${sysprop,defaultvalue}</code> will use <code>'defaultvalue'</code> as the value if no |
| * sysprop is defined. Not the most efficient code but we are shooting for |
| * simplicity and speed of development here. |
| * |
| * @param value the input string |
| * @return the string with replaced properties |
| */ |
| public static String resolvePropertyValue(String value) |
| { |
| int ind = value.indexOf("${"); |
| if (ind == -1) { return value; } |
| int ind2 = value.indexOf('}', ind); |
| if (ind2 == -1) { return value; } |
| String sysprop = value.substring(ind + 2, ind2); |
| String defaultValue = null; |
| int comma = sysprop.indexOf(','); |
| if (comma != -1 && comma + 1 != sysprop.length()) |
| { |
| defaultValue = sysprop.substring(comma + 1); |
| defaultValue = resolvePropertyValue(defaultValue); |
| sysprop = sysprop.substring(0, comma); |
| } |
| else |
| { |
| defaultValue = "${" + sysprop + "}"; |
| } |
| |
| String v = System.getProperty(sysprop); |
| |
| String reminder = value.length() > ind2 + 1 ? value.substring(ind2 + 1) : ""; |
| reminder = resolvePropertyValue(reminder); |
| if (v != null) |
| { |
| return value.substring(0, ind) + v + reminder; |
| } |
| else |
| { |
| return value.substring(0, ind) + defaultValue + reminder; |
| } |
| } |
| } |