Showing
23 changed files
with
365 additions
and
182 deletions
@@ -23,15 +23,15 @@ import org.springframework.web.bind.annotation.RequestMethod; | @@ -23,15 +23,15 @@ import org.springframework.web.bind.annotation.RequestMethod; | ||
23 | import org.springframework.web.bind.annotation.RequestParam; | 23 | import org.springframework.web.bind.annotation.RequestParam; |
24 | import org.springframework.web.bind.annotation.ResponseBody; | 24 | import org.springframework.web.bind.annotation.ResponseBody; |
25 | import org.springframework.web.bind.annotation.RestController; | 25 | import org.springframework.web.bind.annotation.RestController; |
26 | +import org.thingsboard.server.common.data.Resource; | ||
27 | +import org.thingsboard.server.common.data.ResourceType; | ||
26 | import org.thingsboard.server.common.data.exception.ThingsboardException; | 28 | import org.thingsboard.server.common.data.exception.ThingsboardException; |
27 | import org.thingsboard.server.common.data.id.TenantId; | 29 | import org.thingsboard.server.common.data.id.TenantId; |
28 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
29 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | 30 | +import org.thingsboard.server.common.data.page.PageData; |
31 | +import org.thingsboard.server.common.data.page.PageLink; | ||
30 | import org.thingsboard.server.dao.resource.ResourceService; | 32 | import org.thingsboard.server.dao.resource.ResourceService; |
31 | import org.thingsboard.server.queue.util.TbCoreComponent; | 33 | import org.thingsboard.server.queue.util.TbCoreComponent; |
32 | 34 | ||
33 | -import java.util.List; | ||
34 | - | ||
35 | @Slf4j | 35 | @Slf4j |
36 | @RestController | 36 | @RestController |
37 | @TbCoreComponent | 37 | @TbCoreComponent |
@@ -61,21 +61,14 @@ public class ResourceController extends BaseController { | @@ -61,21 +61,14 @@ public class ResourceController extends BaseController { | ||
61 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | 61 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") |
62 | @RequestMapping(value = "/resource", method = RequestMethod.GET) | 62 | @RequestMapping(value = "/resource", method = RequestMethod.GET) |
63 | @ResponseBody | 63 | @ResponseBody |
64 | - public List<Resource> getResources(@RequestParam(required = false) boolean system) throws ThingsboardException { | ||
65 | - try { | ||
66 | - return checkNotNull(resourceService.findResourcesByTenantId(system ? TenantId.SYS_TENANT_ID : getTenantId())); | ||
67 | - } catch (Exception e) { | ||
68 | - throw handleException(e); | ||
69 | - } | ||
70 | - } | ||
71 | - | ||
72 | - @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | ||
73 | - @RequestMapping(value = "/resource/{resourceType}", method = RequestMethod.GET) | ||
74 | - @ResponseBody | ||
75 | - public List<Resource> getResources(@RequestParam(required = false) boolean system, | ||
76 | - @PathVariable("resourceType") ResourceType resourceType) throws ThingsboardException { | 64 | + public PageData<Resource> getResources(@RequestParam(required = false) boolean system, |
65 | + @RequestParam int pageSize, | ||
66 | + @RequestParam int page, | ||
67 | + @RequestParam(required = false) String sortProperty, | ||
68 | + @RequestParam(required = false) String sortOrder) throws ThingsboardException { | ||
77 | try { | 69 | try { |
78 | - return checkNotNull(resourceService.findResourcesByTenantIdResourceType(system ? TenantId.SYS_TENANT_ID : getTenantId(), resourceType)); | 70 | + PageLink pageLink = createPageLink(pageSize, page, null, sortProperty, sortOrder); |
71 | + return checkNotNull(resourceService.findResourcesByTenantId(system ? TenantId.SYS_TENANT_ID : getTenantId(), pageLink)); | ||
79 | } catch (Exception e) { | 72 | } catch (Exception e) { |
80 | throw handleException(e); | 73 | throw handleException(e); |
81 | } | 74 | } |
@@ -22,14 +22,14 @@ import org.springframework.beans.factory.annotation.Value; | @@ -22,14 +22,14 @@ import org.springframework.beans.factory.annotation.Value; | ||
22 | import org.springframework.stereotype.Component; | 22 | import org.springframework.stereotype.Component; |
23 | import org.springframework.util.StringUtils; | 23 | import org.springframework.util.StringUtils; |
24 | import org.thingsboard.server.common.data.Dashboard; | 24 | import org.thingsboard.server.common.data.Dashboard; |
25 | +import org.thingsboard.server.common.data.Resource; | ||
26 | +import org.thingsboard.server.common.data.ResourceType; | ||
25 | import org.thingsboard.server.common.data.id.CustomerId; | 27 | import org.thingsboard.server.common.data.id.CustomerId; |
26 | import org.thingsboard.server.common.data.id.EntityId; | 28 | import org.thingsboard.server.common.data.id.EntityId; |
27 | import org.thingsboard.server.common.data.id.TenantId; | 29 | import org.thingsboard.server.common.data.id.TenantId; |
28 | import org.thingsboard.server.common.data.oauth2.OAuth2ClientRegistrationTemplate; | 30 | import org.thingsboard.server.common.data.oauth2.OAuth2ClientRegistrationTemplate; |
29 | import org.thingsboard.server.common.data.rule.RuleChain; | 31 | import org.thingsboard.server.common.data.rule.RuleChain; |
30 | import org.thingsboard.server.common.data.rule.RuleChainMetaData; | 32 | import org.thingsboard.server.common.data.rule.RuleChainMetaData; |
31 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
32 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | ||
33 | import org.thingsboard.server.common.data.widget.WidgetType; | 33 | import org.thingsboard.server.common.data.widget.WidgetType; |
34 | import org.thingsboard.server.common.data.widget.WidgetsBundle; | 34 | import org.thingsboard.server.common.data.widget.WidgetsBundle; |
35 | import org.thingsboard.server.dao.dashboard.DashboardService; | 35 | import org.thingsboard.server.dao.dashboard.DashboardService; |
@@ -251,7 +251,6 @@ public class InstallScripts { | @@ -251,7 +251,6 @@ public class InstallScripts { | ||
251 | } | 251 | } |
252 | } | 252 | } |
253 | 253 | ||
254 | - | ||
255 | public void loadDemoRuleChains(TenantId tenantId) throws Exception { | 254 | public void loadDemoRuleChains(TenantId tenantId) throws Exception { |
256 | try { | 255 | try { |
257 | createDefaultRuleChains(tenantId); | 256 | createDefaultRuleChains(tenantId); |
@@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.Device; | @@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.Device; | ||
26 | import org.thingsboard.server.common.data.DeviceProfile; | 26 | import org.thingsboard.server.common.data.DeviceProfile; |
27 | import org.thingsboard.server.common.data.EntityType; | 27 | import org.thingsboard.server.common.data.EntityType; |
28 | import org.thingsboard.server.common.data.HasName; | 28 | import org.thingsboard.server.common.data.HasName; |
29 | +import org.thingsboard.server.common.data.Resource; | ||
29 | import org.thingsboard.server.common.data.Tenant; | 30 | import org.thingsboard.server.common.data.Tenant; |
30 | import org.thingsboard.server.common.data.TenantProfile; | 31 | import org.thingsboard.server.common.data.TenantProfile; |
31 | import org.thingsboard.server.common.data.id.DeviceId; | 32 | import org.thingsboard.server.common.data.id.DeviceId; |
@@ -34,7 +35,6 @@ import org.thingsboard.server.common.data.id.EntityId; | @@ -34,7 +35,6 @@ import org.thingsboard.server.common.data.id.EntityId; | ||
34 | import org.thingsboard.server.common.data.id.RuleChainId; | 35 | import org.thingsboard.server.common.data.id.RuleChainId; |
35 | import org.thingsboard.server.common.data.id.TenantId; | 36 | import org.thingsboard.server.common.data.id.TenantId; |
36 | import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; | 37 | import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; |
37 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
38 | import org.thingsboard.server.common.msg.TbMsg; | 38 | import org.thingsboard.server.common.msg.TbMsg; |
39 | import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; | 39 | import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; |
40 | import org.thingsboard.server.common.msg.queue.ServiceType; | 40 | import org.thingsboard.server.common.msg.queue.ServiceType; |
@@ -19,12 +19,12 @@ import org.thingsboard.rule.engine.api.msg.ToDeviceActorNotificationMsg; | @@ -19,12 +19,12 @@ import org.thingsboard.rule.engine.api.msg.ToDeviceActorNotificationMsg; | ||
19 | import org.thingsboard.server.common.data.ApiUsageState; | 19 | import org.thingsboard.server.common.data.ApiUsageState; |
20 | import org.thingsboard.server.common.data.Device; | 20 | import org.thingsboard.server.common.data.Device; |
21 | import org.thingsboard.server.common.data.DeviceProfile; | 21 | import org.thingsboard.server.common.data.DeviceProfile; |
22 | +import org.thingsboard.server.common.data.Resource; | ||
22 | import org.thingsboard.server.common.data.Tenant; | 23 | import org.thingsboard.server.common.data.Tenant; |
23 | import org.thingsboard.server.common.data.TenantProfile; | 24 | import org.thingsboard.server.common.data.TenantProfile; |
24 | import org.thingsboard.server.common.data.id.EntityId; | 25 | import org.thingsboard.server.common.data.id.EntityId; |
25 | import org.thingsboard.server.common.data.id.TenantId; | 26 | import org.thingsboard.server.common.data.id.TenantId; |
26 | import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; | 27 | import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; |
27 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
28 | import org.thingsboard.server.common.msg.TbMsg; | 28 | import org.thingsboard.server.common.msg.TbMsg; |
29 | import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; | 29 | import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; |
30 | import org.thingsboard.server.gen.transport.TransportProtos; | 30 | import org.thingsboard.server.gen.transport.TransportProtos; |
@@ -31,6 +31,8 @@ import org.thingsboard.server.common.data.DataConstants; | @@ -31,6 +31,8 @@ import org.thingsboard.server.common.data.DataConstants; | ||
31 | import org.thingsboard.server.common.data.Device; | 31 | import org.thingsboard.server.common.data.Device; |
32 | import org.thingsboard.server.common.data.DeviceProfile; | 32 | import org.thingsboard.server.common.data.DeviceProfile; |
33 | import org.thingsboard.server.common.data.EntityType; | 33 | import org.thingsboard.server.common.data.EntityType; |
34 | +import org.thingsboard.server.common.data.Resource; | ||
35 | +import org.thingsboard.server.common.data.ResourceType; | ||
34 | import org.thingsboard.server.common.data.TenantProfile; | 36 | import org.thingsboard.server.common.data.TenantProfile; |
35 | import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials; | 37 | import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials; |
36 | import org.thingsboard.server.common.data.device.credentials.ProvisionDeviceCredentialsData; | 38 | import org.thingsboard.server.common.data.device.credentials.ProvisionDeviceCredentialsData; |
@@ -42,8 +44,6 @@ import org.thingsboard.server.common.data.id.TenantId; | @@ -42,8 +44,6 @@ import org.thingsboard.server.common.data.id.TenantId; | ||
42 | import org.thingsboard.server.common.data.relation.EntityRelation; | 44 | import org.thingsboard.server.common.data.relation.EntityRelation; |
43 | import org.thingsboard.server.common.data.security.DeviceCredentials; | 45 | import org.thingsboard.server.common.data.security.DeviceCredentials; |
44 | import org.thingsboard.server.common.data.security.DeviceCredentialsType; | 46 | import org.thingsboard.server.common.data.security.DeviceCredentialsType; |
45 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
46 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | ||
47 | import org.thingsboard.server.common.msg.EncryptionUtil; | 47 | import org.thingsboard.server.common.msg.EncryptionUtil; |
48 | import org.thingsboard.server.common.msg.TbMsg; | 48 | import org.thingsboard.server.common.msg.TbMsg; |
49 | import org.thingsboard.server.common.msg.TbMsgDataType; | 49 | import org.thingsboard.server.common.msg.TbMsgDataType; |
@@ -64,7 +64,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequ | @@ -64,7 +64,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequ | ||
64 | import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg; | 64 | import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg; |
65 | import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg; | 65 | import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg; |
66 | import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayResponseMsg; | 66 | import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayResponseMsg; |
67 | -import org.thingsboard.server.gen.transport.TransportProtos.GetResourcesRequestMsg; | 67 | +import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg; |
68 | import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceRequestMsg; | 68 | import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceRequestMsg; |
69 | import org.thingsboard.server.gen.transport.TransportProtos.ProvisionResponseStatus; | 69 | import org.thingsboard.server.gen.transport.TransportProtos.ProvisionResponseStatus; |
70 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | 70 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
@@ -81,14 +81,11 @@ import org.thingsboard.server.service.profile.TbDeviceProfileCache; | @@ -81,14 +81,11 @@ import org.thingsboard.server.service.profile.TbDeviceProfileCache; | ||
81 | import org.thingsboard.server.service.queue.TbClusterService; | 81 | import org.thingsboard.server.service.queue.TbClusterService; |
82 | import org.thingsboard.server.service.state.DeviceStateService; | 82 | import org.thingsboard.server.service.state.DeviceStateService; |
83 | 83 | ||
84 | -import java.util.Collections; | ||
85 | -import java.util.List; | ||
86 | import java.util.UUID; | 84 | import java.util.UUID; |
87 | import java.util.concurrent.ConcurrentHashMap; | 85 | import java.util.concurrent.ConcurrentHashMap; |
88 | import java.util.concurrent.ConcurrentMap; | 86 | import java.util.concurrent.ConcurrentMap; |
89 | import java.util.concurrent.locks.Lock; | 87 | import java.util.concurrent.locks.Lock; |
90 | import java.util.concurrent.locks.ReentrantLock; | 88 | import java.util.concurrent.locks.ReentrantLock; |
91 | -import java.util.stream.Collectors; | ||
92 | 89 | ||
93 | /** | 90 | /** |
94 | * Created by ashvayka on 05.10.18. | 91 | * Created by ashvayka on 05.10.18. |
@@ -166,8 +163,8 @@ public class DefaultTransportApiService implements TransportApiService { | @@ -166,8 +163,8 @@ public class DefaultTransportApiService implements TransportApiService { | ||
166 | } else if (transportApiRequestMsg.hasProvisionDeviceRequestMsg()) { | 163 | } else if (transportApiRequestMsg.hasProvisionDeviceRequestMsg()) { |
167 | return Futures.transform(handle(transportApiRequestMsg.getProvisionDeviceRequestMsg()), | 164 | return Futures.transform(handle(transportApiRequestMsg.getProvisionDeviceRequestMsg()), |
168 | value -> new TbProtoQueueMsg<>(tbProtoQueueMsg.getKey(), value, tbProtoQueueMsg.getHeaders()), MoreExecutors.directExecutor()); | 165 | value -> new TbProtoQueueMsg<>(tbProtoQueueMsg.getKey(), value, tbProtoQueueMsg.getHeaders()), MoreExecutors.directExecutor()); |
169 | - } else if (transportApiRequestMsg.hasResourcesRequestMsg()) { | ||
170 | - return Futures.transform(handle(transportApiRequestMsg.getResourcesRequestMsg()), | 166 | + } else if (transportApiRequestMsg.hasResourceRequestMsg()) { |
167 | + return Futures.transform(handle(transportApiRequestMsg.getResourceRequestMsg()), | ||
171 | value -> new TbProtoQueueMsg<>(tbProtoQueueMsg.getKey(), value, tbProtoQueueMsg.getHeaders()), MoreExecutors.directExecutor()); | 168 | value -> new TbProtoQueueMsg<>(tbProtoQueueMsg.getKey(), value, tbProtoQueueMsg.getHeaders()), MoreExecutors.directExecutor()); |
172 | } | 169 | } |
173 | return Futures.transform(getEmptyTransportApiResponseFuture(), | 170 | return Futures.transform(getEmptyTransportApiResponseFuture(), |
@@ -365,41 +362,22 @@ public class DefaultTransportApiService implements TransportApiService { | @@ -365,41 +362,22 @@ public class DefaultTransportApiService implements TransportApiService { | ||
365 | return Futures.immediateFuture(TransportApiResponseMsg.newBuilder().setEntityProfileResponseMsg(builder).build()); | 362 | return Futures.immediateFuture(TransportApiResponseMsg.newBuilder().setEntityProfileResponseMsg(builder).build()); |
366 | } | 363 | } |
367 | 364 | ||
368 | - private ListenableFuture<TransportApiResponseMsg> handle(GetResourcesRequestMsg requestMsg) { | 365 | + private ListenableFuture<TransportApiResponseMsg> handle(GetResourceRequestMsg requestMsg) { |
369 | TenantId tenantId = new TenantId(new UUID(requestMsg.getTenantIdMSB(), requestMsg.getTenantIdLSB())); | 366 | TenantId tenantId = new TenantId(new UUID(requestMsg.getTenantIdMSB(), requestMsg.getTenantIdLSB())); |
370 | - TransportProtos.GetResourcesResponseMsg.Builder builder = TransportProtos.GetResourcesResponseMsg.newBuilder(); | ||
371 | - String resourceType = requestMsg.getResourceType(); | 367 | + ResourceType resourceType = ResourceType.valueOf(requestMsg.getResourceType()); |
372 | String resourceId = requestMsg.getResourceId(); | 368 | String resourceId = requestMsg.getResourceId(); |
369 | + TransportProtos.GetResourceResponseMsg.Builder builder = TransportProtos.GetResourceResponseMsg.newBuilder(); | ||
370 | + Resource resource = resourceService.getResource(tenantId, resourceType, resourceId); | ||
373 | 371 | ||
374 | - List<TransportProtos.ResourceMsg> resources; | ||
375 | - | ||
376 | - if (resourceType != null && resourceId != null && !resourceId.isEmpty()) { | ||
377 | - resources = Collections.singletonList(toProto( | ||
378 | - resourceService.getResource(tenantId, ResourceType.valueOf(resourceType), resourceId))); | ||
379 | - } else if (resourceType != null && !resourceType.isEmpty()) { | ||
380 | - resources = resourceService.findResourcesByTenantIdResourceType(tenantId, ResourceType.valueOf(resourceType)) | ||
381 | - .stream() | ||
382 | - .map(this::toProto) | ||
383 | - .collect(Collectors.toList()); | ||
384 | - } else { | ||
385 | - resources = resourceService.findResourcesByTenantId(tenantId) | ||
386 | - .stream() | ||
387 | - .map(this::toProto) | ||
388 | - .collect(Collectors.toList()); | 372 | + if (resource == null && !tenantId.equals(TenantId.SYS_TENANT_ID)) { |
373 | + resource = resourceService.getResource(TenantId.SYS_TENANT_ID, resourceType, resourceId); | ||
389 | } | 374 | } |
390 | 375 | ||
391 | - builder.addAllResources(resources); | ||
392 | - return Futures.immediateFuture(TransportApiResponseMsg.newBuilder().setResourcesResponseMsg(builder).build()); | ||
393 | - } | 376 | + if (resource != null) { |
377 | + builder.setResource(ByteString.copyFrom(dataDecodingEncodingService.encode(resource))); | ||
378 | + } | ||
394 | 379 | ||
395 | - private TransportProtos.ResourceMsg toProto(Resource resource) { | ||
396 | - return TransportProtos.ResourceMsg.newBuilder() | ||
397 | - .setTenantIdMSB(resource.getTenantId().getId().getMostSignificantBits()) | ||
398 | - .setTenantIdLSB(resource.getTenantId().getId().getLeastSignificantBits()) | ||
399 | - .setResourceType(resource.getResourceType().name()) | ||
400 | - .setResourceId(resource.getResourceId()) | ||
401 | - .setValue(resource.getValue()) | ||
402 | - .build(); | 380 | + return Futures.immediateFuture(TransportApiResponseMsg.newBuilder().setResourceResponseMsg(builder).build()); |
403 | } | 381 | } |
404 | 382 | ||
405 | private ListenableFuture<TransportApiResponseMsg> getDeviceInfo(DeviceId deviceId, DeviceCredentials credentials) { | 383 | private ListenableFuture<TransportApiResponseMsg> getDeviceInfo(DeviceId deviceId, DeviceCredentials credentials) { |
@@ -15,9 +15,11 @@ | @@ -15,9 +15,11 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.resource; | 16 | package org.thingsboard.server.dao.resource; |
17 | 17 | ||
18 | +import org.thingsboard.server.common.data.Resource; | ||
19 | +import org.thingsboard.server.common.data.ResourceType; | ||
18 | import org.thingsboard.server.common.data.id.TenantId; | 20 | import org.thingsboard.server.common.data.id.TenantId; |
19 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
20 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | 21 | +import org.thingsboard.server.common.data.page.PageData; |
22 | +import org.thingsboard.server.common.data.page.PageLink; | ||
21 | 23 | ||
22 | import java.util.List; | 24 | import java.util.List; |
23 | 25 | ||
@@ -27,7 +29,7 @@ public interface ResourceService { | @@ -27,7 +29,7 @@ public interface ResourceService { | ||
27 | 29 | ||
28 | Resource getResource(TenantId tenantId, ResourceType resourceType, String resourceId); | 30 | Resource getResource(TenantId tenantId, ResourceType resourceType, String resourceId); |
29 | 31 | ||
30 | - List<Resource> findResourcesByTenantId(TenantId tenantId); | 32 | + PageData<Resource> findResourcesByTenantId(TenantId tenantId, PageLink pageLink); |
31 | 33 | ||
32 | List<Resource> findResourcesByTenantIdResourceType(TenantId tenantId, ResourceType resourceType); | 34 | List<Resource> findResourcesByTenantIdResourceType(TenantId tenantId, ResourceType resourceType); |
33 | 35 |
1 | +/** | ||
2 | + * Copyright © 2016-2021 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.common.data; | ||
17 | + | ||
18 | +import lombok.Data; | ||
19 | +import org.thingsboard.server.common.data.id.TenantId; | ||
20 | + | ||
21 | +import java.io.Serializable; | ||
22 | + | ||
23 | +@Data | ||
24 | +public class Resource implements HasTenantId, Serializable { | ||
25 | + | ||
26 | + private static final long serialVersionUID = 7379609705527272306L; | ||
27 | + | ||
28 | + private TenantId tenantId; | ||
29 | + private ResourceType resourceType; | ||
30 | + private String resourceId; | ||
31 | + private String value; | ||
32 | + | ||
33 | + @Override | ||
34 | + public String toString() { | ||
35 | + return "Resource{" + | ||
36 | + "tenantId=" + tenantId + | ||
37 | + ", resourceType=" + resourceType + | ||
38 | + ", resourceId='" + resourceId + '\'' + | ||
39 | + '}'; | ||
40 | + } | ||
41 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2021 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.common.data; | ||
17 | + | ||
18 | +public enum ResourceType { | ||
19 | + LWM2M_MODEL, JKS, PKCS_12 | ||
20 | +} |
@@ -201,23 +201,15 @@ message LwM2MResponseMsg { | @@ -201,23 +201,15 @@ message LwM2MResponseMsg { | ||
201 | LwM2MRegistrationResponseMsg registrationMsg = 1; | 201 | LwM2MRegistrationResponseMsg registrationMsg = 1; |
202 | } | 202 | } |
203 | 203 | ||
204 | -message ResourceMsg { | 204 | +message GetResourceRequestMsg { |
205 | int64 tenantIdMSB = 1; | 205 | int64 tenantIdMSB = 1; |
206 | int64 tenantIdLSB = 2; | 206 | int64 tenantIdLSB = 2; |
207 | string resourceType = 3; | 207 | string resourceType = 3; |
208 | string resourceId = 4; | 208 | string resourceId = 4; |
209 | - string value = 5; | ||
210 | } | 209 | } |
211 | 210 | ||
212 | -message GetResourcesRequestMsg { | ||
213 | - int64 tenantIdMSB = 1; | ||
214 | - int64 tenantIdLSB = 2; | ||
215 | - string resourceType = 3; | ||
216 | - string resourceId = 4; | ||
217 | -} | ||
218 | - | ||
219 | -message GetResourcesResponseMsg { | ||
220 | - repeated ResourceMsg resources = 1; | 211 | +message GetResourceResponseMsg { |
212 | + bytes resource = 1; | ||
221 | } | 213 | } |
222 | 214 | ||
223 | message ValidateDeviceLwM2MCredentialsRequestMsg { | 215 | message ValidateDeviceLwM2MCredentialsRequestMsg { |
@@ -558,7 +550,7 @@ message TransportApiRequestMsg { | @@ -558,7 +550,7 @@ message TransportApiRequestMsg { | ||
558 | ValidateBasicMqttCredRequestMsg validateBasicMqttCredRequestMsg = 6; | 550 | ValidateBasicMqttCredRequestMsg validateBasicMqttCredRequestMsg = 6; |
559 | ProvisionDeviceRequestMsg provisionDeviceRequestMsg = 7; | 551 | ProvisionDeviceRequestMsg provisionDeviceRequestMsg = 7; |
560 | ValidateDeviceLwM2MCredentialsRequestMsg validateDeviceLwM2MCredentialsRequestMsg = 8; | 552 | ValidateDeviceLwM2MCredentialsRequestMsg validateDeviceLwM2MCredentialsRequestMsg = 8; |
561 | - GetResourcesRequestMsg resourcesRequestMsg = 9; | 553 | + GetResourceRequestMsg resourceRequestMsg = 9; |
562 | } | 554 | } |
563 | 555 | ||
564 | /* Response from ThingsBoard Core Service to Transport Service */ | 556 | /* Response from ThingsBoard Core Service to Transport Service */ |
@@ -568,7 +560,7 @@ message TransportApiResponseMsg { | @@ -568,7 +560,7 @@ message TransportApiResponseMsg { | ||
568 | GetEntityProfileResponseMsg entityProfileResponseMsg = 3; | 560 | GetEntityProfileResponseMsg entityProfileResponseMsg = 3; |
569 | ProvisionDeviceResponseMsg provisionDeviceResponseMsg = 4; | 561 | ProvisionDeviceResponseMsg provisionDeviceResponseMsg = 4; |
570 | LwM2MResponseMsg lwM2MResponseMsg = 6; | 562 | LwM2MResponseMsg lwM2MResponseMsg = 6; |
571 | - GetResourcesResponseMsg resourcesResponseMsg = 7; | 563 | + GetResourceResponseMsg resourceResponseMsg = 7; |
572 | } | 564 | } |
573 | 565 | ||
574 | /* Messages that are handled by ThingsBoard Core Service */ | 566 | /* Messages that are handled by ThingsBoard Core Service */ |
@@ -41,8 +41,6 @@ import org.thingsboard.server.common.transport.TransportService; | @@ -41,8 +41,6 @@ import org.thingsboard.server.common.transport.TransportService; | ||
41 | import org.thingsboard.server.common.transport.TransportServiceCallback; | 41 | import org.thingsboard.server.common.transport.TransportServiceCallback; |
42 | import org.thingsboard.server.common.transport.adaptor.AdaptorException; | 42 | import org.thingsboard.server.common.transport.adaptor.AdaptorException; |
43 | import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigServer; | 43 | import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigServer; |
44 | -import org.thingsboard.server.gen.transport.TransportProtos.GetResourcesRequestMsg; | ||
45 | -import org.thingsboard.server.gen.transport.TransportProtos.GetResourcesResponseMsg; | ||
46 | import org.thingsboard.server.gen.transport.TransportProtos.PostAttributeMsg; | 44 | import org.thingsboard.server.gen.transport.TransportProtos.PostAttributeMsg; |
47 | import org.thingsboard.server.gen.transport.TransportProtos.PostTelemetryMsg; | 45 | import org.thingsboard.server.gen.transport.TransportProtos.PostTelemetryMsg; |
48 | import org.thingsboard.server.gen.transport.TransportProtos.SessionInfoProto; | 46 | import org.thingsboard.server.gen.transport.TransportProtos.SessionInfoProto; |
@@ -51,9 +49,6 @@ import org.thingsboard.server.queue.util.TbLwM2mTransportComponent; | @@ -51,9 +49,6 @@ import org.thingsboard.server.queue.util.TbLwM2mTransportComponent; | ||
51 | import org.thingsboard.server.transport.lwm2m.server.adaptors.LwM2MJsonAdaptor; | 49 | import org.thingsboard.server.transport.lwm2m.server.adaptors.LwM2MJsonAdaptor; |
52 | 50 | ||
53 | import java.util.List; | 51 | import java.util.List; |
54 | -import java.util.UUID; | ||
55 | -import java.util.concurrent.CountDownLatch; | ||
56 | -import java.util.concurrent.TimeUnit; | ||
57 | 52 | ||
58 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_TELEMETRY; | 53 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_TELEMETRY; |
59 | 54 | ||
@@ -147,56 +142,56 @@ public class LwM2mTransportContextServer extends TransportContext { | @@ -147,56 +142,56 @@ public class LwM2mTransportContextServer extends TransportContext { | ||
147 | 142 | ||
148 | 143 | ||
149 | 144 | ||
150 | - /** | ||
151 | - * ResourcesRequestMsg | ||
152 | - * | ||
153 | - * @param resourceType | ||
154 | - * @return | ||
155 | - */ | ||
156 | - public GetResourcesResponseMsg getResourceTenant (UUID tenantId, String resourceType) { | ||
157 | - CountDownLatch latch = new CountDownLatch(1); | ||
158 | - GetResourcesResponseMsg responseMsg = | ||
159 | - this.getTransportService() | ||
160 | - .getResources(GetResourcesRequestMsg.newBuilder() | ||
161 | - .setResourceType(resourceType) | ||
162 | - .setTenantIdLSB(tenantId.getLeastSignificantBits()) | ||
163 | - .setTenantIdMSB(tenantId.getMostSignificantBits()) | ||
164 | - .build()); | ||
165 | - latch.countDown(); | ||
166 | - try { | ||
167 | - latch.await(this.getLwM2MTransportConfigServer().getTimeout(), TimeUnit.MILLISECONDS); | ||
168 | - } catch (InterruptedException e) { | ||
169 | - log.error("Failed to await credentials!", e); | ||
170 | - } | ||
171 | - | ||
172 | - return responseMsg; | ||
173 | - } | ||
174 | - | ||
175 | - public GetResourcesResponseMsg getResourceTenantProcess (UUID tenantId, String resourceType) { | ||
176 | - CountDownLatch latch = new CountDownLatch(2); | ||
177 | - final GetResourcesResponseMsg[] responseMsg = {null}; | ||
178 | - this.getTransportService().process(GetResourcesRequestMsg.newBuilder() | ||
179 | - .setResourceType(resourceType) | ||
180 | - .setTenantIdLSB(tenantId.getLeastSignificantBits()) | ||
181 | - .setTenantIdMSB(tenantId.getMostSignificantBits()) | ||
182 | - .build(), | ||
183 | - new TransportServiceCallback<>() { | ||
184 | - @Override | ||
185 | - public void onSuccess(GetResourcesResponseMsg msg) { responseMsg[0] = msg; | ||
186 | - latch.countDown(); | ||
187 | - } | ||
188 | - | ||
189 | - @Override | ||
190 | - public void onError(Throwable e) { | ||
191 | - log.trace("[{}] [{}] Failed to process credentials ", tenantId, e); | ||
192 | - latch.countDown(); | ||
193 | - } | ||
194 | - }); | ||
195 | - try { | ||
196 | - latch.await(this.getLwM2MTransportConfigServer().getTimeout(), TimeUnit.MILLISECONDS); | ||
197 | - } catch (InterruptedException e) { | ||
198 | - log.error("Failed to await credentials!", e); | ||
199 | - } | ||
200 | - return responseMsg[0]; | ||
201 | - } | 145 | +// /** |
146 | +// * ResourcesRequestMsg | ||
147 | +// * | ||
148 | +// * @param resourceType | ||
149 | +// * @return | ||
150 | +// */ | ||
151 | +// public GetResourcesResponseMsg getResourceTenant (UUID tenantId, String resourceType) { | ||
152 | +// CountDownLatch latch = new CountDownLatch(1); | ||
153 | +// GetResourcesResponseMsg responseMsg = | ||
154 | +// this.getTransportService() | ||
155 | +// .getResources(GetResourcesRequestMsg.newBuilder() | ||
156 | +// .setResourceType(resourceType) | ||
157 | +// .setTenantIdLSB(tenantId.getLeastSignificantBits()) | ||
158 | +// .setTenantIdMSB(tenantId.getMostSignificantBits()) | ||
159 | +// .build()); | ||
160 | +// latch.countDown(); | ||
161 | +// try { | ||
162 | +// latch.await(this.getLwM2MTransportConfigServer().getTimeout(), TimeUnit.MILLISECONDS); | ||
163 | +// } catch (InterruptedException e) { | ||
164 | +// log.error("Failed to await credentials!", e); | ||
165 | +// } | ||
166 | +// | ||
167 | +// return responseMsg; | ||
168 | +// } | ||
169 | + | ||
170 | +// public GetResourcesResponseMsg getResourceTenantProcess (UUID tenantId, String resourceType) { | ||
171 | +// CountDownLatch latch = new CountDownLatch(2); | ||
172 | +// final GetResourcesResponseMsg[] responseMsg = {null}; | ||
173 | +// this.getTransportService().process(GetResourcesRequestMsg.newBuilder() | ||
174 | +// .setResourceType(resourceType) | ||
175 | +// .setTenantIdLSB(tenantId.getLeastSignificantBits()) | ||
176 | +// .setTenantIdMSB(tenantId.getMostSignificantBits()) | ||
177 | +// .build(), | ||
178 | +// new TransportServiceCallback<>() { | ||
179 | +// @Override | ||
180 | +// public void onSuccess(GetResourcesResponseMsg msg) { responseMsg[0] = msg; | ||
181 | +// latch.countDown(); | ||
182 | +// } | ||
183 | +// | ||
184 | +// @Override | ||
185 | +// public void onError(Throwable e) { | ||
186 | +// log.trace("[{}] [{}] Failed to process credentials ", tenantId, e); | ||
187 | +// latch.countDown(); | ||
188 | +// } | ||
189 | +// }); | ||
190 | +// try { | ||
191 | +// latch.await(this.getLwM2MTransportConfigServer().getTimeout(), TimeUnit.MILLISECONDS); | ||
192 | +// } catch (InterruptedException e) { | ||
193 | +// log.error("Failed to await credentials!", e); | ||
194 | +// } | ||
195 | +// return responseMsg[0]; | ||
196 | +// } | ||
202 | } | 197 | } |
@@ -30,9 +30,6 @@ import org.eclipse.leshan.server.security.SecurityChecker; | @@ -30,9 +30,6 @@ import org.eclipse.leshan.server.security.SecurityChecker; | ||
30 | import org.springframework.beans.factory.annotation.Autowired; | 30 | import org.springframework.beans.factory.annotation.Autowired; |
31 | import org.springframework.context.annotation.Bean; | 31 | import org.springframework.context.annotation.Bean; |
32 | import org.springframework.stereotype.Component; | 32 | import org.springframework.stereotype.Component; |
33 | -import org.thingsboard.server.common.data.id.TenantId; | ||
34 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | ||
35 | -import org.thingsboard.server.gen.transport.TransportProtos; | ||
36 | import org.thingsboard.server.queue.util.TbLwM2mTransportComponent; | 33 | import org.thingsboard.server.queue.util.TbLwM2mTransportComponent; |
37 | import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClientContext; | 34 | import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClientContext; |
38 | import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl; | 35 | import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl; |
@@ -101,7 +98,7 @@ public class LwM2mTransportServerConfiguration { | @@ -101,7 +98,7 @@ public class LwM2mTransportServerConfiguration { | ||
101 | builder.setCoapConfig(getCoapConfig(serverPortNoSec, serverSecurePort)); | 98 | builder.setCoapConfig(getCoapConfig(serverPortNoSec, serverSecurePort)); |
102 | 99 | ||
103 | /** Define model provider (Create Models )*/ | 100 | /** Define model provider (Create Models )*/ |
104 | - TransportProtos.GetResourcesResponseMsg responseMsg= this.context.getResourceTenantProcess(TenantId.SYS_TENANT_ID.getId(), ResourceType.LWM2M_MODEL.name()); | 101 | +// TransportProtos.GetResourcesResponseMsg responseMsg= this.context.getResourceTenantProcess(TenantId.SYS_TENANT_ID.getId(), ResourceType.LWM2M_MODEL.name()); |
105 | // TransportProtos.GetResourcesResponseMsg responseMsg= this.context.getResourceTenant(TenantId.SYS_TENANT_ID.getId(), ResourceType.LWM2M_MODEL.name()); | 102 | // TransportProtos.GetResourcesResponseMsg responseMsg= this.context.getResourceTenant(TenantId.SYS_TENANT_ID.getId(), ResourceType.LWM2M_MODEL.name()); |
106 | // LwM2mModelProvider modelProvider = new VersionedModelProvider(this.context.getLwM2MTransportConfigServer().getModelsValueCommon()); | 103 | // LwM2mModelProvider modelProvider = new VersionedModelProvider(this.context.getLwM2MTransportConfigServer().getModelsValueCommon()); |
107 | LwM2mModelProvider modelProvider = new LwM2mVersionedModelProvider(this.context.getLwM2MTransportConfigServer().getModelsValueServer(), this.lwM2mClientContext); | 104 | LwM2mModelProvider modelProvider = new LwM2mVersionedModelProvider(this.context.getLwM2MTransportConfigServer().getModelsValueServer(), this.lwM2mClientContext); |
@@ -40,8 +40,6 @@ import org.springframework.stereotype.Service; | @@ -40,8 +40,6 @@ import org.springframework.stereotype.Service; | ||
40 | import org.thingsboard.common.util.JacksonUtil; | 40 | import org.thingsboard.common.util.JacksonUtil; |
41 | import org.thingsboard.server.common.data.Device; | 41 | import org.thingsboard.server.common.data.Device; |
42 | import org.thingsboard.server.common.data.DeviceProfile; | 42 | import org.thingsboard.server.common.data.DeviceProfile; |
43 | -import org.thingsboard.server.common.data.id.TenantId; | ||
44 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | ||
45 | import org.thingsboard.server.common.transport.TransportService; | 43 | import org.thingsboard.server.common.transport.TransportService; |
46 | import org.thingsboard.server.common.transport.adaptor.AdaptorException; | 44 | import org.thingsboard.server.common.transport.adaptor.AdaptorException; |
47 | import org.thingsboard.server.common.transport.adaptor.JsonConverter; | 45 | import org.thingsboard.server.common.transport.adaptor.JsonConverter; |
@@ -156,7 +154,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService { | @@ -156,7 +154,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService { | ||
156 | try { | 154 | try { |
157 | log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId()); | 155 | log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId()); |
158 | ((LwM2mVersionedModelProvider)leshanServer.getModelProvider()).setRepository(this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getModelsValueCommon()); | 156 | ((LwM2mVersionedModelProvider)leshanServer.getModelProvider()).setRepository(this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getModelsValueCommon()); |
159 | - TransportProtos.GetResourcesResponseMsg responseMsg= this.lwM2mTransportContextServer.getResourceTenantProcess(TenantId.SYS_TENANT_ID.getId(), ResourceType.LWM2M_MODEL.name()); | 157 | +// TransportProtos.GetResourcesResponseMsg responseMsg= this.lwM2mTransportContextServer.getResourceTenantProcess(TenantId.SYS_TENANT_ID.getId(), ResourceType.LWM2M_MODEL.name()); |
160 | // TransportProtos.GetResourcesResponseMsg responseMsg= this.lwM2mTransportContextServer.getResourceTenant(TenantId.SYS_TENANT_ID.getId(), ResourceType.LWM2M_MODEL.name()); | 158 | // TransportProtos.GetResourcesResponseMsg responseMsg= this.lwM2mTransportContextServer.getResourceTenant(TenantId.SYS_TENANT_ID.getId(), ResourceType.LWM2M_MODEL.name()); |
161 | 159 | ||
162 | // (((VersionedModelProvider) (leshanServer)).modelProvider).repository; | 160 | // (((VersionedModelProvider) (leshanServer)).modelProvider).repository; |
1 | +/** | ||
2 | + * Copyright © 2016-2021 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.common.transport; | ||
17 | + | ||
18 | +import org.thingsboard.server.common.data.Resource; | ||
19 | +import org.thingsboard.server.common.data.ResourceType; | ||
20 | +import org.thingsboard.server.common.data.id.TenantId; | ||
21 | + | ||
22 | +public interface TransportResourceCache { | ||
23 | + | ||
24 | + Resource get(TenantId tenantId, ResourceType resourceType, String resourceId); | ||
25 | + | ||
26 | + void update(TenantId tenantId, ResourceType resourceType, String resourceI); | ||
27 | + | ||
28 | + void evict(TenantId tenantId, ResourceType resourceType, String resourceId); | ||
29 | +} |
@@ -25,8 +25,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeRequestM | @@ -25,8 +25,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeRequestM | ||
25 | import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequestMsg; | 25 | import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequestMsg; |
26 | import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg; |
27 | import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg; | 27 | import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg; |
28 | -import org.thingsboard.server.gen.transport.TransportProtos.GetResourcesRequestMsg; | ||
29 | -import org.thingsboard.server.gen.transport.TransportProtos.GetResourcesResponseMsg; | 28 | +import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg; |
29 | +import org.thingsboard.server.gen.transport.TransportProtos.GetResourceResponseMsg; | ||
30 | import org.thingsboard.server.gen.transport.TransportProtos.LwM2MRequestMsg; | 30 | import org.thingsboard.server.gen.transport.TransportProtos.LwM2MRequestMsg; |
31 | import org.thingsboard.server.gen.transport.TransportProtos.LwM2MResponseMsg; | 31 | import org.thingsboard.server.gen.transport.TransportProtos.LwM2MResponseMsg; |
32 | import org.thingsboard.server.gen.transport.TransportProtos.PostAttributeMsg; | 32 | import org.thingsboard.server.gen.transport.TransportProtos.PostAttributeMsg; |
@@ -53,7 +53,7 @@ public interface TransportService { | @@ -53,7 +53,7 @@ public interface TransportService { | ||
53 | 53 | ||
54 | GetEntityProfileResponseMsg getEntityProfile(GetEntityProfileRequestMsg msg); | 54 | GetEntityProfileResponseMsg getEntityProfile(GetEntityProfileRequestMsg msg); |
55 | 55 | ||
56 | - GetResourcesResponseMsg getResources(GetResourcesRequestMsg msg); | 56 | + GetResourceResponseMsg getResource(GetResourceRequestMsg msg); |
57 | 57 | ||
58 | void process(DeviceTransportType transportType, ValidateDeviceTokenRequestMsg msg, | 58 | void process(DeviceTransportType transportType, ValidateDeviceTokenRequestMsg msg, |
59 | TransportServiceCallback<ValidateDeviceCredentialsResponse> callback); | 59 | TransportServiceCallback<ValidateDeviceCredentialsResponse> callback); |
@@ -75,9 +75,8 @@ public interface TransportService { | @@ -75,9 +75,8 @@ public interface TransportService { | ||
75 | 75 | ||
76 | void onProfileUpdate(DeviceProfile deviceProfile); | 76 | void onProfileUpdate(DeviceProfile deviceProfile); |
77 | 77 | ||
78 | - void process(LwM2MRequestMsg msg, TransportServiceCallback<LwM2MResponseMsg> callback); | ||
79 | - | ||
80 | - void process(GetResourcesRequestMsg msg, TransportServiceCallback<GetResourcesResponseMsg> callback); | 78 | + void process(LwM2MRequestMsg msg, |
79 | + TransportServiceCallback<LwM2MResponseMsg> callback); | ||
81 | 80 | ||
82 | void process(SessionInfoProto sessionInfo, SessionEventMsg msg, TransportServiceCallback<Void> callback); | 81 | void process(SessionInfoProto sessionInfo, SessionEventMsg msg, TransportServiceCallback<Void> callback); |
83 | 82 |
1 | +/** | ||
2 | + * Copyright © 2016-2021 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.common.transport.service; | ||
17 | + | ||
18 | +import lombok.Data; | ||
19 | +import lombok.extern.slf4j.Slf4j; | ||
20 | +import org.springframework.context.annotation.Lazy; | ||
21 | +import org.springframework.stereotype.Component; | ||
22 | +import org.thingsboard.server.common.data.Resource; | ||
23 | +import org.thingsboard.server.common.data.ResourceType; | ||
24 | +import org.thingsboard.server.common.data.id.TenantId; | ||
25 | +import org.thingsboard.server.common.transport.TransportResourceCache; | ||
26 | +import org.thingsboard.server.common.transport.TransportService; | ||
27 | +import org.thingsboard.server.common.transport.util.DataDecodingEncodingService; | ||
28 | +import org.thingsboard.server.gen.transport.TransportProtos; | ||
29 | +import org.thingsboard.server.queue.util.TbTransportComponent; | ||
30 | + | ||
31 | +import java.util.Optional; | ||
32 | +import java.util.Set; | ||
33 | +import java.util.UUID; | ||
34 | +import java.util.concurrent.ConcurrentHashMap; | ||
35 | +import java.util.concurrent.ConcurrentMap; | ||
36 | +import java.util.concurrent.locks.Lock; | ||
37 | +import java.util.concurrent.locks.ReentrantLock; | ||
38 | + | ||
39 | +@Slf4j | ||
40 | +@Component | ||
41 | +@TbTransportComponent | ||
42 | +public class DefaultTransportResourceCache implements TransportResourceCache { | ||
43 | + | ||
44 | + private final Lock resourceFetchLock = new ReentrantLock(); | ||
45 | + private final ConcurrentMap<ResourceKey, Resource> resources = new ConcurrentHashMap<>(); | ||
46 | + private final Set<ResourceKey> keys = ConcurrentHashMap.newKeySet(); | ||
47 | + private final DataDecodingEncodingService dataDecodingEncodingService; | ||
48 | + private final TransportService transportService; | ||
49 | + | ||
50 | + public DefaultTransportResourceCache(DataDecodingEncodingService dataDecodingEncodingService, @Lazy TransportService transportService) { | ||
51 | + this.dataDecodingEncodingService = dataDecodingEncodingService; | ||
52 | + this.transportService = transportService; | ||
53 | + } | ||
54 | + | ||
55 | + @Override | ||
56 | + public Resource get(TenantId tenantId, ResourceType resourceType, String resourceId) { | ||
57 | + ResourceKey resourceKey = new ResourceKey(tenantId, resourceType, resourceId); | ||
58 | + Resource resource; | ||
59 | + | ||
60 | + if (keys.contains(resourceKey)) { | ||
61 | + resource = resources.get(resourceKey); | ||
62 | + if (resource == null) { | ||
63 | + resource = resources.get(resourceKey.getSystemKey()); | ||
64 | + } | ||
65 | + } else { | ||
66 | + resourceFetchLock.lock(); | ||
67 | + try { | ||
68 | + if (keys.contains(resourceKey)) { | ||
69 | + resource = resources.get(resourceKey); | ||
70 | + if (resource == null) { | ||
71 | + resource = resources.get(resourceKey.getSystemKey()); | ||
72 | + } | ||
73 | + } else { | ||
74 | + resource = fetchResource(resourceKey); | ||
75 | + keys.add(resourceKey); | ||
76 | + } | ||
77 | + } finally { | ||
78 | + resourceFetchLock.unlock(); | ||
79 | + } | ||
80 | + } | ||
81 | + | ||
82 | + return resource; | ||
83 | + } | ||
84 | + | ||
85 | + private Resource fetchResource(ResourceKey resourceKey) { | ||
86 | + UUID tenantId = resourceKey.getTenantId().getId(); | ||
87 | + TransportProtos.GetResourceRequestMsg.Builder builder = TransportProtos.GetResourceRequestMsg.newBuilder(); | ||
88 | + builder | ||
89 | + .setTenantIdLSB(tenantId.getLeastSignificantBits()) | ||
90 | + .setTenantIdMSB(tenantId.getMostSignificantBits()) | ||
91 | + .setResourceType(resourceKey.resourceType.name()) | ||
92 | + .setResourceId(resourceKey.resourceId); | ||
93 | + TransportProtos.GetResourceResponseMsg responseMsg = transportService.getResource(builder.build()); | ||
94 | + | ||
95 | + Optional<Resource> optionalResource = dataDecodingEncodingService.decode(responseMsg.getResource().toByteArray()); | ||
96 | + if (optionalResource.isPresent()) { | ||
97 | + Resource resource = optionalResource.get(); | ||
98 | + resources.put(new ResourceKey(resource.getTenantId(), resource.getResourceType(), resource.getResourceId()), resource); | ||
99 | + return resource; | ||
100 | + } | ||
101 | + | ||
102 | + return null; | ||
103 | + } | ||
104 | + | ||
105 | + @Override | ||
106 | + public void update(TenantId tenantId, ResourceType resourceType, String resourceId) { | ||
107 | + ResourceKey resourceKey = new ResourceKey(tenantId, resourceType, resourceId); | ||
108 | + if (keys.contains(resourceKey) || resources.containsKey(resourceKey)) { | ||
109 | + fetchResource(resourceKey); | ||
110 | + } | ||
111 | + } | ||
112 | + | ||
113 | + @Override | ||
114 | + public void evict(TenantId tenantId, ResourceType resourceType, String resourceId) { | ||
115 | + ResourceKey resourceKey = new ResourceKey(tenantId, resourceType, resourceId); | ||
116 | + keys.remove(resourceKey); | ||
117 | + resources.remove(resourceKey); | ||
118 | + } | ||
119 | + | ||
120 | + @Data | ||
121 | + private static class ResourceKey { | ||
122 | + private final TenantId tenantId; | ||
123 | + private final ResourceType resourceType; | ||
124 | + private final String resourceId; | ||
125 | + | ||
126 | + public ResourceKey getSystemKey() { | ||
127 | + return new ResourceKey(TenantId.SYS_TENANT_ID, resourceType, resourceId); | ||
128 | + } | ||
129 | + } | ||
130 | +} |
@@ -31,6 +31,7 @@ import org.thingsboard.server.common.data.Device; | @@ -31,6 +31,7 @@ import org.thingsboard.server.common.data.Device; | ||
31 | import org.thingsboard.server.common.data.DeviceProfile; | 31 | import org.thingsboard.server.common.data.DeviceProfile; |
32 | import org.thingsboard.server.common.data.DeviceTransportType; | 32 | import org.thingsboard.server.common.data.DeviceTransportType; |
33 | import org.thingsboard.server.common.data.EntityType; | 33 | import org.thingsboard.server.common.data.EntityType; |
34 | +import org.thingsboard.server.common.data.ResourceType; | ||
34 | import org.thingsboard.server.common.data.Tenant; | 35 | import org.thingsboard.server.common.data.Tenant; |
35 | import org.thingsboard.server.common.data.id.DeviceId; | 36 | import org.thingsboard.server.common.data.id.DeviceId; |
36 | import org.thingsboard.server.common.data.id.DeviceProfileId; | 37 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
@@ -49,6 +50,7 @@ import org.thingsboard.server.common.stats.StatsFactory; | @@ -49,6 +50,7 @@ import org.thingsboard.server.common.stats.StatsFactory; | ||
49 | import org.thingsboard.server.common.stats.StatsType; | 50 | import org.thingsboard.server.common.stats.StatsType; |
50 | import org.thingsboard.server.common.transport.SessionMsgListener; | 51 | import org.thingsboard.server.common.transport.SessionMsgListener; |
51 | import org.thingsboard.server.common.transport.TransportDeviceProfileCache; | 52 | import org.thingsboard.server.common.transport.TransportDeviceProfileCache; |
53 | +import org.thingsboard.server.common.transport.TransportResourceCache; | ||
52 | import org.thingsboard.server.common.transport.TransportService; | 54 | import org.thingsboard.server.common.transport.TransportService; |
53 | import org.thingsboard.server.common.transport.TransportServiceCallback; | 55 | import org.thingsboard.server.common.transport.TransportServiceCallback; |
54 | import org.thingsboard.server.common.transport.TransportTenantProfileCache; | 56 | import org.thingsboard.server.common.transport.TransportTenantProfileCache; |
@@ -130,6 +132,7 @@ public class DefaultTransportService implements TransportService { | @@ -130,6 +132,7 @@ public class DefaultTransportService implements TransportService { | ||
130 | private final TransportRateLimitService rateLimitService; | 132 | private final TransportRateLimitService rateLimitService; |
131 | private final DataDecodingEncodingService dataDecodingEncodingService; | 133 | private final DataDecodingEncodingService dataDecodingEncodingService; |
132 | private final SchedulerComponent scheduler; | 134 | private final SchedulerComponent scheduler; |
135 | + private final TransportResourceCache transportResourceCache; | ||
133 | 136 | ||
134 | protected TbQueueRequestTemplate<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> transportApiRequestTemplate; | 137 | protected TbQueueRequestTemplate<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> transportApiRequestTemplate; |
135 | protected TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> ruleEngineMsgProducer; | 138 | protected TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> ruleEngineMsgProducer; |
@@ -156,7 +159,7 @@ public class DefaultTransportService implements TransportService { | @@ -156,7 +159,7 @@ public class DefaultTransportService implements TransportService { | ||
156 | TransportDeviceProfileCache deviceProfileCache, | 159 | TransportDeviceProfileCache deviceProfileCache, |
157 | TransportTenantProfileCache tenantProfileCache, | 160 | TransportTenantProfileCache tenantProfileCache, |
158 | TbApiUsageClient apiUsageClient, TransportRateLimitService rateLimitService, | 161 | TbApiUsageClient apiUsageClient, TransportRateLimitService rateLimitService, |
159 | - DataDecodingEncodingService dataDecodingEncodingService, SchedulerComponent scheduler) { | 162 | + DataDecodingEncodingService dataDecodingEncodingService, SchedulerComponent scheduler, TransportResourceCache transportResourceCache) { |
160 | this.serviceInfoProvider = serviceInfoProvider; | 163 | this.serviceInfoProvider = serviceInfoProvider; |
161 | this.queueProvider = queueProvider; | 164 | this.queueProvider = queueProvider; |
162 | this.producerProvider = producerProvider; | 165 | this.producerProvider = producerProvider; |
@@ -168,6 +171,7 @@ public class DefaultTransportService implements TransportService { | @@ -168,6 +171,7 @@ public class DefaultTransportService implements TransportService { | ||
168 | this.rateLimitService = rateLimitService; | 171 | this.rateLimitService = rateLimitService; |
169 | this.dataDecodingEncodingService = dataDecodingEncodingService; | 172 | this.dataDecodingEncodingService = dataDecodingEncodingService; |
170 | this.scheduler = scheduler; | 173 | this.scheduler = scheduler; |
174 | + this.transportResourceCache = transportResourceCache; | ||
171 | } | 175 | } |
172 | 176 | ||
173 | @PostConstruct | 177 | @PostConstruct |
@@ -254,28 +258,18 @@ public class DefaultTransportService implements TransportService { | @@ -254,28 +258,18 @@ public class DefaultTransportService implements TransportService { | ||
254 | } | 258 | } |
255 | 259 | ||
256 | @Override | 260 | @Override |
257 | - public TransportProtos.GetResourcesResponseMsg getResources(TransportProtos.GetResourcesRequestMsg msg) { | 261 | + public TransportProtos.GetResourceResponseMsg getResource(TransportProtos.GetResourceRequestMsg msg) { |
258 | TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg> protoMsg = | 262 | TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg> protoMsg = |
259 | - new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setResourcesRequestMsg(msg).build()); | 263 | + new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setResourceRequestMsg(msg).build()); |
260 | try { | 264 | try { |
261 | TbProtoQueueMsg<TransportApiResponseMsg> response = transportApiRequestTemplate.send(protoMsg).get(); | 265 | TbProtoQueueMsg<TransportApiResponseMsg> response = transportApiRequestTemplate.send(protoMsg).get(); |
262 | - return response.getValue().getResourcesResponseMsg(); | 266 | + return response.getValue().getResourceResponseMsg(); |
263 | } catch (InterruptedException | ExecutionException e) { | 267 | } catch (InterruptedException | ExecutionException e) { |
264 | throw new RuntimeException(e); | 268 | throw new RuntimeException(e); |
265 | } | 269 | } |
266 | } | 270 | } |
267 | 271 | ||
268 | @Override | 272 | @Override |
269 | - public void process(TransportProtos.GetResourcesRequestMsg msg, TransportServiceCallback<TransportProtos.GetResourcesResponseMsg> callback) { | ||
270 | - log.trace("Processing msg: {}", msg); | ||
271 | - TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg> protoMsg = | ||
272 | - new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setResourcesRequestMsg(msg).build()); | ||
273 | - AsyncCallbackTemplate.withCallback(transportApiRequestTemplate.send(protoMsg), | ||
274 | - response -> callback.onSuccess(response.getValue().getResourcesResponseMsg()), callback::onError, transportCallbackExecutor); | ||
275 | - } | ||
276 | - | ||
277 | - | ||
278 | - @Override | ||
279 | public void process(DeviceTransportType transportType, TransportProtos.ValidateDeviceTokenRequestMsg msg, | 273 | public void process(DeviceTransportType transportType, TransportProtos.ValidateDeviceTokenRequestMsg msg, |
280 | TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) { | 274 | TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) { |
281 | log.trace("Processing msg: {}", msg); | 275 | log.trace("Processing msg: {}", msg); |
@@ -711,9 +705,17 @@ public class DefaultTransportService implements TransportService { | @@ -711,9 +705,17 @@ public class DefaultTransportService implements TransportService { | ||
711 | rateLimitService.remove(new DeviceId(entityUuid)); | 705 | rateLimitService.remove(new DeviceId(entityUuid)); |
712 | } | 706 | } |
713 | } else if (toSessionMsg.hasResourceUpdateMsg()) { | 707 | } else if (toSessionMsg.hasResourceUpdateMsg()) { |
714 | - //TODO: update resource cache | 708 | + TransportProtos.ResourceUpdateMsg msg = toSessionMsg.getResourceUpdateMsg(); |
709 | + TenantId tenantId = new TenantId(new UUID(msg.getTenantIdMSB(), msg.getTenantIdLSB())); | ||
710 | + ResourceType resourceType = ResourceType.valueOf(msg.getResourceType()); | ||
711 | + String resourceId = msg.getResourceId(); | ||
712 | + transportResourceCache.update(tenantId, resourceType, resourceId); | ||
715 | } else if (toSessionMsg.hasResourceDeleteMsg()) { | 713 | } else if (toSessionMsg.hasResourceDeleteMsg()) { |
716 | - //TODO: remove resource from cache | 714 | + TransportProtos.ResourceDeleteMsg msg = toSessionMsg.getResourceDeleteMsg(); |
715 | + TenantId tenantId = new TenantId(new UUID(msg.getTenantIdMSB(), msg.getTenantIdLSB())); | ||
716 | + ResourceType resourceType = ResourceType.valueOf(msg.getResourceType()); | ||
717 | + String resourceId = msg.getResourceId(); | ||
718 | + transportResourceCache.evict(tenantId, resourceType, resourceId); | ||
717 | } else { | 719 | } else { |
718 | //TODO: should we notify the device actor about missed session? | 720 | //TODO: should we notify the device actor about missed session? |
719 | log.debug("[{}] Missing session.", sessionId); | 721 | log.debug("[{}] Missing session.", sessionId); |
@@ -18,8 +18,6 @@ package org.thingsboard.server.common.transport.util; | @@ -18,8 +18,6 @@ package org.thingsboard.server.common.transport.util; | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | import org.nustaq.serialization.FSTConfiguration; | 19 | import org.nustaq.serialization.FSTConfiguration; |
20 | import org.springframework.stereotype.Service; | 20 | import org.springframework.stereotype.Service; |
21 | -import org.thingsboard.server.common.msg.TbActorMsg; | ||
22 | -import org.thingsboard.server.common.transport.util.DataDecodingEncodingService; | ||
23 | 21 | ||
24 | import java.util.Optional; | 22 | import java.util.Optional; |
25 | 23 | ||
@@ -33,8 +31,8 @@ public class ProtoWithFSTService implements DataDecodingEncodingService { | @@ -33,8 +31,8 @@ public class ProtoWithFSTService implements DataDecodingEncodingService { | ||
33 | public <T> Optional<T> decode(byte[] byteArray) { | 31 | public <T> Optional<T> decode(byte[] byteArray) { |
34 | try { | 32 | try { |
35 | @SuppressWarnings("unchecked") | 33 | @SuppressWarnings("unchecked") |
36 | - T msg = (T) config.asObject(byteArray); | ||
37 | - return Optional.of(msg); | 34 | + T msg = byteArray != null && byteArray.length > 0 ? (T) config.asObject(byteArray) : null; |
35 | + return Optional.ofNullable(msg); | ||
38 | } catch (IllegalArgumentException e) { | 36 | } catch (IllegalArgumentException e) { |
39 | log.error("Error during deserialization message, [{}]", e.getMessage()); | 37 | log.error("Error during deserialization message, [{}]", e.getMessage()); |
40 | return Optional.empty(); | 38 | return Optional.empty(); |
@@ -18,8 +18,7 @@ package org.thingsboard.server.dao.model.sql; | @@ -18,8 +18,7 @@ package org.thingsboard.server.dao.model.sql; | ||
18 | import lombok.AllArgsConstructor; | 18 | import lombok.AllArgsConstructor; |
19 | import lombok.Data; | 19 | import lombok.Data; |
20 | import lombok.NoArgsConstructor; | 20 | import lombok.NoArgsConstructor; |
21 | -import org.thingsboard.server.common.data.relation.EntityRelation; | ||
22 | -import org.thingsboard.server.common.data.transport.resource.Resource; | 21 | +import org.thingsboard.server.common.data.Resource; |
23 | 22 | ||
24 | import javax.persistence.Transient; | 23 | import javax.persistence.Transient; |
25 | import java.io.Serializable; | 24 | import java.io.Serializable; |
@@ -16,9 +16,9 @@ | @@ -16,9 +16,9 @@ | ||
16 | package org.thingsboard.server.dao.model.sql; | 16 | package org.thingsboard.server.dao.model.sql; |
17 | 17 | ||
18 | import lombok.Data; | 18 | import lombok.Data; |
19 | +import org.thingsboard.server.common.data.Resource; | ||
20 | +import org.thingsboard.server.common.data.ResourceType; | ||
19 | import org.thingsboard.server.common.data.id.TenantId; | 21 | import org.thingsboard.server.common.data.id.TenantId; |
20 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
21 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | ||
22 | import org.thingsboard.server.dao.model.ToData; | 22 | import org.thingsboard.server.dao.model.ToData; |
23 | 23 | ||
24 | import javax.persistence.Column; | 24 | import javax.persistence.Column; |
@@ -17,9 +17,11 @@ package org.thingsboard.server.dao.resource; | @@ -17,9 +17,11 @@ package org.thingsboard.server.dao.resource; | ||
17 | 17 | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | import org.springframework.stereotype.Service; | 19 | import org.springframework.stereotype.Service; |
20 | +import org.thingsboard.server.common.data.Resource; | ||
21 | +import org.thingsboard.server.common.data.ResourceType; | ||
20 | import org.thingsboard.server.common.data.id.TenantId; | 22 | import org.thingsboard.server.common.data.id.TenantId; |
21 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
22 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | 23 | +import org.thingsboard.server.common.data.page.PageData; |
24 | +import org.thingsboard.server.common.data.page.PageLink; | ||
23 | import org.thingsboard.server.dao.exception.DataValidationException; | 25 | import org.thingsboard.server.dao.exception.DataValidationException; |
24 | 26 | ||
25 | import java.util.List; | 27 | import java.util.List; |
@@ -59,12 +61,13 @@ public class BaseResourceService implements ResourceService { | @@ -59,12 +61,13 @@ public class BaseResourceService implements ResourceService { | ||
59 | } | 61 | } |
60 | 62 | ||
61 | @Override | 63 | @Override |
62 | - public List<Resource> findResourcesByTenantId(TenantId tenantId) { | 64 | + public PageData<Resource> findResourcesByTenantId(TenantId tenantId, PageLink pageLink) { |
63 | log.trace("Executing findByTenantId [{}]", tenantId); | 65 | log.trace("Executing findByTenantId [{}]", tenantId); |
64 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | 66 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); |
65 | - return resourceDao.findAllByTenantId(tenantId); | 67 | + return resourceDao.findAllByTenantId(tenantId, pageLink); |
66 | } | 68 | } |
67 | 69 | ||
70 | + | ||
68 | @Override | 71 | @Override |
69 | public List<Resource> findResourcesByTenantIdResourceType(TenantId tenantId, ResourceType resourceType) { | 72 | public List<Resource> findResourcesByTenantIdResourceType(TenantId tenantId, ResourceType resourceType) { |
70 | log.trace("Executing findByTenantId [{}]", tenantId); | 73 | log.trace("Executing findByTenantId [{}]", tenantId); |
@@ -15,9 +15,11 @@ | @@ -15,9 +15,11 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.resource; | 16 | package org.thingsboard.server.dao.resource; |
17 | 17 | ||
18 | +import org.thingsboard.server.common.data.Resource; | ||
19 | +import org.thingsboard.server.common.data.ResourceType; | ||
18 | import org.thingsboard.server.common.data.id.TenantId; | 20 | import org.thingsboard.server.common.data.id.TenantId; |
19 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
20 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | 21 | +import org.thingsboard.server.common.data.page.PageData; |
22 | +import org.thingsboard.server.common.data.page.PageLink; | ||
21 | 23 | ||
22 | import java.util.List; | 24 | import java.util.List; |
23 | 25 | ||
@@ -29,7 +31,8 @@ public interface ResourceDao { | @@ -29,7 +31,8 @@ public interface ResourceDao { | ||
29 | 31 | ||
30 | void deleteResource(TenantId tenantId, ResourceType resourceType, String resourceId); | 32 | void deleteResource(TenantId tenantId, ResourceType resourceType, String resourceId); |
31 | 33 | ||
32 | - List<Resource> findAllByTenantId(TenantId tenantId); | 34 | + PageData<Resource> findAllByTenantId(TenantId tenantId, PageLink pageLink); |
35 | + | ||
33 | 36 | ||
34 | List<Resource> findAllByTenantIdResourceType(TenantId tenantId, ResourceType resourceType); | 37 | List<Resource> findAllByTenantIdResourceType(TenantId tenantId, ResourceType resourceType); |
35 | 38 |
@@ -18,9 +18,11 @@ package org.thingsboard.server.dao.sql.resource; | @@ -18,9 +18,11 @@ package org.thingsboard.server.dao.sql.resource; | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | import org.springframework.stereotype.Component; | 19 | import org.springframework.stereotype.Component; |
20 | import org.springframework.transaction.annotation.Transactional; | 20 | import org.springframework.transaction.annotation.Transactional; |
21 | +import org.thingsboard.server.common.data.Resource; | ||
22 | +import org.thingsboard.server.common.data.ResourceType; | ||
21 | import org.thingsboard.server.common.data.id.TenantId; | 23 | import org.thingsboard.server.common.data.id.TenantId; |
22 | -import org.thingsboard.server.common.data.transport.resource.Resource; | ||
23 | -import org.thingsboard.server.common.data.transport.resource.ResourceType; | 24 | +import org.thingsboard.server.common.data.page.PageData; |
25 | +import org.thingsboard.server.common.data.page.PageLink; | ||
24 | import org.thingsboard.server.dao.DaoUtil; | 26 | import org.thingsboard.server.dao.DaoUtil; |
25 | import org.thingsboard.server.dao.model.sql.ResourceCompositeKey; | 27 | import org.thingsboard.server.dao.model.sql.ResourceCompositeKey; |
26 | import org.thingsboard.server.dao.model.sql.ResourceEntity; | 28 | import org.thingsboard.server.dao.model.sql.ResourceEntity; |
@@ -66,8 +68,8 @@ public class ResourceDaoImpl implements ResourceDao { | @@ -66,8 +68,8 @@ public class ResourceDaoImpl implements ResourceDao { | ||
66 | } | 68 | } |
67 | 69 | ||
68 | @Override | 70 | @Override |
69 | - public List<Resource> findAllByTenantId(TenantId tenantId) { | ||
70 | - return DaoUtil.convertDataList(resourceRepository.findAllByTenantId(tenantId.getId())); | 71 | + public PageData<Resource> findAllByTenantId(TenantId tenantId, PageLink pageLink) { |
72 | + return DaoUtil.toPageData(resourceRepository.findAllByTenantId(tenantId.getId(), DaoUtil.toPageable(pageLink))); | ||
71 | } | 73 | } |
72 | 74 | ||
73 | @Override | 75 | @Override |
@@ -15,6 +15,8 @@ | @@ -15,6 +15,8 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.resource; | 16 | package org.thingsboard.server.dao.sql.resource; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Page; | ||
19 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
19 | import org.thingsboard.server.dao.model.sql.ResourceCompositeKey; | 21 | import org.thingsboard.server.dao.model.sql.ResourceCompositeKey; |
20 | import org.thingsboard.server.dao.model.sql.ResourceEntity; | 22 | import org.thingsboard.server.dao.model.sql.ResourceEntity; |
@@ -24,7 +26,8 @@ import java.util.UUID; | @@ -24,7 +26,8 @@ import java.util.UUID; | ||
24 | 26 | ||
25 | public interface ResourceRepository extends CrudRepository<ResourceEntity, ResourceCompositeKey> { | 27 | public interface ResourceRepository extends CrudRepository<ResourceEntity, ResourceCompositeKey> { |
26 | 28 | ||
27 | - List<ResourceEntity> findAllByTenantId(UUID tenantId); | 29 | + Page<ResourceEntity> findAllByTenantId(UUID tenantId, Pageable pageable); |
30 | + | ||
28 | 31 | ||
29 | List<ResourceEntity> findAllByTenantIdAndResourceType(UUID tenantId, String resourceType); | 32 | List<ResourceEntity> findAllByTenantIdAndResourceType(UUID tenantId, String resourceType); |
30 | 33 |