Commit 52cbe843dc5871ea0d347a14cbe4831927998601
1 parent
58cdc63a
Fixed import/export rule chain functionality
Showing
6 changed files
with
32 additions
and
11 deletions
@@ -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 |