package aQute.maven.nexus.provider;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import aQute.bnd.http.HttpClient;
import aQute.bnd.http.HttpRequest;
import aQute.bnd.service.url.TaggedData;
public class Nexus {
private URI uri;
private HttpClient client;
public Nexus(URI uri, HttpClient client) throws URISyntaxException {
this.uri = client.makeDir(uri);
this.client = client;
}
public HttpRequest<Object> request() {
return client.build().headers("Accept", "application/json").headers("User-Agent", "bnd");
}
public List<URI> files() throws Exception {
URI uri = new URI(this.uri + "/content/");
List<URI> uris = new ArrayList<URI>();
files(uris, uri);
return uris;
}
/*
* <pre> <content> <data> <content-item> <resourceURI>
* https://oss.sonatype.org/service/local/repositories/orgosgi-1073/content/
* org/osgi/osgi.enroute.authenticator.github.provider/ </resourceURI>
* <relativePath>/org/osgi/osgi.enroute.authenticator.github.provider/</
* relativePath> <text>osgi.enroute.authenticator.github.provider</text>
* <leaf>false</leaf> <lastModified>2016-06-03 17:05:14.0 UTC</lastModified>
* <sizeOnDisk>-1</sizeOnDisk> </content-item> </data> </content> </pre>
*/
public void files(List<URI> list, URI uri) throws Exception {
ContentDTO content = request().get(ContentDTO.class).go(uri);
for (ContentDTO.ItemDTO item : content.data) {
if (item.sizeOnDisk < 0) {
files(list, item.resourceURI);
} else {
if (isReal(item.resourceURI))
list.add(item.resourceURI);
}
}
}
private boolean isReal(URI uri) {
return !(uri.getPath().endsWith(".sha1") || uri.getPath().endsWith(".asc") || uri.getPath().endsWith(".md5"));
}
public File download(URI uri) throws Exception {
return request().useCache().age(30, TimeUnit.SECONDS).go(uri);
}
public void upload(URI uri, byte[] data) throws Exception {
try (TaggedData tag = request().put().upload(data).asTag().go(uri)) {
switch (tag.getState()) {
case NOT_FOUND :
case OTHER :
default :
tag.throwIt();
break;
case UNMODIFIED :
case UPDATED :
break;
}
}
}
}