package de.cinovo.cloudconductor.server.repo.provider; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; import javax.ws.rs.core.MediaType; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.springframework.beans.factory.annotation.Value; import de.cinovo.cloudconductor.server.repo.RepoEntry; import de.taimos.httputils.WS; import de.taimos.httputils.WSConstants; /** * Copyright 2014 Hoegernet<br> * <br> * * @author Thorsten Hoeger * */ public class HTTPProvider implements IRepoProvider { @Value("${repo.baseurl}") private String baseurl; @Override public boolean isListable() { return false; } @Override public List<RepoEntry> getEntries(String folder) { throw new UnsupportedOperationException("This provider does not support listing"); } @Override public RepoEntry getEntry(String key) { HttpResponse response = WS.url(this.baseurl + key).get(); RepoEntry e = new RepoEntry(); e.setDirectory(false); e.setName(key.substring(Math.max(0, key.lastIndexOf("/") + 1))); e.setSize(this.getSize(response)); e.setModified(new Date()); e.setChecksum(this.getChecksum(response)); e.setContentType(this.getType(response)); return e; } private String getType(HttpResponse response) { Header header = response.getFirstHeader(WSConstants.HEADER_CONTENT_TYPE); if (header != null) { return header.getValue(); } return MediaType.APPLICATION_OCTET_STREAM; } private String getChecksum(HttpResponse response) { Header header = response.getFirstHeader(WSConstants.HEADER_CONTENT_MD5); if (header != null) { return header.getValue(); } return null; } private long getSize(HttpResponse response) { Header sizeHeader = response.getFirstHeader(WSConstants.HEADER_CONTENT_LENGTH); if (sizeHeader != null) { String size = sizeHeader.getValue(); if ((size != null) && size.matches("[0-9]+")) { return Long.valueOf(size); } } return 0; } @Override public InputStream getEntryStream(String key) { HttpResponse response = WS.url(this.baseurl + key).get(); HttpEntity entity = response.getEntity(); if (entity != null) { try { return entity.getContent(); } catch (IllegalStateException | IOException e) { throw new RuntimeException("Failed to create stream", e); } } throw new RuntimeException("HTTP entity was null"); } }