Commit 52cbe843dc5871ea0d347a14cbe4831927998601

Authored by Volodymyr Babak
1 parent 58cdc63a

Fixed import/export rule chain functionality

... ... @@ -29,6 +29,7 @@ import org.thingsboard.server.dao.asset.AssetService;
29 29 import org.thingsboard.server.dao.customer.CustomerService;
30 30 import org.thingsboard.server.dao.dashboard.DashboardService;
31 31 import org.thingsboard.server.dao.device.DeviceService;
  32 +import org.thingsboard.server.dao.edge.EdgeService;
32 33 import org.thingsboard.server.dao.entityview.EntityViewService;
33 34 import org.thingsboard.server.dao.rule.RuleChainService;
34 35 import org.thingsboard.server.dao.tenant.TenantService;
... ... @@ -68,6 +69,9 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe
68 69 @Autowired
69 70 private RuleChainService ruleChainService;
70 71
  72 + @Autowired
  73 + private EdgeService edgeService;
  74 +
71 75 @Override
72 76 public void deleteEntityRelations(TenantId tenantId, EntityId entityId) {
73 77 super.deleteEntityRelations(tenantId, entityId);
... ... @@ -106,6 +110,9 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe
106 110 case RULE_CHAIN:
107 111 hasName = ruleChainService.findRuleChainByIdAsync(tenantId, new RuleChainId(entityId.getId()));
108 112 break;
  113 + case EDGE:
  114 + hasName = edgeService.findEdgeByIdAsync(tenantId, new EdgeId(entityId.getId()));
  115 + break;
109 116 default:
110 117 throw new IllegalStateException("Not Implemented!");
111 118 }
... ...
... ... @@ -252,6 +252,8 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
252 252 }
253 253 ruleChain.root = false;
254 254 delete ruleChain.assignedEdgesText;
  255 + delete ruleChain.assignedEdges;
  256 + delete ruleChain.assignedEdgesIds;
255 257 return ruleChain;
256 258 }
257 259
... ... @@ -273,13 +275,16 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
273 275 toast.showError($translate.instant('rulechain.export-failed-error', {error: message}));
274 276 }
275 277
276   - function importRuleChain($event) {
  278 + function importRuleChain($event, expectedRuleChainType) {
277 279 var deferred = $q.defer();
278 280 openImportDialog($event, 'rulechain.import', 'rulechain.rulechain-file').then(
279 281 function success(ruleChainImport) {
280 282 if (!validateImportedRuleChain(ruleChainImport)) {
281 283 toast.showError($translate.instant('rulechain.invalid-rulechain-file-error'));
282 284 deferred.reject();
  285 + } else if (ruleChainImport.ruleChain.type !== expectedRuleChainType) {
  286 + toast.showError($translate.instant('rulechain.invalid-rulechain-type-error', {expectedRuleChainType: expectedRuleChainType}));
  287 + deferred.reject();
283 288 } else {
284 289 deferred.resolve(ruleChainImport);
285 290 }
... ... @@ -301,6 +306,9 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
301 306 if (angular.isUndefined(ruleChainImport.ruleChain.name)) {
302 307 return false;
303 308 }
  309 + if (angular.isUndefined(ruleChainImport.ruleChain.type)) {
  310 + return false;
  311 + }
304 312 return true;
305 313 }
306 314
... ...
... ... @@ -1450,7 +1450,8 @@
1450 1450 "assigned-to-edges": "Assigned to edges",
1451 1451 "set-default-root-edge": "Make rule chain default root",
1452 1452 "set-default-root-edge-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' default edge root?",
1453   - "set-default-root-edge-rulechain-text": "After the confirmation the rule chain will become default edge root and will handle all incoming transport messages."
  1453 + "set-default-root-edge-rulechain-text": "After the confirmation the rule chain will become default edge root and will handle all incoming transport messages.",
  1454 + "invalid-rulechain-type-error": "Unable to import rule chain: Invalid rule chain type. Expected type is {{expectedRuleChainType}}."
1454 1455 },
1455 1456 "rulenode": {
1456 1457 "details": "Details",
... ...
... ... @@ -1269,7 +1269,11 @@ export function RuleChainController($state, $scope, $compile, $q, $mdUtil, $time
1269 1269 vm.isDirty = false;
1270 1270 vm.isImport = false;
1271 1271 $mdUtil.nextTick(() => {
1272   - $state.go('home.ruleChains.ruleChain', {ruleChainId: vm.ruleChain.id.id});
  1272 + if (vm.ruleChain.type === vm.types.systemRuleChainType) {
  1273 + $state.go('home.ruleChains.system.ruleChain', {ruleChainId: vm.ruleChain.id.id});
  1274 + } else {
  1275 + $state.go('home.ruleChains.edge.ruleChain', {ruleChainId: vm.ruleChain.id.id});
  1276 + }
1273 1277 });
1274 1278 } else {
1275 1279 prepareRuleChain();
... ...
... ... @@ -56,7 +56,7 @@ export default function RuleChainRoutes($stateProvider, NodeTemplatePathProvider
56 56 ncyBreadcrumb: {
57 57 label: '{"icon": "settings_ethernet", "label": "rulechain.system-rulechains"}'
58 58 }
59   - }).state('home.ruleChains.ruleChain', {
  59 + }).state('home.ruleChains.system.ruleChain', {
60 60 url: '/:ruleChainId',
61 61 reloadOnSearch: false,
62 62 module: 'private',
... ... @@ -106,7 +106,8 @@ export default function RuleChainRoutes($stateProvider, NodeTemplatePathProvider
106 106 }
107 107 },
108 108 params: {
109   - ruleChainImport: {}
  109 + ruleChainImport: {},
  110 + ruleChainType: {}
110 111 },
111 112 resolve: {
112 113 ruleChain:
... ... @@ -122,7 +123,7 @@ export default function RuleChainRoutes($stateProvider, NodeTemplatePathProvider
122 123 ruleNodeComponents:
123 124 /*@ngInject*/
124 125 function($stateParams, ruleChainService) {
125   - return ruleChainService.getRuleNodeComponents(types.systemRuleChainType);
  126 + return ruleChainService.getRuleNodeComponents($stateParams.ruleChainType);
126 127 }
127 128 },
128 129 data: {
... ...
... ... @@ -164,9 +164,9 @@ export default function RuleChainsController(ruleChainService, userService, edge
164 164 });
165 165 vm.ruleChainGridConfig.addItemActions.push({
166 166 onAction: function ($event) {
167   - importExport.importRuleChain($event).then(
  167 + importExport.importRuleChain($event, types.systemRuleChainType).then(
168 168 function(ruleChainImport) {
169   - $state.go('home.ruleChains.importRuleChain', {ruleChainImport:ruleChainImport});
  169 + $state.go('home.ruleChains.importRuleChain', {ruleChainImport:ruleChainImport, ruleChainType: types.systemRuleChainType});
170 170 }
171 171 );
172 172 },
... ... @@ -260,9 +260,9 @@ export default function RuleChainsController(ruleChainService, userService, edge
260 260 });
261 261 vm.ruleChainGridConfig.addItemActions.push({
262 262 onAction: function ($event) {
263   - importExport.importRuleChain($event).then(
  263 + importExport.importRuleChain($event, types.edgeRuleChainType).then(
264 264 function(ruleChainImport) {
265   - $state.go('home.ruleChains.importRuleChain', {ruleChainImport:ruleChainImport});
  265 + $state.go('home.ruleChains.importRuleChain', {ruleChainImport:ruleChainImport, ruleChainType: types.edgeRuleChainType});
266 266 }
267 267 );
268 268 },
... ... @@ -376,7 +376,7 @@ export default function RuleChainsController(ruleChainService, userService, edge
376 376 } else if (vm.ruleChainsScope === 'edges') {
377 377 $state.go('home.ruleChains.edge.ruleChain', {ruleChainId: ruleChain.id.id});
378 378 } else {
379   - $state.go('home.ruleChains.ruleChain', {ruleChainId: ruleChain.id.id});
  379 + $state.go('home.ruleChains.system.ruleChain', {ruleChainId: ruleChain.id.id});
380 380 }
381 381 }
382 382
... ...