Handler.java
package gov.usgs.util.protocolhandlers.data;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
/**
* Data URLs handler.
*
* "data:[<mediatype>][;base64],<data>"
*/
public class Handler extends URLStreamHandler {
/** property for protocol handlers */
public static final String PROTOCOL_HANDLERS_PROPERTY = "java.protocol.handler.pkgs";
/**
* Register data protocol handler
*/
public static void register() {
final String packageName = Handler.class.getPackage().getName().replace(".data", "");
final String protocolHandlers = System.getProperty(PROTOCOL_HANDLERS_PROPERTY);
if (protocolHandlers == null || protocolHandlers.indexOf("gov.usgs.util.protocolhandlers") == -1) {
System.setProperty(
PROTOCOL_HANDLERS_PROPERTY,
protocolHandlers == null ? packageName : protocolHandlers + "|" + packageName);
}
}
@Override
protected URLConnection openConnection(URL url) throws IOException {
try {
return new DataURLConnection(url);
} catch (Exception e) {
throw new IOException(e);
}
}
@Override
protected void parseURL(final URL url, final String spec, final int start, final int end) throws SecurityException {
int colon = spec.indexOf(":");
final String protocol = "data";
final String host = null;
final int port = 80;
final String authority = null;
final String userInfo = null;
final String path = spec.substring(colon + 1, end);
final String query = null;
final String ref = null;
setURL(url, protocol, host, port, authority, userInfo, path, query, ref);
}
@Override
protected String toExternalForm(final URL url) {
return url.getProtocol() + ":" + url.getPath();
}
}