Use JsonGetter/Setter to encode resource data; minor fixes
This commit is contained in:
		
							parent
							
								
									e7aabe80a4
								
							
						
					
					
						commit
						6eadef0d68
					
				@ -43,7 +43,6 @@ import org.thingsboard.server.common.data.TbResourceInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.TbResourceInfoFilter;
 | 
			
		||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TbResourceId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.lwm2m.LwM2mObject;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageLink;
 | 
			
		||||
@ -53,7 +52,6 @@ import org.thingsboard.server.service.resource.TbResourceService;
 | 
			
		||||
import org.thingsboard.server.service.security.permission.Operation;
 | 
			
		||||
import org.thingsboard.server.service.security.permission.Resource;
 | 
			
		||||
 | 
			
		||||
import java.util.Base64;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@ -170,9 +168,7 @@ public class TbResourceController extends BaseController {
 | 
			
		||||
                                      @PathVariable(RESOURCE_ID) String strResourceId) throws ThingsboardException {
 | 
			
		||||
        checkParameter(RESOURCE_ID, strResourceId);
 | 
			
		||||
        TbResourceId resourceId = new TbResourceId(toUUID(strResourceId));
 | 
			
		||||
        TbResource resource = checkResourceId(resourceId, Operation.READ);
 | 
			
		||||
        resource.setBase64Data(Base64.getEncoder().encodeToString(resource.getData()));
 | 
			
		||||
        return resource;
 | 
			
		||||
        return checkResourceId(resourceId, Operation.READ);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Create Or Update Resource (saveResource)",
 | 
			
		||||
@ -191,7 +187,7 @@ public class TbResourceController extends BaseController {
 | 
			
		||||
                                       @RequestBody TbResource resource) throws Exception {
 | 
			
		||||
        resource.setTenantId(getTenantId());
 | 
			
		||||
        checkEntity(resource.getId(), resource, Resource.TB_RESOURCE);
 | 
			
		||||
        return tbResourceService.save(resource, getCurrentUser());
 | 
			
		||||
        return new TbResourceInfo(tbResourceService.save(resource, getCurrentUser()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Get Resource Infos (getResources)",
 | 
			
		||||
 | 
			
		||||
@ -23,8 +23,6 @@ import org.thingsboard.server.gen.edge.v1.ResourceUpdateMsg;
 | 
			
		||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
			
		||||
 | 
			
		||||
import java.util.Base64;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
@TbCoreComponent
 | 
			
		||||
public class ResourceMsgConstructor {
 | 
			
		||||
@ -39,7 +37,7 @@ public class ResourceMsgConstructor {
 | 
			
		||||
                .setResourceType(tbResource.getResourceType().name())
 | 
			
		||||
                .setFileName(tbResource.getFileName());
 | 
			
		||||
        if (tbResource.getData() != null) {
 | 
			
		||||
            builder.setData(Base64.getEncoder().encodeToString(tbResource.getData()));
 | 
			
		||||
            builder.setData(tbResource.getEncodedData());
 | 
			
		||||
        }
 | 
			
		||||
        if (tbResource.getEtag() != null) {
 | 
			
		||||
            builder.setEtag(tbResource.getEtag());
 | 
			
		||||
 | 
			
		||||
@ -46,7 +46,7 @@ public abstract class BaseResourceProcessor extends BaseEdgeProcessor {
 | 
			
		||||
            resource.setResourceKey(resourceUpdateMsg.getResourceKey());
 | 
			
		||||
            resource.setResourceType(ResourceType.valueOf(resourceUpdateMsg.getResourceType()));
 | 
			
		||||
            resource.setFileName(resourceUpdateMsg.getFileName());
 | 
			
		||||
            resource.setBase64Data(resourceUpdateMsg.hasData() ? resourceUpdateMsg.getData() : null);
 | 
			
		||||
            resource.setEncodedData(resourceUpdateMsg.hasData() ? resourceUpdateMsg.getData() : null);
 | 
			
		||||
            resource.setEtag(resourceUpdateMsg.hasEtag() ? resourceUpdateMsg.getEtag() : null);
 | 
			
		||||
            resourceValidator.validate(resource, TbResourceInfo::getTenantId);
 | 
			
		||||
            if (created) {
 | 
			
		||||
 | 
			
		||||
@ -101,7 +101,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My first resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
 | 
			
		||||
@ -119,6 +119,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        Assert.assertArrayEquals(resource.getData(), download(savedResource.getId()));
 | 
			
		||||
 | 
			
		||||
        savedResource.setTitle("My new resource");
 | 
			
		||||
        savedResource.setData(null);
 | 
			
		||||
 | 
			
		||||
        save(savedResource);
 | 
			
		||||
 | 
			
		||||
@ -136,7 +137,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle(StringUtils.randomAlphabetic(300));
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
@ -155,7 +156,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My first resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
 | 
			
		||||
@ -184,7 +185,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My first resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
 | 
			
		||||
@ -200,7 +201,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My first resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
 | 
			
		||||
@ -225,7 +226,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My first resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
 | 
			
		||||
@ -256,7 +257,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_DATA);
 | 
			
		||||
            resource.setEncodedData(TEST_DATA);
 | 
			
		||||
            resources.add(new TbResourceInfo(save(resource)));
 | 
			
		||||
        }
 | 
			
		||||
        List<TbResourceInfo> loadedResources = new ArrayList<>();
 | 
			
		||||
@ -293,7 +294,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("JKS Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_DATA);
 | 
			
		||||
            resource.setEncodedData(TEST_DATA);
 | 
			
		||||
            resources.add(new TbResourceInfo(save(resource)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -303,7 +304,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("LWM2M Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.PKCS_12);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME_2);
 | 
			
		||||
            resource.setBase64Data(TEST_DATA);
 | 
			
		||||
            resource.setEncodedData(TEST_DATA);
 | 
			
		||||
            save(resource);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -340,7 +341,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_DATA);
 | 
			
		||||
            resource.setEncodedData(TEST_DATA);
 | 
			
		||||
            resources.add(new TbResourceInfo(save(resource)));
 | 
			
		||||
        }
 | 
			
		||||
        List<TbResourceInfo> loadedResources = new ArrayList<>();
 | 
			
		||||
@ -400,7 +401,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("JKS Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_DATA);
 | 
			
		||||
            resource.setEncodedData(TEST_DATA);
 | 
			
		||||
            TbResourceInfo saved = new TbResourceInfo(save(resource));
 | 
			
		||||
            jksResources.add(saved);
 | 
			
		||||
        }
 | 
			
		||||
@ -411,7 +412,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("LWM2M Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.PKCS_12);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME_2);
 | 
			
		||||
            resource.setBase64Data(TEST_DATA);
 | 
			
		||||
            resource.setEncodedData(TEST_DATA);
 | 
			
		||||
            TbResource saved = save(resource);
 | 
			
		||||
            lwm2mesources.add(saved);
 | 
			
		||||
        }
 | 
			
		||||
@ -477,7 +478,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_DATA);
 | 
			
		||||
            resource.setEncodedData(TEST_DATA);
 | 
			
		||||
            expectedResources.add(new TbResourceInfo(save(resource)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -488,7 +489,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_DATA);
 | 
			
		||||
            resource.setEncodedData(TEST_DATA);
 | 
			
		||||
            TbResourceInfo savedResource = new TbResourceInfo(save(resource));
 | 
			
		||||
            systemResources.add(savedResource);
 | 
			
		||||
            if (i >= 73) {
 | 
			
		||||
@ -532,7 +533,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JS_MODULE);
 | 
			
		||||
        resource.setTitle("Js resource");
 | 
			
		||||
        resource.setFileName(JS_TEST_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
 | 
			
		||||
@ -563,7 +564,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JS_MODULE);
 | 
			
		||||
        resource.setTitle("Js resource");
 | 
			
		||||
        resource.setFileName(JS_TEST_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
 | 
			
		||||
@ -607,7 +608,7 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JS_MODULE);
 | 
			
		||||
        resource.setTitle("Js resource");
 | 
			
		||||
        resource.setFileName(JS_TEST_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
 | 
			
		||||
@ -623,16 +624,16 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.PKCS_12);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName("3.pks");
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
        resource.setEtag(savedResource.getEtag());
 | 
			
		||||
 | 
			
		||||
        savedResource.setBase64Data(TEST_DATA);
 | 
			
		||||
        savedResource.setEncodedData(TEST_DATA);
 | 
			
		||||
        doPost("/api/resource", savedResource)
 | 
			
		||||
                .andExpect(status().isBadRequest())
 | 
			
		||||
                .andExpect(statusReason(containsString("can't be updated")));
 | 
			
		||||
 | 
			
		||||
        savedResource.setBase64Data(null);
 | 
			
		||||
        savedResource.setData(null);
 | 
			
		||||
        savedResource.setTitle("Updated resource");
 | 
			
		||||
        savedResource = doPost("/api/resource", savedResource, TbResource.class);
 | 
			
		||||
        assertThat(savedResource.getTitle()).isEqualTo("Updated resource");
 | 
			
		||||
@ -647,12 +648,12 @@ public class TbResourceControllerTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JS_MODULE);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName("module.js");
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
        TbResource savedResource = save(resource);
 | 
			
		||||
        resource.setEtag(savedResource.getEtag());
 | 
			
		||||
 | 
			
		||||
        String newData = Base64.getEncoder().encodeToString(new byte[]{1, 2, 3});
 | 
			
		||||
        savedResource.setBase64Data(newData);
 | 
			
		||||
        savedResource.setEncodedData(newData);
 | 
			
		||||
        savedResource.setFileName("new-module.js");
 | 
			
		||||
        savedResource.setTitle("Updated title");
 | 
			
		||||
        savedResource = save(savedResource);
 | 
			
		||||
 | 
			
		||||
@ -45,7 +45,7 @@ public class ResourceEdgeTest extends AbstractEdgeTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("Edge Test Resource");
 | 
			
		||||
        resource.setFileName(FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_DATA);
 | 
			
		||||
        resource.setEncodedData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        edgeImitator.expectMessageAmount(1);
 | 
			
		||||
        TbResource savedResource = doPost("/api/resource", resource, TbResource.class);
 | 
			
		||||
@ -119,6 +119,6 @@ public class ResourceEdgeTest extends AbstractEdgeTest {
 | 
			
		||||
        TbResource tbResource = doGet("/api/resource/" + uuid, TbResource.class);
 | 
			
		||||
        Assert.assertNotNull(tbResource);
 | 
			
		||||
        Assert.assertEquals("Edge Test Resource", tbResource.getName());
 | 
			
		||||
        Assert.assertEquals(TEST_DATA, tbResource.getBase64Data());
 | 
			
		||||
        Assert.assertEquals(TEST_DATA, tbResource.getEncodedData());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -198,7 +198,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
 | 
			
		||||
        for (int i = 2; i < 4; i++) {
 | 
			
		||||
            createResource("test" + i, i + DEFAULT_FILE_NAME);
 | 
			
		||||
            assertEquals(i*4, resourceService.sumDataSizeByTenantId(tenantId));
 | 
			
		||||
            assertEquals(i * 4, resourceService.sumDataSizeByTenantId(tenantId));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -209,7 +209,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setFileName(filename);
 | 
			
		||||
        byte[] b = new byte[]{1, 2, 3, 4};
 | 
			
		||||
        resource.setBase64Data(Base64.getEncoder().encodeToString(b));
 | 
			
		||||
        resource.setData(b);
 | 
			
		||||
        return tbResourceService.save(resource);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -220,7 +220,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My first resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = tbResourceService.save(resource);
 | 
			
		||||
 | 
			
		||||
@ -233,7 +233,6 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        assertArrayEquals(TEST_DATA, savedResource.getData());
 | 
			
		||||
 | 
			
		||||
        savedResource.setTitle("My new resource");
 | 
			
		||||
        savedResource.setBase64Data(null);
 | 
			
		||||
        savedResource.setData(null);
 | 
			
		||||
 | 
			
		||||
        tbResourceService.save(savedResource);
 | 
			
		||||
@ -250,7 +249,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setTenantId(tenantId);
 | 
			
		||||
        resource.setResourceType(ResourceType.LWM2M_MODEL);
 | 
			
		||||
        resource.setFileName("test_model.xml");
 | 
			
		||||
        resource.setBase64Data(Base64.getEncoder().encodeToString(LWM2M_TEST_MODEL.getBytes()));
 | 
			
		||||
        resource.setEncodedData(Base64.getEncoder().encodeToString(LWM2M_TEST_MODEL.getBytes()));
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = tbResourceService.save(resource);
 | 
			
		||||
 | 
			
		||||
@ -271,7 +270,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
        TbResource savedResource = tbResourceService.save(resource);
 | 
			
		||||
 | 
			
		||||
        assertEquals(TenantId.SYS_TENANT_ID, savedResource.getTenantId());
 | 
			
		||||
@ -286,7 +285,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        TbResource savedResource = tbResourceService.save(resource);
 | 
			
		||||
 | 
			
		||||
@ -295,7 +294,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            Assertions.assertThrows(DataValidationException.class, () -> {
 | 
			
		||||
@ -312,7 +311,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setTenantId(tenantId);
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
        Assertions.assertThrows(DataValidationException.class, () -> {
 | 
			
		||||
            tbResourceService.save(resource);
 | 
			
		||||
        });
 | 
			
		||||
@ -325,7 +324,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
        Assertions.assertThrows(DataValidationException.class, () -> {
 | 
			
		||||
            tbResourceService.save(resource);
 | 
			
		||||
        });
 | 
			
		||||
@ -352,7 +351,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
        TbResource savedResource = tbResourceService.save(resource);
 | 
			
		||||
 | 
			
		||||
        TbResource foundResource = resourceService.findResourceById(tenantId, savedResource.getId());
 | 
			
		||||
@ -368,7 +367,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setTenantId(tenantId);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
        TbResource savedResource = tbResourceService.save(resource);
 | 
			
		||||
 | 
			
		||||
        TbResource foundResource = resourceService.findResourceByTenantIdAndKey(tenantId, savedResource.getResourceType(), savedResource.getResourceKey());
 | 
			
		||||
@ -383,7 +382,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
        resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
        resource.setTitle("My resource");
 | 
			
		||||
        resource.setFileName(DEFAULT_FILE_NAME);
 | 
			
		||||
        resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
        resource.setData(TEST_DATA);
 | 
			
		||||
        TbResource savedResource = tbResourceService.save(resource);
 | 
			
		||||
 | 
			
		||||
        TbResource foundResource = resourceService.findResourceById(tenantId, savedResource.getId());
 | 
			
		||||
@ -409,7 +408,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
            resource.setData(TEST_DATA);
 | 
			
		||||
            resources.add(new TbResourceInfo(tbResourceService.save(resource)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -463,7 +462,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("System Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
            resource.setData(TEST_DATA);
 | 
			
		||||
            TbResourceInfo tbResourceInfo = new TbResourceInfo(tbResourceService.save(resource));
 | 
			
		||||
            if (i >= 50) {
 | 
			
		||||
                resources.add(tbResourceInfo);
 | 
			
		||||
@ -476,7 +475,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
            resource.setTitle("Tenant Resource" + i);
 | 
			
		||||
            resource.setResourceType(ResourceType.JKS);
 | 
			
		||||
            resource.setFileName(i + DEFAULT_FILE_NAME);
 | 
			
		||||
            resource.setBase64Data(TEST_BASE64_DATA);
 | 
			
		||||
            resource.setData(TEST_DATA);
 | 
			
		||||
            resources.add(new TbResourceInfo(tbResourceService.save(resource)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -487,7 +486,7 @@ public class BaseTbResourceServiceTest extends AbstractControllerTest {
 | 
			
		||||
            TbResourceInfoFilter filter = TbResourceInfoFilter.builder()
 | 
			
		||||
                    .tenantId(tenantId)
 | 
			
		||||
                    .build();
 | 
			
		||||
            pageData = resourceService.findAllTenantResourcesByTenantId(filter,  pageLink);
 | 
			
		||||
            pageData = resourceService.findAllTenantResourcesByTenantId(filter, pageLink);
 | 
			
		||||
            loadedResources.addAll(pageData.getData());
 | 
			
		||||
            if (pageData.hasNext()) {
 | 
			
		||||
                pageLink = pageLink.nextPageLink();
 | 
			
		||||
 | 
			
		||||
@ -206,7 +206,7 @@ public abstract class AbstractLwM2MIntegrationTest extends AbstractTransportInte
 | 
			
		||||
            lwModel.setFileName(resourceName);
 | 
			
		||||
            lwModel.setTenantId(tenantId);
 | 
			
		||||
            byte[] bytes = IOUtils.toByteArray(AbstractLwM2MIntegrationTest.class.getClassLoader().getResourceAsStream("lwm2m/" + resourceName));
 | 
			
		||||
            lwModel.setBase64Data(Base64.getEncoder().encodeToString(bytes));
 | 
			
		||||
            lwModel.setData(bytes);
 | 
			
		||||
            lwModel = doPostWithTypedResponse("/api/resource", lwModel, new TypeReference<>() {
 | 
			
		||||
            });
 | 
			
		||||
            Assert.assertNotNull(lwModel);
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ public enum ResourceType {
 | 
			
		||||
    JKS("application/x-java-keystore", false, false),
 | 
			
		||||
    PKCS_12("application/x-pkcs12", false, false),
 | 
			
		||||
    JS_MODULE("application/javascript", true, true),
 | 
			
		||||
    IMAGE(null, true, false);
 | 
			
		||||
    IMAGE(null, true, true);
 | 
			
		||||
 | 
			
		||||
    @Getter
 | 
			
		||||
    private final String mediaType;
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -32,8 +32,10 @@ import org.thingsboard.server.dao.resource.TbResourceInfoDao;
 | 
			
		||||
import org.thingsboard.server.dao.sql.JpaAbstractDao;
 | 
			
		||||
import org.thingsboard.server.dao.util.SqlDao;
 | 
			
		||||
 | 
			
		||||
import java.util.EnumSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
@ -57,22 +59,28 @@ public class JpaTbResourceInfoDao extends JpaAbstractDao<TbResourceInfoEntity, T
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public PageData<TbResourceInfo> findAllTenantResourcesByTenantId(TbResourceInfoFilter filter, PageLink pageLink) {
 | 
			
		||||
        Set<ResourceType> resourceTypes = filter.getResourceTypes();
 | 
			
		||||
        if (CollectionsUtil.isEmpty(resourceTypes)) {
 | 
			
		||||
            resourceTypes = EnumSet.allOf(ResourceType.class);
 | 
			
		||||
        }
 | 
			
		||||
        return DaoUtil.toPageData(resourceInfoRepository
 | 
			
		||||
                .findAllTenantResourcesByTenantId(
 | 
			
		||||
                        filter.getTenantId().getId(), TenantId.NULL_UUID,
 | 
			
		||||
                        CollectionsUtil.isNotEmpty(filter.getResourceTypes()) ? filter.getResourceTypes()
 | 
			
		||||
                                .stream().map(Enum::name).collect(Collectors.toList()) : null,
 | 
			
		||||
                        resourceTypes.stream().map(Enum::name).collect(Collectors.toList()),
 | 
			
		||||
                        Objects.toString(pageLink.getTextSearch(), ""),
 | 
			
		||||
                        DaoUtil.toPageable(pageLink)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public PageData<TbResourceInfo> findTenantResourcesByTenantId(TbResourceInfoFilter filter, PageLink pageLink) {
 | 
			
		||||
        Set<ResourceType> resourceTypes = filter.getResourceTypes();
 | 
			
		||||
        if (CollectionsUtil.isEmpty(resourceTypes)) {
 | 
			
		||||
            resourceTypes = EnumSet.allOf(ResourceType.class);
 | 
			
		||||
        }
 | 
			
		||||
        return DaoUtil.toPageData(resourceInfoRepository
 | 
			
		||||
                .findTenantResourcesByTenantId(
 | 
			
		||||
                        filter.getTenantId().getId(),
 | 
			
		||||
                        CollectionsUtil.isNotEmpty(filter.getResourceTypes()) ? filter.getResourceTypes()
 | 
			
		||||
                                .stream().map(Enum::name).collect(Collectors.toList()) : null,
 | 
			
		||||
                        resourceTypes.stream().map(Enum::name).collect(Collectors.toList()),
 | 
			
		||||
                        pageLink.getTextSearch(),
 | 
			
		||||
                        DaoUtil.toPageable(pageLink)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -67,7 +67,7 @@
 | 
			
		||||
        </mat-error>
 | 
			
		||||
      </mat-form-field>
 | 
			
		||||
      <tb-file-input *ngIf="isAdd || (isEdit && entityForm.get('resourceType').value === resourceType.JS_MODULE)"
 | 
			
		||||
        formControlName="base64Data"
 | 
			
		||||
        formControlName="data"
 | 
			
		||||
        required
 | 
			
		||||
        [readAsBinary]="true"
 | 
			
		||||
        [allowedExtensions]="getAllowedExtensions()"
 | 
			
		||||
 | 
			
		||||
@ -68,7 +68,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
        this.entityForm.get('title').enable({emitEvent: false});
 | 
			
		||||
      }
 | 
			
		||||
      this.entityForm.patchValue({
 | 
			
		||||
        base64Data: null,
 | 
			
		||||
        data: null,
 | 
			
		||||
        fileName: null
 | 
			
		||||
      }, {emitEvent: false});
 | 
			
		||||
    });
 | 
			
		||||
@ -93,7 +93,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
      title: [entity ? entity.title : '', [Validators.required, Validators.maxLength(255)]],
 | 
			
		||||
      resourceType: [entity?.resourceType ? entity.resourceType : ResourceType.JS_MODULE, Validators.required],
 | 
			
		||||
      fileName: [entity ? entity.fileName : null, Validators.required],
 | 
			
		||||
      base64Data: [entity ? entity.base64Data : null, Validators.required]
 | 
			
		||||
      data: [entity ? entity.data : null, Validators.required]
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -102,20 +102,20 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
      this.entityForm.get('resourceType').disable({emitEvent: false});
 | 
			
		||||
      if (entity.resourceType !== ResourceType.JS_MODULE) {
 | 
			
		||||
        this.entityForm.get('fileName').disable({emitEvent: false});
 | 
			
		||||
        this.entityForm.get('base64Data').disable({emitEvent: false});
 | 
			
		||||
        this.entityForm.get('data').disable({emitEvent: false});
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    this.entityForm.patchValue({
 | 
			
		||||
      resourceType: entity.resourceType,
 | 
			
		||||
      fileName: entity.fileName,
 | 
			
		||||
      title: entity.title,
 | 
			
		||||
      base64Data: entity.base64Data
 | 
			
		||||
      data: entity.data
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  prepareFormValue(formValue: Resource): Resource {
 | 
			
		||||
    if (this.isEdit && !isDefinedAndNotNull(formValue.base64Data)) {
 | 
			
		||||
      delete formValue.base64Data;
 | 
			
		||||
    if (this.isEdit && !isDefinedAndNotNull(formValue.data)) {
 | 
			
		||||
      delete formValue.data;
 | 
			
		||||
    }
 | 
			
		||||
    return super.prepareFormValue(formValue);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -64,6 +64,6 @@ export interface ResourceInfo extends Omit<BaseData<TbResourceId>, 'name' | 'lab
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface Resource extends ResourceInfo {
 | 
			
		||||
  base64Data: string;
 | 
			
		||||
  data: string;
 | 
			
		||||
  name?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user