![JAR search and dependency download from the Maven repository](/logo.png)
com.jfrog.bintray.client.impl.handle.PackageHandleImpl Maven / Gradle / Ivy
package com.jfrog.bintray.client.impl.handle;
import com.jfrog.bintray.client.api.BintrayCallException;
import com.jfrog.bintray.client.api.ObjectMapperHelper;
import com.jfrog.bintray.client.api.details.Attribute;
import com.jfrog.bintray.client.api.details.PackageDetails;
import com.jfrog.bintray.client.api.details.VersionDetails;
import com.jfrog.bintray.client.api.handle.PackageHandle;
import com.jfrog.bintray.client.api.handle.RepositoryHandle;
import com.jfrog.bintray.client.api.handle.VersionHandle;
import com.jfrog.bintray.client.api.model.Pkg;
import com.jfrog.bintray.client.api.model.Version;
import com.jfrog.bintray.client.impl.model.PackageImpl;
import com.jfrog.bintray.client.impl.model.VersionImpl;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.entity.ContentType;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.jfrog.bintray.client.api.BintrayClientConstatnts.API_PKGS;
/**
* @author Dan Feldman
*/
class PackageHandleImpl implements PackageHandle {
private static final Logger log = LoggerFactory.getLogger(PackageHandleImpl.class);
private BintrayImpl bintrayHandle;
private RepositoryHandle repositoryHandle;
private String name;
private AttributesSearchQueryImpl searchQuery = null;
PackageHandleImpl(BintrayImpl bintrayHandle, RepositoryHandle repositoryHandle, String name) {
this.bintrayHandle = bintrayHandle;
this.repositoryHandle = repositoryHandle;
this.name = name;
}
@Override
public RepositoryHandle repository() {
return repositoryHandle;
}
@Override
public VersionHandle version(String versionName) {
return new VersionHandleImpl(bintrayHandle, this, versionName);
}
@Override
public Pkg get() throws IOException, BintrayCallException {
HttpResponse response = bintrayHandle.get(getCurrentPackageUri(), null);
PackageDetails pkgDetails;
String jsonContentStream = IOUtils.toString(response.getEntity().getContent());
ObjectMapper mapper = ObjectMapperHelper.get();
try {
pkgDetails = mapper.readValue(jsonContentStream, PackageDetails.class);
} catch (IOException e) {
log.error("Can't parse the json file: " + e.getMessage());
throw e;
}
return new PackageImpl(pkgDetails);
}
@Override
public PackageHandle update(PackageDetails packageDetails) throws IOException, BintrayCallException {
Map headers = new HashMap<>();
String jsonContent = PackageImpl.getCreateUpdateJson(packageDetails);
BintrayImpl.addContentTypeJsonHeader(headers);
bintrayHandle.patch(getCurrentPackageUri(), headers, IOUtils.toInputStream(jsonContent));
return this.updateAttributes(packageDetails);
}
@Override
public PackageHandle delete() throws BintrayCallException {
bintrayHandle.delete(getCurrentPackageUri(), null);
return this;
}
@Override
public boolean exists() throws BintrayCallException {
try {
bintrayHandle.head(getCurrentPackageUri(), null);
} catch (BintrayCallException e) {
if (e.getStatusCode() == 404) {
return false;
}
throw e;
}
return true;
}
@Override
public VersionHandle createVersion(VersionDetails versionDetails) throws IOException, BintrayCallException {
Map headers = new HashMap<>();
String jsonContent = VersionImpl.getCreateUpdateJson(versionDetails);
BintrayImpl.addContentTypeJsonHeader(headers);
bintrayHandle.post(getCurrentPackageUri() + "/versions", headers, IOUtils.toInputStream(jsonContent));
return new VersionHandleImpl(bintrayHandle, this, versionDetails.getName()).setAttributes(versionDetails);
}
@Override
public PackageHandle setAttributes(PackageDetails packageDetails) throws IOException, BintrayCallException {
return setAttributes(packageDetails.getAttributes());
}
@Override
public PackageHandle setAttributes(List attributes) throws IOException, BintrayCallException {
if (attributes == null) {
return this;
}
Map headers = new HashMap<>();
String jsonContent = Attribute.getJsonFromAttributeList(attributes);
BintrayImpl.addContentTypeJsonHeader(headers);
bintrayHandle.post(getCurrentPackageUri() + "/attributes", headers, IOUtils.toInputStream(jsonContent));
return this;
}
@Override
public PackageHandle updateAttributes(PackageDetails packageDetails) throws IOException, BintrayCallException {
return updateAttributes(packageDetails.getAttributes());
}
@Override
public PackageHandle updateAttributes(List attributes) throws IOException, BintrayCallException {
if (attributes == null) {
return this;
}
Map headers = new HashMap<>();
String jsonContent = Attribute.getJsonFromAttributeList(attributes);
BintrayImpl.addContentTypeJsonHeader(headers);
bintrayHandle.patch(getCurrentPackageUri() + "/attributes", headers, IOUtils.toInputStream(jsonContent));
return this;
}
public void addQuery(AttributesSearchQueryImpl query) {
searchQuery = query;
}
/**
* Searches for versions according to the attribute search query supplied to addQuery
*
* @return a list of packages that were returned by Bintray's search
* @throws BintrayCallException
*/
public List attributeSearch() throws BintrayCallException {
ObjectMapper mapper = ObjectMapperHelper.get();
StringWriter writer = new StringWriter();
try {
mapper.writeValue(writer, searchQuery);
} catch (IOException e) {
log.error("Error writing search query to json: ", e);
return null;
}
Map headers = new HashMap<>();
headers.put(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.getMimeType());
HttpResponse response = bintrayHandle.post("/search/attributes/" + repositoryHandle.owner().name() +
"/" + repositoryHandle.name() + "/" + name + "/versions", headers,
IOUtils.toInputStream(writer.toString()));
List answer = new ArrayList<>();
try {
answer = mapper.readValue(response.getEntity().getContent(), new TypeReference>() {
});
} catch (IOException e) {
log.error("Error parsing query response");
}
List packages = new ArrayList<>();
for (VersionDetails verDetails : answer) {
packages.add(new VersionImpl(verDetails));
}
searchQuery = null;
return packages;
}
@Override
public String getCurrentPackageUri() {
return String.format(API_PKGS + "%s/%s/%s", repositoryHandle.owner().name(), repositoryHandle.name(), name);
}
@Override
public String name() {
return name;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy