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