package com.revolsys.maven;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import com.revolsys.spring.resource.Resource;
public class MavenUrlStreamHandler extends URLStreamHandler {
private final MavenRepository mavenRepository;
public MavenUrlStreamHandler(final MavenRepository mavenRepository) {
this.mavenRepository = mavenRepository;
}
@Override
protected URLConnection openConnection(final URL url) throws IOException {
final String protocol = url.getProtocol();
if (protocol.equals("jar")) {
final String file = url.getFile();
int separator = file.indexOf("!/");
if (separator == -1) {
throw new MalformedURLException("no !/ found in url spec:" + file);
} else {
final String subUrl = file.substring(0, separator++);
if (subUrl.startsWith("mvn")) {
final String mavenId = subUrl.substring(4);
final Resource resource = this.mavenRepository.getResource(mavenId);
final URL resourceUrl = resource.getURL();
String entryName = "/";
if (++separator != file.length()) {
entryName = file.substring(separator - 1, file.length());
}
final String jarUrl = "jar:" + resourceUrl + "!" + entryName;
return new URL(jarUrl).openConnection();
}
}
} else if (protocol.equals("mvn")) {
final String mavenId = url.getFile();
final Resource resource = this.mavenRepository.getResource(mavenId);
final URL resourceUrl = resource.getURL();
return resourceUrl.openConnection();
}
return new URL(url.toString()).openConnection();
}
}