001package co.codewizards.cloudstore.rest.client.request;
002
003import static java.util.Objects.*;
004
005import javax.ws.rs.client.WebTarget;
006import javax.ws.rs.core.MediaType;
007
008public class GetFileData extends AbstractRequest<byte[]> {
009        private final String repositoryName;
010        private final String path;
011        private final long offset;
012        private final int length;
013
014        public GetFileData(final String repositoryName, final String path, final long offset, final int length) {
015                this.repositoryName = requireNonNull(repositoryName, "repositoryName");
016                this.path = path;
017                this.offset = offset;
018                this.length = length;
019        }
020
021        @Override
022        public byte[] execute() {
023                WebTarget webTarget = createWebTarget(urlEncode(repositoryName), encodePath(path));
024
025                if (offset > 0) // defaults to 0
026                        webTarget = webTarget.queryParam("offset", offset);
027
028                if (length >= 0) // defaults to -1 meaning "all"
029                        webTarget = webTarget.queryParam("length", length);
030
031                return assignCredentials(webTarget.request(MediaType.APPLICATION_OCTET_STREAM)).get(byte[].class);
032        }
033
034        @Override
035        public boolean isResultNullable() {
036                return false;
037        }
038}