Commit 7ff599f7c40b15202137dcc5def2e286f0bad9cd
1 parent
680cd1d2
Introduct AssetInfo and EntityViewInfo dtos
Showing
29 changed files
with
1119 additions
and
246 deletions
@@ -30,6 +30,7 @@ import org.thingsboard.server.common.data.Customer; | @@ -30,6 +30,7 @@ import org.thingsboard.server.common.data.Customer; | ||
30 | import org.thingsboard.server.common.data.EntitySubtype; | 30 | import org.thingsboard.server.common.data.EntitySubtype; |
31 | import org.thingsboard.server.common.data.EntityType; | 31 | import org.thingsboard.server.common.data.EntityType; |
32 | import org.thingsboard.server.common.data.asset.Asset; | 32 | import org.thingsboard.server.common.data.asset.Asset; |
33 | +import org.thingsboard.server.common.data.asset.AssetInfo; | ||
33 | import org.thingsboard.server.common.data.asset.AssetSearchQuery; | 34 | import org.thingsboard.server.common.data.asset.AssetSearchQuery; |
34 | import org.thingsboard.server.common.data.audit.ActionType; | 35 | import org.thingsboard.server.common.data.audit.ActionType; |
35 | import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; | 36 | import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; |
@@ -70,6 +71,19 @@ public class AssetController extends BaseController { | @@ -70,6 +71,19 @@ public class AssetController extends BaseController { | ||
70 | } | 71 | } |
71 | 72 | ||
72 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | 73 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
74 | + @RequestMapping(value = "/asset/info/{assetId}", method = RequestMethod.GET) | ||
75 | + @ResponseBody | ||
76 | + public AssetInfo getAssetInfoById(@PathVariable(ASSET_ID) String strAssetId) throws ThingsboardException { | ||
77 | + checkParameter(ASSET_ID, strAssetId); | ||
78 | + try { | ||
79 | + AssetId assetId = new AssetId(toUUID(strAssetId)); | ||
80 | + return checkAssetInfoId(assetId, Operation.READ); | ||
81 | + } catch (Exception e) { | ||
82 | + throw handleException(e); | ||
83 | + } | ||
84 | + } | ||
85 | + | ||
86 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | ||
73 | @RequestMapping(value = "/asset", method = RequestMethod.POST) | 87 | @RequestMapping(value = "/asset", method = RequestMethod.POST) |
74 | @ResponseBody | 88 | @ResponseBody |
75 | public Asset saveAsset(@RequestBody Asset asset) throws ThingsboardException { | 89 | public Asset saveAsset(@RequestBody Asset asset) throws ThingsboardException { |
@@ -230,6 +244,29 @@ public class AssetController extends BaseController { | @@ -230,6 +244,29 @@ public class AssetController extends BaseController { | ||
230 | } | 244 | } |
231 | 245 | ||
232 | @PreAuthorize("hasAuthority('TENANT_ADMIN')") | 246 | @PreAuthorize("hasAuthority('TENANT_ADMIN')") |
247 | + @RequestMapping(value = "/tenant/assetInfos", params = {"pageSize", "page"}, method = RequestMethod.GET) | ||
248 | + @ResponseBody | ||
249 | + public PageData<AssetInfo> getTenantAssetInfos( | ||
250 | + @RequestParam int pageSize, | ||
251 | + @RequestParam int page, | ||
252 | + @RequestParam(required = false) String type, | ||
253 | + @RequestParam(required = false) String textSearch, | ||
254 | + @RequestParam(required = false) String sortProperty, | ||
255 | + @RequestParam(required = false) String sortOrder) throws ThingsboardException { | ||
256 | + try { | ||
257 | + TenantId tenantId = getCurrentUser().getTenantId(); | ||
258 | + PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); | ||
259 | + if (type != null && type.trim().length() > 0) { | ||
260 | + return checkNotNull(assetService.findAssetInfosByTenantIdAndType(tenantId, type, pageLink)); | ||
261 | + } else { | ||
262 | + return checkNotNull(assetService.findAssetInfosByTenantId(tenantId, pageLink)); | ||
263 | + } | ||
264 | + } catch (Exception e) { | ||
265 | + throw handleException(e); | ||
266 | + } | ||
267 | + } | ||
268 | + | ||
269 | + @PreAuthorize("hasAuthority('TENANT_ADMIN')") | ||
233 | @RequestMapping(value = "/tenant/assets", params = {"assetName"}, method = RequestMethod.GET) | 270 | @RequestMapping(value = "/tenant/assets", params = {"assetName"}, method = RequestMethod.GET) |
234 | @ResponseBody | 271 | @ResponseBody |
235 | public Asset getTenantAsset( | 272 | public Asset getTenantAsset( |
@@ -270,6 +307,33 @@ public class AssetController extends BaseController { | @@ -270,6 +307,33 @@ public class AssetController extends BaseController { | ||
270 | } | 307 | } |
271 | 308 | ||
272 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | 309 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
310 | + @RequestMapping(value = "/customer/{customerId}/assetInfos", params = {"pageSize", "page"}, method = RequestMethod.GET) | ||
311 | + @ResponseBody | ||
312 | + public PageData<AssetInfo> getCustomerAssetInfos( | ||
313 | + @PathVariable("customerId") String strCustomerId, | ||
314 | + @RequestParam int pageSize, | ||
315 | + @RequestParam int page, | ||
316 | + @RequestParam(required = false) String type, | ||
317 | + @RequestParam(required = false) String textSearch, | ||
318 | + @RequestParam(required = false) String sortProperty, | ||
319 | + @RequestParam(required = false) String sortOrder) throws ThingsboardException { | ||
320 | + checkParameter("customerId", strCustomerId); | ||
321 | + try { | ||
322 | + TenantId tenantId = getCurrentUser().getTenantId(); | ||
323 | + CustomerId customerId = new CustomerId(toUUID(strCustomerId)); | ||
324 | + checkCustomerId(customerId, Operation.READ); | ||
325 | + PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); | ||
326 | + if (type != null && type.trim().length() > 0) { | ||
327 | + return checkNotNull(assetService.findAssetInfosByTenantIdAndCustomerIdAndType(tenantId, customerId, type, pageLink)); | ||
328 | + } else { | ||
329 | + return checkNotNull(assetService.findAssetInfosByTenantIdAndCustomerId(tenantId, customerId, pageLink)); | ||
330 | + } | ||
331 | + } catch (Exception e) { | ||
332 | + throw handleException(e); | ||
333 | + } | ||
334 | + } | ||
335 | + | ||
336 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | ||
273 | @RequestMapping(value = "/assets", params = {"assetIds"}, method = RequestMethod.GET) | 337 | @RequestMapping(value = "/assets", params = {"assetIds"}, method = RequestMethod.GET) |
274 | @ResponseBody | 338 | @ResponseBody |
275 | public List<Asset> getAssetsByIds( | 339 | public List<Asset> getAssetsByIds( |
@@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.alarm.Alarm; | @@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.alarm.Alarm; | ||
33 | import org.thingsboard.server.common.data.alarm.AlarmId; | 33 | import org.thingsboard.server.common.data.alarm.AlarmId; |
34 | import org.thingsboard.server.common.data.alarm.AlarmInfo; | 34 | import org.thingsboard.server.common.data.alarm.AlarmInfo; |
35 | import org.thingsboard.server.common.data.asset.Asset; | 35 | import org.thingsboard.server.common.data.asset.Asset; |
36 | +import org.thingsboard.server.common.data.asset.AssetInfo; | ||
36 | import org.thingsboard.server.common.data.audit.ActionType; | 37 | import org.thingsboard.server.common.data.audit.ActionType; |
37 | import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; | 38 | import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; |
38 | import org.thingsboard.server.common.data.exception.ThingsboardException; | 39 | import org.thingsboard.server.common.data.exception.ThingsboardException; |
@@ -396,6 +397,18 @@ public abstract class BaseController { | @@ -396,6 +397,18 @@ public abstract class BaseController { | ||
396 | } | 397 | } |
397 | } | 398 | } |
398 | 399 | ||
400 | + EntityViewInfo checkEntityViewInfoId(EntityViewId entityViewId, Operation operation) throws ThingsboardException { | ||
401 | + try { | ||
402 | + validateId(entityViewId, "Incorrect entityViewId " + entityViewId); | ||
403 | + EntityViewInfo entityView = entityViewService.findEntityViewInfoById(getCurrentUser().getTenantId(), entityViewId); | ||
404 | + checkNotNull(entityView); | ||
405 | + accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, entityViewId, entityView); | ||
406 | + return entityView; | ||
407 | + } catch (Exception e) { | ||
408 | + throw handleException(e, false); | ||
409 | + } | ||
410 | + } | ||
411 | + | ||
399 | Asset checkAssetId(AssetId assetId, Operation operation) throws ThingsboardException { | 412 | Asset checkAssetId(AssetId assetId, Operation operation) throws ThingsboardException { |
400 | try { | 413 | try { |
401 | validateId(assetId, "Incorrect assetId " + assetId); | 414 | validateId(assetId, "Incorrect assetId " + assetId); |
@@ -408,6 +421,18 @@ public abstract class BaseController { | @@ -408,6 +421,18 @@ public abstract class BaseController { | ||
408 | } | 421 | } |
409 | } | 422 | } |
410 | 423 | ||
424 | + AssetInfo checkAssetInfoId(AssetId assetId, Operation operation) throws ThingsboardException { | ||
425 | + try { | ||
426 | + validateId(assetId, "Incorrect assetId " + assetId); | ||
427 | + AssetInfo asset = assetService.findAssetInfoById(getCurrentUser().getTenantId(), assetId); | ||
428 | + checkNotNull(asset); | ||
429 | + accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, assetId, asset); | ||
430 | + return asset; | ||
431 | + } catch (Exception e) { | ||
432 | + throw handleException(e, false); | ||
433 | + } | ||
434 | + } | ||
435 | + | ||
411 | Alarm checkAlarmId(AlarmId alarmId, Operation operation) throws ThingsboardException { | 436 | Alarm checkAlarmId(AlarmId alarmId, Operation operation) throws ThingsboardException { |
412 | try { | 437 | try { |
413 | validateId(alarmId, "Incorrect alarmId " + alarmId); | 438 | validateId(alarmId, "Incorrect alarmId " + alarmId); |
@@ -29,11 +29,7 @@ import org.springframework.web.bind.annotation.RequestParam; | @@ -29,11 +29,7 @@ import org.springframework.web.bind.annotation.RequestParam; | ||
29 | import org.springframework.web.bind.annotation.ResponseBody; | 29 | import org.springframework.web.bind.annotation.ResponseBody; |
30 | import org.springframework.web.bind.annotation.ResponseStatus; | 30 | import org.springframework.web.bind.annotation.ResponseStatus; |
31 | import org.springframework.web.bind.annotation.RestController; | 31 | import org.springframework.web.bind.annotation.RestController; |
32 | -import org.thingsboard.server.common.data.Customer; | ||
33 | -import org.thingsboard.server.common.data.DataConstants; | ||
34 | -import org.thingsboard.server.common.data.EntitySubtype; | ||
35 | -import org.thingsboard.server.common.data.EntityType; | ||
36 | -import org.thingsboard.server.common.data.EntityView; | 32 | +import org.thingsboard.server.common.data.*; |
37 | import org.thingsboard.server.common.data.audit.ActionType; | 33 | import org.thingsboard.server.common.data.audit.ActionType; |
38 | import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery; | 34 | import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery; |
39 | import org.thingsboard.server.common.data.exception.ThingsboardException; | 35 | import org.thingsboard.server.common.data.exception.ThingsboardException; |
@@ -83,6 +79,19 @@ public class EntityViewController extends BaseController { | @@ -83,6 +79,19 @@ public class EntityViewController extends BaseController { | ||
83 | } | 79 | } |
84 | 80 | ||
85 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | 81 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
82 | + @RequestMapping(value = "/entityView/info/{entityViewId}", method = RequestMethod.GET) | ||
83 | + @ResponseBody | ||
84 | + public EntityViewInfo getEntityViewInfoById(@PathVariable(ENTITY_VIEW_ID) String strEntityViewId) throws ThingsboardException { | ||
85 | + checkParameter(ENTITY_VIEW_ID, strEntityViewId); | ||
86 | + try { | ||
87 | + EntityViewId entityViewId = new EntityViewId(toUUID(strEntityViewId)); | ||
88 | + return checkEntityViewInfoId(entityViewId, Operation.READ); | ||
89 | + } catch (Exception e) { | ||
90 | + throw handleException(e); | ||
91 | + } | ||
92 | + } | ||
93 | + | ||
94 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | ||
86 | @RequestMapping(value = "/entityView", method = RequestMethod.POST) | 95 | @RequestMapping(value = "/entityView", method = RequestMethod.POST) |
87 | @ResponseBody | 96 | @ResponseBody |
88 | public EntityView saveEntityView(@RequestBody EntityView entityView) throws ThingsboardException { | 97 | public EntityView saveEntityView(@RequestBody EntityView entityView) throws ThingsboardException { |
@@ -282,6 +291,33 @@ public class EntityViewController extends BaseController { | @@ -282,6 +291,33 @@ public class EntityViewController extends BaseController { | ||
282 | } | 291 | } |
283 | } | 292 | } |
284 | 293 | ||
294 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | ||
295 | + @RequestMapping(value = "/customer/{customerId}/entityViewInfos", params = {"pageSize", "page"}, method = RequestMethod.GET) | ||
296 | + @ResponseBody | ||
297 | + public PageData<EntityViewInfo> getCustomerEntityViewInfos( | ||
298 | + @PathVariable("customerId") String strCustomerId, | ||
299 | + @RequestParam int pageSize, | ||
300 | + @RequestParam int page, | ||
301 | + @RequestParam(required = false) String type, | ||
302 | + @RequestParam(required = false) String textSearch, | ||
303 | + @RequestParam(required = false) String sortProperty, | ||
304 | + @RequestParam(required = false) String sortOrder) throws ThingsboardException { | ||
305 | + checkParameter("customerId", strCustomerId); | ||
306 | + try { | ||
307 | + TenantId tenantId = getCurrentUser().getTenantId(); | ||
308 | + CustomerId customerId = new CustomerId(toUUID(strCustomerId)); | ||
309 | + checkCustomerId(customerId, Operation.READ); | ||
310 | + PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); | ||
311 | + if (type != null && type.trim().length() > 0) { | ||
312 | + return checkNotNull(entityViewService.findEntityViewInfosByTenantIdAndCustomerIdAndType(tenantId, customerId, type, pageLink)); | ||
313 | + } else { | ||
314 | + return checkNotNull(entityViewService.findEntityViewInfosByTenantIdAndCustomerId(tenantId, customerId, pageLink)); | ||
315 | + } | ||
316 | + } catch (Exception e) { | ||
317 | + throw handleException(e); | ||
318 | + } | ||
319 | + } | ||
320 | + | ||
285 | @PreAuthorize("hasAuthority('TENANT_ADMIN')") | 321 | @PreAuthorize("hasAuthority('TENANT_ADMIN')") |
286 | @RequestMapping(value = "/tenant/entityViews", params = {"pageSize", "page"}, method = RequestMethod.GET) | 322 | @RequestMapping(value = "/tenant/entityViews", params = {"pageSize", "page"}, method = RequestMethod.GET) |
287 | @ResponseBody | 323 | @ResponseBody |
@@ -306,6 +342,29 @@ public class EntityViewController extends BaseController { | @@ -306,6 +342,29 @@ public class EntityViewController extends BaseController { | ||
306 | } | 342 | } |
307 | } | 343 | } |
308 | 344 | ||
345 | + @PreAuthorize("hasAuthority('TENANT_ADMIN')") | ||
346 | + @RequestMapping(value = "/tenant/entityViewInfos", params = {"pageSize", "page"}, method = RequestMethod.GET) | ||
347 | + @ResponseBody | ||
348 | + public PageData<EntityViewInfo> getTenantEntityViewInfos( | ||
349 | + @RequestParam int pageSize, | ||
350 | + @RequestParam int page, | ||
351 | + @RequestParam(required = false) String type, | ||
352 | + @RequestParam(required = false) String textSearch, | ||
353 | + @RequestParam(required = false) String sortProperty, | ||
354 | + @RequestParam(required = false) String sortOrder) throws ThingsboardException { | ||
355 | + try { | ||
356 | + TenantId tenantId = getCurrentUser().getTenantId(); | ||
357 | + PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); | ||
358 | + if (type != null && type.trim().length() > 0) { | ||
359 | + return checkNotNull(entityViewService.findEntityViewInfosByTenantIdAndType(tenantId, type, pageLink)); | ||
360 | + } else { | ||
361 | + return checkNotNull(entityViewService.findEntityViewInfosByTenantId(tenantId, pageLink)); | ||
362 | + } | ||
363 | + } catch (Exception e) { | ||
364 | + throw handleException(e); | ||
365 | + } | ||
366 | + } | ||
367 | + | ||
309 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | 368 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
310 | @RequestMapping(value = "/entityViews", method = RequestMethod.POST) | 369 | @RequestMapping(value = "/entityViews", method = RequestMethod.POST) |
311 | @ResponseBody | 370 | @ResponseBody |
@@ -308,6 +308,7 @@ spring.resources.chain: | @@ -308,6 +308,7 @@ spring.resources.chain: | ||
308 | enabled: "true" | 308 | enabled: "true" |
309 | 309 | ||
310 | spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation: "true" | 310 | spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation: "true" |
311 | +spring.jpa.properties.hibernate.order_by.default_null_ordering: "last" | ||
311 | 312 | ||
312 | # SQL DAO Configuration | 313 | # SQL DAO Configuration |
313 | spring: | 314 | spring: |
@@ -25,11 +25,7 @@ import org.junit.After; | @@ -25,11 +25,7 @@ import org.junit.After; | ||
25 | import org.junit.Assert; | 25 | import org.junit.Assert; |
26 | import org.junit.Before; | 26 | import org.junit.Before; |
27 | import org.junit.Test; | 27 | import org.junit.Test; |
28 | -import org.thingsboard.server.common.data.Customer; | ||
29 | -import org.thingsboard.server.common.data.Device; | ||
30 | -import org.thingsboard.server.common.data.EntityView; | ||
31 | -import org.thingsboard.server.common.data.Tenant; | ||
32 | -import org.thingsboard.server.common.data.User; | 28 | +import org.thingsboard.server.common.data.*; |
33 | import org.thingsboard.server.common.data.id.CustomerId; | 29 | import org.thingsboard.server.common.data.id.CustomerId; |
34 | import org.thingsboard.server.common.data.objects.AttributesEntityView; | 30 | import org.thingsboard.server.common.data.objects.AttributesEntityView; |
35 | import org.thingsboard.server.common.data.objects.TelemetryEntityView; | 31 | import org.thingsboard.server.common.data.objects.TelemetryEntityView; |
@@ -214,16 +210,20 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes | @@ -214,16 +210,20 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes | ||
214 | 210 | ||
215 | @Test | 211 | @Test |
216 | public void testGetCustomerEntityViews() throws Exception { | 212 | public void testGetCustomerEntityViews() throws Exception { |
217 | - CustomerId customerId = doPost("/api/customer", getNewCustomer("Test customer"), Customer.class).getId(); | ||
218 | - String urlTemplate = "/api/customer/" + customerId.getId().toString() + "/entityViews?"; | 213 | + Customer customer = doPost("/api/customer", getNewCustomer("Test customer"), Customer.class); |
214 | + CustomerId customerId = customer.getId(); | ||
215 | + String urlTemplate = "/api/customer/" + customerId.getId().toString() + "/entityViewInfos?"; | ||
219 | 216 | ||
220 | - List<EntityView> views = new ArrayList<>(); | 217 | + List<EntityViewInfo> views = new ArrayList<>(); |
221 | for (int i = 0; i < 128; i++) { | 218 | for (int i = 0; i < 128; i++) { |
222 | - views.add(doPost("/api/customer/" + customerId.getId().toString() + "/entityView/" | ||
223 | - + getNewSavedEntityView("Test entity view " + i).getId().getId().toString(), EntityView.class)); | 219 | + views.add( |
220 | + new EntityViewInfo(doPost("/api/customer/" + customerId.getId().toString() + "/entityView/" | ||
221 | + + getNewSavedEntityView("Test entity view " + i).getId().getId().toString(), EntityView.class), | ||
222 | + customer.getTitle(), customer.isPublic()) | ||
223 | + ); | ||
224 | } | 224 | } |
225 | 225 | ||
226 | - List<EntityView> loadedViews = loadListOf(new PageLink(23), urlTemplate); | 226 | + List<EntityViewInfo> loadedViews = loadListOfInfo(new PageLink(23), urlTemplate); |
227 | 227 | ||
228 | Collections.sort(views, idComparator); | 228 | Collections.sort(views, idComparator); |
229 | Collections.sort(loadedViews, idComparator); | 229 | Collections.sort(loadedViews, idComparator); |
@@ -274,11 +274,11 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes | @@ -274,11 +274,11 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes | ||
274 | @Test | 274 | @Test |
275 | public void testGetTenantEntityViews() throws Exception { | 275 | public void testGetTenantEntityViews() throws Exception { |
276 | 276 | ||
277 | - List<EntityView> views = new ArrayList<>(); | 277 | + List<EntityViewInfo> views = new ArrayList<>(); |
278 | for (int i = 0; i < 178; i++) { | 278 | for (int i = 0; i < 178; i++) { |
279 | - views.add(getNewSavedEntityView("Test entity view" + i)); | 279 | + views.add(new EntityViewInfo(getNewSavedEntityView("Test entity view" + i), null, false)); |
280 | } | 280 | } |
281 | - List<EntityView> loadedViews = loadListOf(new PageLink(23), "/api/tenant/entityViews?"); | 281 | + List<EntityViewInfo> loadedViews = loadListOfInfo(new PageLink(23), "/api/tenant/entityViewInfos?"); |
282 | 282 | ||
283 | Collections.sort(views, idComparator); | 283 | Collections.sort(views, idComparator); |
284 | Collections.sort(loadedViews, idComparator); | 284 | Collections.sort(loadedViews, idComparator); |
@@ -530,4 +530,19 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes | @@ -530,4 +530,19 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes | ||
530 | 530 | ||
531 | return loadedItems; | 531 | return loadedItems; |
532 | } | 532 | } |
533 | + | ||
534 | + private List<EntityViewInfo> loadListOfInfo(PageLink pageLink, String urlTemplate) throws Exception { | ||
535 | + List<EntityViewInfo> loadedItems = new ArrayList<>(); | ||
536 | + PageData<EntityViewInfo> pageData; | ||
537 | + do { | ||
538 | + pageData = doGetTypedWithPageLink(urlTemplate, new TypeReference<PageData<EntityViewInfo>>() { | ||
539 | + }, pageLink); | ||
540 | + loadedItems.addAll(pageData.getData()); | ||
541 | + if (pageData.hasNext()) { | ||
542 | + pageLink = pageLink.nextPageLink(); | ||
543 | + } | ||
544 | + } while (pageData.hasNext()); | ||
545 | + | ||
546 | + return loadedItems; | ||
547 | + } | ||
533 | } | 548 | } |
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.asset; | @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.asset; | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | import org.thingsboard.server.common.data.EntitySubtype; | 19 | import org.thingsboard.server.common.data.EntitySubtype; |
20 | import org.thingsboard.server.common.data.asset.Asset; | 20 | import org.thingsboard.server.common.data.asset.Asset; |
21 | +import org.thingsboard.server.common.data.asset.AssetInfo; | ||
21 | import org.thingsboard.server.common.data.asset.AssetSearchQuery; | 22 | import org.thingsboard.server.common.data.asset.AssetSearchQuery; |
22 | import org.thingsboard.server.common.data.id.AssetId; | 23 | import org.thingsboard.server.common.data.id.AssetId; |
23 | import org.thingsboard.server.common.data.id.CustomerId; | 24 | import org.thingsboard.server.common.data.id.CustomerId; |
@@ -30,6 +31,8 @@ import java.util.Optional; | @@ -30,6 +31,8 @@ import java.util.Optional; | ||
30 | 31 | ||
31 | public interface AssetService { | 32 | public interface AssetService { |
32 | 33 | ||
34 | + AssetInfo findAssetInfoById(TenantId tenantId, AssetId assetId); | ||
35 | + | ||
33 | Asset findAssetById(TenantId tenantId, AssetId assetId); | 36 | Asset findAssetById(TenantId tenantId, AssetId assetId); |
34 | 37 | ||
35 | ListenableFuture<Asset> findAssetByIdAsync(TenantId tenantId, AssetId assetId); | 38 | ListenableFuture<Asset> findAssetByIdAsync(TenantId tenantId, AssetId assetId); |
@@ -46,16 +49,24 @@ public interface AssetService { | @@ -46,16 +49,24 @@ public interface AssetService { | ||
46 | 49 | ||
47 | PageData<Asset> findAssetsByTenantId(TenantId tenantId, PageLink pageLink); | 50 | PageData<Asset> findAssetsByTenantId(TenantId tenantId, PageLink pageLink); |
48 | 51 | ||
52 | + PageData<AssetInfo> findAssetInfosByTenantId(TenantId tenantId, PageLink pageLink); | ||
53 | + | ||
49 | PageData<Asset> findAssetsByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink); | 54 | PageData<Asset> findAssetsByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink); |
50 | 55 | ||
56 | + PageData<AssetInfo> findAssetInfosByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink); | ||
57 | + | ||
51 | ListenableFuture<List<Asset>> findAssetsByTenantIdAndIdsAsync(TenantId tenantId, List<AssetId> assetIds); | 58 | ListenableFuture<List<Asset>> findAssetsByTenantIdAndIdsAsync(TenantId tenantId, List<AssetId> assetIds); |
52 | 59 | ||
53 | void deleteAssetsByTenantId(TenantId tenantId); | 60 | void deleteAssetsByTenantId(TenantId tenantId); |
54 | 61 | ||
55 | PageData<Asset> findAssetsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, PageLink pageLink); | 62 | PageData<Asset> findAssetsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, PageLink pageLink); |
56 | 63 | ||
64 | + PageData<AssetInfo> findAssetInfosByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, PageLink pageLink); | ||
65 | + | ||
57 | PageData<Asset> findAssetsByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, String type, PageLink pageLink); | 66 | PageData<Asset> findAssetsByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, String type, PageLink pageLink); |
58 | 67 | ||
68 | + PageData<AssetInfo> findAssetInfosByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, String type, PageLink pageLink); | ||
69 | + | ||
59 | ListenableFuture<List<Asset>> findAssetsByTenantIdCustomerIdAndIdsAsync(TenantId tenantId, CustomerId customerId, List<AssetId> assetIds); | 70 | ListenableFuture<List<Asset>> findAssetsByTenantIdCustomerIdAndIdsAsync(TenantId tenantId, CustomerId customerId, List<AssetId> assetIds); |
60 | 71 | ||
61 | void unassignCustomerAssets(TenantId tenantId, CustomerId customerId); | 72 | void unassignCustomerAssets(TenantId tenantId, CustomerId customerId); |
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.entityview; | @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.entityview; | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | import org.thingsboard.server.common.data.EntitySubtype; | 19 | import org.thingsboard.server.common.data.EntitySubtype; |
20 | import org.thingsboard.server.common.data.EntityView; | 20 | import org.thingsboard.server.common.data.EntityView; |
21 | +import org.thingsboard.server.common.data.EntityViewInfo; | ||
21 | import org.thingsboard.server.common.data.Tenant; | 22 | import org.thingsboard.server.common.data.Tenant; |
22 | import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery; | 23 | import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery; |
23 | import org.thingsboard.server.common.data.id.CustomerId; | 24 | import org.thingsboard.server.common.data.id.CustomerId; |
@@ -42,18 +43,28 @@ public interface EntityViewService { | @@ -42,18 +43,28 @@ public interface EntityViewService { | ||
42 | 43 | ||
43 | void unassignCustomerEntityViews(TenantId tenantId, CustomerId customerId); | 44 | void unassignCustomerEntityViews(TenantId tenantId, CustomerId customerId); |
44 | 45 | ||
46 | + EntityViewInfo findEntityViewInfoById(TenantId tenantId, EntityViewId entityViewId); | ||
47 | + | ||
45 | EntityView findEntityViewById(TenantId tenantId, EntityViewId entityViewId); | 48 | EntityView findEntityViewById(TenantId tenantId, EntityViewId entityViewId); |
46 | 49 | ||
47 | EntityView findEntityViewByTenantIdAndName(TenantId tenantId, String name); | 50 | EntityView findEntityViewByTenantIdAndName(TenantId tenantId, String name); |
48 | 51 | ||
49 | PageData<EntityView> findEntityViewByTenantId(TenantId tenantId, PageLink pageLink); | 52 | PageData<EntityView> findEntityViewByTenantId(TenantId tenantId, PageLink pageLink); |
50 | 53 | ||
54 | + PageData<EntityViewInfo> findEntityViewInfosByTenantId(TenantId tenantId, PageLink pageLink); | ||
55 | + | ||
51 | PageData<EntityView> findEntityViewByTenantIdAndType(TenantId tenantId, PageLink pageLink, String type); | 56 | PageData<EntityView> findEntityViewByTenantIdAndType(TenantId tenantId, PageLink pageLink, String type); |
52 | 57 | ||
58 | + PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink); | ||
59 | + | ||
53 | PageData<EntityView> findEntityViewsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, PageLink pageLink); | 60 | PageData<EntityView> findEntityViewsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, PageLink pageLink); |
54 | 61 | ||
62 | + PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, PageLink pageLink); | ||
63 | + | ||
55 | PageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, PageLink pageLink, String type); | 64 | PageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, PageLink pageLink, String type); |
56 | 65 | ||
66 | + PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, String type, PageLink pageLink); | ||
67 | + | ||
57 | ListenableFuture<List<EntityView>> findEntityViewsByQuery(TenantId tenantId, EntityViewSearchQuery query); | 68 | ListenableFuture<List<EntityView>> findEntityViewsByQuery(TenantId tenantId, EntityViewSearchQuery query); |
58 | 69 | ||
59 | ListenableFuture<EntityView> findEntityViewByIdAsync(TenantId tenantId, EntityViewId entityViewId); | 70 | ListenableFuture<EntityView> findEntityViewByIdAsync(TenantId tenantId, EntityViewId entityViewId); |
1 | +/** | ||
2 | + * Copyright © 2016-2019 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.EntityViewId; | ||
20 | + | ||
21 | +@Data | ||
22 | +public class EntityViewInfo extends EntityView { | ||
23 | + | ||
24 | + private String customerTitle; | ||
25 | + private boolean customerIsPublic; | ||
26 | + | ||
27 | + public EntityViewInfo() { | ||
28 | + super(); | ||
29 | + } | ||
30 | + | ||
31 | + public EntityViewInfo(EntityViewId entityViewId) { | ||
32 | + super(entityViewId); | ||
33 | + } | ||
34 | + | ||
35 | + public EntityViewInfo(EntityView entityView, String customerTitle, boolean customerIsPublic) { | ||
36 | + super(entityView); | ||
37 | + this.customerTitle = customerTitle; | ||
38 | + this.customerIsPublic = customerIsPublic; | ||
39 | + } | ||
40 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2019 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.asset; | ||
17 | + | ||
18 | +import lombok.Data; | ||
19 | +import org.thingsboard.server.common.data.id.AssetId; | ||
20 | + | ||
21 | +@Data | ||
22 | +public class AssetInfo extends Asset { | ||
23 | + | ||
24 | + private String customerTitle; | ||
25 | + private boolean customerIsPublic; | ||
26 | + | ||
27 | + public AssetInfo() { | ||
28 | + super(); | ||
29 | + } | ||
30 | + | ||
31 | + public AssetInfo(AssetId assetId) { | ||
32 | + super(assetId); | ||
33 | + } | ||
34 | + | ||
35 | + public AssetInfo(Asset asset, String customerTitle, boolean customerIsPublic) { | ||
36 | + super(asset); | ||
37 | + this.customerTitle = customerTitle; | ||
38 | + this.customerIsPublic = customerIsPublic; | ||
39 | + } | ||
40 | +} |
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.asset; | @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.asset; | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | import org.thingsboard.server.common.data.EntitySubtype; | 19 | import org.thingsboard.server.common.data.EntitySubtype; |
20 | import org.thingsboard.server.common.data.asset.Asset; | 20 | import org.thingsboard.server.common.data.asset.Asset; |
21 | +import org.thingsboard.server.common.data.asset.AssetInfo; | ||
21 | import org.thingsboard.server.common.data.id.TenantId; | 22 | import org.thingsboard.server.common.data.id.TenantId; |
22 | import org.thingsboard.server.common.data.page.PageData; | 23 | import org.thingsboard.server.common.data.page.PageData; |
23 | import org.thingsboard.server.common.data.page.PageLink; | 24 | import org.thingsboard.server.common.data.page.PageLink; |
@@ -34,6 +35,15 @@ import java.util.UUID; | @@ -34,6 +35,15 @@ import java.util.UUID; | ||
34 | public interface AssetDao extends Dao<Asset> { | 35 | public interface AssetDao extends Dao<Asset> { |
35 | 36 | ||
36 | /** | 37 | /** |
38 | + * Find asset info by id. | ||
39 | + * | ||
40 | + * @param tenantId the tenant id | ||
41 | + * @param assetId the asset id | ||
42 | + * @return the asset info object | ||
43 | + */ | ||
44 | + AssetInfo findAssetInfoById(TenantId tenantId, UUID assetId); | ||
45 | + | ||
46 | + /** | ||
37 | * Save or update asset object | 47 | * Save or update asset object |
38 | * | 48 | * |
39 | * @param asset the asset object | 49 | * @param asset the asset object |
@@ -51,6 +61,15 @@ public interface AssetDao extends Dao<Asset> { | @@ -51,6 +61,15 @@ public interface AssetDao extends Dao<Asset> { | ||
51 | PageData<Asset> findAssetsByTenantId(UUID tenantId, PageLink pageLink); | 61 | PageData<Asset> findAssetsByTenantId(UUID tenantId, PageLink pageLink); |
52 | 62 | ||
53 | /** | 63 | /** |
64 | + * Find asset infos by tenantId and page link. | ||
65 | + * | ||
66 | + * @param tenantId the tenantId | ||
67 | + * @param pageLink the page link | ||
68 | + * @return the list of asset info objects | ||
69 | + */ | ||
70 | + PageData<AssetInfo> findAssetInfosByTenantId(UUID tenantId, PageLink pageLink); | ||
71 | + | ||
72 | + /** | ||
54 | * Find assets by tenantId, type and page link. | 73 | * Find assets by tenantId, type and page link. |
55 | * | 74 | * |
56 | * @param tenantId the tenantId | 75 | * @param tenantId the tenantId |
@@ -61,6 +80,16 @@ public interface AssetDao extends Dao<Asset> { | @@ -61,6 +80,16 @@ public interface AssetDao extends Dao<Asset> { | ||
61 | PageData<Asset> findAssetsByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); | 80 | PageData<Asset> findAssetsByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); |
62 | 81 | ||
63 | /** | 82 | /** |
83 | + * Find asset infos by tenantId, type and page link. | ||
84 | + * | ||
85 | + * @param tenantId the tenantId | ||
86 | + * @param type the type | ||
87 | + * @param pageLink the page link | ||
88 | + * @return the list of asset info objects | ||
89 | + */ | ||
90 | + PageData<AssetInfo> findAssetInfosByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); | ||
91 | + | ||
92 | + /** | ||
64 | * Find assets by tenantId and assets Ids. | 93 | * Find assets by tenantId and assets Ids. |
65 | * | 94 | * |
66 | * @param tenantId the tenantId | 95 | * @param tenantId the tenantId |
@@ -80,6 +109,16 @@ public interface AssetDao extends Dao<Asset> { | @@ -80,6 +109,16 @@ public interface AssetDao extends Dao<Asset> { | ||
80 | PageData<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, PageLink pageLink); | 109 | PageData<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, PageLink pageLink); |
81 | 110 | ||
82 | /** | 111 | /** |
112 | + * Find asset infos by tenantId, customerId and page link. | ||
113 | + * | ||
114 | + * @param tenantId the tenantId | ||
115 | + * @param customerId the customerId | ||
116 | + * @param pageLink the page link | ||
117 | + * @return the list of asset info objects | ||
118 | + */ | ||
119 | + PageData<AssetInfo> findAssetInfosByTenantIdAndCustomerId(UUID tenantId, UUID customerId, PageLink pageLink); | ||
120 | + | ||
121 | + /** | ||
83 | * Find assets by tenantId, customerId, type and page link. | 122 | * Find assets by tenantId, customerId, type and page link. |
84 | * | 123 | * |
85 | * @param tenantId the tenantId | 124 | * @param tenantId the tenantId |
@@ -91,6 +130,17 @@ public interface AssetDao extends Dao<Asset> { | @@ -91,6 +130,17 @@ public interface AssetDao extends Dao<Asset> { | ||
91 | PageData<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink); | 130 | PageData<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink); |
92 | 131 | ||
93 | /** | 132 | /** |
133 | + * Find asset infos by tenantId, customerId, type and page link. | ||
134 | + * | ||
135 | + * @param tenantId the tenantId | ||
136 | + * @param customerId the customerId | ||
137 | + * @param type the type | ||
138 | + * @param pageLink the page link | ||
139 | + * @return the list of asset info objects | ||
140 | + */ | ||
141 | + PageData<AssetInfo> findAssetInfosByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink); | ||
142 | + | ||
143 | + /** | ||
94 | * Find assets by tenantId, customerId and assets Ids. | 144 | * Find assets by tenantId, customerId and assets Ids. |
95 | * | 145 | * |
96 | * @param tenantId the tenantId | 146 | * @param tenantId the tenantId |
@@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.EntityType; | @@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.EntityType; | ||
33 | import org.thingsboard.server.common.data.EntityView; | 33 | import org.thingsboard.server.common.data.EntityView; |
34 | import org.thingsboard.server.common.data.Tenant; | 34 | import org.thingsboard.server.common.data.Tenant; |
35 | import org.thingsboard.server.common.data.asset.Asset; | 35 | import org.thingsboard.server.common.data.asset.Asset; |
36 | +import org.thingsboard.server.common.data.asset.AssetInfo; | ||
36 | import org.thingsboard.server.common.data.asset.AssetSearchQuery; | 37 | import org.thingsboard.server.common.data.asset.AssetSearchQuery; |
37 | import org.thingsboard.server.common.data.id.AssetId; | 38 | import org.thingsboard.server.common.data.id.AssetId; |
38 | import org.thingsboard.server.common.data.id.CustomerId; | 39 | import org.thingsboard.server.common.data.id.CustomerId; |
@@ -86,6 +87,13 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | @@ -86,6 +87,13 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | ||
86 | private CacheManager cacheManager; | 87 | private CacheManager cacheManager; |
87 | 88 | ||
88 | @Override | 89 | @Override |
90 | + public AssetInfo findAssetInfoById(TenantId tenantId, AssetId assetId) { | ||
91 | + log.trace("Executing findAssetInfoById [{}]", assetId); | ||
92 | + validateId(assetId, INCORRECT_ASSET_ID + assetId); | ||
93 | + return assetDao.findAssetInfoById(tenantId, assetId.getId()); | ||
94 | + } | ||
95 | + | ||
96 | + @Override | ||
89 | public Asset findAssetById(TenantId tenantId, AssetId assetId) { | 97 | public Asset findAssetById(TenantId tenantId, AssetId assetId) { |
90 | log.trace("Executing findAssetById [{}]", assetId); | 98 | log.trace("Executing findAssetById [{}]", assetId); |
91 | validateId(assetId, INCORRECT_ASSET_ID + assetId); | 99 | validateId(assetId, INCORRECT_ASSET_ID + assetId); |
@@ -165,6 +173,14 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | @@ -165,6 +173,14 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | ||
165 | } | 173 | } |
166 | 174 | ||
167 | @Override | 175 | @Override |
176 | + public PageData<AssetInfo> findAssetInfosByTenantId(TenantId tenantId, PageLink pageLink) { | ||
177 | + log.trace("Executing findAssetInfosByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); | ||
178 | + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | ||
179 | + validatePageLink(pageLink); | ||
180 | + return assetDao.findAssetInfosByTenantId(tenantId.getId(), pageLink); | ||
181 | + } | ||
182 | + | ||
183 | + @Override | ||
168 | public PageData<Asset> findAssetsByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink) { | 184 | public PageData<Asset> findAssetsByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink) { |
169 | log.trace("Executing findAssetsByTenantIdAndType, tenantId [{}], type [{}], pageLink [{}]", tenantId, type, pageLink); | 185 | log.trace("Executing findAssetsByTenantIdAndType, tenantId [{}], type [{}], pageLink [{}]", tenantId, type, pageLink); |
170 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | 186 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); |
@@ -174,6 +190,15 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | @@ -174,6 +190,15 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | ||
174 | } | 190 | } |
175 | 191 | ||
176 | @Override | 192 | @Override |
193 | + public PageData<AssetInfo> findAssetInfosByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink) { | ||
194 | + log.trace("Executing findAssetInfosByTenantIdAndType, tenantId [{}], type [{}], pageLink [{}]", tenantId, type, pageLink); | ||
195 | + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | ||
196 | + validateString(type, "Incorrect type " + type); | ||
197 | + validatePageLink(pageLink); | ||
198 | + return assetDao.findAssetInfosByTenantIdAndType(tenantId.getId(), type, pageLink); | ||
199 | + } | ||
200 | + | ||
201 | + @Override | ||
177 | public ListenableFuture<List<Asset>> findAssetsByTenantIdAndIdsAsync(TenantId tenantId, List<AssetId> assetIds) { | 202 | public ListenableFuture<List<Asset>> findAssetsByTenantIdAndIdsAsync(TenantId tenantId, List<AssetId> assetIds) { |
178 | log.trace("Executing findAssetsByTenantIdAndIdsAsync, tenantId [{}], assetIds [{}]", tenantId, assetIds); | 203 | log.trace("Executing findAssetsByTenantIdAndIdsAsync, tenantId [{}], assetIds [{}]", tenantId, assetIds); |
179 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | 204 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); |
@@ -198,6 +223,15 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | @@ -198,6 +223,15 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | ||
198 | } | 223 | } |
199 | 224 | ||
200 | @Override | 225 | @Override |
226 | + public PageData<AssetInfo> findAssetInfosByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, PageLink pageLink) { | ||
227 | + log.trace("Executing findAssetInfosByTenantIdAndCustomerId, tenantId [{}], customerId [{}], pageLink [{}]", tenantId, customerId, pageLink); | ||
228 | + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | ||
229 | + validateId(customerId, INCORRECT_CUSTOMER_ID + customerId); | ||
230 | + validatePageLink(pageLink); | ||
231 | + return assetDao.findAssetInfosByTenantIdAndCustomerId(tenantId.getId(), customerId.getId(), pageLink); | ||
232 | + } | ||
233 | + | ||
234 | + @Override | ||
201 | public PageData<Asset> findAssetsByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, String type, PageLink pageLink) { | 235 | public PageData<Asset> findAssetsByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, String type, PageLink pageLink) { |
202 | log.trace("Executing findAssetsByTenantIdAndCustomerIdAndType, tenantId [{}], customerId [{}], type [{}], pageLink [{}]", tenantId, customerId, type, pageLink); | 236 | log.trace("Executing findAssetsByTenantIdAndCustomerIdAndType, tenantId [{}], customerId [{}], type [{}], pageLink [{}]", tenantId, customerId, type, pageLink); |
203 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | 237 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); |
@@ -208,6 +242,16 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | @@ -208,6 +242,16 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ | ||
208 | } | 242 | } |
209 | 243 | ||
210 | @Override | 244 | @Override |
245 | + public PageData<AssetInfo> findAssetInfosByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, String type, PageLink pageLink) { | ||
246 | + log.trace("Executing findAssetInfosByTenantIdAndCustomerIdAndType, tenantId [{}], customerId [{}], type [{}], pageLink [{}]", tenantId, customerId, type, pageLink); | ||
247 | + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | ||
248 | + validateId(customerId, INCORRECT_CUSTOMER_ID + customerId); | ||
249 | + validateString(type, "Incorrect type " + type); | ||
250 | + validatePageLink(pageLink); | ||
251 | + return assetDao.findAssetInfosByTenantIdAndCustomerIdAndType(tenantId.getId(), customerId.getId(), type, pageLink); | ||
252 | + } | ||
253 | + | ||
254 | + @Override | ||
211 | public ListenableFuture<List<Asset>> findAssetsByTenantIdCustomerIdAndIdsAsync(TenantId tenantId, CustomerId customerId, List<AssetId> assetIds) { | 255 | public ListenableFuture<List<Asset>> findAssetsByTenantIdCustomerIdAndIdsAsync(TenantId tenantId, CustomerId customerId, List<AssetId> assetIds) { |
212 | log.trace("Executing findAssetsByTenantIdAndCustomerIdAndIdsAsync, tenantId [{}], customerId [{}], assetIds [{}]", tenantId, customerId, assetIds); | 256 | log.trace("Executing findAssetsByTenantIdAndCustomerIdAndIdsAsync, tenantId [{}], customerId [{}], assetIds [{}]", tenantId, customerId, assetIds); |
213 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | 257 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); |
@@ -85,7 +85,7 @@ public interface DeviceDao extends Dao<Device> { | @@ -85,7 +85,7 @@ public interface DeviceDao extends Dao<Device> { | ||
85 | * @param tenantId the tenantId | 85 | * @param tenantId the tenantId |
86 | * @param type the type | 86 | * @param type the type |
87 | * @param pageLink the page link | 87 | * @param pageLink the page link |
88 | - * @return the list of device onfo objects | 88 | + * @return the list of device info objects |
89 | */ | 89 | */ |
90 | PageData<DeviceInfo> findDeviceInfosByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); | 90 | PageData<DeviceInfo> findDeviceInfosByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); |
91 | 91 |
@@ -16,9 +16,9 @@ | @@ -16,9 +16,9 @@ | ||
16 | package org.thingsboard.server.dao.entityview; | 16 | package org.thingsboard.server.dao.entityview; |
17 | 17 | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | -import org.thingsboard.server.common.data.Device; | ||
20 | import org.thingsboard.server.common.data.EntitySubtype; | 19 | import org.thingsboard.server.common.data.EntitySubtype; |
21 | import org.thingsboard.server.common.data.EntityView; | 20 | import org.thingsboard.server.common.data.EntityView; |
21 | +import org.thingsboard.server.common.data.EntityViewInfo; | ||
22 | import org.thingsboard.server.common.data.id.TenantId; | 22 | import org.thingsboard.server.common.data.id.TenantId; |
23 | import org.thingsboard.server.common.data.page.PageData; | 23 | import org.thingsboard.server.common.data.page.PageData; |
24 | import org.thingsboard.server.common.data.page.PageLink; | 24 | import org.thingsboard.server.common.data.page.PageLink; |
@@ -34,6 +34,15 @@ import java.util.UUID; | @@ -34,6 +34,15 @@ import java.util.UUID; | ||
34 | public interface EntityViewDao extends Dao<EntityView> { | 34 | public interface EntityViewDao extends Dao<EntityView> { |
35 | 35 | ||
36 | /** | 36 | /** |
37 | + * Find entity view info by id. | ||
38 | + * | ||
39 | + * @param tenantId the tenant id | ||
40 | + * @param assetId the asset id | ||
41 | + * @return the entity view info object | ||
42 | + */ | ||
43 | + EntityViewInfo findEntityViewInfoById(TenantId tenantId, UUID entityViewId); | ||
44 | + | ||
45 | + /** | ||
37 | * Save or update device object | 46 | * Save or update device object |
38 | * | 47 | * |
39 | * @param entityView the entity-view object | 48 | * @param entityView the entity-view object |
@@ -51,6 +60,15 @@ public interface EntityViewDao extends Dao<EntityView> { | @@ -51,6 +60,15 @@ public interface EntityViewDao extends Dao<EntityView> { | ||
51 | PageData<EntityView> findEntityViewsByTenantId(UUID tenantId, PageLink pageLink); | 60 | PageData<EntityView> findEntityViewsByTenantId(UUID tenantId, PageLink pageLink); |
52 | 61 | ||
53 | /** | 62 | /** |
63 | + * Find entity view infos by tenantId and page link. | ||
64 | + * | ||
65 | + * @param tenantId the tenantId | ||
66 | + * @param pageLink the page link | ||
67 | + * @return the list of entity view info objects | ||
68 | + */ | ||
69 | + PageData<EntityViewInfo> findEntityViewInfosByTenantId(UUID tenantId, PageLink pageLink); | ||
70 | + | ||
71 | + /** | ||
54 | * Find entity views by tenantId, type and page link. | 72 | * Find entity views by tenantId, type and page link. |
55 | * | 73 | * |
56 | * @param tenantId the tenantId | 74 | * @param tenantId the tenantId |
@@ -61,6 +79,16 @@ public interface EntityViewDao extends Dao<EntityView> { | @@ -61,6 +79,16 @@ public interface EntityViewDao extends Dao<EntityView> { | ||
61 | PageData<EntityView> findEntityViewsByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); | 79 | PageData<EntityView> findEntityViewsByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); |
62 | 80 | ||
63 | /** | 81 | /** |
82 | + * Find entity view infos by tenantId, type and page link. | ||
83 | + * | ||
84 | + * @param tenantId the tenantId | ||
85 | + * @param type the type | ||
86 | + * @param pageLink the page link | ||
87 | + * @return the list of entity view info objects | ||
88 | + */ | ||
89 | + PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); | ||
90 | + | ||
91 | + /** | ||
64 | * Find entity views by tenantId and entity view name. | 92 | * Find entity views by tenantId and entity view name. |
65 | * | 93 | * |
66 | * @param tenantId the tenantId | 94 | * @param tenantId the tenantId |
@@ -82,6 +110,16 @@ public interface EntityViewDao extends Dao<EntityView> { | @@ -82,6 +110,16 @@ public interface EntityViewDao extends Dao<EntityView> { | ||
82 | PageLink pageLink); | 110 | PageLink pageLink); |
83 | 111 | ||
84 | /** | 112 | /** |
113 | + * Find entity view infos by tenantId, customerId and page link. | ||
114 | + * | ||
115 | + * @param tenantId the tenantId | ||
116 | + * @param customerId the customerId | ||
117 | + * @param pageLink the page link | ||
118 | + * @return the list of entity view info objects | ||
119 | + */ | ||
120 | + PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndCustomerId(UUID tenantId, UUID customerId, PageLink pageLink); | ||
121 | + | ||
122 | + /** | ||
85 | * Find entity views by tenantId, customerId, type and page link. | 123 | * Find entity views by tenantId, customerId, type and page link. |
86 | * | 124 | * |
87 | * @param tenantId the tenantId | 125 | * @param tenantId the tenantId |
@@ -95,6 +133,17 @@ public interface EntityViewDao extends Dao<EntityView> { | @@ -95,6 +133,17 @@ public interface EntityViewDao extends Dao<EntityView> { | ||
95 | String type, | 133 | String type, |
96 | PageLink pageLink); | 134 | PageLink pageLink); |
97 | 135 | ||
136 | + /** | ||
137 | + * Find entity view infos by tenantId, customerId, type and page link. | ||
138 | + * | ||
139 | + * @param tenantId the tenantId | ||
140 | + * @param customerId the customerId | ||
141 | + * @param type the type | ||
142 | + * @param pageLink the page link | ||
143 | + * @return the list of entity view info objects | ||
144 | + */ | ||
145 | + PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink); | ||
146 | + | ||
98 | ListenableFuture<List<EntityView>> findEntityViewsByTenantIdAndEntityIdAsync(UUID tenantId, UUID entityId); | 147 | ListenableFuture<List<EntityView>> findEntityViewsByTenantIdAndEntityIdAsync(UUID tenantId, UUID entityId); |
99 | 148 | ||
100 | /** | 149 | /** |
@@ -28,11 +28,7 @@ import org.springframework.cache.annotation.CacheEvict; | @@ -28,11 +28,7 @@ import org.springframework.cache.annotation.CacheEvict; | ||
28 | import org.springframework.cache.annotation.Cacheable; | 28 | import org.springframework.cache.annotation.Cacheable; |
29 | import org.springframework.cache.annotation.Caching; | 29 | import org.springframework.cache.annotation.Caching; |
30 | import org.springframework.stereotype.Service; | 30 | import org.springframework.stereotype.Service; |
31 | -import org.thingsboard.server.common.data.Customer; | ||
32 | -import org.thingsboard.server.common.data.EntitySubtype; | ||
33 | -import org.thingsboard.server.common.data.EntityType; | ||
34 | -import org.thingsboard.server.common.data.EntityView; | ||
35 | -import org.thingsboard.server.common.data.Tenant; | 31 | +import org.thingsboard.server.common.data.*; |
36 | import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery; | 32 | import org.thingsboard.server.common.data.entityview.EntityViewSearchQuery; |
37 | import org.thingsboard.server.common.data.id.CustomerId; | 33 | import org.thingsboard.server.common.data.id.CustomerId; |
38 | import org.thingsboard.server.common.data.id.EntityId; | 34 | import org.thingsboard.server.common.data.id.EntityId; |
@@ -124,6 +120,13 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | @@ -124,6 +120,13 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | ||
124 | customerEntityViewsUnAssigner.removeEntities(tenantId, customerId); | 120 | customerEntityViewsUnAssigner.removeEntities(tenantId, customerId); |
125 | } | 121 | } |
126 | 122 | ||
123 | + @Override | ||
124 | + public EntityViewInfo findEntityViewInfoById(TenantId tenantId, EntityViewId entityViewId) { | ||
125 | + log.trace("Executing findEntityViewInfoById [{}]", entityViewId); | ||
126 | + validateId(entityViewId, INCORRECT_ENTITY_VIEW_ID + entityViewId); | ||
127 | + return entityViewDao.findEntityViewInfoById(tenantId, entityViewId.getId()); | ||
128 | + } | ||
129 | + | ||
127 | @Cacheable(cacheNames = ENTITY_VIEW_CACHE, key = "{#entityViewId}") | 130 | @Cacheable(cacheNames = ENTITY_VIEW_CACHE, key = "{#entityViewId}") |
128 | @Override | 131 | @Override |
129 | public EntityView findEntityViewById(TenantId tenantId, EntityViewId entityViewId) { | 132 | public EntityView findEntityViewById(TenantId tenantId, EntityViewId entityViewId) { |
@@ -150,6 +153,14 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | @@ -150,6 +153,14 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | ||
150 | } | 153 | } |
151 | 154 | ||
152 | @Override | 155 | @Override |
156 | + public PageData<EntityViewInfo> findEntityViewInfosByTenantId(TenantId tenantId, PageLink pageLink) { | ||
157 | + log.trace("Executing findEntityViewInfosByTenantId, tenantId [{}], pageLink [{}]", tenantId, pageLink); | ||
158 | + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | ||
159 | + validatePageLink(pageLink); | ||
160 | + return entityViewDao.findEntityViewInfosByTenantId(tenantId.getId(), pageLink); | ||
161 | + } | ||
162 | + | ||
163 | + @Override | ||
153 | public PageData<EntityView> findEntityViewByTenantIdAndType(TenantId tenantId, PageLink pageLink, String type) { | 164 | public PageData<EntityView> findEntityViewByTenantIdAndType(TenantId tenantId, PageLink pageLink, String type) { |
154 | log.trace("Executing findEntityViewByTenantIdAndType, tenantId [{}], pageLink [{}], type [{}]", tenantId, pageLink, type); | 165 | log.trace("Executing findEntityViewByTenantIdAndType, tenantId [{}], pageLink [{}], type [{}]", tenantId, pageLink, type); |
155 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | 166 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); |
@@ -159,6 +170,15 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | @@ -159,6 +170,15 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | ||
159 | } | 170 | } |
160 | 171 | ||
161 | @Override | 172 | @Override |
173 | + public PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink) { | ||
174 | + log.trace("Executing findEntityViewInfosByTenantIdAndType, tenantId [{}], pageLink [{}], type [{}]", tenantId, pageLink, type); | ||
175 | + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | ||
176 | + validatePageLink(pageLink); | ||
177 | + validateString(type, "Incorrect type " + type); | ||
178 | + return entityViewDao.findEntityViewInfosByTenantIdAndType(tenantId.getId(), type, pageLink); | ||
179 | + } | ||
180 | + | ||
181 | + @Override | ||
162 | public PageData<EntityView> findEntityViewsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, | 182 | public PageData<EntityView> findEntityViewsByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, |
163 | PageLink pageLink) { | 183 | PageLink pageLink) { |
164 | log.trace("Executing findEntityViewByTenantIdAndCustomerId, tenantId [{}], customerId [{}]," + | 184 | log.trace("Executing findEntityViewByTenantIdAndCustomerId, tenantId [{}], customerId [{}]," + |
@@ -171,6 +191,17 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | @@ -171,6 +191,17 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | ||
171 | } | 191 | } |
172 | 192 | ||
173 | @Override | 193 | @Override |
194 | + public PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndCustomerId(TenantId tenantId, CustomerId customerId, PageLink pageLink) { | ||
195 | + log.trace("Executing findEntityViewInfosByTenantIdAndCustomerId, tenantId [{}], customerId [{}]," + | ||
196 | + " pageLink [{}]", tenantId, customerId, pageLink); | ||
197 | + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | ||
198 | + validateId(customerId, INCORRECT_CUSTOMER_ID + customerId); | ||
199 | + validatePageLink(pageLink); | ||
200 | + return entityViewDao.findEntityViewInfosByTenantIdAndCustomerId(tenantId.getId(), | ||
201 | + customerId.getId(), pageLink); | ||
202 | + } | ||
203 | + | ||
204 | + @Override | ||
174 | public PageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, PageLink pageLink, String type) { | 205 | public PageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, PageLink pageLink, String type) { |
175 | log.trace("Executing findEntityViewsByTenantIdAndCustomerIdAndType, tenantId [{}], customerId [{}]," + | 206 | log.trace("Executing findEntityViewsByTenantIdAndCustomerIdAndType, tenantId [{}], customerId [{}]," + |
176 | " pageLink [{}], type [{}]", tenantId, customerId, pageLink, type); | 207 | " pageLink [{}], type [{}]", tenantId, customerId, pageLink, type); |
@@ -183,6 +214,18 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | @@ -183,6 +214,18 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti | ||
183 | } | 214 | } |
184 | 215 | ||
185 | @Override | 216 | @Override |
217 | + public PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndCustomerIdAndType(TenantId tenantId, CustomerId customerId, String type, PageLink pageLink) { | ||
218 | + log.trace("Executing findEntityViewInfosByTenantIdAndCustomerIdAndType, tenantId [{}], customerId [{}]," + | ||
219 | + " pageLink [{}], type [{}]", tenantId, customerId, pageLink, type); | ||
220 | + validateId(tenantId, INCORRECT_TENANT_ID + tenantId); | ||
221 | + validateId(customerId, INCORRECT_CUSTOMER_ID + customerId); | ||
222 | + validatePageLink(pageLink); | ||
223 | + validateString(type, "Incorrect type " + type); | ||
224 | + return entityViewDao.findEntityViewInfosByTenantIdAndCustomerIdAndType(tenantId.getId(), | ||
225 | + customerId.getId(), type, pageLink); | ||
226 | + } | ||
227 | + | ||
228 | + @Override | ||
186 | public ListenableFuture<List<EntityView>> findEntityViewsByQuery(TenantId tenantId, EntityViewSearchQuery query) { | 229 | public ListenableFuture<List<EntityView>> findEntityViewsByQuery(TenantId tenantId, EntityViewSearchQuery query) { |
187 | ListenableFuture<List<EntityRelation>> relations = relationService.findByQuery(tenantId, query.toEntitySearchQuery()); | 230 | ListenableFuture<List<EntityRelation>> relations = relationService.findByQuery(tenantId, query.toEntitySearchQuery()); |
188 | ListenableFuture<List<EntityView>> entityViews = Futures.transformAsync(relations, r -> { | 231 | ListenableFuture<List<EntityView>> entityViews = Futures.transformAsync(relations, r -> { |
1 | +/** | ||
2 | + * Copyright © 2016-2019 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.dao.model.sql; | ||
17 | + | ||
18 | +import com.datastax.driver.core.utils.UUIDs; | ||
19 | +import com.fasterxml.jackson.databind.JsonNode; | ||
20 | +import lombok.Data; | ||
21 | +import lombok.EqualsAndHashCode; | ||
22 | +import org.hibernate.annotations.Type; | ||
23 | +import org.hibernate.annotations.TypeDef; | ||
24 | +import org.thingsboard.server.common.data.UUIDConverter; | ||
25 | +import org.thingsboard.server.common.data.asset.Asset; | ||
26 | +import org.thingsboard.server.common.data.id.AssetId; | ||
27 | +import org.thingsboard.server.common.data.id.CustomerId; | ||
28 | +import org.thingsboard.server.common.data.id.TenantId; | ||
29 | +import org.thingsboard.server.dao.model.BaseSqlEntity; | ||
30 | +import org.thingsboard.server.dao.model.ModelConstants; | ||
31 | +import org.thingsboard.server.dao.model.SearchTextEntity; | ||
32 | +import org.thingsboard.server.dao.util.mapping.JsonStringType; | ||
33 | + | ||
34 | +import javax.persistence.Column; | ||
35 | +import javax.persistence.Entity; | ||
36 | +import javax.persistence.MappedSuperclass; | ||
37 | +import javax.persistence.Table; | ||
38 | + | ||
39 | +import static org.thingsboard.server.dao.model.ModelConstants.ASSET_COLUMN_FAMILY_NAME; | ||
40 | +import static org.thingsboard.server.dao.model.ModelConstants.ASSET_CUSTOMER_ID_PROPERTY; | ||
41 | +import static org.thingsboard.server.dao.model.ModelConstants.ASSET_NAME_PROPERTY; | ||
42 | +import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TENANT_ID_PROPERTY; | ||
43 | +import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TYPE_PROPERTY; | ||
44 | +import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; | ||
45 | + | ||
46 | +@Data | ||
47 | +@EqualsAndHashCode(callSuper = true) | ||
48 | +@TypeDef(name = "json", typeClass = JsonStringType.class) | ||
49 | +@MappedSuperclass | ||
50 | +public abstract class AbstractAssetEntity<T extends Asset> extends BaseSqlEntity<T> implements SearchTextEntity<T> { | ||
51 | + | ||
52 | + @Column(name = ASSET_TENANT_ID_PROPERTY) | ||
53 | + private String tenantId; | ||
54 | + | ||
55 | + @Column(name = ASSET_CUSTOMER_ID_PROPERTY) | ||
56 | + private String customerId; | ||
57 | + | ||
58 | + @Column(name = ASSET_NAME_PROPERTY) | ||
59 | + private String name; | ||
60 | + | ||
61 | + @Column(name = ASSET_TYPE_PROPERTY) | ||
62 | + private String type; | ||
63 | + | ||
64 | + @Column(name = SEARCH_TEXT_PROPERTY) | ||
65 | + private String searchText; | ||
66 | + | ||
67 | + @Type(type = "json") | ||
68 | + @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY) | ||
69 | + private JsonNode additionalInfo; | ||
70 | + | ||
71 | + public AbstractAssetEntity() { | ||
72 | + super(); | ||
73 | + } | ||
74 | + | ||
75 | + public AbstractAssetEntity(Asset asset) { | ||
76 | + if (asset.getId() != null) { | ||
77 | + this.setId(asset.getId().getId()); | ||
78 | + } | ||
79 | + if (asset.getTenantId() != null) { | ||
80 | + this.tenantId = UUIDConverter.fromTimeUUID(asset.getTenantId().getId()); | ||
81 | + } | ||
82 | + if (asset.getCustomerId() != null) { | ||
83 | + this.customerId = UUIDConverter.fromTimeUUID(asset.getCustomerId().getId()); | ||
84 | + } | ||
85 | + this.name = asset.getName(); | ||
86 | + this.type = asset.getType(); | ||
87 | + this.additionalInfo = asset.getAdditionalInfo(); | ||
88 | + } | ||
89 | + | ||
90 | + public AbstractAssetEntity(AssetEntity assetEntity) { | ||
91 | + this.setId(assetEntity.getId()); | ||
92 | + this.tenantId = assetEntity.getTenantId(); | ||
93 | + this.customerId = assetEntity.getCustomerId(); | ||
94 | + this.type = assetEntity.getType(); | ||
95 | + this.name = assetEntity.getName(); | ||
96 | + this.searchText = assetEntity.getSearchText(); | ||
97 | + this.additionalInfo = assetEntity.getAdditionalInfo(); | ||
98 | + } | ||
99 | + | ||
100 | + @Override | ||
101 | + public String getSearchTextSource() { | ||
102 | + return name; | ||
103 | + } | ||
104 | + | ||
105 | + @Override | ||
106 | + public void setSearchText(String searchText) { | ||
107 | + this.searchText = searchText; | ||
108 | + } | ||
109 | + | ||
110 | + public String getSearchText() { | ||
111 | + return searchText; | ||
112 | + } | ||
113 | + | ||
114 | + protected Asset toAsset() { | ||
115 | + Asset asset = new Asset(new AssetId(UUIDConverter.fromString(id))); | ||
116 | + asset.setCreatedTime(UUIDs.unixTimestamp(UUIDConverter.fromString(id))); | ||
117 | + if (tenantId != null) { | ||
118 | + asset.setTenantId(new TenantId(UUIDConverter.fromString(tenantId))); | ||
119 | + } | ||
120 | + if (customerId != null) { | ||
121 | + asset.setCustomerId(new CustomerId(UUIDConverter.fromString(customerId))); | ||
122 | + } | ||
123 | + asset.setName(name); | ||
124 | + asset.setType(type); | ||
125 | + asset.setAdditionalInfo(additionalInfo); | ||
126 | + return asset; | ||
127 | + } | ||
128 | + | ||
129 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2019 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.dao.model.sql; | ||
17 | + | ||
18 | +import com.datastax.driver.core.utils.UUIDs; | ||
19 | +import com.fasterxml.jackson.databind.JsonNode; | ||
20 | +import com.fasterxml.jackson.databind.ObjectMapper; | ||
21 | +import lombok.Data; | ||
22 | +import lombok.EqualsAndHashCode; | ||
23 | +import lombok.extern.slf4j.Slf4j; | ||
24 | +import org.hibernate.annotations.Type; | ||
25 | +import org.hibernate.annotations.TypeDef; | ||
26 | +import org.thingsboard.server.common.data.EntityType; | ||
27 | +import org.thingsboard.server.common.data.EntityView; | ||
28 | +import org.thingsboard.server.common.data.id.CustomerId; | ||
29 | +import org.thingsboard.server.common.data.id.EntityIdFactory; | ||
30 | +import org.thingsboard.server.common.data.id.EntityViewId; | ||
31 | +import org.thingsboard.server.common.data.id.TenantId; | ||
32 | +import org.thingsboard.server.common.data.objects.TelemetryEntityView; | ||
33 | +import org.thingsboard.server.dao.model.BaseSqlEntity; | ||
34 | +import org.thingsboard.server.dao.model.ModelConstants; | ||
35 | +import org.thingsboard.server.dao.model.SearchTextEntity; | ||
36 | +import org.thingsboard.server.dao.util.mapping.JsonStringType; | ||
37 | + | ||
38 | +import javax.persistence.*; | ||
39 | +import java.io.IOException; | ||
40 | + | ||
41 | +import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_PROPERTY; | ||
42 | + | ||
43 | +/** | ||
44 | + * Created by Victor Basanets on 8/30/2017. | ||
45 | + */ | ||
46 | + | ||
47 | +@Data | ||
48 | +@EqualsAndHashCode(callSuper = true) | ||
49 | +@TypeDef(name = "json", typeClass = JsonStringType.class) | ||
50 | +@MappedSuperclass | ||
51 | +@Slf4j | ||
52 | +public abstract class AbstractEntityViewEntity<T extends EntityView> extends BaseSqlEntity<T> implements SearchTextEntity<T> { | ||
53 | + | ||
54 | + @Column(name = ModelConstants.ENTITY_VIEW_ENTITY_ID_PROPERTY) | ||
55 | + private String entityId; | ||
56 | + | ||
57 | + @Enumerated(EnumType.STRING) | ||
58 | + @Column(name = ENTITY_TYPE_PROPERTY) | ||
59 | + private EntityType entityType; | ||
60 | + | ||
61 | + @Column(name = ModelConstants.ENTITY_VIEW_TENANT_ID_PROPERTY) | ||
62 | + private String tenantId; | ||
63 | + | ||
64 | + @Column(name = ModelConstants.ENTITY_VIEW_CUSTOMER_ID_PROPERTY) | ||
65 | + private String customerId; | ||
66 | + | ||
67 | + @Column(name = ModelConstants.DEVICE_TYPE_PROPERTY) | ||
68 | + private String type; | ||
69 | + | ||
70 | + @Column(name = ModelConstants.ENTITY_VIEW_NAME_PROPERTY) | ||
71 | + private String name; | ||
72 | + | ||
73 | + @Column(name = ModelConstants.ENTITY_VIEW_KEYS_PROPERTY) | ||
74 | + private String keys; | ||
75 | + | ||
76 | + @Column(name = ModelConstants.ENTITY_VIEW_START_TS_PROPERTY) | ||
77 | + private long startTs; | ||
78 | + | ||
79 | + @Column(name = ModelConstants.ENTITY_VIEW_END_TS_PROPERTY) | ||
80 | + private long endTs; | ||
81 | + | ||
82 | + @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) | ||
83 | + private String searchText; | ||
84 | + | ||
85 | + @Type(type = "json") | ||
86 | + @Column(name = ModelConstants.ENTITY_VIEW_ADDITIONAL_INFO_PROPERTY) | ||
87 | + private JsonNode additionalInfo; | ||
88 | + | ||
89 | + private static final ObjectMapper mapper = new ObjectMapper(); | ||
90 | + | ||
91 | + public AbstractEntityViewEntity() { | ||
92 | + super(); | ||
93 | + } | ||
94 | + | ||
95 | + public AbstractEntityViewEntity(EntityView entityView) { | ||
96 | + if (entityView.getId() != null) { | ||
97 | + this.setId(entityView.getId().getId()); | ||
98 | + } | ||
99 | + if (entityView.getEntityId() != null) { | ||
100 | + this.entityId = toString(entityView.getEntityId().getId()); | ||
101 | + this.entityType = entityView.getEntityId().getEntityType(); | ||
102 | + } | ||
103 | + if (entityView.getTenantId() != null) { | ||
104 | + this.tenantId = toString(entityView.getTenantId().getId()); | ||
105 | + } | ||
106 | + if (entityView.getCustomerId() != null) { | ||
107 | + this.customerId = toString(entityView.getCustomerId().getId()); | ||
108 | + } | ||
109 | + this.type = entityView.getType(); | ||
110 | + this.name = entityView.getName(); | ||
111 | + try { | ||
112 | + this.keys = mapper.writeValueAsString(entityView.getKeys()); | ||
113 | + } catch (IOException e) { | ||
114 | + log.error("Unable to serialize entity view keys!", e); | ||
115 | + } | ||
116 | + this.startTs = entityView.getStartTimeMs(); | ||
117 | + this.endTs = entityView.getEndTimeMs(); | ||
118 | + this.searchText = entityView.getSearchText(); | ||
119 | + this.additionalInfo = entityView.getAdditionalInfo(); | ||
120 | + } | ||
121 | + | ||
122 | + public AbstractEntityViewEntity(EntityViewEntity entityViewEntity) { | ||
123 | + this.setId(entityViewEntity.getId()); | ||
124 | + this.entityId = entityViewEntity.getEntityId(); | ||
125 | + this.entityType = entityViewEntity.getEntityType(); | ||
126 | + this.tenantId = entityViewEntity.getTenantId(); | ||
127 | + this.customerId = entityViewEntity.getCustomerId(); | ||
128 | + this.type = entityViewEntity.getType(); | ||
129 | + this.name = entityViewEntity.getName(); | ||
130 | + this.keys = entityViewEntity.getKeys(); | ||
131 | + this.startTs = entityViewEntity.getStartTs(); | ||
132 | + this.endTs = entityViewEntity.getEndTs(); | ||
133 | + this.searchText = entityViewEntity.getSearchText(); | ||
134 | + this.additionalInfo = entityViewEntity.getAdditionalInfo(); | ||
135 | + } | ||
136 | + | ||
137 | + @Override | ||
138 | + public String getSearchTextSource() { | ||
139 | + return name; | ||
140 | + } | ||
141 | + | ||
142 | + @Override | ||
143 | + public void setSearchText(String searchText) { | ||
144 | + this.searchText = searchText; | ||
145 | + } | ||
146 | + | ||
147 | + protected EntityView toEntityView() { | ||
148 | + EntityView entityView = new EntityView(new EntityViewId(getId())); | ||
149 | + entityView.setCreatedTime(UUIDs.unixTimestamp(getId())); | ||
150 | + | ||
151 | + if (entityId != null) { | ||
152 | + entityView.setEntityId(EntityIdFactory.getByTypeAndId(entityType.name(), toUUID(entityId).toString())); | ||
153 | + } | ||
154 | + if (tenantId != null) { | ||
155 | + entityView.setTenantId(new TenantId(toUUID(tenantId))); | ||
156 | + } | ||
157 | + if (customerId != null) { | ||
158 | + entityView.setCustomerId(new CustomerId(toUUID(customerId))); | ||
159 | + } | ||
160 | + entityView.setType(type); | ||
161 | + entityView.setName(name); | ||
162 | + try { | ||
163 | + entityView.setKeys(mapper.readValue(keys, TelemetryEntityView.class)); | ||
164 | + } catch (IOException e) { | ||
165 | + log.error("Unable to read entity view keys!", e); | ||
166 | + } | ||
167 | + entityView.setStartTimeMs(startTs); | ||
168 | + entityView.setEndTimeMs(endTs); | ||
169 | + entityView.setAdditionalInfo(additionalInfo); | ||
170 | + return entityView; | ||
171 | + } | ||
172 | +} |
@@ -15,106 +15,35 @@ | @@ -15,106 +15,35 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.model.sql; | 16 | package org.thingsboard.server.dao.model.sql; |
17 | 17 | ||
18 | -import com.datastax.driver.core.utils.UUIDs; | ||
19 | -import com.fasterxml.jackson.databind.JsonNode; | ||
20 | import lombok.Data; | 18 | import lombok.Data; |
21 | import lombok.EqualsAndHashCode; | 19 | import lombok.EqualsAndHashCode; |
22 | -import org.hibernate.annotations.Type; | ||
23 | import org.hibernate.annotations.TypeDef; | 20 | import org.hibernate.annotations.TypeDef; |
24 | -import org.thingsboard.server.common.data.UUIDConverter; | ||
25 | import org.thingsboard.server.common.data.asset.Asset; | 21 | import org.thingsboard.server.common.data.asset.Asset; |
26 | -import org.thingsboard.server.common.data.id.AssetId; | ||
27 | -import org.thingsboard.server.common.data.id.CustomerId; | ||
28 | -import org.thingsboard.server.common.data.id.TenantId; | ||
29 | -import org.thingsboard.server.dao.model.BaseSqlEntity; | ||
30 | -import org.thingsboard.server.dao.model.ModelConstants; | ||
31 | -import org.thingsboard.server.dao.model.SearchTextEntity; | ||
32 | import org.thingsboard.server.dao.util.mapping.JsonStringType; | 22 | import org.thingsboard.server.dao.util.mapping.JsonStringType; |
33 | 23 | ||
34 | -import javax.persistence.Column; | ||
35 | import javax.persistence.Entity; | 24 | import javax.persistence.Entity; |
36 | import javax.persistence.Table; | 25 | import javax.persistence.Table; |
37 | 26 | ||
38 | import static org.thingsboard.server.dao.model.ModelConstants.ASSET_COLUMN_FAMILY_NAME; | 27 | import static org.thingsboard.server.dao.model.ModelConstants.ASSET_COLUMN_FAMILY_NAME; |
39 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_CUSTOMER_ID_PROPERTY; | ||
40 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_NAME_PROPERTY; | ||
41 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TENANT_ID_PROPERTY; | ||
42 | -import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TYPE_PROPERTY; | ||
43 | -import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; | ||
44 | 28 | ||
45 | @Data | 29 | @Data |
46 | @EqualsAndHashCode(callSuper = true) | 30 | @EqualsAndHashCode(callSuper = true) |
47 | @Entity | 31 | @Entity |
48 | @TypeDef(name = "json", typeClass = JsonStringType.class) | 32 | @TypeDef(name = "json", typeClass = JsonStringType.class) |
49 | @Table(name = ASSET_COLUMN_FAMILY_NAME) | 33 | @Table(name = ASSET_COLUMN_FAMILY_NAME) |
50 | -public final class AssetEntity extends BaseSqlEntity<Asset> implements SearchTextEntity<Asset> { | ||
51 | - | ||
52 | - @Column(name = ASSET_TENANT_ID_PROPERTY) | ||
53 | - private String tenantId; | ||
54 | - | ||
55 | - @Column(name = ASSET_CUSTOMER_ID_PROPERTY) | ||
56 | - private String customerId; | ||
57 | - | ||
58 | - @Column(name = ASSET_NAME_PROPERTY) | ||
59 | - private String name; | ||
60 | - | ||
61 | - @Column(name = ASSET_TYPE_PROPERTY) | ||
62 | - private String type; | ||
63 | - | ||
64 | - @Column(name = SEARCH_TEXT_PROPERTY) | ||
65 | - private String searchText; | ||
66 | - | ||
67 | - @Type(type = "json") | ||
68 | - @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY) | ||
69 | - private JsonNode additionalInfo; | 34 | +public final class AssetEntity extends AbstractAssetEntity<Asset> { |
70 | 35 | ||
71 | public AssetEntity() { | 36 | public AssetEntity() { |
72 | super(); | 37 | super(); |
73 | } | 38 | } |
74 | 39 | ||
75 | public AssetEntity(Asset asset) { | 40 | public AssetEntity(Asset asset) { |
76 | - if (asset.getId() != null) { | ||
77 | - this.setId(asset.getId().getId()); | ||
78 | - } | ||
79 | - if (asset.getTenantId() != null) { | ||
80 | - this.tenantId = UUIDConverter.fromTimeUUID(asset.getTenantId().getId()); | ||
81 | - } | ||
82 | - if (asset.getCustomerId() != null) { | ||
83 | - this.customerId = UUIDConverter.fromTimeUUID(asset.getCustomerId().getId()); | ||
84 | - } | ||
85 | - this.name = asset.getName(); | ||
86 | - this.type = asset.getType(); | ||
87 | - this.additionalInfo = asset.getAdditionalInfo(); | ||
88 | - } | ||
89 | - | ||
90 | - @Override | ||
91 | - public String getSearchTextSource() { | ||
92 | - return name; | ||
93 | - } | ||
94 | - | ||
95 | - @Override | ||
96 | - public void setSearchText(String searchText) { | ||
97 | - this.searchText = searchText; | ||
98 | - } | ||
99 | - | ||
100 | - public String getSearchText() { | ||
101 | - return searchText; | 41 | + super(asset); |
102 | } | 42 | } |
103 | 43 | ||
104 | @Override | 44 | @Override |
105 | public Asset toData() { | 45 | public Asset toData() { |
106 | - Asset asset = new Asset(new AssetId(UUIDConverter.fromString(id))); | ||
107 | - asset.setCreatedTime(UUIDs.unixTimestamp(UUIDConverter.fromString(id))); | ||
108 | - if (tenantId != null) { | ||
109 | - asset.setTenantId(new TenantId(UUIDConverter.fromString(tenantId))); | ||
110 | - } | ||
111 | - if (customerId != null) { | ||
112 | - asset.setCustomerId(new CustomerId(UUIDConverter.fromString(customerId))); | ||
113 | - } | ||
114 | - asset.setName(name); | ||
115 | - asset.setType(type); | ||
116 | - asset.setAdditionalInfo(additionalInfo); | ||
117 | - return asset; | 46 | + return super.toAsset(); |
118 | } | 47 | } |
119 | 48 | ||
120 | } | 49 | } |
1 | +/** | ||
2 | + * Copyright © 2016-2019 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.dao.model.sql; | ||
17 | + | ||
18 | +import com.fasterxml.jackson.databind.JsonNode; | ||
19 | +import lombok.Data; | ||
20 | +import lombok.EqualsAndHashCode; | ||
21 | +import org.thingsboard.server.common.data.asset.AssetInfo; | ||
22 | + | ||
23 | +import java.util.HashMap; | ||
24 | +import java.util.Map; | ||
25 | + | ||
26 | +@Data | ||
27 | +@EqualsAndHashCode(callSuper = true) | ||
28 | +public class AssetInfoEntity extends AbstractAssetEntity<AssetInfo> { | ||
29 | + | ||
30 | + public static final Map<String,String> assetInfoColumnMap = new HashMap<>(); | ||
31 | + static { | ||
32 | + assetInfoColumnMap.put("customerTitle", "c.title"); | ||
33 | + } | ||
34 | + | ||
35 | + private String customerTitle; | ||
36 | + private boolean customerIsPublic; | ||
37 | + | ||
38 | + public AssetInfoEntity() { | ||
39 | + super(); | ||
40 | + } | ||
41 | + | ||
42 | + public AssetInfoEntity(AssetEntity assetEntity, | ||
43 | + String customerTitle, | ||
44 | + Object customerAdditionalInfo) { | ||
45 | + super(assetEntity); | ||
46 | + this.customerTitle = customerTitle; | ||
47 | + if (customerAdditionalInfo != null && ((JsonNode)customerAdditionalInfo).has("isPublic")) { | ||
48 | + this.customerIsPublic = ((JsonNode)customerAdditionalInfo).get("isPublic").asBoolean(); | ||
49 | + } else { | ||
50 | + this.customerIsPublic = false; | ||
51 | + } | ||
52 | + } | ||
53 | + | ||
54 | + @Override | ||
55 | + public AssetInfo toData() { | ||
56 | + return new AssetInfo(super.toAsset(), customerTitle, customerIsPublic); | ||
57 | + } | ||
58 | +} |
@@ -15,22 +15,13 @@ | @@ -15,22 +15,13 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.model.sql; | 16 | package org.thingsboard.server.dao.model.sql; |
17 | 17 | ||
18 | -import com.datastax.driver.core.utils.UUIDs; | ||
19 | -import com.fasterxml.jackson.databind.JsonNode; | ||
20 | import lombok.Data; | 18 | import lombok.Data; |
21 | import lombok.EqualsAndHashCode; | 19 | import lombok.EqualsAndHashCode; |
22 | -import org.hibernate.annotations.Type; | ||
23 | import org.hibernate.annotations.TypeDef; | 20 | import org.hibernate.annotations.TypeDef; |
24 | import org.thingsboard.server.common.data.Device; | 21 | import org.thingsboard.server.common.data.Device; |
25 | -import org.thingsboard.server.common.data.id.CustomerId; | ||
26 | -import org.thingsboard.server.common.data.id.DeviceId; | ||
27 | -import org.thingsboard.server.common.data.id.TenantId; | ||
28 | -import org.thingsboard.server.dao.model.BaseSqlEntity; | ||
29 | import org.thingsboard.server.dao.model.ModelConstants; | 22 | import org.thingsboard.server.dao.model.ModelConstants; |
30 | -import org.thingsboard.server.dao.model.SearchTextEntity; | ||
31 | import org.thingsboard.server.dao.util.mapping.JsonStringType; | 23 | import org.thingsboard.server.dao.util.mapping.JsonStringType; |
32 | 24 | ||
33 | -import javax.persistence.Column; | ||
34 | import javax.persistence.Entity; | 25 | import javax.persistence.Entity; |
35 | import javax.persistence.Table; | 26 | import javax.persistence.Table; |
36 | 27 |
@@ -15,34 +15,15 @@ | @@ -15,34 +15,15 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.model.sql; | 16 | package org.thingsboard.server.dao.model.sql; |
17 | 17 | ||
18 | -import com.datastax.driver.core.utils.UUIDs; | ||
19 | -import com.fasterxml.jackson.databind.JsonNode; | ||
20 | -import com.fasterxml.jackson.databind.ObjectMapper; | ||
21 | import lombok.Data; | 18 | import lombok.Data; |
22 | import lombok.EqualsAndHashCode; | 19 | import lombok.EqualsAndHashCode; |
23 | -import lombok.extern.slf4j.Slf4j; | ||
24 | -import org.hibernate.annotations.Type; | ||
25 | import org.hibernate.annotations.TypeDef; | 20 | import org.hibernate.annotations.TypeDef; |
26 | -import org.thingsboard.server.common.data.EntityType; | ||
27 | import org.thingsboard.server.common.data.EntityView; | 21 | import org.thingsboard.server.common.data.EntityView; |
28 | -import org.thingsboard.server.common.data.id.CustomerId; | ||
29 | -import org.thingsboard.server.common.data.id.EntityIdFactory; | ||
30 | -import org.thingsboard.server.common.data.id.EntityViewId; | ||
31 | -import org.thingsboard.server.common.data.id.TenantId; | ||
32 | -import org.thingsboard.server.common.data.objects.TelemetryEntityView; | ||
33 | -import org.thingsboard.server.dao.model.BaseSqlEntity; | ||
34 | import org.thingsboard.server.dao.model.ModelConstants; | 22 | import org.thingsboard.server.dao.model.ModelConstants; |
35 | -import org.thingsboard.server.dao.model.SearchTextEntity; | ||
36 | import org.thingsboard.server.dao.util.mapping.JsonStringType; | 23 | import org.thingsboard.server.dao.util.mapping.JsonStringType; |
37 | 24 | ||
38 | -import javax.persistence.Column; | ||
39 | import javax.persistence.Entity; | 25 | import javax.persistence.Entity; |
40 | -import javax.persistence.EnumType; | ||
41 | -import javax.persistence.Enumerated; | ||
42 | import javax.persistence.Table; | 26 | import javax.persistence.Table; |
43 | -import java.io.IOException; | ||
44 | - | ||
45 | -import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_PROPERTY; | ||
46 | 27 | ||
47 | /** | 28 | /** |
48 | * Created by Victor Basanets on 8/30/2017. | 29 | * Created by Victor Basanets on 8/30/2017. |
@@ -53,111 +34,18 @@ import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_PROPER | @@ -53,111 +34,18 @@ import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_PROPER | ||
53 | @Entity | 34 | @Entity |
54 | @TypeDef(name = "json", typeClass = JsonStringType.class) | 35 | @TypeDef(name = "json", typeClass = JsonStringType.class) |
55 | @Table(name = ModelConstants.ENTITY_VIEW_TABLE_FAMILY_NAME) | 36 | @Table(name = ModelConstants.ENTITY_VIEW_TABLE_FAMILY_NAME) |
56 | -@Slf4j | ||
57 | -public class EntityViewEntity extends BaseSqlEntity<EntityView> implements SearchTextEntity<EntityView> { | ||
58 | - | ||
59 | - @Column(name = ModelConstants.ENTITY_VIEW_ENTITY_ID_PROPERTY) | ||
60 | - private String entityId; | ||
61 | - | ||
62 | - @Enumerated(EnumType.STRING) | ||
63 | - @Column(name = ENTITY_TYPE_PROPERTY) | ||
64 | - private EntityType entityType; | ||
65 | - | ||
66 | - @Column(name = ModelConstants.ENTITY_VIEW_TENANT_ID_PROPERTY) | ||
67 | - private String tenantId; | ||
68 | - | ||
69 | - @Column(name = ModelConstants.ENTITY_VIEW_CUSTOMER_ID_PROPERTY) | ||
70 | - private String customerId; | ||
71 | - | ||
72 | - @Column(name = ModelConstants.DEVICE_TYPE_PROPERTY) | ||
73 | - private String type; | ||
74 | - | ||
75 | - @Column(name = ModelConstants.ENTITY_VIEW_NAME_PROPERTY) | ||
76 | - private String name; | ||
77 | - | ||
78 | - @Column(name = ModelConstants.ENTITY_VIEW_KEYS_PROPERTY) | ||
79 | - private String keys; | ||
80 | - | ||
81 | - @Column(name = ModelConstants.ENTITY_VIEW_START_TS_PROPERTY) | ||
82 | - private long startTs; | ||
83 | - | ||
84 | - @Column(name = ModelConstants.ENTITY_VIEW_END_TS_PROPERTY) | ||
85 | - private long endTs; | ||
86 | - | ||
87 | - @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) | ||
88 | - private String searchText; | ||
89 | - | ||
90 | - @Type(type = "json") | ||
91 | - @Column(name = ModelConstants.ENTITY_VIEW_ADDITIONAL_INFO_PROPERTY) | ||
92 | - private JsonNode additionalInfo; | ||
93 | - | ||
94 | - private static final ObjectMapper mapper = new ObjectMapper(); | 37 | +public class EntityViewEntity extends AbstractEntityViewEntity<EntityView> { |
95 | 38 | ||
96 | public EntityViewEntity() { | 39 | public EntityViewEntity() { |
97 | super(); | 40 | super(); |
98 | } | 41 | } |
99 | 42 | ||
100 | public EntityViewEntity(EntityView entityView) { | 43 | public EntityViewEntity(EntityView entityView) { |
101 | - if (entityView.getId() != null) { | ||
102 | - this.setId(entityView.getId().getId()); | ||
103 | - } | ||
104 | - if (entityView.getEntityId() != null) { | ||
105 | - this.entityId = toString(entityView.getEntityId().getId()); | ||
106 | - this.entityType = entityView.getEntityId().getEntityType(); | ||
107 | - } | ||
108 | - if (entityView.getTenantId() != null) { | ||
109 | - this.tenantId = toString(entityView.getTenantId().getId()); | ||
110 | - } | ||
111 | - if (entityView.getCustomerId() != null) { | ||
112 | - this.customerId = toString(entityView.getCustomerId().getId()); | ||
113 | - } | ||
114 | - this.type = entityView.getType(); | ||
115 | - this.name = entityView.getName(); | ||
116 | - try { | ||
117 | - this.keys = mapper.writeValueAsString(entityView.getKeys()); | ||
118 | - } catch (IOException e) { | ||
119 | - log.error("Unable to serialize entity view keys!", e); | ||
120 | - } | ||
121 | - this.startTs = entityView.getStartTimeMs(); | ||
122 | - this.endTs = entityView.getEndTimeMs(); | ||
123 | - this.searchText = entityView.getSearchText(); | ||
124 | - this.additionalInfo = entityView.getAdditionalInfo(); | ||
125 | - } | ||
126 | - | ||
127 | - @Override | ||
128 | - public String getSearchTextSource() { | ||
129 | - return name; | ||
130 | - } | ||
131 | - | ||
132 | - @Override | ||
133 | - public void setSearchText(String searchText) { | ||
134 | - this.searchText = searchText; | 44 | + super(entityView); |
135 | } | 45 | } |
136 | 46 | ||
137 | @Override | 47 | @Override |
138 | public EntityView toData() { | 48 | public EntityView toData() { |
139 | - EntityView entityView = new EntityView(new EntityViewId(getId())); | ||
140 | - entityView.setCreatedTime(UUIDs.unixTimestamp(getId())); | ||
141 | - | ||
142 | - if (entityId != null) { | ||
143 | - entityView.setEntityId(EntityIdFactory.getByTypeAndId(entityType.name(), toUUID(entityId).toString())); | ||
144 | - } | ||
145 | - if (tenantId != null) { | ||
146 | - entityView.setTenantId(new TenantId(toUUID(tenantId))); | ||
147 | - } | ||
148 | - if (customerId != null) { | ||
149 | - entityView.setCustomerId(new CustomerId(toUUID(customerId))); | ||
150 | - } | ||
151 | - entityView.setType(type); | ||
152 | - entityView.setName(name); | ||
153 | - try { | ||
154 | - entityView.setKeys(mapper.readValue(keys, TelemetryEntityView.class)); | ||
155 | - } catch (IOException e) { | ||
156 | - log.error("Unable to read entity view keys!", e); | ||
157 | - } | ||
158 | - entityView.setStartTimeMs(startTs); | ||
159 | - entityView.setEndTimeMs(endTs); | ||
160 | - entityView.setAdditionalInfo(additionalInfo); | ||
161 | - return entityView; | 49 | + return super.toEntityView(); |
162 | } | 50 | } |
163 | } | 51 | } |
1 | +/** | ||
2 | + * Copyright © 2016-2019 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.dao.model.sql; | ||
17 | + | ||
18 | +import com.fasterxml.jackson.databind.JsonNode; | ||
19 | +import lombok.Data; | ||
20 | +import lombok.EqualsAndHashCode; | ||
21 | +import org.thingsboard.server.common.data.EntityViewInfo; | ||
22 | + | ||
23 | +import java.util.HashMap; | ||
24 | +import java.util.Map; | ||
25 | + | ||
26 | +@Data | ||
27 | +@EqualsAndHashCode(callSuper = true) | ||
28 | +public class EntityViewInfoEntity extends AbstractEntityViewEntity<EntityViewInfo> { | ||
29 | + | ||
30 | + public static final Map<String,String> entityViewInfoColumnMap = new HashMap<>(); | ||
31 | + static { | ||
32 | + entityViewInfoColumnMap.put("customerTitle", "c.title"); | ||
33 | + } | ||
34 | + | ||
35 | + private String customerTitle; | ||
36 | + private boolean customerIsPublic; | ||
37 | + | ||
38 | + public EntityViewInfoEntity() { | ||
39 | + super(); | ||
40 | + } | ||
41 | + | ||
42 | + public EntityViewInfoEntity(EntityViewEntity entityViewEntity, | ||
43 | + String customerTitle, | ||
44 | + Object customerAdditionalInfo) { | ||
45 | + super(entityViewEntity); | ||
46 | + this.customerTitle = customerTitle; | ||
47 | + if (customerAdditionalInfo != null && ((JsonNode)customerAdditionalInfo).has("isPublic")) { | ||
48 | + this.customerIsPublic = ((JsonNode)customerAdditionalInfo).get("isPublic").asBoolean(); | ||
49 | + } else { | ||
50 | + this.customerIsPublic = false; | ||
51 | + } | ||
52 | + } | ||
53 | + | ||
54 | + @Override | ||
55 | + public EntityViewInfo toData() { | ||
56 | + return new EntityViewInfo(super.toEntityView(), customerTitle, customerIsPublic); | ||
57 | + } | ||
58 | +} |
@@ -22,6 +22,7 @@ import org.springframework.data.repository.CrudRepository; | @@ -22,6 +22,7 @@ import org.springframework.data.repository.CrudRepository; | ||
22 | import org.springframework.data.repository.PagingAndSortingRepository; | 22 | import org.springframework.data.repository.PagingAndSortingRepository; |
23 | import org.springframework.data.repository.query.Param; | 23 | import org.springframework.data.repository.query.Param; |
24 | import org.thingsboard.server.dao.model.sql.AssetEntity; | 24 | import org.thingsboard.server.dao.model.sql.AssetEntity; |
25 | +import org.thingsboard.server.dao.model.sql.AssetInfoEntity; | ||
25 | import org.thingsboard.server.dao.util.SqlDao; | 26 | import org.thingsboard.server.dao.util.SqlDao; |
26 | 27 | ||
27 | import java.util.List; | 28 | import java.util.List; |
@@ -32,12 +33,27 @@ import java.util.List; | @@ -32,12 +33,27 @@ import java.util.List; | ||
32 | @SqlDao | 33 | @SqlDao |
33 | public interface AssetRepository extends PagingAndSortingRepository<AssetEntity, String> { | 34 | public interface AssetRepository extends PagingAndSortingRepository<AssetEntity, String> { |
34 | 35 | ||
36 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.AssetInfoEntity(a, c.title, c.additionalInfo) " + | ||
37 | + "FROM AssetEntity a " + | ||
38 | + "LEFT JOIN CustomerEntity c on c.id = a.customerId " + | ||
39 | + "WHERE a.id = :assetId") | ||
40 | + AssetInfoEntity findAssetInfoById(@Param("assetId") String assetId); | ||
41 | + | ||
35 | @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + | 42 | @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + |
36 | "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | 43 | "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") |
37 | Page<AssetEntity> findByTenantId(@Param("tenantId") String tenantId, | 44 | Page<AssetEntity> findByTenantId(@Param("tenantId") String tenantId, |
38 | @Param("textSearch") String textSearch, | 45 | @Param("textSearch") String textSearch, |
39 | Pageable pageable); | 46 | Pageable pageable); |
40 | 47 | ||
48 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.AssetInfoEntity(a, c.title, c.additionalInfo) " + | ||
49 | + "FROM AssetEntity a " + | ||
50 | + "LEFT JOIN CustomerEntity c on c.id = a.customerId " + | ||
51 | + "WHERE a.tenantId = :tenantId " + | ||
52 | + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | ||
53 | + Page<AssetInfoEntity> findAssetInfosByTenantId(@Param("tenantId") String tenantId, | ||
54 | + @Param("textSearch") String textSearch, | ||
55 | + Pageable pageable); | ||
56 | + | ||
41 | @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + | 57 | @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + |
42 | "AND a.customerId = :customerId " + | 58 | "AND a.customerId = :customerId " + |
43 | "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | 59 | "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") |
@@ -46,6 +62,17 @@ public interface AssetRepository extends PagingAndSortingRepository<AssetEntity, | @@ -46,6 +62,17 @@ public interface AssetRepository extends PagingAndSortingRepository<AssetEntity, | ||
46 | @Param("textSearch") String textSearch, | 62 | @Param("textSearch") String textSearch, |
47 | Pageable pageable); | 63 | Pageable pageable); |
48 | 64 | ||
65 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.AssetInfoEntity(a, c.title, c.additionalInfo) " + | ||
66 | + "FROM AssetEntity a " + | ||
67 | + "LEFT JOIN CustomerEntity c on c.id = a.customerId " + | ||
68 | + "WHERE a.tenantId = :tenantId " + | ||
69 | + "AND a.customerId = :customerId " + | ||
70 | + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:searchText, '%'))") | ||
71 | + Page<AssetInfoEntity> findAssetInfosByTenantIdAndCustomerId(@Param("tenantId") String tenantId, | ||
72 | + @Param("customerId") String customerId, | ||
73 | + @Param("searchText") String searchText, | ||
74 | + Pageable pageable); | ||
75 | + | ||
49 | List<AssetEntity> findByTenantIdAndIdIn(String tenantId, List<String> assetIds); | 76 | List<AssetEntity> findByTenantIdAndIdIn(String tenantId, List<String> assetIds); |
50 | 77 | ||
51 | List<AssetEntity> findByTenantIdAndCustomerIdAndIdIn(String tenantId, String customerId, List<String> assetIds); | 78 | List<AssetEntity> findByTenantIdAndCustomerIdAndIdIn(String tenantId, String customerId, List<String> assetIds); |
@@ -60,6 +87,18 @@ public interface AssetRepository extends PagingAndSortingRepository<AssetEntity, | @@ -60,6 +87,18 @@ public interface AssetRepository extends PagingAndSortingRepository<AssetEntity, | ||
60 | @Param("textSearch") String textSearch, | 87 | @Param("textSearch") String textSearch, |
61 | Pageable pageable); | 88 | Pageable pageable); |
62 | 89 | ||
90 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.AssetInfoEntity(a, c.title, c.additionalInfo) " + | ||
91 | + "FROM AssetEntity a " + | ||
92 | + "LEFT JOIN CustomerEntity c on c.id = a.customerId " + | ||
93 | + "WHERE a.tenantId = :tenantId " + | ||
94 | + "AND a.type = :type " + | ||
95 | + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | ||
96 | + Page<AssetInfoEntity> findAssetInfosByTenantIdAndType(@Param("tenantId") String tenantId, | ||
97 | + @Param("type") String type, | ||
98 | + @Param("textSearch") String textSearch, | ||
99 | + Pageable pageable); | ||
100 | + | ||
101 | + | ||
63 | @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + | 102 | @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + |
64 | "AND a.customerId = :customerId AND a.type = :type " + | 103 | "AND a.customerId = :customerId AND a.type = :type " + |
65 | "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | 104 | "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") |
@@ -69,6 +108,19 @@ public interface AssetRepository extends PagingAndSortingRepository<AssetEntity, | @@ -69,6 +108,19 @@ public interface AssetRepository extends PagingAndSortingRepository<AssetEntity, | ||
69 | @Param("textSearch") String textSearch, | 108 | @Param("textSearch") String textSearch, |
70 | Pageable pageable); | 109 | Pageable pageable); |
71 | 110 | ||
111 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.AssetInfoEntity(a, c.title, c.additionalInfo) " + | ||
112 | + "FROM AssetEntity a " + | ||
113 | + "LEFT JOIN CustomerEntity c on c.id = a.customerId " + | ||
114 | + "WHERE a.tenantId = :tenantId " + | ||
115 | + "AND a.customerId = :customerId " + | ||
116 | + "AND a.type = :type " + | ||
117 | + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | ||
118 | + Page<AssetInfoEntity> findAssetInfosByTenantIdAndCustomerIdAndType(@Param("tenantId") String tenantId, | ||
119 | + @Param("customerId") String customerId, | ||
120 | + @Param("type") String type, | ||
121 | + @Param("textSearch") String textSearch, | ||
122 | + Pageable pageable); | ||
123 | + | ||
72 | @Query("SELECT DISTINCT a.type FROM AssetEntity a WHERE a.tenantId = :tenantId") | 124 | @Query("SELECT DISTINCT a.type FROM AssetEntity a WHERE a.tenantId = :tenantId") |
73 | List<String> findTenantAssetTypes(@Param("tenantId") String tenantId); | 125 | List<String> findTenantAssetTypes(@Param("tenantId") String tenantId); |
74 | 126 |
@@ -23,12 +23,14 @@ import org.springframework.stereotype.Component; | @@ -23,12 +23,14 @@ import org.springframework.stereotype.Component; | ||
23 | import org.thingsboard.server.common.data.EntitySubtype; | 23 | import org.thingsboard.server.common.data.EntitySubtype; |
24 | import org.thingsboard.server.common.data.EntityType; | 24 | import org.thingsboard.server.common.data.EntityType; |
25 | import org.thingsboard.server.common.data.asset.Asset; | 25 | import org.thingsboard.server.common.data.asset.Asset; |
26 | +import org.thingsboard.server.common.data.asset.AssetInfo; | ||
26 | import org.thingsboard.server.common.data.id.TenantId; | 27 | import org.thingsboard.server.common.data.id.TenantId; |
27 | import org.thingsboard.server.common.data.page.PageData; | 28 | import org.thingsboard.server.common.data.page.PageData; |
28 | import org.thingsboard.server.common.data.page.PageLink; | 29 | import org.thingsboard.server.common.data.page.PageLink; |
29 | import org.thingsboard.server.dao.DaoUtil; | 30 | import org.thingsboard.server.dao.DaoUtil; |
30 | import org.thingsboard.server.dao.asset.AssetDao; | 31 | import org.thingsboard.server.dao.asset.AssetDao; |
31 | import org.thingsboard.server.dao.model.sql.AssetEntity; | 32 | import org.thingsboard.server.dao.model.sql.AssetEntity; |
33 | +import org.thingsboard.server.dao.model.sql.AssetInfoEntity; | ||
32 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | 34 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
33 | import org.thingsboard.server.dao.util.SqlDao; | 35 | import org.thingsboard.server.dao.util.SqlDao; |
34 | 36 | ||
@@ -64,6 +66,11 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | @@ -64,6 +66,11 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | ||
64 | } | 66 | } |
65 | 67 | ||
66 | @Override | 68 | @Override |
69 | + public AssetInfo findAssetInfoById(TenantId tenantId, UUID assetId) { | ||
70 | + return DaoUtil.getData(assetRepository.findAssetInfoById(fromTimeUUID(assetId))); | ||
71 | + } | ||
72 | + | ||
73 | + @Override | ||
67 | public PageData<Asset> findAssetsByTenantId(UUID tenantId, PageLink pageLink) { | 74 | public PageData<Asset> findAssetsByTenantId(UUID tenantId, PageLink pageLink) { |
68 | return DaoUtil.toPageData(assetRepository | 75 | return DaoUtil.toPageData(assetRepository |
69 | .findByTenantId( | 76 | .findByTenantId( |
@@ -73,6 +80,15 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | @@ -73,6 +80,15 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | ||
73 | } | 80 | } |
74 | 81 | ||
75 | @Override | 82 | @Override |
83 | + public PageData<AssetInfo> findAssetInfosByTenantId(UUID tenantId, PageLink pageLink) { | ||
84 | + return DaoUtil.toPageData( | ||
85 | + assetRepository.findAssetInfosByTenantId( | ||
86 | + fromTimeUUID(tenantId), | ||
87 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
88 | + DaoUtil.toPageable(pageLink, AssetInfoEntity.assetInfoColumnMap))); | ||
89 | + } | ||
90 | + | ||
91 | + @Override | ||
76 | public ListenableFuture<List<Asset>> findAssetsByTenantIdAndIdsAsync(UUID tenantId, List<UUID> assetIds) { | 92 | public ListenableFuture<List<Asset>> findAssetsByTenantIdAndIdsAsync(UUID tenantId, List<UUID> assetIds) { |
77 | return service.submit(() -> | 93 | return service.submit(() -> |
78 | DaoUtil.convertDataList(assetRepository.findByTenantIdAndIdIn(fromTimeUUID(tenantId), fromTimeUUIDs(assetIds)))); | 94 | DaoUtil.convertDataList(assetRepository.findByTenantIdAndIdIn(fromTimeUUID(tenantId), fromTimeUUIDs(assetIds)))); |
@@ -89,6 +105,16 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | @@ -89,6 +105,16 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | ||
89 | } | 105 | } |
90 | 106 | ||
91 | @Override | 107 | @Override |
108 | + public PageData<AssetInfo> findAssetInfosByTenantIdAndCustomerId(UUID tenantId, UUID customerId, PageLink pageLink) { | ||
109 | + return DaoUtil.toPageData( | ||
110 | + assetRepository.findAssetInfosByTenantIdAndCustomerId( | ||
111 | + fromTimeUUID(tenantId), | ||
112 | + fromTimeUUID(customerId), | ||
113 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
114 | + DaoUtil.toPageable(pageLink, AssetInfoEntity.assetInfoColumnMap))); | ||
115 | + } | ||
116 | + | ||
117 | + @Override | ||
92 | public ListenableFuture<List<Asset>> findAssetsByTenantIdAndCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> assetIds) { | 118 | public ListenableFuture<List<Asset>> findAssetsByTenantIdAndCustomerIdAndIdsAsync(UUID tenantId, UUID customerId, List<UUID> assetIds) { |
93 | return service.submit(() -> | 119 | return service.submit(() -> |
94 | DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdAndIdIn(fromTimeUUID(tenantId), fromTimeUUID(customerId), fromTimeUUIDs(assetIds)))); | 120 | DaoUtil.convertDataList(assetRepository.findByTenantIdAndCustomerIdAndIdIn(fromTimeUUID(tenantId), fromTimeUUID(customerId), fromTimeUUIDs(assetIds)))); |
@@ -111,6 +137,16 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | @@ -111,6 +137,16 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | ||
111 | } | 137 | } |
112 | 138 | ||
113 | @Override | 139 | @Override |
140 | + public PageData<AssetInfo> findAssetInfosByTenantIdAndType(UUID tenantId, String type, PageLink pageLink) { | ||
141 | + return DaoUtil.toPageData( | ||
142 | + assetRepository.findAssetInfosByTenantIdAndType( | ||
143 | + fromTimeUUID(tenantId), | ||
144 | + type, | ||
145 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
146 | + DaoUtil.toPageable(pageLink, AssetInfoEntity.assetInfoColumnMap))); | ||
147 | + } | ||
148 | + | ||
149 | + @Override | ||
114 | public PageData<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink) { | 150 | public PageData<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink) { |
115 | return DaoUtil.toPageData(assetRepository | 151 | return DaoUtil.toPageData(assetRepository |
116 | .findByTenantIdAndCustomerIdAndType( | 152 | .findByTenantIdAndCustomerIdAndType( |
@@ -122,6 +158,17 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | @@ -122,6 +158,17 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | ||
122 | } | 158 | } |
123 | 159 | ||
124 | @Override | 160 | @Override |
161 | + public PageData<AssetInfo> findAssetInfosByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink) { | ||
162 | + return DaoUtil.toPageData( | ||
163 | + assetRepository.findAssetInfosByTenantIdAndCustomerIdAndType( | ||
164 | + fromTimeUUID(tenantId), | ||
165 | + fromTimeUUID(customerId), | ||
166 | + type, | ||
167 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
168 | + DaoUtil.toPageable(pageLink, AssetInfoEntity.assetInfoColumnMap))); | ||
169 | + } | ||
170 | + | ||
171 | + @Override | ||
125 | public ListenableFuture<List<EntitySubtype>> findTenantAssetTypesAsync(UUID tenantId) { | 172 | public ListenableFuture<List<EntitySubtype>> findTenantAssetTypesAsync(UUID tenantId) { |
126 | return service.submit(() -> convertTenantAssetTypesToDto(tenantId, assetRepository.findTenantAssetTypes(fromTimeUUID(tenantId)))); | 173 | return service.submit(() -> convertTenantAssetTypesToDto(tenantId, assetRepository.findTenantAssetTypes(fromTimeUUID(tenantId)))); |
127 | } | 174 | } |
@@ -22,6 +22,7 @@ import org.springframework.data.repository.CrudRepository; | @@ -22,6 +22,7 @@ import org.springframework.data.repository.CrudRepository; | ||
22 | import org.springframework.data.repository.PagingAndSortingRepository; | 22 | import org.springframework.data.repository.PagingAndSortingRepository; |
23 | import org.springframework.data.repository.query.Param; | 23 | import org.springframework.data.repository.query.Param; |
24 | import org.thingsboard.server.dao.model.sql.EntityViewEntity; | 24 | import org.thingsboard.server.dao.model.sql.EntityViewEntity; |
25 | +import org.thingsboard.server.dao.model.sql.EntityViewInfoEntity; | ||
25 | import org.thingsboard.server.dao.util.SqlDao; | 26 | import org.thingsboard.server.dao.util.SqlDao; |
26 | 27 | ||
27 | import java.util.List; | 28 | import java.util.List; |
@@ -32,12 +33,27 @@ import java.util.List; | @@ -32,12 +33,27 @@ import java.util.List; | ||
32 | @SqlDao | 33 | @SqlDao |
33 | public interface EntityViewRepository extends PagingAndSortingRepository<EntityViewEntity, String> { | 34 | public interface EntityViewRepository extends PagingAndSortingRepository<EntityViewEntity, String> { |
34 | 35 | ||
36 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.EntityViewInfoEntity(e, c.title, c.additionalInfo) " + | ||
37 | + "FROM EntityViewEntity e " + | ||
38 | + "LEFT JOIN CustomerEntity c on c.id = e.customerId " + | ||
39 | + "WHERE e.id = :entityViewId") | ||
40 | + EntityViewInfoEntity findEntityViewInfoById(@Param("entityViewId") String entityViewId); | ||
41 | + | ||
35 | @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " + | 42 | @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " + |
36 | "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | 43 | "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") |
37 | Page<EntityViewEntity> findByTenantId(@Param("tenantId") String tenantId, | 44 | Page<EntityViewEntity> findByTenantId(@Param("tenantId") String tenantId, |
38 | @Param("textSearch") String textSearch, | 45 | @Param("textSearch") String textSearch, |
39 | Pageable pageable); | 46 | Pageable pageable); |
40 | 47 | ||
48 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.EntityViewInfoEntity(e, c.title, c.additionalInfo) " + | ||
49 | + "FROM EntityViewEntity e " + | ||
50 | + "LEFT JOIN CustomerEntity c on c.id = e.customerId " + | ||
51 | + "WHERE e.tenantId = :tenantId " + | ||
52 | + "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | ||
53 | + Page<EntityViewInfoEntity> findEntityViewInfosByTenantId(@Param("tenantId") String tenantId, | ||
54 | + @Param("textSearch") String textSearch, | ||
55 | + Pageable pageable); | ||
56 | + | ||
41 | @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " + | 57 | @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " + |
42 | "AND e.type = :type " + | 58 | "AND e.type = :type " + |
43 | "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | 59 | "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") |
@@ -46,6 +62,17 @@ public interface EntityViewRepository extends PagingAndSortingRepository<EntityV | @@ -46,6 +62,17 @@ public interface EntityViewRepository extends PagingAndSortingRepository<EntityV | ||
46 | @Param("textSearch") String textSearch, | 62 | @Param("textSearch") String textSearch, |
47 | Pageable pageable); | 63 | Pageable pageable); |
48 | 64 | ||
65 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.EntityViewInfoEntity(e, c.title, c.additionalInfo) " + | ||
66 | + "FROM EntityViewEntity e " + | ||
67 | + "LEFT JOIN CustomerEntity c on c.id = e.customerId " + | ||
68 | + "WHERE e.tenantId = :tenantId " + | ||
69 | + "AND e.type = :type " + | ||
70 | + "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | ||
71 | + Page<EntityViewInfoEntity> findEntityViewInfosByTenantIdAndType(@Param("tenantId") String tenantId, | ||
72 | + @Param("type") String type, | ||
73 | + @Param("textSearch") String textSearch, | ||
74 | + Pageable pageable); | ||
75 | + | ||
49 | @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " + | 76 | @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " + |
50 | "AND e.customerId = :customerId " + | 77 | "AND e.customerId = :customerId " + |
51 | "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:searchText, '%'))") | 78 | "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:searchText, '%'))") |
@@ -54,6 +81,17 @@ public interface EntityViewRepository extends PagingAndSortingRepository<EntityV | @@ -54,6 +81,17 @@ public interface EntityViewRepository extends PagingAndSortingRepository<EntityV | ||
54 | @Param("searchText") String searchText, | 81 | @Param("searchText") String searchText, |
55 | Pageable pageable); | 82 | Pageable pageable); |
56 | 83 | ||
84 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.EntityViewInfoEntity(e, c.title, c.additionalInfo) " + | ||
85 | + "FROM EntityViewEntity e " + | ||
86 | + "LEFT JOIN CustomerEntity c on c.id = e.customerId " + | ||
87 | + "WHERE e.tenantId = :tenantId " + | ||
88 | + "AND e.customerId = :customerId " + | ||
89 | + "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:searchText, '%'))") | ||
90 | + Page<EntityViewInfoEntity> findEntityViewInfosByTenantIdAndCustomerId(@Param("tenantId") String tenantId, | ||
91 | + @Param("customerId") String customerId, | ||
92 | + @Param("searchText") String searchText, | ||
93 | + Pageable pageable); | ||
94 | + | ||
57 | @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " + | 95 | @Query("SELECT e FROM EntityViewEntity e WHERE e.tenantId = :tenantId " + |
58 | "AND e.customerId = :customerId " + | 96 | "AND e.customerId = :customerId " + |
59 | "AND e.type = :type " + | 97 | "AND e.type = :type " + |
@@ -64,6 +102,19 @@ public interface EntityViewRepository extends PagingAndSortingRepository<EntityV | @@ -64,6 +102,19 @@ public interface EntityViewRepository extends PagingAndSortingRepository<EntityV | ||
64 | @Param("searchText") String searchText, | 102 | @Param("searchText") String searchText, |
65 | Pageable pageable); | 103 | Pageable pageable); |
66 | 104 | ||
105 | + @Query("SELECT new org.thingsboard.server.dao.model.sql.EntityViewInfoEntity(e, c.title, c.additionalInfo) " + | ||
106 | + "FROM EntityViewEntity e " + | ||
107 | + "LEFT JOIN CustomerEntity c on c.id = e.customerId " + | ||
108 | + "WHERE e.tenantId = :tenantId " + | ||
109 | + "AND e.customerId = :customerId " + | ||
110 | + "AND e.type = :type " + | ||
111 | + "AND LOWER(e.searchText) LIKE LOWER(CONCAT(:textSearch, '%'))") | ||
112 | + Page<EntityViewInfoEntity> findEntityViewInfosByTenantIdAndCustomerIdAndType(@Param("tenantId") String tenantId, | ||
113 | + @Param("customerId") String customerId, | ||
114 | + @Param("type") String type, | ||
115 | + @Param("textSearch") String textSearch, | ||
116 | + Pageable pageable); | ||
117 | + | ||
67 | EntityViewEntity findByTenantIdAndName(String tenantId, String name); | 118 | EntityViewEntity findByTenantIdAndName(String tenantId, String name); |
68 | 119 | ||
69 | List<EntityViewEntity> findAllByTenantIdAndEntityId(String tenantId, String entityId); | 120 | List<EntityViewEntity> findAllByTenantIdAndEntityId(String tenantId, String entityId); |
@@ -20,16 +20,14 @@ import org.springframework.beans.factory.annotation.Autowired; | @@ -20,16 +20,14 @@ import org.springframework.beans.factory.annotation.Autowired; | ||
20 | import org.springframework.data.domain.PageRequest; | 20 | import org.springframework.data.domain.PageRequest; |
21 | import org.springframework.data.repository.CrudRepository; | 21 | import org.springframework.data.repository.CrudRepository; |
22 | import org.springframework.stereotype.Component; | 22 | import org.springframework.stereotype.Component; |
23 | -import org.thingsboard.server.common.data.EntitySubtype; | ||
24 | -import org.thingsboard.server.common.data.EntityType; | ||
25 | -import org.thingsboard.server.common.data.EntityView; | ||
26 | -import org.thingsboard.server.common.data.UUIDConverter; | 23 | +import org.thingsboard.server.common.data.*; |
27 | import org.thingsboard.server.common.data.id.TenantId; | 24 | import org.thingsboard.server.common.data.id.TenantId; |
28 | import org.thingsboard.server.common.data.page.PageData; | 25 | import org.thingsboard.server.common.data.page.PageData; |
29 | import org.thingsboard.server.common.data.page.PageLink; | 26 | import org.thingsboard.server.common.data.page.PageLink; |
30 | import org.thingsboard.server.dao.DaoUtil; | 27 | import org.thingsboard.server.dao.DaoUtil; |
31 | import org.thingsboard.server.dao.entityview.EntityViewDao; | 28 | import org.thingsboard.server.dao.entityview.EntityViewDao; |
32 | import org.thingsboard.server.dao.model.sql.EntityViewEntity; | 29 | import org.thingsboard.server.dao.model.sql.EntityViewEntity; |
30 | +import org.thingsboard.server.dao.model.sql.EntityViewInfoEntity; | ||
33 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | 31 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
34 | import org.thingsboard.server.dao.util.SqlDao; | 32 | import org.thingsboard.server.dao.util.SqlDao; |
35 | 33 | ||
@@ -65,6 +63,11 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | @@ -65,6 +63,11 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | ||
65 | } | 63 | } |
66 | 64 | ||
67 | @Override | 65 | @Override |
66 | + public EntityViewInfo findEntityViewInfoById(TenantId tenantId, UUID entityViewId) { | ||
67 | + return DaoUtil.getData(entityViewRepository.findEntityViewInfoById(fromTimeUUID(entityViewId))); | ||
68 | + } | ||
69 | + | ||
70 | + @Override | ||
68 | public PageData<EntityView> findEntityViewsByTenantId(UUID tenantId, PageLink pageLink) { | 71 | public PageData<EntityView> findEntityViewsByTenantId(UUID tenantId, PageLink pageLink) { |
69 | return DaoUtil.toPageData( | 72 | return DaoUtil.toPageData( |
70 | entityViewRepository.findByTenantId( | 73 | entityViewRepository.findByTenantId( |
@@ -74,6 +77,15 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | @@ -74,6 +77,15 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | ||
74 | } | 77 | } |
75 | 78 | ||
76 | @Override | 79 | @Override |
80 | + public PageData<EntityViewInfo> findEntityViewInfosByTenantId(UUID tenantId, PageLink pageLink) { | ||
81 | + return DaoUtil.toPageData( | ||
82 | + entityViewRepository.findEntityViewInfosByTenantId( | ||
83 | + fromTimeUUID(tenantId), | ||
84 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
85 | + DaoUtil.toPageable(pageLink, EntityViewInfoEntity.entityViewInfoColumnMap))); | ||
86 | + } | ||
87 | + | ||
88 | + @Override | ||
77 | public PageData<EntityView> findEntityViewsByTenantIdAndType(UUID tenantId, String type, PageLink pageLink) { | 89 | public PageData<EntityView> findEntityViewsByTenantIdAndType(UUID tenantId, String type, PageLink pageLink) { |
78 | return DaoUtil.toPageData( | 90 | return DaoUtil.toPageData( |
79 | entityViewRepository.findByTenantIdAndType( | 91 | entityViewRepository.findByTenantIdAndType( |
@@ -84,6 +96,16 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | @@ -84,6 +96,16 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | ||
84 | } | 96 | } |
85 | 97 | ||
86 | @Override | 98 | @Override |
99 | + public PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndType(UUID tenantId, String type, PageLink pageLink) { | ||
100 | + return DaoUtil.toPageData( | ||
101 | + entityViewRepository.findEntityViewInfosByTenantIdAndType( | ||
102 | + fromTimeUUID(tenantId), | ||
103 | + type, | ||
104 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
105 | + DaoUtil.toPageable(pageLink, EntityViewInfoEntity.entityViewInfoColumnMap))); | ||
106 | + } | ||
107 | + | ||
108 | + @Override | ||
87 | public Optional<EntityView> findEntityViewByTenantIdAndName(UUID tenantId, String name) { | 109 | public Optional<EntityView> findEntityViewByTenantIdAndName(UUID tenantId, String name) { |
88 | return Optional.ofNullable( | 110 | return Optional.ofNullable( |
89 | DaoUtil.getData(entityViewRepository.findByTenantIdAndName(fromTimeUUID(tenantId), name))); | 111 | DaoUtil.getData(entityViewRepository.findByTenantIdAndName(fromTimeUUID(tenantId), name))); |
@@ -103,6 +125,16 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | @@ -103,6 +125,16 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | ||
103 | } | 125 | } |
104 | 126 | ||
105 | @Override | 127 | @Override |
128 | + public PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndCustomerId(UUID tenantId, UUID customerId, PageLink pageLink) { | ||
129 | + return DaoUtil.toPageData( | ||
130 | + entityViewRepository.findEntityViewInfosByTenantIdAndCustomerId( | ||
131 | + fromTimeUUID(tenantId), | ||
132 | + fromTimeUUID(customerId), | ||
133 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
134 | + DaoUtil.toPageable(pageLink, EntityViewInfoEntity.entityViewInfoColumnMap))); | ||
135 | + } | ||
136 | + | ||
137 | + @Override | ||
106 | public PageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink) { | 138 | public PageData<EntityView> findEntityViewsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink) { |
107 | return DaoUtil.toPageData( | 139 | return DaoUtil.toPageData( |
108 | entityViewRepository.findByTenantIdAndCustomerIdAndType( | 140 | entityViewRepository.findByTenantIdAndCustomerIdAndType( |
@@ -115,6 +147,17 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | @@ -115,6 +147,17 @@ public class JpaEntityViewDao extends JpaAbstractSearchTextDao<EntityViewEntity, | ||
115 | } | 147 | } |
116 | 148 | ||
117 | @Override | 149 | @Override |
150 | + public PageData<EntityViewInfo> findEntityViewInfosByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, PageLink pageLink) { | ||
151 | + return DaoUtil.toPageData( | ||
152 | + entityViewRepository.findEntityViewInfosByTenantIdAndCustomerIdAndType( | ||
153 | + fromTimeUUID(tenantId), | ||
154 | + fromTimeUUID(customerId), | ||
155 | + type, | ||
156 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
157 | + DaoUtil.toPageable(pageLink, EntityViewInfoEntity.entityViewInfoColumnMap))); | ||
158 | + } | ||
159 | + | ||
160 | + @Override | ||
118 | public ListenableFuture<List<EntityView>> findEntityViewsByTenantIdAndEntityIdAsync(UUID tenantId, UUID entityId) { | 161 | public ListenableFuture<List<EntityView>> findEntityViewsByTenantIdAndEntityIdAsync(UUID tenantId, UUID entityId) { |
119 | return service.submit(() -> DaoUtil.convertDataList( | 162 | return service.submit(() -> DaoUtil.convertDataList( |
120 | entityViewRepository.findAllByTenantIdAndEntityId(UUIDConverter.fromTimeUUID(tenantId), UUIDConverter.fromTimeUUID(entityId)))); | 163 | entityViewRepository.findAllByTenantIdAndEntityId(UUIDConverter.fromTimeUUID(tenantId), UUIDConverter.fromTimeUUID(entityId)))); |
@@ -24,7 +24,7 @@ import java.util.Arrays; | @@ -24,7 +24,7 @@ import java.util.Arrays; | ||
24 | 24 | ||
25 | @RunWith(ClasspathSuite.class) | 25 | @RunWith(ClasspathSuite.class) |
26 | @ClassnameFilters({ | 26 | @ClassnameFilters({ |
27 | - "org.thingsboard.server.dao.service.*DeviceServiceSqlTest" | 27 | + "org.thingsboard.server.dao.service.*ServiceSqlTest" |
28 | }) | 28 | }) |
29 | public class SqlDaoServiceTestSuite { | 29 | public class SqlDaoServiceTestSuite { |
30 | 30 |
@@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.Customer; | @@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.Customer; | ||
25 | import org.thingsboard.server.common.data.EntitySubtype; | 25 | import org.thingsboard.server.common.data.EntitySubtype; |
26 | import org.thingsboard.server.common.data.Tenant; | 26 | import org.thingsboard.server.common.data.Tenant; |
27 | import org.thingsboard.server.common.data.asset.Asset; | 27 | import org.thingsboard.server.common.data.asset.Asset; |
28 | +import org.thingsboard.server.common.data.asset.AssetInfo; | ||
28 | import org.thingsboard.server.common.data.id.CustomerId; | 29 | import org.thingsboard.server.common.data.id.CustomerId; |
29 | import org.thingsboard.server.common.data.id.TenantId; | 30 | import org.thingsboard.server.common.data.id.TenantId; |
30 | import org.thingsboard.server.common.data.page.PageData; | 31 | import org.thingsboard.server.common.data.page.PageData; |
@@ -252,7 +253,7 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | @@ -252,7 +253,7 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | ||
252 | @Test | 253 | @Test |
253 | public void testFindAssetsByTenantIdAndName() { | 254 | public void testFindAssetsByTenantIdAndName() { |
254 | String title1 = "Asset title 1"; | 255 | String title1 = "Asset title 1"; |
255 | - List<Asset> assetsTitle1 = new ArrayList<>(); | 256 | + List<AssetInfo> assetsTitle1 = new ArrayList<>(); |
256 | for (int i=0;i<143;i++) { | 257 | for (int i=0;i<143;i++) { |
257 | Asset asset = new Asset(); | 258 | Asset asset = new Asset(); |
258 | asset.setTenantId(tenantId); | 259 | asset.setTenantId(tenantId); |
@@ -261,10 +262,10 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | @@ -261,10 +262,10 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | ||
261 | name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); | 262 | name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
262 | asset.setName(name); | 263 | asset.setName(name); |
263 | asset.setType("default"); | 264 | asset.setType("default"); |
264 | - assetsTitle1.add(assetService.saveAsset(asset)); | 265 | + assetsTitle1.add(new AssetInfo(assetService.saveAsset(asset), null, false)); |
265 | } | 266 | } |
266 | String title2 = "Asset title 2"; | 267 | String title2 = "Asset title 2"; |
267 | - List<Asset> assetsTitle2 = new ArrayList<>(); | 268 | + List<AssetInfo> assetsTitle2 = new ArrayList<>(); |
268 | for (int i=0;i<175;i++) { | 269 | for (int i=0;i<175;i++) { |
269 | Asset asset = new Asset(); | 270 | Asset asset = new Asset(); |
270 | asset.setTenantId(tenantId); | 271 | asset.setTenantId(tenantId); |
@@ -273,14 +274,14 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | @@ -273,14 +274,14 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | ||
273 | name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); | 274 | name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
274 | asset.setName(name); | 275 | asset.setName(name); |
275 | asset.setType("default"); | 276 | asset.setType("default"); |
276 | - assetsTitle2.add(assetService.saveAsset(asset)); | 277 | + assetsTitle2.add(new AssetInfo(assetService.saveAsset(asset), null, false)); |
277 | } | 278 | } |
278 | 279 | ||
279 | - List<Asset> loadedAssetsTitle1 = new ArrayList<>(); | 280 | + List<AssetInfo> loadedAssetsTitle1 = new ArrayList<>(); |
280 | PageLink pageLink = new PageLink(15, 0, title1); | 281 | PageLink pageLink = new PageLink(15, 0, title1); |
281 | - PageData<Asset> pageData = null; | 282 | + PageData<AssetInfo> pageData = null; |
282 | do { | 283 | do { |
283 | - pageData = assetService.findAssetsByTenantId(tenantId, pageLink); | 284 | + pageData = assetService.findAssetInfosByTenantId(tenantId, pageLink); |
284 | loadedAssetsTitle1.addAll(pageData.getData()); | 285 | loadedAssetsTitle1.addAll(pageData.getData()); |
285 | if (pageData.hasNext()) { | 286 | if (pageData.hasNext()) { |
286 | pageLink = pageLink.nextPageLink(); | 287 | pageLink = pageLink.nextPageLink(); |
@@ -292,10 +293,10 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | @@ -292,10 +293,10 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | ||
292 | 293 | ||
293 | Assert.assertEquals(assetsTitle1, loadedAssetsTitle1); | 294 | Assert.assertEquals(assetsTitle1, loadedAssetsTitle1); |
294 | 295 | ||
295 | - List<Asset> loadedAssetsTitle2 = new ArrayList<>(); | 296 | + List<AssetInfo> loadedAssetsTitle2 = new ArrayList<>(); |
296 | pageLink = new PageLink(4, 0, title2); | 297 | pageLink = new PageLink(4, 0, title2); |
297 | do { | 298 | do { |
298 | - pageData = assetService.findAssetsByTenantId(tenantId, pageLink); | 299 | + pageData = assetService.findAssetInfosByTenantId(tenantId, pageLink); |
299 | loadedAssetsTitle2.addAll(pageData.getData()); | 300 | loadedAssetsTitle2.addAll(pageData.getData()); |
300 | if (pageData.hasNext()) { | 301 | if (pageData.hasNext()) { |
301 | pageLink = pageLink.nextPageLink(); | 302 | pageLink = pageLink.nextPageLink(); |
@@ -312,7 +313,7 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | @@ -312,7 +313,7 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | ||
312 | } | 313 | } |
313 | 314 | ||
314 | pageLink = new PageLink(4, 0, title1); | 315 | pageLink = new PageLink(4, 0, title1); |
315 | - pageData = assetService.findAssetsByTenantId(tenantId, pageLink); | 316 | + pageData = assetService.findAssetInfosByTenantId(tenantId, pageLink); |
316 | Assert.assertFalse(pageData.hasNext()); | 317 | Assert.assertFalse(pageData.hasNext()); |
317 | Assert.assertEquals(0, pageData.getData().size()); | 318 | Assert.assertEquals(0, pageData.getData().size()); |
318 | 319 | ||
@@ -321,7 +322,7 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | @@ -321,7 +322,7 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | ||
321 | } | 322 | } |
322 | 323 | ||
323 | pageLink = new PageLink(4, 0, title2); | 324 | pageLink = new PageLink(4, 0, title2); |
324 | - pageData = assetService.findAssetsByTenantId(tenantId, pageLink); | 325 | + pageData = assetService.findAssetInfosByTenantId(tenantId, pageLink); |
325 | Assert.assertFalse(pageData.hasNext()); | 326 | Assert.assertFalse(pageData.hasNext()); |
326 | Assert.assertEquals(0, pageData.getData().size()); | 327 | Assert.assertEquals(0, pageData.getData().size()); |
327 | } | 328 | } |
@@ -419,21 +420,21 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | @@ -419,21 +420,21 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | ||
419 | customer = customerService.saveCustomer(customer); | 420 | customer = customerService.saveCustomer(customer); |
420 | CustomerId customerId = customer.getId(); | 421 | CustomerId customerId = customer.getId(); |
421 | 422 | ||
422 | - List<Asset> assets = new ArrayList<>(); | 423 | + List<AssetInfo> assets = new ArrayList<>(); |
423 | for (int i=0;i<278;i++) { | 424 | for (int i=0;i<278;i++) { |
424 | Asset asset = new Asset(); | 425 | Asset asset = new Asset(); |
425 | asset.setTenantId(tenantId); | 426 | asset.setTenantId(tenantId); |
426 | asset.setName("Asset"+i); | 427 | asset.setName("Asset"+i); |
427 | asset.setType("default"); | 428 | asset.setType("default"); |
428 | asset = assetService.saveAsset(asset); | 429 | asset = assetService.saveAsset(asset); |
429 | - assets.add(assetService.assignAssetToCustomer(tenantId, asset.getId(), customerId)); | 430 | + assets.add(new AssetInfo(assetService.assignAssetToCustomer(tenantId, asset.getId(), customerId), customer.getTitle(), customer.isPublic())); |
430 | } | 431 | } |
431 | 432 | ||
432 | - List<Asset> loadedAssets = new ArrayList<>(); | 433 | + List<AssetInfo> loadedAssets = new ArrayList<>(); |
433 | PageLink pageLink = new PageLink(23); | 434 | PageLink pageLink = new PageLink(23); |
434 | - PageData<Asset> pageData = null; | 435 | + PageData<AssetInfo> pageData = null; |
435 | do { | 436 | do { |
436 | - pageData = assetService.findAssetsByTenantIdAndCustomerId(tenantId, customerId, pageLink); | 437 | + pageData = assetService.findAssetInfosByTenantIdAndCustomerId(tenantId, customerId, pageLink); |
437 | loadedAssets.addAll(pageData.getData()); | 438 | loadedAssets.addAll(pageData.getData()); |
438 | if (pageData.hasNext()) { | 439 | if (pageData.hasNext()) { |
439 | pageLink = pageLink.nextPageLink(); | 440 | pageLink = pageLink.nextPageLink(); |
@@ -448,7 +449,7 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | @@ -448,7 +449,7 @@ public abstract class BaseAssetServiceTest extends AbstractServiceTest { | ||
448 | assetService.unassignCustomerAssets(tenantId, customerId); | 449 | assetService.unassignCustomerAssets(tenantId, customerId); |
449 | 450 | ||
450 | pageLink = new PageLink(33); | 451 | pageLink = new PageLink(33); |
451 | - pageData = assetService.findAssetsByTenantIdAndCustomerId(tenantId, customerId, pageLink); | 452 | + pageData = assetService.findAssetInfosByTenantIdAndCustomerId(tenantId, customerId, pageLink); |
452 | Assert.assertFalse(pageData.hasNext()); | 453 | Assert.assertFalse(pageData.hasNext()); |
453 | Assert.assertTrue(pageData.getData().isEmpty()); | 454 | Assert.assertTrue(pageData.getData().isEmpty()); |
454 | 455 |
@@ -4,6 +4,7 @@ sql.ts_inserts_executor_type=fixed | @@ -4,6 +4,7 @@ sql.ts_inserts_executor_type=fixed | ||
4 | sql.ts_inserts_fixed_thread_pool_size=10 | 4 | sql.ts_inserts_fixed_thread_pool_size=10 |
5 | 5 | ||
6 | spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true | 6 | spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true |
7 | +spring.jpa.properties.hibernate.order_by.default_null_ordering=last | ||
7 | spring.jpa.show-sql=false | 8 | spring.jpa.show-sql=false |
8 | spring.jpa.hibernate.ddl-auto=none | 9 | spring.jpa.hibernate.ddl-auto=none |
9 | spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect | 10 | spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect |
@@ -4,6 +4,7 @@ sql.ts_inserts_executor_type=fixed | @@ -4,6 +4,7 @@ sql.ts_inserts_executor_type=fixed | ||
4 | sql.ts_inserts_fixed_thread_pool_size=10 | 4 | sql.ts_inserts_fixed_thread_pool_size=10 |
5 | 5 | ||
6 | spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true | 6 | spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true |
7 | +spring.jpa.properties.hibernate.order_by.default_null_ordering=last | ||
7 | spring.jpa.show-sql=false | 8 | spring.jpa.show-sql=false |
8 | spring.jpa.hibernate.ddl-auto=validate | 9 | spring.jpa.hibernate.ddl-auto=validate |
9 | spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect | 10 | spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect |