Add image API to RestClient
This commit is contained in:
		
							parent
							
								
									4336c77461
								
							
						
					
					
						commit
						e46828ba96
					
				@ -18,6 +18,8 @@ package org.thingsboard.rest.client;
 | 
			
		||||
import com.auth0.jwt.JWT;
 | 
			
		||||
import com.fasterxml.jackson.databind.JsonNode;
 | 
			
		||||
import com.fasterxml.jackson.databind.node.ObjectNode;
 | 
			
		||||
import com.google.common.base.Strings;
 | 
			
		||||
import org.apache.commons.io.IOUtils;
 | 
			
		||||
import org.springframework.core.ParameterizedTypeReference;
 | 
			
		||||
import org.springframework.core.io.ByteArrayResource;
 | 
			
		||||
import org.springframework.core.io.Resource;
 | 
			
		||||
@ -53,11 +55,13 @@ import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityView;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityViewInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.EventInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.ImageExportData;
 | 
			
		||||
import org.thingsboard.server.common.data.OtaPackage;
 | 
			
		||||
import org.thingsboard.server.common.data.OtaPackageInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.SaveDeviceWithCredentialsRequest;
 | 
			
		||||
import org.thingsboard.server.common.data.StringUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.SystemInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.TbImageDeleteResult;
 | 
			
		||||
import org.thingsboard.server.common.data.TbResource;
 | 
			
		||||
import org.thingsboard.server.common.data.TbResourceInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.Tenant;
 | 
			
		||||
@ -168,6 +172,7 @@ import org.thingsboard.server.common.data.widget.WidgetTypeInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.widget.WidgetsBundle;
 | 
			
		||||
 | 
			
		||||
import java.io.Closeable;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.net.URI;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
@ -3591,6 +3596,97 @@ public class RestClient implements Closeable {
 | 
			
		||||
        restTemplate.delete("/api/resource/{resourceId}", resourceId.getId().toString());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TbResourceInfo getImageInfo(String type, String key) {
 | 
			
		||||
        return restTemplate.getForObject(baseURL + "/api/images/{type}/{key}/info", TbResourceInfo.class, Map.of(
 | 
			
		||||
                "type", type,
 | 
			
		||||
                "key", key
 | 
			
		||||
        ));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public PageData<TbResourceInfo> getImages(PageLink pageLink, boolean includeSystemImages) {
 | 
			
		||||
        Map<String, String> params = new HashMap<>();
 | 
			
		||||
        addPageLinkToParam(params, pageLink);
 | 
			
		||||
        params.put("includeSystemImages", String.valueOf(includeSystemImages));
 | 
			
		||||
        return restTemplate.exchange(baseURL + "/api/images?includeSystemImages={includeSystemImages}&" + getUrlParams(pageLink),
 | 
			
		||||
                HttpMethod.GET,
 | 
			
		||||
                HttpEntity.EMPTY,
 | 
			
		||||
                new ParameterizedTypeReference<PageData<TbResourceInfo>>() {},
 | 
			
		||||
                params
 | 
			
		||||
        ).getBody();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TbResourceInfo uploadImage(String fileName, byte[] data, String contentType, String title) {
 | 
			
		||||
        HttpEntity<MultiValueMap<String, Object>> request = createMultipartRequest(fileName, data, contentType, Map.of(
 | 
			
		||||
                "title", Strings.nullToEmpty(title)
 | 
			
		||||
        ));
 | 
			
		||||
        return restTemplate.postForObject(baseURL + "/api/image", request, TbResourceInfo.class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TbResourceInfo updateImage(String type, String key, String fileName, byte[] data, String contentType) {
 | 
			
		||||
        HttpEntity<MultiValueMap<String, Object>> request = createMultipartRequest(fileName, data, contentType, Map.of());
 | 
			
		||||
        return restTemplate.exchange(baseURL + "/api/images/{type}/{key}", HttpMethod.PUT, request, TbResourceInfo.class, Map.of(
 | 
			
		||||
                "type", type,
 | 
			
		||||
                "key", key
 | 
			
		||||
        )).getBody();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TbResourceInfo updateImageInfo(String type, String key, TbResourceInfo request) {
 | 
			
		||||
        return restTemplate.exchange(baseURL + "/api/images/{type}/{key}/info", HttpMethod.PUT, new HttpEntity<>(request), TbResourceInfo.class, Map.of(
 | 
			
		||||
                "type", type,
 | 
			
		||||
                "key", key
 | 
			
		||||
        )).getBody();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void updateImagePublicStatus(String type, String key, boolean isPublic) {
 | 
			
		||||
        restTemplate.put(baseURL + "/api/images/{type}/{key}/public/{isPublic}", null, Map.of(
 | 
			
		||||
                "type", type,
 | 
			
		||||
                "key", key,
 | 
			
		||||
                "isPublic", isPublic
 | 
			
		||||
        ));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public byte[] downloadImage(String type, String key) throws IOException {
 | 
			
		||||
        Resource image = restTemplate.exchange(baseURL + "/api/images/{type}/{key}", HttpMethod.GET, null, Resource.class, Map.of(
 | 
			
		||||
                "type", type,
 | 
			
		||||
                "key", key
 | 
			
		||||
        )).getBody();
 | 
			
		||||
        return IOUtils.toByteArray(image.getInputStream());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public byte[] downloadImagePreview(String type, String key) throws IOException {
 | 
			
		||||
        Resource image = restTemplate.exchange(baseURL + "/api/images/{type}/{key}/preview", HttpMethod.GET, null, Resource.class, Map.of(
 | 
			
		||||
                "type", type,
 | 
			
		||||
                "key", key
 | 
			
		||||
        )).getBody();
 | 
			
		||||
        return IOUtils.toByteArray(image.getInputStream());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public byte[] downloadPublicImage(String publicResourceKey) throws IOException {
 | 
			
		||||
        Resource image = restTemplate.exchange(baseURL + "/api/images/public/{publicResourceKey}", HttpMethod.GET, null, Resource.class, Map.of(
 | 
			
		||||
                "publicResourceKey", publicResourceKey
 | 
			
		||||
        )).getBody();
 | 
			
		||||
        return IOUtils.toByteArray(image.getInputStream());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ImageExportData exportImage(String type, String key) {
 | 
			
		||||
        return restTemplate.getForObject(baseURL + "/api/images/{type}/{key}/export", ImageExportData.class, Map.of(
 | 
			
		||||
                "type", type,
 | 
			
		||||
                "key", key
 | 
			
		||||
        ));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TbResourceInfo importImage(ImageExportData exportData) {
 | 
			
		||||
        return restTemplate.exchange(baseURL + "/api/image/import", HttpMethod.PUT, new HttpEntity<>(exportData), TbResourceInfo.class).getBody();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TbImageDeleteResult deleteImage(String type, String key, boolean force) {
 | 
			
		||||
        return restTemplate.exchange(baseURL + "/api/images/{type}/{key}?force={force}", HttpMethod.DELETE, null, TbImageDeleteResult.class, Map.of(
 | 
			
		||||
                "type", type,
 | 
			
		||||
                "key", key,
 | 
			
		||||
                "force", force
 | 
			
		||||
        )).getBody();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ResponseEntity<Resource> downloadOtaPackage(OtaPackageId otaPackageId) {
 | 
			
		||||
        Map<String, String> params = new HashMap<>();
 | 
			
		||||
        params.put("otaPackageId", otaPackageId.getId().toString());
 | 
			
		||||
@ -3640,16 +3736,7 @@ public class RestClient implements Closeable {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OtaPackageInfo saveOtaPackageData(OtaPackageId otaPackageId, String checkSum, ChecksumAlgorithm checksumAlgorithm, String fileName, byte[] fileBytes) throws Exception {
 | 
			
		||||
        HttpHeaders header = new HttpHeaders();
 | 
			
		||||
        header.setContentType(MediaType.MULTIPART_FORM_DATA);
 | 
			
		||||
 | 
			
		||||
        MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
 | 
			
		||||
        fileMap.add(HttpHeaders.CONTENT_DISPOSITION, "form-data; name=file; filename=" + fileName);
 | 
			
		||||
        HttpEntity<ByteArrayResource> fileEntity = new HttpEntity<>(new ByteArrayResource(fileBytes), fileMap);
 | 
			
		||||
 | 
			
		||||
        MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
 | 
			
		||||
        body.add("file", fileEntity);
 | 
			
		||||
        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, header);
 | 
			
		||||
        HttpEntity<MultiValueMap<String, Object>> requestEntity = createMultipartRequest(fileName, fileBytes, null, Collections.emptyMap());
 | 
			
		||||
 | 
			
		||||
        Map<String, String> params = new HashMap<>();
 | 
			
		||||
        params.put("otaPackageId", otaPackageId.getId().toString());
 | 
			
		||||
@ -3854,6 +3941,23 @@ public class RestClient implements Closeable {
 | 
			
		||||
        return listToString(list.stream().map(Enum::name).collect(Collectors.toList()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private HttpEntity<MultiValueMap<String, Object>> createMultipartRequest(String fileName, byte[] fileData, String fileContentType, Map<String, Object> otherParts) {
 | 
			
		||||
        HttpHeaders headers = new HttpHeaders();
 | 
			
		||||
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
 | 
			
		||||
 | 
			
		||||
        MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
 | 
			
		||||
        fileMap.add(HttpHeaders.CONTENT_DISPOSITION, "form-data; name=file; filename=" + fileName);
 | 
			
		||||
        if (fileContentType != null) {
 | 
			
		||||
            fileMap.add(HttpHeaders.CONTENT_TYPE, fileContentType);
 | 
			
		||||
        }
 | 
			
		||||
        HttpEntity<ByteArrayResource> fileEntity = new HttpEntity<>(new ByteArrayResource(fileData), fileMap);
 | 
			
		||||
 | 
			
		||||
        MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
 | 
			
		||||
        body.setAll(otherParts);
 | 
			
		||||
        body.add("file", fileEntity);
 | 
			
		||||
        return new HttpEntity<>(body, headers);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void close() {
 | 
			
		||||
        service.shutdown();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user