Commit 23e0fc7fb2afa9d0732d0245f70aa8f27dc04b27

Authored by Bohdan Smetaniuk
1 parent f17a4d2b

fetch system widgets bundles

... ... @@ -17,6 +17,7 @@ package org.thingsboard.server.service.edge.rpc.constructor;
17 17
18 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.springframework.stereotype.Component;
  20 +import org.thingsboard.server.common.data.id.TenantId;
20 21 import org.thingsboard.server.common.data.id.WidgetTypeId;
21 22 import org.thingsboard.server.common.data.widget.WidgetType;
22 23 import org.thingsboard.server.dao.util.mapping.JacksonUtil;
... ... @@ -44,7 +45,10 @@ public class WidgetTypeUpdateMsgConstructor {
44 45 if (widgetType.getDescriptor() != null) {
45 46 builder.setDescriptorJson(JacksonUtil.toString(widgetType.getDescriptor()));
46 47 }
47   - return builder.build();
  48 + if (widgetType.getTenantId().equals(TenantId.SYS_TENANT_ID)) {
  49 + builder.setIsSystem(true);
  50 + }
  51 + return builder.build();
48 52 }
49 53
50 54 public WidgetTypeUpdateMsg constructWidgetTypeDeleteMsg(WidgetTypeId widgetTypeId) {
... ...
... ... @@ -18,6 +18,7 @@ package org.thingsboard.server.service.edge.rpc.constructor;
18 18 import com.google.protobuf.ByteString;
19 19 import lombok.extern.slf4j.Slf4j;
20 20 import org.springframework.stereotype.Component;
  21 +import org.thingsboard.server.common.data.id.TenantId;
21 22 import org.thingsboard.server.common.data.id.WidgetsBundleId;
22 23 import org.thingsboard.server.common.data.widget.WidgetsBundle;
23 24 import org.thingsboard.server.gen.edge.UpdateMsgType;
... ... @@ -37,6 +38,9 @@ public class WidgetsBundleUpdateMsgConstructor {
37 38 if (widgetsBundle.getImage() != null) {
38 39 builder.setImage(ByteString.copyFrom(widgetsBundle.getImage()));
39 40 }
  41 + if (widgetsBundle.getTenantId().equals(TenantId.SYS_TENANT_ID)) {
  42 + builder.setIsSystem(true);
  43 + }
40 44 return builder.build();
41 45 }
42 46
... ...
... ... @@ -54,6 +54,8 @@ import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
54 54 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
55 55 import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
56 56 import org.thingsboard.server.common.data.rule.RuleChain;
  57 +import org.thingsboard.server.common.data.widget.WidgetType;
  58 +import org.thingsboard.server.common.data.widget.WidgetsBundle;
57 59 import org.thingsboard.server.dao.asset.AssetService;
58 60 import org.thingsboard.server.dao.attributes.AttributesService;
59 61 import org.thingsboard.server.dao.dashboard.DashboardService;
... ... @@ -63,6 +65,8 @@ import org.thingsboard.server.dao.entityview.EntityViewService;
63 65 import org.thingsboard.server.dao.relation.RelationService;
64 66 import org.thingsboard.server.dao.rule.RuleChainService;
65 67 import org.thingsboard.server.dao.user.UserService;
  68 +import org.thingsboard.server.dao.widget.WidgetTypeService;
  69 +import org.thingsboard.server.dao.widget.WidgetsBundleService;
66 70 import org.thingsboard.server.gen.edge.AttributesRequestMsg;
67 71 import org.thingsboard.server.gen.edge.DeviceCredentialsRequestMsg;
68 72 import org.thingsboard.server.gen.edge.RelationRequestMsg;
... ... @@ -110,6 +114,12 @@ public class DefaultSyncEdgeService implements SyncEdgeService {
110 114 private UserService userService;
111 115
112 116 @Autowired
  117 + private WidgetsBundleService widgetsBundleService;
  118 +
  119 + @Autowired
  120 + private WidgetTypeService widgetTypeService;
  121 +
  122 + @Autowired
113 123 private DbCallbackExecutorService dbCallbackExecutorService;
114 124
115 125 @Override
... ... @@ -121,6 +131,7 @@ public class DefaultSyncEdgeService implements SyncEdgeService {
121 131 syncAssets(edge);
122 132 syncEntityViews(edge);
123 133 syncDashboards(edge);
  134 + syncWidgetsBundleAndWidgetTypes(edge);
124 135 } catch (Exception e) {
125 136 log.error("Exception during sync process", e);
126 137 }
... ... @@ -261,6 +272,24 @@ public class DefaultSyncEdgeService implements SyncEdgeService {
261 272 }
262 273 }
263 274
  275 + private void syncWidgetsBundleAndWidgetTypes(Edge edge) {
  276 + List<WidgetsBundle> widgetsBundlesToPush = new ArrayList<>();
  277 + List<WidgetType> widgetTypesToPush = new ArrayList<>();
  278 + widgetsBundlesToPush.addAll(widgetsBundleService.findAllTenantWidgetsBundlesByTenantId(edge.getTenantId()));
  279 + widgetsBundlesToPush.addAll(widgetsBundleService.findSystemWidgetsBundles(edge.getTenantId()));
  280 + try {
  281 + for (WidgetsBundle widgetsBundle: widgetsBundlesToPush) {
  282 + saveEdgeEvent(edge.getTenantId(), edge.getId(), EdgeEventType.WIDGETS_BUNDLE, ActionType.ADDED, widgetsBundle.getId(), null);
  283 + widgetTypesToPush.addAll(widgetTypeService.findWidgetTypesByTenantIdAndBundleAlias(widgetsBundle.getTenantId(), widgetsBundle.getAlias()));
  284 + }
  285 + for (WidgetType widgetType: widgetTypesToPush) {
  286 + saveEdgeEvent(edge.getTenantId(), edge.getId(), EdgeEventType.WIDGET_TYPE, ActionType.ADDED, widgetType.getId(), null);
  287 + }
  288 + } catch (Exception e) {
  289 + log.error("Exception during loading widgets bundle(s) and widget type(s) on sync!", e);
  290 + }
  291 + }
  292 +
264 293 private void pushUsersToEdge(TextPageData<User> pageData, Edge edge) {
265 294 if (pageData != null && pageData.getData() != null && !pageData.getData().isEmpty()) {
266 295 log.trace("[{}] [{}] user(s) are going to be pushed to edge.", edge.getId(), pageData.getData().size());
... ...
... ... @@ -275,6 +275,7 @@ message WidgetsBundleUpdateMsg {
275 275 string title = 4;
276 276 string alias = 5;
277 277 bytes image = 6;
  278 + bool isSystem = 7;
278 279 }
279 280
280 281 message WidgetTypeUpdateMsg {
... ... @@ -285,6 +286,7 @@ message WidgetTypeUpdateMsg {
285 286 string alias = 5;
286 287 string name = 6;
287 288 string descriptorJson = 7;
  289 + bool isSystem = 8;
288 290 }
289 291
290 292 message UserCredentialsUpdateMsg {
... ...