001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.io.protocols.data;
003
004import java.io.IOException;
005import java.net.URL;
006import java.net.URLConnection;
007import java.net.URLStreamHandler;
008
009import org.openstreetmap.josm.tools.Utils;
010
011/**
012 * Protocol handler for {@code data:} URLs.
013 * This class must be named "Handler" and in a package "data" (fixed named convention)!
014 * <p>
015 * See <a href="http://stackoverflow.com/a/9388757/2257172">StackOverflow</a>.
016 * @since 10931
017 */
018public class Handler extends URLStreamHandler {
019
020    @Override
021    protected URLConnection openConnection(URL u) throws IOException {
022        return new DataConnection(u);
023    }
024
025    /**
026     * Installs protocol handler.
027     */
028    public static void install() {
029        String pkgName = Handler.class.getPackage().getName();
030        String pkg = pkgName.substring(0, pkgName.lastIndexOf('.'));
031
032        String protocolHandlers = System.getProperty("java.protocol.handler.pkgs", "");
033        if (!protocolHandlers.contains(pkg)) {
034            StringBuilder sb = new StringBuilder(protocolHandlers);
035            if (sb.length() > 0) {
036                sb.append('|');
037            }
038            sb.append(pkg);
039            Utils.updateSystemProperty("java.protocol.handler.pkgs", sb.toString());
040        }
041    }
042}