/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.module.artifact.classloader.net;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
/**
* Registers a handler for the Mule Artifact protocol, so that every time an URL has {@link #PROTOCOL} it will be
* handled by {@link MuleArtifactUrlConnection}.
*
* @since 4.0
*/
public class MuleArtifactUrlStreamHandler extends URLStreamHandler {
/**
* Mule Protocol that will be used to reference artifacts.
*/
public final static String PROTOCOL = "muleartifact";
/**
* Registers the Mule Artifact protocol {@link #PROTOCOL} into the {@link URL#setURLStreamHandlerFactory(URLStreamHandlerFactory)}
* through the {@link MuleUrlStreamHandlerFactory}.
*/
public static void register() {
MuleUrlStreamHandlerFactory.registerHandler(PROTOCOL, new MuleArtifactUrlStreamHandler());
}
/**
* Opens a connection to the object referenced by the {@code url} argument if the protocol of it it's {@link #PROTOCOL}.
*
* @param url that represents a Mule Artifact to connect with.
* @return a {@link URLConnection} object for the {@code url}.
* @throws IOException if an I/O error occurs while opening the {@link URL#openConnection()}.
*/
@Override
protected URLConnection openConnection(URL url) throws IOException {
return new MuleArtifactUrlConnection(url);
}
}