Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.jfrog.bintray.client.impl.handle.VersionHandleImpl Maven / Gradle / Ivy
package com.jfrog.bintray.client.impl.handle;
import com.jfrog.bintray.client.api.BintrayCallException;
import com.jfrog.bintray.client.api.MultipleBintrayCallException;
import com.jfrog.bintray.client.api.ObjectMapperHelper;
import com.jfrog.bintray.client.api.details.Attribute;
import com.jfrog.bintray.client.api.details.VersionDetails;
import com.jfrog.bintray.client.api.handle.PackageHandle;
import com.jfrog.bintray.client.api.handle.VersionHandle;
import com.jfrog.bintray.client.api.model.Version;
import com.jfrog.bintray.client.impl.model.VersionImpl;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.jfrog.bintray.client.api.BintrayClientConstatnts.*;
/**
* @author Dan Feldman
*/
class VersionHandleImpl implements VersionHandle {
private static final Logger log = LoggerFactory.getLogger(VersionHandleImpl.class);
private static final String OVERRIDE_HEADER = "X-Bintray-Override";
private static final String DEB_DIST_HEADER = "X-Bintray-Debian-Distribution";
private static final String DEB_COMP_HEADER = "X-Bintray-Debian-Component";
private static final String DEB_ARCH_HEADER = "X-Bintray-Debian-Architecture";
private BintrayImpl bintrayHandle;
private String name;
private PackageHandle packageHandle;
public VersionHandleImpl(BintrayImpl bintrayHandle, PackageHandle packageHandle, String versionName) {
this.bintrayHandle = bintrayHandle;
this.packageHandle = packageHandle;
this.name = versionName;
}
@Override
public PackageHandle pkg() {
return packageHandle;
}
@Override
public String name() {
return name;
}
@Override
public Version get() throws BintrayCallException, IOException {
HttpResponse response = bintrayHandle.get(getVersionUri(), null);
VersionDetails versionDetails;
ObjectMapper mapper = ObjectMapperHelper.get();
try {
InputStream jsonContentStream = response.getEntity().getContent();
versionDetails = mapper.readValue(jsonContentStream, VersionDetails.class);
} catch (IOException e) {
log.debug("{}", e);
log.error("Can't process the json file: {}", e.getMessage());
throw e;
}
return new VersionImpl(versionDetails);
}
@Override
public VersionHandle update(VersionDetails versionDetails) throws IOException, BintrayCallException {
Map headers = new HashMap<>();
String jsonContent = VersionImpl.getCreateUpdateJson(versionDetails);
BintrayImpl.addContentTypeJsonHeader(headers);
bintrayHandle.patch(getVersionUri(), headers, IOUtils.toInputStream(jsonContent));
return this.updateAttributes(versionDetails);
}
@Override
public VersionHandle delete() throws BintrayCallException {
bintrayHandle.delete(getVersionUri(), null);
return this;
}
@Override
public boolean exists() throws BintrayCallException {
try {
bintrayHandle.head(getVersionUri(), null);
} catch (BintrayCallException e) {
if (e.getStatusCode() == 404) {
return false;
}
throw e;
}
return true;
}
@Override
public VersionHandle setAttributes(VersionDetails versionDetails) throws IOException, BintrayCallException {
return setAttributes(versionDetails.getAttributes());
}
@Override
public VersionHandle 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(getVersionUri() + API_ATTR, headers, IOUtils.toInputStream(jsonContent));
return this;
}
@Override
public VersionHandle updateAttributes(VersionDetails versionDetails) throws IOException, BintrayCallException {
return updateAttributes(versionDetails.getAttributes());
}
@Override
public VersionHandle 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(getVersionUri() + API_ATTR, headers, IOUtils.toInputStream(jsonContent));
return this;
}
@Override
public VersionHandle upload(Map content) throws MultipleBintrayCallException {
return upload(content, false);
}
@Override
public VersionHandle upload(Map content, boolean overrideExisting) throws MultipleBintrayCallException {
Map uriConvertedContent = new HashMap<>();
for (String path : content.keySet()) {
uriConvertedContent.put(getUploadUriWithPath(path), content.get(path));
}
Map headers = null;
if (overrideExisting) {
headers = getOverrideHeader();
}
bintrayHandle.putBinary(uriConvertedContent, headers);
return this;
}
@Override
public VersionHandle upload(String path, InputStream content) throws BintrayCallException {
return upload(path, content, false);
}
@Override
public VersionHandle upload(String path, InputStream content, boolean overrideExisting) throws BintrayCallException {
Map headers = null;
if (overrideExisting) {
headers = getOverrideHeader();
}
bintrayHandle.putBinary(getUploadUriWithPath(path), headers, content);
return this;
}
@Override
public VersionHandle uploadVagrant(String path, String boxProvider, InputStream content) throws BintrayCallException {
return uploadVagrant(path, boxProvider, content, false);
}
@Override
public VersionHandle uploadVagrant(String path, String boxProvider, InputStream content, boolean overrideExisting) throws BintrayCallException {
Map headers = null;
if (overrideExisting) {
headers = getOverrideHeader();
}
bintrayHandle.putBinary(getVagrantUploadUri(path, boxProvider), headers, content);
return this;
}
@Override
public VersionHandle uploadDebian(String path, String distribution, String component, String architecture,
InputStream content) throws BintrayCallException {
return uploadDebian(path, distribution, component, architecture, content, false);
}
@Override
public VersionHandle uploadDebian(String path, String distribution, String component, String architecture,
InputStream content, boolean overrideExisting) throws BintrayCallException {
Map headers = getDebianCoordinatesHeaders(distribution, component, architecture);
if (overrideExisting) {
headers.putAll(getOverrideHeader());
}
bintrayHandle.putBinary(getUploadUriWithPath(path), headers, content);
return this;
}
public VersionHandle uploadDebian(String path, List distributions, List components,
List architectures, InputStream content) throws BintrayCallException {
return uploadDebian(path, distributions, components, architectures, content, false);
}
@Override
public VersionHandle uploadDebian(String path, List distributions, List components,
List architectures, InputStream content, boolean overrideExisting) throws BintrayCallException {
Map headers = getDebianCoordinatesHeaders(distributions, components, architectures);
if (overrideExisting) {
headers.putAll(getOverrideHeader());
}
bintrayHandle.putBinary(getUploadUriWithPath(path), headers, content);
return this;
}
@Override
public VersionHandle publish() throws BintrayCallException {
return publish(null);
}
@Override
public VersionHandle publish(String gpgPassphrase) throws BintrayCallException {
Map headers = null;
if (StringUtils.isNotBlank(gpgPassphrase)) {
headers = new HashMap<>();
headers.put(GPG_SIGN_HEADER, gpgPassphrase);
}
bintrayHandle.post(getCurrentVersionContentUri() + API_PUBLISH, headers);
return this;
}
@Override
public VersionHandle publishSync() throws BintrayCallException {
Map headers = new HashMap<>();
BintrayImpl.addContentTypeJsonHeader(headers);
int timeout = -1;
String wait = "{\"publish_wait_for_secs\":" + timeout + "}";
bintrayHandle.post(getCurrentVersionContentUri() + API_PUBLISH, headers, IOUtils.toInputStream(wait));
return this;
}
@Override
public VersionHandle discard() throws BintrayCallException {
Map headers = new HashMap<>();
BintrayImpl.addContentTypeJsonHeader(headers);
String discard = "{\n\"discard\":true\n}";
bintrayHandle.post(getCurrentVersionContentUri() + API_PUBLISH, headers, IOUtils.toInputStream(discard));
return this;
}
@Override
public VersionHandle sign(int fileCount) throws BintrayCallException {
return sign(null, fileCount);
}
@Override
public VersionHandle sign(String passphrase, int fileCount) throws BintrayCallException {
Map headers = new HashMap<>();
if (!(passphrase == null) && !passphrase.equals("")) {
headers.put(GPG_SIGN_HEADER, passphrase);
}
bintrayHandle.sign(getCurrentVersionGpgUri(), headers, fileCount);
return null;
}
/**
* @return packages/$owner/$repo/$package/versions/$version/
*/
@Override
public String getVersionUri() {
return API_PKGS + getCurrentVersionFullyQualifiedUri();
}
/**
* @return gpg/$owner/$repo/$package/versions/$version/
*/
public String getCurrentVersionGpgUri() {
return API_GPG + getCurrentVersionFullyQualifiedUri();
}
/**
* @return content/$owner/$repo/$package/$version/
*/
public String getCurrentVersionContentUri() {
return String.format(API_CONTENT + "%s/%s/%s/%s", packageHandle.repository().owner().name(),
packageHandle.repository().name(), packageHandle.name(), name);
}
/**
* @return $owner/$repo/$package/versions/$version/
*/
private String getCurrentVersionFullyQualifiedUri() {
return String.format("%s/%s/%s/" + API_VER + "%s", packageHandle.repository().owner().name(),
packageHandle.repository().name(), packageHandle.name(), name);
}
private String getVagrantUploadUri(String path, String boxProvider) {
return getUploadUriWithPath(path) + "?box_provider=" + boxProvider;
}
private String getUploadUriWithPath(String path) {
return getCurrentVersionContentUri() + "/" + path;
}
private Map getDebianCoordinatesHeaders(List distributions, List components,
List architectures) {
return getDebianCoordinatesHeaders(StringUtils.join(distributions, ","), StringUtils.join(components, ","),
StringUtils.join(architectures, ","));
}
private Map getDebianCoordinatesHeaders(String distribution, String component,
String architecture) {
Map coordinatesHeaders = new HashMap<>();
coordinatesHeaders.put(DEB_DIST_HEADER, distribution);
coordinatesHeaders.put(DEB_COMP_HEADER, component);
coordinatesHeaders.put(DEB_ARCH_HEADER, architecture);
return coordinatesHeaders;
}
private Map getOverrideHeader() {
Map headers = new HashMap<>();
headers.put(OVERRIDE_HEADER, "1");
return headers;
}
}