Commit c5d93d17f4799ad94ba8e58ffacf78d56b6ecdd6

Authored by Volodymyr Babak
1 parent 41595968

Naming conventions update

Showing 30 changed files with 334 additions and 257 deletions
@@ -108,7 +108,7 @@ public class EdgeController extends BaseController { @@ -108,7 +108,7 @@ public class EdgeController extends BaseController {
108 108
109 RuleChain defaultRootEdgeRuleChain = null; 109 RuleChain defaultRootEdgeRuleChain = null;
110 if (created) { 110 if (created) {
111 - defaultRootEdgeRuleChain = ruleChainService.getDefaultRootEdgeRuleChain(tenantId); 111 + defaultRootEdgeRuleChain = ruleChainService.getEdgeTemplateRootRuleChain(tenantId);
112 if (defaultRootEdgeRuleChain == null) { 112 if (defaultRootEdgeRuleChain == null) {
113 throw new DataValidationException("Root edge rule chain is not available!"); 113 throw new DataValidationException("Root edge rule chain is not available!");
114 } 114 }
@@ -50,7 +50,6 @@ import org.thingsboard.server.common.data.id.RuleNodeId; @@ -50,7 +50,6 @@ import org.thingsboard.server.common.data.id.RuleNodeId;
50 import org.thingsboard.server.common.data.id.TenantId; 50 import org.thingsboard.server.common.data.id.TenantId;
51 import org.thingsboard.server.common.data.page.PageData; 51 import org.thingsboard.server.common.data.page.PageData;
52 import org.thingsboard.server.common.data.page.PageLink; 52 import org.thingsboard.server.common.data.page.PageLink;
53 -import org.thingsboard.server.common.data.page.TimePageLink;  
54 import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; 53 import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
55 import org.thingsboard.server.common.data.rule.DefaultRuleChainCreateRequest; 54 import org.thingsboard.server.common.data.rule.DefaultRuleChainCreateRequest;
56 import org.thingsboard.server.common.data.rule.RuleChain; 55 import org.thingsboard.server.common.data.rule.RuleChain;
@@ -556,14 +555,14 @@ public class RuleChainController extends BaseController { @@ -556,14 +555,14 @@ public class RuleChainController extends BaseController {
556 } 555 }
557 556
558 @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") 557 @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
559 - @RequestMapping(value = "/ruleChain/{ruleChainId}/defaultRootEdge", method = RequestMethod.POST) 558 + @RequestMapping(value = "/ruleChain/{ruleChainId}/edgeTemplateRoot", method = RequestMethod.POST)
560 @ResponseBody 559 @ResponseBody
561 - public RuleChain setDefaultRootEdgeRuleChain(@PathVariable(RULE_CHAIN_ID) String strRuleChainId) throws ThingsboardException { 560 + public RuleChain setEdgeTemplateRootRuleChain(@PathVariable(RULE_CHAIN_ID) String strRuleChainId) throws ThingsboardException {
562 checkParameter(RULE_CHAIN_ID, strRuleChainId); 561 checkParameter(RULE_CHAIN_ID, strRuleChainId);
563 try { 562 try {
564 RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId)); 563 RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId));
565 RuleChain ruleChain = checkRuleChain(ruleChainId, Operation.WRITE); 564 RuleChain ruleChain = checkRuleChain(ruleChainId, Operation.WRITE);
566 - ruleChainService.setDefaultRootEdgeRuleChain(getTenantId(), ruleChainId); 565 + ruleChainService.setEdgeTemplateRootRuleChain(getTenantId(), ruleChainId);
567 return ruleChain; 566 return ruleChain;
568 } catch (Exception e) { 567 } catch (Exception e) {
569 logEntityAction(emptyId(EntityType.RULE_CHAIN), 568 logEntityAction(emptyId(EntityType.RULE_CHAIN),
@@ -575,14 +574,14 @@ public class RuleChainController extends BaseController { @@ -575,14 +574,14 @@ public class RuleChainController extends BaseController {
575 } 574 }
576 575
577 @PreAuthorize("hasAuthority('TENANT_ADMIN')") 576 @PreAuthorize("hasAuthority('TENANT_ADMIN')")
578 - @RequestMapping(value = "/ruleChain/{ruleChainId}/defaultEdge", method = RequestMethod.POST) 577 + @RequestMapping(value = "/ruleChain/{ruleChainId}/autoAssignToEdge", method = RequestMethod.POST)
579 @ResponseBody 578 @ResponseBody
580 - public RuleChain addDefaultEdgeRuleChain(@PathVariable(RULE_CHAIN_ID) String strRuleChainId) throws ThingsboardException { 579 + public RuleChain setAutoAssignToEdgeRuleChain(@PathVariable(RULE_CHAIN_ID) String strRuleChainId) throws ThingsboardException {
581 checkParameter(RULE_CHAIN_ID, strRuleChainId); 580 checkParameter(RULE_CHAIN_ID, strRuleChainId);
582 try { 581 try {
583 RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId)); 582 RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId));
584 RuleChain ruleChain = checkRuleChain(ruleChainId, Operation.WRITE); 583 RuleChain ruleChain = checkRuleChain(ruleChainId, Operation.WRITE);
585 - ruleChainService.addDefaultEdgeRuleChain(getTenantId(), ruleChainId); 584 + ruleChainService.setAutoAssignToEdgeRuleChain(getTenantId(), ruleChainId);
586 return ruleChain; 585 return ruleChain;
587 } catch (Exception e) { 586 } catch (Exception e) {
588 logEntityAction(emptyId(EntityType.RULE_CHAIN), 587 logEntityAction(emptyId(EntityType.RULE_CHAIN),
@@ -594,14 +593,14 @@ public class RuleChainController extends BaseController { @@ -594,14 +593,14 @@ public class RuleChainController extends BaseController {
594 } 593 }
595 594
596 @PreAuthorize("hasAuthority('TENANT_ADMIN')") 595 @PreAuthorize("hasAuthority('TENANT_ADMIN')")
597 - @RequestMapping(value = "/ruleChain/{ruleChainId}/defaultEdge", method = RequestMethod.DELETE) 596 + @RequestMapping(value = "/ruleChain/{ruleChainId}/autoAssignToEdge", method = RequestMethod.DELETE)
598 @ResponseBody 597 @ResponseBody
599 - public RuleChain removeDefaultEdgeRuleChain(@PathVariable(RULE_CHAIN_ID) String strRuleChainId) throws ThingsboardException { 598 + public RuleChain unsetAutoAssignToEdgeRuleChain(@PathVariable(RULE_CHAIN_ID) String strRuleChainId) throws ThingsboardException {
600 checkParameter(RULE_CHAIN_ID, strRuleChainId); 599 checkParameter(RULE_CHAIN_ID, strRuleChainId);
601 try { 600 try {
602 RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId)); 601 RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId));
603 RuleChain ruleChain = checkRuleChain(ruleChainId, Operation.WRITE); 602 RuleChain ruleChain = checkRuleChain(ruleChainId, Operation.WRITE);
604 - ruleChainService.removeDefaultEdgeRuleChain(getTenantId(), ruleChainId); 603 + ruleChainService.unsetAutoAssignToEdgeRuleChain(getTenantId(), ruleChainId);
605 return ruleChain; 604 return ruleChain;
606 } catch (Exception e) { 605 } catch (Exception e) {
607 logEntityAction(emptyId(EntityType.RULE_CHAIN), 606 logEntityAction(emptyId(EntityType.RULE_CHAIN),
@@ -613,12 +612,12 @@ public class RuleChainController extends BaseController { @@ -613,12 +612,12 @@ public class RuleChainController extends BaseController {
613 } 612 }
614 613
615 @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") 614 @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
616 - @RequestMapping(value = "/ruleChain/defaultEdgeRuleChains", method = RequestMethod.GET) 615 + @RequestMapping(value = "/ruleChain/autoAssignToEdgeRuleChains", method = RequestMethod.GET)
617 @ResponseBody 616 @ResponseBody
618 - public List<RuleChain> getDefaultEdgeRuleChains() throws ThingsboardException { 617 + public List<RuleChain> getAutoAssignToEdgeRuleChains() throws ThingsboardException {
619 try { 618 try {
620 TenantId tenantId = getCurrentUser().getTenantId(); 619 TenantId tenantId = getCurrentUser().getTenantId();
621 - return checkNotNull(ruleChainService.findDefaultEdgeRuleChainsByTenantId(tenantId)).get(); 620 + return checkNotNull(ruleChainService.findAutoAssignToEdgeRuleChainsByTenantId(tenantId)).get();
622 } catch (Exception e) { 621 } catch (Exception e) {
623 throw handleException(e); 622 throw handleException(e);
624 } 623 }
@@ -165,10 +165,11 @@ public final class EdgeGrpcSession implements Closeable { @@ -165,10 +165,11 @@ public final class EdgeGrpcSession implements Closeable {
165 .build()); 165 .build());
166 if (ConnectResponseCode.ACCEPTED != responseMsg.getResponseCode()) { 166 if (ConnectResponseCode.ACCEPTED != responseMsg.getResponseCode()) {
167 outputStream.onError(new RuntimeException(responseMsg.getErrorMsg())); 167 outputStream.onError(new RuntimeException(responseMsg.getErrorMsg()));
  168 + } else {
  169 + connected = true;
168 } 170 }
169 } 171 }
170 - if (!connected && requestMsg.getMsgType().equals(RequestMsgType.SYNC_REQUEST_RPC_MESSAGE)) {  
171 - connected = true; 172 + if (connected && requestMsg.getMsgType().equals(RequestMsgType.SYNC_REQUEST_RPC_MESSAGE)) {
172 ctx.getSyncEdgeService().sync(edge); 173 ctx.getSyncEdgeService().sync(edge);
173 } 174 }
174 if (connected) { 175 if (connected) {
@@ -128,7 +128,7 @@ public class DefaultDataUpdateService implements DataUpdateService { @@ -128,7 +128,7 @@ public class DefaultDataUpdateService implements DataUpdateService {
128 @Override 128 @Override
129 protected void updateEntity(Tenant tenant) { 129 protected void updateEntity(Tenant tenant) {
130 try { 130 try {
131 - RuleChain defaultEdgeRuleChain = ruleChainService.getDefaultRootEdgeRuleChain(tenant.getId()); 131 + RuleChain defaultEdgeRuleChain = ruleChainService.getEdgeTemplateRootRuleChain(tenant.getId());
132 if (defaultEdgeRuleChain == null) { 132 if (defaultEdgeRuleChain == null) {
133 installScripts.createDefaultEdgeRuleChains(tenant.getId()); 133 installScripts.createDefaultEdgeRuleChains(tenant.getId());
134 } 134 }
@@ -79,14 +79,14 @@ public interface RuleChainService { @@ -79,14 +79,14 @@ public interface RuleChainService {
79 79
80 PageData<RuleChain> findRuleChainsByTenantIdAndEdgeId(TenantId tenantId, EdgeId edgeId, PageLink pageLink); 80 PageData<RuleChain> findRuleChainsByTenantIdAndEdgeId(TenantId tenantId, EdgeId edgeId, PageLink pageLink);
81 81
82 - RuleChain getDefaultRootEdgeRuleChain(TenantId tenantId); 82 + RuleChain getEdgeTemplateRootRuleChain(TenantId tenantId);
83 83
84 - boolean setDefaultRootEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId); 84 + boolean setEdgeTemplateRootRuleChain(TenantId tenantId, RuleChainId ruleChainId);
85 85
86 - boolean addDefaultEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId); 86 + boolean setAutoAssignToEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId);
87 87
88 - boolean removeDefaultEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId); 88 + boolean unsetAutoAssignToEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId);
89 89
90 - ListenableFuture<List<RuleChain>> findDefaultEdgeRuleChainsByTenantId(TenantId tenantId); 90 + ListenableFuture<List<RuleChain>> findAutoAssignToEdgeRuleChainsByTenantId(TenantId tenantId);
91 91
92 } 92 }
@@ -23,6 +23,6 @@ public enum RelationTypeGroup { @@ -23,6 +23,6 @@ public enum RelationTypeGroup {
23 RULE_CHAIN, 23 RULE_CHAIN,
24 RULE_NODE, 24 RULE_NODE,
25 EDGE, 25 EDGE,
26 - EDGE_DEFAULT_RULE_CHAIN 26 + EDGE_AUTO_ASSIGN_RULE_CHAIN
27 27
28 } 28 }
@@ -373,7 +373,7 @@ public class EdgeServiceImpl extends AbstractEntityService implements EdgeServic @@ -373,7 +373,7 @@ public class EdgeServiceImpl extends AbstractEntityService implements EdgeServic
373 @Override 373 @Override
374 public void assignDefaultRuleChainsToEdge(TenantId tenantId, EdgeId edgeId) { 374 public void assignDefaultRuleChainsToEdge(TenantId tenantId, EdgeId edgeId) {
375 log.trace("Executing assignDefaultRuleChainsToEdge, tenantId [{}], edgeId [{}]", tenantId, edgeId); 375 log.trace("Executing assignDefaultRuleChainsToEdge, tenantId [{}], edgeId [{}]", tenantId, edgeId);
376 - ListenableFuture<List<RuleChain>> future = ruleChainService.findDefaultEdgeRuleChainsByTenantId(tenantId); 376 + ListenableFuture<List<RuleChain>> future = ruleChainService.findAutoAssignToEdgeRuleChainsByTenantId(tenantId);
377 Futures.addCallback(future, new FutureCallback<List<RuleChain>>() { 377 Futures.addCallback(future, new FutureCallback<List<RuleChain>>() {
378 @Override 378 @Override
379 public void onSuccess(List<RuleChain> ruleChains) { 379 public void onSuccess(List<RuleChain> ruleChains) {
@@ -624,21 +624,21 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @@ -624,21 +624,21 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
624 } 624 }
625 625
626 @Override 626 @Override
627 - public RuleChain getDefaultRootEdgeRuleChain(TenantId tenantId) { 627 + public RuleChain getEdgeTemplateRootRuleChain(TenantId tenantId) {
628 return getRootRuleChainByType(tenantId, RuleChainType.EDGE); 628 return getRootRuleChainByType(tenantId, RuleChainType.EDGE);
629 } 629 }
630 630
631 @Override 631 @Override
632 - public boolean setDefaultRootEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) { 632 + public boolean setEdgeTemplateRootRuleChain(TenantId tenantId, RuleChainId ruleChainId) {
633 RuleChain ruleChain = ruleChainDao.findById(tenantId, ruleChainId.getId()); 633 RuleChain ruleChain = ruleChainDao.findById(tenantId, ruleChainId.getId());
634 - RuleChain previousDefaultRootEdgeRuleChain = getDefaultRootEdgeRuleChain(ruleChain.getTenantId());  
635 - if (previousDefaultRootEdgeRuleChain == null || !previousDefaultRootEdgeRuleChain.getId().equals(ruleChain.getId())) { 634 + RuleChain previousEdgeTemplateRootRuleChain = getEdgeTemplateRootRuleChain(ruleChain.getTenantId());
  635 + if (previousEdgeTemplateRootRuleChain == null || !previousEdgeTemplateRootRuleChain.getId().equals(ruleChain.getId())) {
636 try { 636 try {
637 - if (previousDefaultRootEdgeRuleChain != null) {  
638 - deleteRelation(tenantId, new EntityRelation(previousDefaultRootEdgeRuleChain.getTenantId(), previousDefaultRootEdgeRuleChain.getId(), 637 + if (previousEdgeTemplateRootRuleChain != null) {
  638 + deleteRelation(tenantId, new EntityRelation(previousEdgeTemplateRootRuleChain.getTenantId(), previousEdgeTemplateRootRuleChain.getId(),
639 EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN)); 639 EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN));
640 - previousDefaultRootEdgeRuleChain.setRoot(false);  
641 - ruleChainDao.save(tenantId, previousDefaultRootEdgeRuleChain); 640 + previousEdgeTemplateRootRuleChain.setRoot(false);
  641 + ruleChainDao.save(tenantId, previousEdgeTemplateRootRuleChain);
642 } 642 }
643 createRelation(tenantId, new EntityRelation(ruleChain.getTenantId(), ruleChain.getId(), 643 createRelation(tenantId, new EntityRelation(ruleChain.getTenantId(), ruleChain.getId(),
644 EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN)); 644 EntityRelation.CONTAINS_TYPE, RelationTypeGroup.RULE_CHAIN));
@@ -646,7 +646,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @@ -646,7 +646,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
646 ruleChainDao.save(tenantId, ruleChain); 646 ruleChainDao.save(tenantId, ruleChain);
647 return true; 647 return true;
648 } catch (Exception e) { 648 } catch (Exception e) {
649 - log.warn("Failed to set default root edge rule chain, ruleChainId: [{}]", ruleChainId, e); 649 + log.warn("Failed to set edge template root rule chain, ruleChainId: [{}]", ruleChainId, e);
650 throw new RuntimeException(e); 650 throw new RuntimeException(e);
651 } 651 }
652 } 652 }
@@ -654,34 +654,34 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @@ -654,34 +654,34 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
654 } 654 }
655 655
656 @Override 656 @Override
657 - public boolean addDefaultEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) { 657 + public boolean setAutoAssignToEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) {
658 try { 658 try {
659 createRelation(tenantId, new EntityRelation(tenantId, ruleChainId, 659 createRelation(tenantId, new EntityRelation(tenantId, ruleChainId,
660 - EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_DEFAULT_RULE_CHAIN)); 660 + EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_AUTO_ASSIGN_RULE_CHAIN));
661 return true; 661 return true;
662 } catch (Exception e) { 662 } catch (Exception e) {
663 - log.warn("Failed to add default edge rule chain, ruleChainId: [{}]", ruleChainId, e); 663 + log.warn("Failed to set auto assign to edge rule chain, ruleChainId: [{}]", ruleChainId, e);
664 throw new RuntimeException(e); 664 throw new RuntimeException(e);
665 } 665 }
666 } 666 }
667 667
668 @Override 668 @Override
669 - public boolean removeDefaultEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) { 669 + public boolean unsetAutoAssignToEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) {
670 try { 670 try {
671 deleteRelation(tenantId, new EntityRelation(tenantId, ruleChainId, 671 deleteRelation(tenantId, new EntityRelation(tenantId, ruleChainId,
672 - EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_DEFAULT_RULE_CHAIN)); 672 + EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_AUTO_ASSIGN_RULE_CHAIN));
673 return true; 673 return true;
674 } catch (Exception e) { 674 } catch (Exception e) {
675 - log.warn("Failed to remove default edge rule chain, ruleChainId: [{}]", ruleChainId, e); 675 + log.warn("Failed to unset auto assign to edge rule chain, ruleChainId: [{}]", ruleChainId, e);
676 throw new RuntimeException(e); 676 throw new RuntimeException(e);
677 } 677 }
678 } 678 }
679 679
680 @Override 680 @Override
681 - public ListenableFuture<List<RuleChain>> findDefaultEdgeRuleChainsByTenantId(TenantId tenantId) {  
682 - log.trace("Executing findDefaultEdgeRuleChainsByTenantId, tenantId [{}]", tenantId); 681 + public ListenableFuture<List<RuleChain>> findAutoAssignToEdgeRuleChainsByTenantId(TenantId tenantId) {
  682 + log.trace("Executing findAutoAssignToEdgeRuleChainsByTenantId, tenantId [{}]", tenantId);
683 validateId(tenantId, INCORRECT_TENANT_ID + tenantId); 683 validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
684 - return ruleChainDao.findDefaultEdgeRuleChainsByTenantId(tenantId.getId()); 684 + return ruleChainDao.findAutoAssignToEdgeRuleChainsByTenantId(tenantId.getId());
685 } 685 }
686 686
687 687
@@ -749,7 +749,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @@ -749,7 +749,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
749 } 749 }
750 } 750 }
751 if (ruleChain.isRoot() && RuleChainType.EDGE.equals(ruleChain.getType())) { 751 if (ruleChain.isRoot() && RuleChainType.EDGE.equals(ruleChain.getType())) {
752 - RuleChain defaultRootEdgeRuleChain = getDefaultRootEdgeRuleChain(ruleChain.getTenantId()); 752 + RuleChain defaultRootEdgeRuleChain = getEdgeTemplateRootRuleChain(ruleChain.getTenantId());
753 if (defaultRootEdgeRuleChain != null && !defaultRootEdgeRuleChain.getId().equals(ruleChain.getId())) { 753 if (defaultRootEdgeRuleChain != null && !defaultRootEdgeRuleChain.getId().equals(ruleChain.getId())) {
754 throw new DataValidationException("Another default root edge rule chain is present in scope of current tenant!"); 754 throw new DataValidationException("Another default root edge rule chain is present in scope of current tenant!");
755 } 755 }
@@ -61,10 +61,10 @@ public interface RuleChainDao extends Dao<RuleChain>, TenantEntityDao { @@ -61,10 +61,10 @@ public interface RuleChainDao extends Dao<RuleChain>, TenantEntityDao {
61 PageData<RuleChain> findRuleChainsByTenantIdAndEdgeId(UUID tenantId, UUID edgeId, PageLink pageLink); 61 PageData<RuleChain> findRuleChainsByTenantIdAndEdgeId(UUID tenantId, UUID edgeId, PageLink pageLink);
62 62
63 /** 63 /**
64 - * Find default edge rule chains by tenantId. 64 + * Find auto assign to edge rule chains by tenantId.
65 * 65 *
66 * @param tenantId the tenantId 66 * @param tenantId the tenantId
67 * @return the list of rule chain objects 67 * @return the list of rule chain objects
68 */ 68 */
69 - ListenableFuture<List<RuleChain>> findDefaultEdgeRuleChainsByTenantId(UUID tenantId); 69 + ListenableFuture<List<RuleChain>> findAutoAssignToEdgeRuleChainsByTenantId(UUID tenantId);
70 } 70 }
@@ -95,10 +95,10 @@ public class JpaRuleChainDao extends JpaAbstractSearchTextDao<RuleChainEntity, R @@ -95,10 +95,10 @@ public class JpaRuleChainDao extends JpaAbstractSearchTextDao<RuleChainEntity, R
95 } 95 }
96 96
97 @Override 97 @Override
98 - public ListenableFuture<List<RuleChain>> findDefaultEdgeRuleChainsByTenantId(UUID tenantId) {  
99 - log.debug("Try to find default edge rule chains by tenantId [{}]", tenantId); 98 + public ListenableFuture<List<RuleChain>> findAutoAssignToEdgeRuleChainsByTenantId(UUID tenantId) {
  99 + log.debug("Try to find auto assign to edge rule chains by tenantId [{}]", tenantId);
100 ListenableFuture<List<EntityRelation>> relations = 100 ListenableFuture<List<EntityRelation>> relations =
101 - relationDao.findAllByFromAndType(new TenantId(tenantId), new TenantId(tenantId), EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_DEFAULT_RULE_CHAIN); 101 + relationDao.findAllByFromAndType(new TenantId(tenantId), new TenantId(tenantId), EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_AUTO_ASSIGN_RULE_CHAIN);
102 return Futures.transformAsync(relations, input -> { 102 return Futures.transformAsync(relations, input -> {
103 if (input != null && !input.isEmpty()) { 103 if (input != null && !input.isEmpty()) {
104 List<ListenableFuture<RuleChain>> ruleChainsFutures = new ArrayList<>(input.size()); 104 List<ListenableFuture<RuleChain>> ruleChainsFutures = new ArrayList<>(input.size());
@@ -331,24 +331,24 @@ public abstract class BaseRuleChainServiceTest extends AbstractServiceTest { @@ -331,24 +331,24 @@ public abstract class BaseRuleChainServiceTest extends AbstractServiceTest {
331 331
332 @Test 332 @Test
333 public void testGetDefaultEdgeRuleChains() throws Exception { 333 public void testGetDefaultEdgeRuleChains() throws Exception {
334 - RuleChainId ruleChainId = saveRuleChainAndSetDefaultEdge("Default Edge Rule Chain 1");  
335 - saveRuleChainAndSetDefaultEdge("Default Edge Rule Chain 2");  
336 - List<RuleChain> result = ruleChainService.findDefaultEdgeRuleChainsByTenantId(tenantId).get(); 334 + RuleChainId ruleChainId = saveRuleChainAndSetAutoAssignToEdge("Default Edge Rule Chain 1");
  335 + saveRuleChainAndSetAutoAssignToEdge("Default Edge Rule Chain 2");
  336 + List<RuleChain> result = ruleChainService.findAutoAssignToEdgeRuleChainsByTenantId(tenantId).get();
337 Assert.assertEquals(2, result.size()); 337 Assert.assertEquals(2, result.size());
338 338
339 - ruleChainService.removeDefaultEdgeRuleChain(tenantId, ruleChainId); 339 + ruleChainService.unsetAutoAssignToEdgeRuleChain(tenantId, ruleChainId);
340 340
341 - result = ruleChainService.findDefaultEdgeRuleChainsByTenantId(tenantId).get(); 341 + result = ruleChainService.findAutoAssignToEdgeRuleChainsByTenantId(tenantId).get();
342 Assert.assertEquals(1, result.size()); 342 Assert.assertEquals(1, result.size());
343 } 343 }
344 344
345 @Test 345 @Test
346 - public void setDefaultRootEdgeRuleChain() throws Exception {  
347 - RuleChainId ruleChainId1 = saveRuleChainAndSetDefaultEdge("Default Edge Rule Chain 1");  
348 - RuleChainId ruleChainId2 = saveRuleChainAndSetDefaultEdge("Default Edge Rule Chain 2"); 346 + public void setEdgeTemplateRootRuleChain() throws Exception {
  347 + RuleChainId ruleChainId1 = saveRuleChainAndSetAutoAssignToEdge("Default Edge Rule Chain 1");
  348 + RuleChainId ruleChainId2 = saveRuleChainAndSetAutoAssignToEdge("Default Edge Rule Chain 2");
349 349
350 - ruleChainService.setDefaultRootEdgeRuleChain(tenantId, ruleChainId1);  
351 - ruleChainService.setDefaultRootEdgeRuleChain(tenantId, ruleChainId2); 350 + ruleChainService.setEdgeTemplateRootRuleChain(tenantId, ruleChainId1);
  351 + ruleChainService.setEdgeTemplateRootRuleChain(tenantId, ruleChainId2);
352 352
353 RuleChain ruleChainById = ruleChainService.findRuleChainById(tenantId, ruleChainId1); 353 RuleChain ruleChainById = ruleChainService.findRuleChainById(tenantId, ruleChainId1);
354 Assert.assertFalse(ruleChainById.isRoot()); 354 Assert.assertFalse(ruleChainById.isRoot());
@@ -357,13 +357,13 @@ public abstract class BaseRuleChainServiceTest extends AbstractServiceTest { @@ -357,13 +357,13 @@ public abstract class BaseRuleChainServiceTest extends AbstractServiceTest {
357 Assert.assertTrue(ruleChainById.isRoot()); 357 Assert.assertTrue(ruleChainById.isRoot());
358 } 358 }
359 359
360 - private RuleChainId saveRuleChainAndSetDefaultEdge(String name) { 360 + private RuleChainId saveRuleChainAndSetAutoAssignToEdge(String name) {
361 RuleChain edgeRuleChain = new RuleChain(); 361 RuleChain edgeRuleChain = new RuleChain();
362 edgeRuleChain.setTenantId(tenantId); 362 edgeRuleChain.setTenantId(tenantId);
363 edgeRuleChain.setType(RuleChainType.EDGE); 363 edgeRuleChain.setType(RuleChainType.EDGE);
364 edgeRuleChain.setName(name); 364 edgeRuleChain.setName(name);
365 RuleChain savedEdgeRuleChain = ruleChainService.saveRuleChain(edgeRuleChain); 365 RuleChain savedEdgeRuleChain = ruleChainService.saveRuleChain(edgeRuleChain);
366 - ruleChainService.addDefaultEdgeRuleChain(tenantId, savedEdgeRuleChain.getId()); 366 + ruleChainService.setAutoAssignToEdgeRuleChain(tenantId, savedEdgeRuleChain.getId());
367 return savedEdgeRuleChain.getId(); 367 return savedEdgeRuleChain.getId();
368 } 368 }
369 369
@@ -2676,7 +2676,7 @@ public class RestClient implements ClientHttpRequestInterceptor, Closeable { @@ -2676,7 +2676,7 @@ public class RestClient implements ClientHttpRequestInterceptor, Closeable {
2676 }, params).getBody(); 2676 }, params).getBody();
2677 } 2677 }
2678 2678
2679 - public Optional<RuleChain> addDefaultEdgeRuleChain(RuleChainId ruleChainId) { 2679 + public Optional<RuleChain> setAutoAssignToEdgeRuleChain(RuleChainId ruleChainId) {
2680 try { 2680 try {
2681 ResponseEntity<RuleChain> ruleChain = restTemplate.postForEntity(baseURL + "/api/ruleChain/{ruleChainId}/defaultEdge", null, RuleChain.class, ruleChainId.getId()); 2681 ResponseEntity<RuleChain> ruleChain = restTemplate.postForEntity(baseURL + "/api/ruleChain/{ruleChainId}/defaultEdge", null, RuleChain.class, ruleChainId.getId());
2682 return Optional.ofNullable(ruleChain.getBody()); 2682 return Optional.ofNullable(ruleChain.getBody());
@@ -2689,7 +2689,7 @@ public class RestClient implements ClientHttpRequestInterceptor, Closeable { @@ -2689,7 +2689,7 @@ public class RestClient implements ClientHttpRequestInterceptor, Closeable {
2689 } 2689 }
2690 } 2690 }
2691 2691
2692 - public Optional<RuleChain> removeDefaultEdgeRuleChain(RuleChainId ruleChainId) { 2692 + public Optional<RuleChain> unsetAutoAssignToEdgeRuleChain(RuleChainId ruleChainId) {
2693 try { 2693 try {
2694 ResponseEntity<RuleChain> ruleChain = restTemplate.exchange(baseURL + "/api/ruleChain/{ruleChainId}/defaultEdge", HttpMethod.DELETE, HttpEntity.EMPTY, RuleChain.class, ruleChainId.getId()); 2694 ResponseEntity<RuleChain> ruleChain = restTemplate.exchange(baseURL + "/api/ruleChain/{ruleChainId}/defaultEdge", HttpMethod.DELETE, HttpEntity.EMPTY, RuleChain.class, ruleChainId.getId());
2695 return Optional.ofNullable(ruleChain.getBody()); 2695 return Optional.ofNullable(ruleChain.getBody());
@@ -2702,7 +2702,7 @@ public class RestClient implements ClientHttpRequestInterceptor, Closeable { @@ -2702,7 +2702,7 @@ public class RestClient implements ClientHttpRequestInterceptor, Closeable {
2702 } 2702 }
2703 } 2703 }
2704 2704
2705 - public List<RuleChain> getDefaultEdgeRuleChains() { 2705 + public List<RuleChain> getAutoAssignToEdgeRuleChains() {
2706 return restTemplate.exchange(baseURL + "/api/ruleChain/defaultEdgeRuleChains", 2706 return restTemplate.exchange(baseURL + "/api/ruleChain/defaultEdgeRuleChains",
2707 HttpMethod.GET, 2707 HttpMethod.GET,
2708 HttpEntity.EMPTY, 2708 HttpEntity.EMPTY,
@@ -2710,9 +2710,9 @@ public class RestClient implements ClientHttpRequestInterceptor, Closeable { @@ -2710,9 +2710,9 @@ public class RestClient implements ClientHttpRequestInterceptor, Closeable {
2710 }).getBody(); 2710 }).getBody();
2711 } 2711 }
2712 2712
2713 - public Optional<RuleChain> setDefaultRootEdgeRuleChain(RuleChainId ruleChainId) { 2713 + public Optional<RuleChain> setRootEdgeTemplateRuleChain(RuleChainId ruleChainId) {
2714 try { 2714 try {
2715 - ResponseEntity<RuleChain> ruleChain = restTemplate.postForEntity(baseURL + "/api/ruleChain/{ruleChainId}/defaultRootEdge", null, RuleChain.class, ruleChainId.getId()); 2715 + ResponseEntity<RuleChain> ruleChain = restTemplate.postForEntity(baseURL + "/api/ruleChain/{ruleChainId}/edgeTemplateRoot", null, RuleChain.class, ruleChainId.getId());
2716 return Optional.ofNullable(ruleChain.getBody()); 2716 return Optional.ofNullable(ruleChain.getBody());
2717 } catch (HttpClientErrorException exception) { 2717 } catch (HttpClientErrorException exception) {
2718 if (exception.getStatusCode() == HttpStatus.NOT_FOUND) { 2718 if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
@@ -565,6 +565,8 @@ export class EntityService { @@ -565,6 +565,8 @@ export class EntityService {
565 return entityType === EntityType.ENTITY_VIEW; 565 return entityType === EntityType.ENTITY_VIEW;
566 case AliasFilterType.relationsQuery: 566 case AliasFilterType.relationsQuery:
567 return true; 567 return true;
  568 + case AliasFilterType.apiUsageState:
  569 + return true;
568 case AliasFilterType.assetSearchQuery: 570 case AliasFilterType.assetSearchQuery:
569 return entityType === EntityType.ASSET; 571 return entityType === EntityType.ASSET;
570 case AliasFilterType.deviceSearchQuery: 572 case AliasFilterType.deviceSearchQuery:
@@ -313,20 +313,20 @@ export class RuleChainService { @@ -313,20 +313,20 @@ export class RuleChainService {
313 return this.http.delete(`/api/edge/${edgeId}/ruleChain/${ruleChainId}`, defaultHttpOptionsFromConfig(config)); 313 return this.http.delete(`/api/edge/${edgeId}/ruleChain/${ruleChainId}`, defaultHttpOptionsFromConfig(config));
314 } 314 }
315 315
316 - public setDefaultRootEdgeRuleChain(ruleChainId: string, config?: RequestConfig): Observable<RuleChain> {  
317 - return this.http.post<RuleChain>(`/api/ruleChain/${ruleChainId}/defaultRootEdge`, defaultHttpOptionsFromConfig(config)); 316 + public setEdgeTemplateRootRuleChain(ruleChainId: string, config?: RequestConfig): Observable<RuleChain> {
  317 + return this.http.post<RuleChain>(`/api/ruleChain/${ruleChainId}/edgeTemplateRoot`, defaultHttpOptionsFromConfig(config));
318 } 318 }
319 319
320 - public addDefaultEdgeRuleChain(ruleChainId: string, config?: RequestConfig): Observable<RuleChain> {  
321 - return this.http.post<RuleChain>(`/api/ruleChain/${ruleChainId}/defaultEdge`, defaultHttpOptionsFromConfig(config)); 320 + public setAutoAssignToEdgeRuleChain(ruleChainId: string, config?: RequestConfig): Observable<RuleChain> {
  321 + return this.http.post<RuleChain>(`/api/ruleChain/${ruleChainId}/autoAssignToEdge`, defaultHttpOptionsFromConfig(config));
322 } 322 }
323 323
324 - public removeDefaultEdgeRuleChain(ruleChainId: string, config?: RequestConfig): Observable<RuleChain> {  
325 - return this.http.delete<RuleChain>(`/api/ruleChain/${ruleChainId}/defaultEdge`, defaultHttpOptionsFromConfig(config)); 324 + public unsetAutoAssignToEdgeRuleChain(ruleChainId: string, config?: RequestConfig): Observable<RuleChain> {
  325 + return this.http.delete<RuleChain>(`/api/ruleChain/${ruleChainId}/autoAssignToEdge`, defaultHttpOptionsFromConfig(config));
326 } 326 }
327 327
328 - public getDefaultEdgeRuleChains(config?: RequestConfig): Observable<Array<RuleChain>> {  
329 - return this.http.get<Array<RuleChain>>(`/api/ruleChain/defaultEdgeRuleChains`, defaultHttpOptionsFromConfig(config)); 328 + public getAutoAssignToEdgeRuleChains(config?: RequestConfig): Observable<Array<RuleChain>> {
  329 + return this.http.get<Array<RuleChain>>(`/api/ruleChain/autoAssignToEdgeRuleChains`, defaultHttpOptionsFromConfig(config));
330 } 330 }
331 331
332 public setEdgeRootRuleChain(edgeId: string, ruleChainId: string, config?: RequestConfig): Observable<Edge> { 332 public setEdgeRootRuleChain(edgeId: string, ruleChainId: string, config?: RequestConfig): Observable<Edge> {
@@ -46,7 +46,7 @@ export interface EntityAliasesDialogData { @@ -46,7 +46,7 @@ export interface EntityAliasesDialogData {
46 widgets: Array<Widget>; 46 widgets: Array<Widget>;
47 isSingleEntityAlias?: boolean; 47 isSingleEntityAlias?: boolean;
48 isSingleWidget?: boolean; 48 isSingleWidget?: boolean;
49 - allowedEntityTypes?: Array<AliasEntityType>; 49 + allowedEntityTypes?: Array<EntityType | AliasEntityType>;
50 disableAdd?: boolean; 50 disableAdd?: boolean;
51 singleEntityAlias?: EntityAlias; 51 singleEntityAlias?: EntityAlias;
52 customTitle?: string; 52 customTitle?: string;
@@ -81,8 +81,7 @@ export abstract class EntityComponent<T extends BaseData<HasId>, @@ -81,8 +81,7 @@ export abstract class EntityComponent<T extends BaseData<HasId>,
81 protected constructor(protected store: Store<AppState>, 81 protected constructor(protected store: Store<AppState>,
82 protected fb: FormBuilder, 82 protected fb: FormBuilder,
83 protected entityValue: T, 83 protected entityValue: T,
84 - protected entitiesTableConfigValue: C,  
85 - @Inject(WINDOW) protected window?: Window) { 84 + protected entitiesTableConfigValue: C) {
86 super(store); 85 super(store);
87 this.entityForm = this.buildForm(this.entityValue); 86 this.entityForm = this.buildForm(this.entityValue);
88 } 87 }
@@ -45,7 +45,7 @@ import { @@ -45,7 +45,7 @@ import {
45 } from '@home/components/alias/entity-aliases-dialog.component'; 45 } from '@home/components/alias/entity-aliases-dialog.component';
46 import { ItemBufferService, WidgetItem } from '@core/services/item-buffer.service'; 46 import { ItemBufferService, WidgetItem } from '@core/services/item-buffer.service';
47 import { FileType, ImportWidgetResult, JSON_TYPE, WidgetsBundleItem, ZIP_TYPE } from './import-export.models'; 47 import { FileType, ImportWidgetResult, JSON_TYPE, WidgetsBundleItem, ZIP_TYPE } from './import-export.models';
48 -import { EntityType } from '@shared/models/entity-type.models'; 48 +import { AliasEntityType, EntityType } from '@shared/models/entity-type.models';
49 import { UtilsService } from '@core/services/utils.service'; 49 import { UtilsService } from '@core/services/utils.service';
50 import { WidgetService } from '@core/http/widget.service'; 50 import { WidgetService } from '@core/http/widget.service';
51 import { NULL_UUID } from '@shared/models/id/has-uuid'; 51 import { NULL_UUID } from '@shared/models/id/has-uuid';
@@ -603,6 +603,10 @@ export class ImportExportService { @@ -603,6 +603,10 @@ export class ImportExportService {
603 603
604 private editMissingAliases(widgets: Array<Widget>, isSingleWidget: boolean, 604 private editMissingAliases(widgets: Array<Widget>, isSingleWidget: boolean,
605 customTitle: string, missingEntityAliases: EntityAliases): Observable<EntityAliases> { 605 customTitle: string, missingEntityAliases: EntityAliases): Observable<EntityAliases> {
  606 + // TODO: voba - double check with Igor/Vlad regarding this approach to hide aliases
  607 + let allowedEntityTypes: Array<EntityType | AliasEntityType> =
  608 + this.entityService.prepareAllowedEntityTypesList(null, true);
  609 +
606 return this.dialog.open<EntityAliasesDialogComponent, EntityAliasesDialogData, 610 return this.dialog.open<EntityAliasesDialogComponent, EntityAliasesDialogData,
607 EntityAliases>(EntityAliasesDialogComponent, { 611 EntityAliases>(EntityAliasesDialogComponent, {
608 disableClose: true, 612 disableClose: true,
@@ -612,7 +616,8 @@ export class ImportExportService { @@ -612,7 +616,8 @@ export class ImportExportService {
612 widgets, 616 widgets,
613 customTitle, 617 customTitle,
614 isSingleWidget, 618 isSingleWidget,
615 - disableAdd: true 619 + disableAdd: true,
  620 + allowedEntityTypes: allowedEntityTypes
616 } 621 }
617 }).afterClosed().pipe( 622 }).afterClosed().pipe(
618 map((updatedEntityAliases) => { 623 map((updatedEntityAliases) => {
@@ -99,6 +99,7 @@ import { ImportExportService } from '@home/components/import-export/import-expor @@ -99,6 +99,7 @@ import { ImportExportService } from '@home/components/import-export/import-expor
99 import { AuthState } from '@app/core/auth/auth.models'; 99 import { AuthState } from '@app/core/auth/auth.models';
100 import { FiltersDialogComponent, FiltersDialogData } from '@home/components/filter/filters-dialog.component'; 100 import { FiltersDialogComponent, FiltersDialogData } from '@home/components/filter/filters-dialog.component';
101 import { Filters } from '@shared/models/query/query.models'; 101 import { Filters } from '@shared/models/query/query.models';
  102 +import { AliasEntityType, EntityType } from "@shared/models/entity-type.models";
102 103
103 // @dynamic 104 // @dynamic
104 @Component({ 105 @Component({
@@ -142,6 +143,8 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC @@ -142,6 +143,8 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
142 isToolbarOpenedAnimate = false; 143 isToolbarOpenedAnimate = false;
143 isRightLayoutOpened = false; 144 isRightLayoutOpened = false;
144 145
  146 + allowedEntityTypes: Array<EntityType | AliasEntityType> = null;
  147 +
145 editingWidget: Widget = null; 148 editingWidget: Widget = null;
146 editingWidgetLayout: WidgetLayout = null; 149 editingWidgetLayout: WidgetLayout = null;
147 editingWidgetOriginal: Widget = null; 150 editingWidgetOriginal: Widget = null;
@@ -309,6 +312,9 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC @@ -309,6 +312,9 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
309 }; 312 };
310 this.window.parent.postMessage(JSON.stringify(message), '*'); 313 this.window.parent.postMessage(JSON.stringify(message), '*');
311 } 314 }
  315 +
  316 + // TODO: voba - double check with Igor/Vlad regarding this approach to hide aliases
  317 + this.allowedEntityTypes = this.entityService.prepareAllowedEntityTypesList(null, true);
312 } 318 }
313 319
314 private reset() { 320 private reset() {
@@ -514,7 +520,8 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC @@ -514,7 +520,8 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
514 data: { 520 data: {
515 entityAliases: deepClone(this.dashboard.configuration.entityAliases), 521 entityAliases: deepClone(this.dashboard.configuration.entityAliases),
516 widgets: this.dashboardUtils.getWidgetsArray(this.dashboard), 522 widgets: this.dashboardUtils.getWidgetsArray(this.dashboard),
517 - isSingleEntityAlias: false 523 + isSingleEntityAlias: false,
  524 + allowedEntityTypes: this.allowedEntityTypes
518 } 525 }
519 }).afterClosed().subscribe((entityAliases) => { 526 }).afterClosed().subscribe((entityAliases) => {
520 if (entityAliases) { 527 if (entityAliases) {
@@ -65,7 +65,7 @@ const routes: Routes = [ @@ -65,7 +65,7 @@ const routes: Routes = [
65 auth: [Authority.TENANT_ADMIN], 65 auth: [Authority.TENANT_ADMIN],
66 ruleChainsType: 'edge', 66 ruleChainsType: 'edge',
67 breadcrumb: { 67 breadcrumb: {
68 - label: 'edge.rulechain-templates', 68 + label: 'edge.edge-rulechains',
69 icon: 'settings_ethernet' 69 icon: 'settings_ethernet'
70 }, 70 },
71 }, 71 },
@@ -134,22 +134,24 @@ @@ -134,22 +134,24 @@
134 </tb-entity-subtype-autocomplete> 134 </tb-entity-subtype-autocomplete>
135 <div fxLayout="row"> 135 <div fxLayout="row">
136 <fieldset fxFlex> 136 <fieldset fxFlex>
  137 + <div class="tb-hint" [innerHTML]="'edge.edge-license-key-hint' | translate"></div>
137 <mat-form-field class="mat-block"> 138 <mat-form-field class="mat-block">
138 - <mat-label translate>edge.cloud-endpoint</mat-label>  
139 - <input matInput formControlName="cloudEndpoint" required>  
140 - <mat-error *ngIf="entityForm.get('cloudEndpoint').hasError('required')">  
141 - {{ 'edge.cloud-endpoint-required' | translate }} 139 + <mat-label translate>edge.edge-license-key</mat-label>
  140 + <input matInput formControlName="edgeLicenseKey" required>
  141 + <mat-error *ngIf="entityForm.get('edgeLicenseKey').hasError('required')">
  142 + {{ 'edge.edge-license-key-required' | translate }}
142 </mat-error> 143 </mat-error>
143 </mat-form-field> 144 </mat-form-field>
144 </fieldset> 145 </fieldset>
145 </div> 146 </div>
146 <div fxLayout="row"> 147 <div fxLayout="row">
147 <fieldset fxFlex> 148 <fieldset fxFlex>
  149 + <div translate class="tb-hint">edge.cloud-endpoint-hint</div>
148 <mat-form-field class="mat-block"> 150 <mat-form-field class="mat-block">
149 - <mat-label translate>edge.edge-license-key</mat-label>  
150 - <input matInput formControlName="edgeLicenseKey" required>  
151 - <mat-error *ngIf="entityForm.get('edgeLicenseKey').hasError('required')">  
152 - {{ 'edge.edge-license-key-required' | translate }} 151 + <mat-label translate>edge.cloud-endpoint</mat-label>
  152 + <input matInput formControlName="cloudEndpoint" required>
  153 + <mat-error *ngIf="entityForm.get('cloudEndpoint').hasError('required')">
  154 + {{ 'edge.cloud-endpoint-required' | translate }}
153 </mat-error> 155 </mat-error>
154 </mat-form-field> 156 </mat-form-field>
155 </fieldset> 157 </fieldset>
@@ -44,13 +44,15 @@ export class EdgeComponent extends EntityComponent<EdgeInfo> { @@ -44,13 +44,15 @@ export class EdgeComponent extends EntityComponent<EdgeInfo> {
44 @Inject('entity') protected entityValue: EdgeInfo, 44 @Inject('entity') protected entityValue: EdgeInfo,
45 @Inject('entitiesTableConfig') protected entitiesTableConfigValue: EntityTableConfig<EdgeInfo>, 45 @Inject('entitiesTableConfig') protected entitiesTableConfigValue: EntityTableConfig<EdgeInfo>,
46 public fb: FormBuilder, 46 public fb: FormBuilder,
47 - // TODO: voba - discuss with Vlad how properly add window to subclass  
48 @Inject(WINDOW) protected window: Window) { 47 @Inject(WINDOW) protected window: Window) {
49 - super(store, fb, entityValue, entitiesTableConfigValue, window); 48 + super(store, fb, entityValue, entitiesTableConfigValue);
50 } 49 }
51 50
52 ngOnInit() { 51 ngOnInit() {
53 this.edgeScope = this.entitiesTableConfig.componentsData.edgeScope; 52 this.edgeScope = this.entitiesTableConfig.componentsData.edgeScope;
  53 + this.entityForm.patchValue({
  54 + cloudEndpoint:this.window.location.origin
  55 + });
54 super.ngOnInit(); 56 super.ngOnInit();
55 } 57 }
56 58
@@ -70,9 +72,9 @@ export class EdgeComponent extends EntityComponent<EdgeInfo> { @@ -70,9 +72,9 @@ export class EdgeComponent extends EntityComponent<EdgeInfo> {
70 return this.fb.group( 72 return this.fb.group(
71 { 73 {
72 name: [entity ? entity.name : '', [Validators.required]], 74 name: [entity ? entity.name : '', [Validators.required]],
73 - type: [entity ? entity.type : null, [Validators.required]], 75 + type: [entity?.type ? entity.type : 'default', [Validators.required]],
74 label: [entity ? entity.label : ''], 76 label: [entity ? entity.label : ''],
75 - cloudEndpoint: [this.window.location.origin, [Validators.required]], 77 + cloudEndpoint: [null, [Validators.required]],
76 edgeLicenseKey: ['', [Validators.required]], 78 edgeLicenseKey: ['', [Validators.required]],
77 routingKey: guid(), 79 routingKey: guid(),
78 secret: this.generateSecret(20), 80 secret: this.generateSecret(20),
@@ -86,14 +88,14 @@ export class EdgeComponent extends EntityComponent<EdgeInfo> { @@ -86,14 +88,14 @@ export class EdgeComponent extends EntityComponent<EdgeInfo> {
86 } 88 }
87 89
88 updateForm(entity: EdgeInfo) { 90 updateForm(entity: EdgeInfo) {
89 - this.entityForm.patchValue({name: entity.name});  
90 - this.entityForm.patchValue({type: entity.type});  
91 - this.entityForm.patchValue({label: entity.label});  
92 - this.entityForm.patchValue({cloudEndpoint: entity.cloudEndpoint});  
93 - this.entityForm.patchValue({edgeLicenseKey: entity.edgeLicenseKey});  
94 - this.entityForm.patchValue({routingKey: entity.routingKey});  
95 - this.entityForm.patchValue({secret: entity.secret});  
96 this.entityForm.patchValue({ 91 this.entityForm.patchValue({
  92 + name: entity.name,
  93 + type: entity.type,
  94 + label: entity.label,
  95 + cloudEndpoint: entity.cloudEndpoint ? entity.cloudEndpoint : this.window.location.origin,
  96 + edgeLicenseKey: entity.edgeLicenseKey,
  97 + routingKey: entity.routingKey,
  98 + secret: entity.secret,
97 additionalInfo: { 99 additionalInfo: {
98 description: entity.additionalInfo ? entity.additionalInfo.description : '' 100 description: entity.additionalInfo ? entity.additionalInfo.description : ''
99 } 101 }
@@ -19,13 +19,13 @@ @@ -19,13 +19,13 @@
19 <button mat-raised-button color="primary" 19 <button mat-raised-button color="primary"
20 [disabled]="(isLoading$ | async)" 20 [disabled]="(isLoading$ | async)"
21 (click)="onEntityAction($event, 'open')" 21 (click)="onEntityAction($event, 'open')"
22 - [fxShow]="!isEdit"> 22 + [fxShow]="!isEdit && (ruleChainScope === 'tenant' || ruleChainScope === 'edges')">
23 {{'rulechain.open-rulechain' | translate }} 23 {{'rulechain.open-rulechain' | translate }}
24 </button> 24 </button>
25 <button mat-raised-button color="primary" 25 <button mat-raised-button color="primary"
26 [disabled]="(isLoading$ | async)" 26 [disabled]="(isLoading$ | async)"
27 (click)="onEntityAction($event, 'export')" 27 (click)="onEntityAction($event, 'export')"
28 - [fxShow]="!isEdit"> 28 + [fxShow]="!isEdit && (ruleChainScope === 'tenant' || ruleChainScope === 'edges')">
29 {{'rulechain.export' | translate }} 29 {{'rulechain.export' | translate }}
30 </button> 30 </button>
31 <button mat-raised-button color="primary" 31 <button mat-raised-button color="primary"
@@ -36,20 +36,38 @@ @@ -36,20 +36,38 @@
36 </button> 36 </button>
37 <button mat-raised-button color="primary" 37 <button mat-raised-button color="primary"
38 [disabled]="(isLoading$ | async)" 38 [disabled]="(isLoading$ | async)"
39 - (click)="onEntityAction($event, 'setDefaultRoot')" 39 + (click)="onEntityAction($event, 'setEdgeTemplateRoot')"
40 [fxShow]="!isEdit && !entity?.root && ruleChainScope === 'edges'"> 40 [fxShow]="!isEdit && !entity?.root && ruleChainScope === 'edges'">
41 - {{'rulechain.set-default-root-edge' | translate }} 41 + {{'rulechain.set-edge-template-root-rulechain' | translate }}
  42 + </button>
  43 + <button mat-raised-button color="primary"
  44 + [disabled]="(isLoading$ | async)"
  45 + (click)="onEntityAction($event, 'setAutoAssignToEdge')"
  46 + [fxShow]="!isEdit && isNotAutoAssignToEdgeRuleChain() && ruleChainScope === 'edges'">
  47 + {{'rulechain.set-auto-assign-to-edge' | translate }}
  48 + </button>
  49 + <button mat-raised-button color="primary"
  50 + [disabled]="(isLoading$ | async)"
  51 + (click)="onEntityAction($event, 'unsetAutoAssignToEdge')"
  52 + [fxShow]="!isEdit && isAutoAssignToEdgeRuleChain() && ruleChainScope === 'edges'">
  53 + {{'rulechain.unset-auto-assign-to-edge' | translate }}
42 </button> 54 </button>
43 <button mat-raised-button color="primary" 55 <button mat-raised-button color="primary"
44 [disabled]="(isLoading$ | async)" 56 [disabled]="(isLoading$ | async)"
45 (click)="onEntityAction($event, 'setRoot')" 57 (click)="onEntityAction($event, 'setRoot')"
46 - [fxShow]="!isEdit && !isRootRuleChain() && ruleChainScope === 'edge'"> 58 + [fxShow]="!isEdit && !isEdgeRootRuleChain() && ruleChainScope === 'edge'">
47 {{'rulechain.set-root' | translate }} 59 {{'rulechain.set-root' | translate }}
48 </button> 60 </button>
49 <button mat-raised-button color="primary" 61 <button mat-raised-button color="primary"
50 [disabled]="(isLoading$ | async)" 62 [disabled]="(isLoading$ | async)"
  63 + (click)="onEntityAction($event, 'unassignFromEdge')"
  64 + [fxShow]="!isEdit && !isEdgeRootRuleChain() && ruleChainScope === 'edge'">
  65 + {{'edge.unassign-from-edge' | translate }}
  66 + </button>
  67 + <button mat-raised-button color="primary"
  68 + [disabled]="(isLoading$ | async)"
51 (click)="onEntityAction($event, 'delete')" 69 (click)="onEntityAction($event, 'delete')"
52 - [fxShow]="!hideDelete() && !isEdit"> 70 + [fxShow]="!hideDelete() && !isEdit && (ruleChainScope === 'tenant' || ruleChainScope === 'edges')">
53 {{'rulechain.delete' | translate }} 71 {{'rulechain.delete' | translate }}
54 </button> 72 </button>
55 <div fxLayout="row"> 73 <div fxLayout="row">
@@ -86,9 +86,27 @@ export class RuleChainComponent extends EntityComponent<RuleChain> { @@ -86,9 +86,27 @@ export class RuleChainComponent extends EntityComponent<RuleChain> {
86 })); 86 }));
87 } 87 }
88 88
89 - isRootRuleChain() { 89 + isEdgeRootRuleChain() {
90 if (this.entitiesTableConfig && this.entityValue) { 90 if (this.entitiesTableConfig && this.entityValue) {
91 - return this.entitiesTableConfig.componentsData.rootRuleChainId == this.entityValue.id.id; 91 + return this.entitiesTableConfig.componentsData.edge?.rootRuleChainId?.id == this.entityValue.id.id;
  92 + } else {
  93 + return false;
  94 + }
  95 + }
  96 +
  97 + isAutoAssignToEdgeRuleChain() {
  98 + if (this.entitiesTableConfig && this.entityValue) {
  99 + return !this.entityValue.root &&
  100 + this.entitiesTableConfig.componentsData?.autoAssignToEdgeRuleChainIds?.includes(this.entityValue.id.id);
  101 + } else {
  102 + return false;
  103 + }
  104 + }
  105 +
  106 + isNotAutoAssignToEdgeRuleChain() {
  107 + if (this.entitiesTableConfig && this.entityValue) {
  108 + return !this.entityValue.root &&
  109 + !this.entitiesTableConfig.componentsData?.autoAssignToEdgeRuleChainIds?.includes(this.entityValue.id.id);
92 } else { 110 } else {
93 return false; 111 return false;
94 } 112 }
@@ -14,9 +14,9 @@ @@ -14,9 +14,9 @@
14 /// limitations under the License. 14 /// limitations under the License.
15 /// 15 ///
16 16
17 -import {Injectable} from '@angular/core'; 17 +import { Injectable } from '@angular/core';
18 18
19 -import {ActivatedRouteSnapshot, Resolve, Router} from '@angular/router'; 19 +import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router';
20 import { 20 import {
21 CellActionDescriptor, 21 CellActionDescriptor,
22 checkBoxCell, 22 checkBoxCell,
@@ -27,27 +27,28 @@ import { @@ -27,27 +27,28 @@ import {
27 GroupActionDescriptor, 27 GroupActionDescriptor,
28 HeaderActionDescriptor 28 HeaderActionDescriptor
29 } from '@home/models/entity/entities-table-config.models'; 29 } from '@home/models/entity/entities-table-config.models';
30 -import {TranslateService} from '@ngx-translate/core';  
31 -import {DatePipe} from '@angular/common';  
32 -import {EntityType, entityTypeResources, entityTypeTranslations} from '@shared/models/entity-type.models';  
33 -import {EntityAction} from '@home/models/entity/entity-component.models';  
34 -import {RuleChain, ruleChainType} from '@shared/models/rule-chain.models';  
35 -import {RuleChainService} from '@core/http/rule-chain.service';  
36 -import {RuleChainComponent} from '@modules/home/pages/rulechain/rulechain.component';  
37 -import {DialogService} from '@core/services/dialog.service';  
38 -import {RuleChainTabsComponent} from '@home/pages/rulechain/rulechain-tabs.component';  
39 -import {ImportExportService} from '@home/components/import-export/import-export.service';  
40 -import {ItemBufferService} from '@core/services/item-buffer.service';  
41 -import {EdgeService} from "@core/http/edge.service";  
42 -import {forkJoin, Observable} from "rxjs"; 30 +import { TranslateService } from '@ngx-translate/core';
  31 +import { DatePipe } from '@angular/common';
  32 +import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
  33 +import { EntityAction } from '@home/models/entity/entity-component.models';
  34 +import { RuleChain, ruleChainType } from '@shared/models/rule-chain.models';
  35 +import { RuleChainService } from '@core/http/rule-chain.service';
  36 +import { RuleChainComponent } from '@modules/home/pages/rulechain/rulechain.component';
  37 +import { DialogService } from '@core/services/dialog.service';
  38 +import { RuleChainTabsComponent } from '@home/pages/rulechain/rulechain-tabs.component';
  39 +import { ImportExportService } from '@home/components/import-export/import-export.service';
  40 +import { ItemBufferService } from '@core/services/item-buffer.service';
  41 +import { EdgeService } from "@core/http/edge.service";
  42 +import { forkJoin, Observable } from "rxjs";
43 import { 43 import {
44 AddEntitiesToEdgeDialogComponent, 44 AddEntitiesToEdgeDialogComponent,
45 AddEntitiesToEdgeDialogData 45 AddEntitiesToEdgeDialogData
46 } from "@home/dialogs/add-entities-to-edge-dialog.component"; 46 } from "@home/dialogs/add-entities-to-edge-dialog.component";
47 -import {MatDialog} from "@angular/material/dialog";  
48 -import {isUndefined} from "@core/utils";  
49 -import {PageLink} from "@shared/models/page/page-link";  
50 -import {Edge} from "@shared/models/edge.models"; 47 +import { MatDialog } from "@angular/material/dialog";
  48 +import { isUndefined } from "@core/utils";
  49 +import { PageLink } from "@shared/models/page/page-link";
  50 +import { Edge } from "@shared/models/edge.models";
  51 +import { map, mergeMap } from "rxjs/operators";
51 52
52 @Injectable() 53 @Injectable()
53 export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<RuleChain>> { 54 export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<RuleChain>> {
@@ -96,12 +97,11 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -96,12 +97,11 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
96 this.config.entitySelectionEnabled = ruleChain => ruleChain && !ruleChain.root; 97 this.config.entitySelectionEnabled = ruleChain => ruleChain && !ruleChain.root;
97 this.config.deleteEnabled = (ruleChain) => ruleChain && !ruleChain.root; 98 this.config.deleteEnabled = (ruleChain) => ruleChain && !ruleChain.root;
98 this.config.entitiesDeleteEnabled = true; 99 this.config.entitiesDeleteEnabled = true;
99 - }  
100 - else if (this.config.componentsData.ruleChainScope === 'edge') { 100 + } else if (this.config.componentsData.ruleChainScope === 'edge') {
101 this.config.entitySelectionEnabled = ruleChain => this.config.componentsData.edge.rootRuleChainId.id != ruleChain.id.id; 101 this.config.entitySelectionEnabled = ruleChain => this.config.componentsData.edge.rootRuleChainId.id != ruleChain.id.id;
102 this.edgeService.getEdge(this.config.componentsData.edgeId).subscribe(edge => { 102 this.edgeService.getEdge(this.config.componentsData.edgeId).subscribe(edge => {
103 this.config.componentsData.edge = edge; 103 this.config.componentsData.edge = edge;
104 - this.config.tableTitle = edge.name + ': ' + this.translate.instant('edge.rulechain-templates'); 104 + this.config.tableTitle = edge.name + ': ' + this.translate.instant('edge.rulechains');
105 }); 105 });
106 this.config.entitiesDeleteEnabled = false; 106 this.config.entitiesDeleteEnabled = false;
107 } 107 }
@@ -128,9 +128,13 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -128,9 +128,13 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
128 columns.push( 128 columns.push(
129 new DateEntityTableColumn<RuleChain>('createdTime', 'common.created-time', this.datePipe, '150px'), 129 new DateEntityTableColumn<RuleChain>('createdTime', 'common.created-time', this.datePipe, '150px'),
130 new EntityTableColumn<RuleChain>('name', 'rulechain.name', '100%'), 130 new EntityTableColumn<RuleChain>('name', 'rulechain.name', '100%'),
131 - new EntityTableColumn<RuleChain>('root', 'rulechain.root', '60px', 131 + new EntityTableColumn<RuleChain>('root', 'rulechain.edge-template-root', '60px',
132 entity => { 132 entity => {
133 return checkBoxCell(entity.root); 133 return checkBoxCell(entity.root);
  134 + }),
  135 + new EntityTableColumn<RuleChain>('assignToEdge', 'rulechain.assign-to-edge', '60px',
  136 + entity => {
  137 + return checkBoxCell(this.isAutoAssignToEdgeRuleChain(entity));
134 }) 138 })
135 ); 139 );
136 } 140 }
@@ -226,22 +230,22 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -226,22 +230,22 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
226 if (ruleChainScope === 'edges') { 230 if (ruleChainScope === 'edges') {
227 actions.push( 231 actions.push(
228 { 232 {
229 - name: this.translate.instant('rulechain.set-default-root-edge'), 233 + name: this.translate.instant('rulechain.set-edge-template-root-rulechain'),
230 icon: 'flag', 234 icon: 'flag',
231 isEnabled: (entity) => this.isNonRootRuleChain(entity), 235 isEnabled: (entity) => this.isNonRootRuleChain(entity),
232 - onAction: ($event, entity) => this.setDefaultRootEdgeRuleChain($event, entity) 236 + onAction: ($event, entity) => this.setEdgeTemplateRootRuleChain($event, entity)
233 }, 237 },
234 { 238 {
235 name: this.translate.instant('rulechain.set-auto-assign-to-edge'), 239 name: this.translate.instant('rulechain.set-auto-assign-to-edge'),
236 icon: 'bookmark_outline', 240 icon: 'bookmark_outline',
237 - isEnabled: (entity) => this.isNonDefaultEdgeRuleChain(entity),  
238 - onAction: ($event, entity) => this.setDefaultEdgeRuleChain($event, entity) 241 + isEnabled: (entity) => this.isNotAutoAssignToEdgeRuleChain(entity),
  242 + onAction: ($event, entity) => this.setAutoAssignToEdgeRuleChain($event, entity)
239 }, 243 },
240 { 244 {
241 - name: this.translate.instant('rulechain.remove-default-edge'), 245 + name: this.translate.instant('rulechain.unset-auto-assign-to-edge'),
242 icon: 'bookmark', 246 icon: 'bookmark',
243 - isEnabled: (entity) => this.isDefaultEdgeRuleChain(entity),  
244 - onAction: ($event, entity) => this.removeDefaultEdgeRuleChain($event, entity) 247 + isEnabled: (entity) => this.isAutoAssignToEdgeRuleChain(entity),
  248 + onAction: ($event, entity) => this.unsetAutoAssignToEdgeRuleChain($event, entity)
245 } 249 }
246 ) 250 )
247 } 251 }
@@ -344,26 +348,35 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -344,26 +348,35 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
344 case 'setRoot': 348 case 'setRoot':
345 this.setRootRuleChain(action.event, action.entity); 349 this.setRootRuleChain(action.event, action.entity);
346 return true; 350 return true;
347 - case 'setDefaultRoot':  
348 - this.setDefaultRootEdgeRuleChain(action.event, action.entity); 351 + case 'setEdgeTemplateRoot':
  352 + this.setEdgeTemplateRootRuleChain(action.event, action.entity);
  353 + return true;
  354 + case 'unassignFromEdge':
  355 + this.unassignFromEdge(action.event, action.entity);
  356 + return true;
  357 + case 'setAutoAssignToEdge':
  358 + this.setAutoAssignToEdgeRuleChain(action.event, action.entity);
  359 + return true;
  360 + case 'unsetAutoAssignToEdge':
  361 + this.unsetAutoAssignToEdgeRuleChain(action.event, action.entity);
349 return true; 362 return true;
350 } 363 }
351 return false; 364 return false;
352 } 365 }
353 366
354 - setDefaultRootEdgeRuleChain($event: Event, ruleChain: RuleChain) { 367 + setEdgeTemplateRootRuleChain($event: Event, ruleChain: RuleChain) {
355 if ($event) { 368 if ($event) {
356 $event.stopPropagation(); 369 $event.stopPropagation();
357 } 370 }
358 this.dialogService.confirm( 371 this.dialogService.confirm(
359 - this.translate.instant('rulechain.set-default-root-edge-rulechain-title', {ruleChainName: ruleChain.name}),  
360 - this.translate.instant('rulechain.set-default-root-edge-rulechain-text'), 372 + this.translate.instant('rulechain.set-edge-template-root-rulechain-title', {ruleChainName: ruleChain.name}),
  373 + this.translate.instant('rulechain.set-edge-template-root-rulechain-text'),
361 this.translate.instant('action.no'), 374 this.translate.instant('action.no'),
362 this.translate.instant('action.yes'), 375 this.translate.instant('action.yes'),
363 true 376 true
364 ).subscribe((res) => { 377 ).subscribe((res) => {
365 if (res) { 378 if (res) {
366 - this.ruleChainService.setDefaultRootEdgeRuleChain(ruleChain.id.id).subscribe( 379 + this.ruleChainService.setEdgeTemplateRootRuleChain(ruleChain.id.id).subscribe(
367 () => { 380 () => {
368 this.config.table.updateData(); 381 this.config.table.updateData();
369 } 382 }
@@ -444,7 +457,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -444,7 +457,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
444 ); 457 );
445 } 458 }
446 459
447 - setDefaultEdgeRuleChain($event: Event, ruleChain: RuleChain) { 460 + setAutoAssignToEdgeRuleChain($event: Event, ruleChain: RuleChain) {
448 if ($event) { 461 if ($event) {
449 $event.stopPropagation(); 462 $event.stopPropagation();
450 } 463 }
@@ -456,7 +469,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -456,7 +469,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
456 true 469 true
457 ).subscribe((res) => { 470 ).subscribe((res) => {
458 if (res) { 471 if (res) {
459 - this.ruleChainService.addDefaultEdgeRuleChain(ruleChain.id.id).subscribe( 472 + this.ruleChainService.setAutoAssignToEdgeRuleChain(ruleChain.id.id).subscribe(
460 () => { 473 () => {
461 this.config.table.updateData(); 474 this.config.table.updateData();
462 } 475 }
@@ -466,19 +479,19 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -466,19 +479,19 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
466 ); 479 );
467 } 480 }
468 481
469 - removeDefaultEdgeRuleChain($event: Event, ruleChain: RuleChain) { 482 + unsetAutoAssignToEdgeRuleChain($event: Event, ruleChain: RuleChain) {
470 if ($event) { 483 if ($event) {
471 $event.stopPropagation(); 484 $event.stopPropagation();
472 } 485 }
473 this.dialogService.confirm( 486 this.dialogService.confirm(
474 - this.translate.instant('rulechain.remove-default-edge-title', {ruleChainName: ruleChain.name}),  
475 - this.translate.instant('rulechain.remove-default-edge-text'), 487 + this.translate.instant('rulechain.unset-auto-assign-to-edge-title', {ruleChainName: ruleChain.name}),
  488 + this.translate.instant('rulechain.unset-auto-assign-to-edge-text'),
476 this.translate.instant('action.no'), 489 this.translate.instant('action.no'),
477 this.translate.instant('action.yes'), 490 this.translate.instant('action.yes'),
478 true 491 true
479 ).subscribe((res) => { 492 ).subscribe((res) => {
480 if (res) { 493 if (res) {
481 - this.ruleChainService.removeDefaultEdgeRuleChain(ruleChain.id.id).subscribe( 494 + this.ruleChainService.unsetAutoAssignToEdgeRuleChain(ruleChain.id.id).subscribe(
482 () => { 495 () => {
483 this.config.table.updateData(); 496 this.config.table.updateData();
484 } 497 }
@@ -490,17 +503,18 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -490,17 +503,18 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
490 503
491 isNonRootRuleChain(ruleChain: RuleChain) { 504 isNonRootRuleChain(ruleChain: RuleChain) {
492 if (this.config.componentsData.ruleChainScope === 'edge') { 505 if (this.config.componentsData.ruleChainScope === 'edge') {
493 - return this.config.componentsData.edge.rootRuleChainId && true && this.config.componentsData.edge.rootRuleChainId.id != ruleChain.id.id; 506 + return this.config.componentsData.edge.rootRuleChainId &&
  507 + this.config.componentsData.edge.rootRuleChainId.id != ruleChain.id.id;
494 } 508 }
495 return !ruleChain.root; 509 return !ruleChain.root;
496 } 510 }
497 511
498 - isDefaultEdgeRuleChain(ruleChain) {  
499 - return !ruleChain.root && this.config.componentsData.defaultEdgeRuleChainIds.includes(ruleChain.id.id); 512 + isAutoAssignToEdgeRuleChain(ruleChain) {
  513 + return !ruleChain.root && this.config.componentsData.autoAssignToEdgeRuleChainIds.includes(ruleChain.id.id);
500 } 514 }
501 515
502 - isNonDefaultEdgeRuleChain(ruleChain) {  
503 - return !ruleChain.root && !this.config.componentsData.defaultEdgeRuleChainIds.includes(ruleChain.id.id); 516 + isNotAutoAssignToEdgeRuleChain(ruleChain) {
  517 + return !ruleChain.root && !this.config.componentsData.autoAssignToEdgeRuleChainIds.includes(ruleChain.id.id);
504 } 518 }
505 519
506 fetchRuleChains(pageLink: PageLink) { 520 fetchRuleChains(pageLink: PageLink) {
@@ -508,10 +522,12 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig< @@ -508,10 +522,12 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
508 } 522 }
509 523
510 fetchEdgeRuleChains(pageLink: PageLink) { 524 fetchEdgeRuleChains(pageLink: PageLink) {
511 - this.config.componentsData.defaultEdgeRuleChainIds = [];  
512 - this.ruleChainService.getDefaultEdgeRuleChains().subscribe(ruleChains => {  
513 - ruleChains.map(ruleChain => this.config.componentsData.defaultEdgeRuleChainIds.push(ruleChain.id.id));  
514 - });  
515 - return this.ruleChainService.getRuleChains(pageLink, ruleChainType.edge); 525 + return this.ruleChainService.getAutoAssignToEdgeRuleChains().pipe(
  526 + mergeMap((ruleChains) => {
  527 + this.config.componentsData.autoAssignToEdgeRuleChainIds = [];
  528 + ruleChains.map(ruleChain => this.config.componentsData.autoAssignToEdgeRuleChainIds.push(ruleChain.id.id));
  529 + return this.ruleChainService.getRuleChains(pageLink, ruleChainType.edge);
  530 + })
  531 + );
516 } 532 }
517 } 533 }
@@ -115,7 +115,7 @@ export const HelpLinks = { @@ -115,7 +115,7 @@ export const HelpLinks = {
115 users: helpBaseUrl + '/docs/user-guide/ui/users', 115 users: helpBaseUrl + '/docs/user-guide/ui/users',
116 devices: helpBaseUrl + '/docs/user-guide/ui/devices', 116 devices: helpBaseUrl + '/docs/user-guide/ui/devices',
117 deviceProfiles: helpBaseUrl + '/docs/user-guide/ui/device-profiles', 117 deviceProfiles: helpBaseUrl + '/docs/user-guide/ui/device-profiles',
118 - edges: helpBaseUrl + 'docs/user-guide/ui/edges', 118 + edges: helpBaseUrl + '/docs/user-guide/ui/edges',
119 assets: helpBaseUrl + '/docs/user-guide/ui/assets', 119 assets: helpBaseUrl + '/docs/user-guide/ui/assets',
120 entityViews: helpBaseUrl + '/docs/user-guide/ui/entity-views', 120 entityViews: helpBaseUrl + '/docs/user-guide/ui/entity-views',
121 entitiesImport: helpBaseUrl + '/docs/user-guide/bulk-provisioning', 121 entitiesImport: helpBaseUrl + '/docs/user-guide/bulk-provisioning',
@@ -93,45 +93,45 @@ export enum EdgeEventStatus { @@ -93,45 +93,45 @@ export enum EdgeEventStatus {
93 93
94 export const edgeEventTypeTranslations = new Map<EdgeEventType, string>( 94 export const edgeEventTypeTranslations = new Map<EdgeEventType, string>(
95 [ 95 [
96 - [EdgeEventType.DASHBOARD, 'edge.edge-event-type-dashboard'],  
97 - [EdgeEventType.ASSET, 'edge.edge-event-type-asset'],  
98 - [EdgeEventType.DEVICE, 'edge.edge-event-type-device'],  
99 - [EdgeEventType.DEVICE_PROFILE, 'edge.edge-event-type-device-profile'],  
100 - [EdgeEventType.ENTITY_VIEW, 'edge.edge-event-type-entity-view'],  
101 - [EdgeEventType.ALARM, 'edge.edge-event-type-alarm'],  
102 - [EdgeEventType.RULE_CHAIN, 'edge.edge-event-type-rule-chain'],  
103 - [EdgeEventType.RULE_CHAIN_METADATA, 'edge.edge-event-type-rule-chain-metadata'],  
104 - [EdgeEventType.EDGE, 'edge.edge-event-type-edge'],  
105 - [EdgeEventType.USER, 'edge.edge-event-type-user'],  
106 - [EdgeEventType.CUSTOMER, 'edge.edge-event-type-customer'],  
107 - [EdgeEventType.RELATION, 'edge.edge-event-type-relation'],  
108 - [EdgeEventType.WIDGETS_BUNDLE, 'edge.edge-event-type-widgets-bundle'],  
109 - [EdgeEventType.WIDGET_TYPE, 'edge.edge-event-type-widgets-type'],  
110 - [EdgeEventType.ADMIN_SETTINGS, 'edge.edge-event-type-admin-settings'] 96 + [EdgeEventType.DASHBOARD, 'edge-event.type-dashboard'],
  97 + [EdgeEventType.ASSET, 'edge-event.type-asset'],
  98 + [EdgeEventType.DEVICE, 'edge-event.type-device'],
  99 + [EdgeEventType.DEVICE_PROFILE, 'edge-event.type-device-profile'],
  100 + [EdgeEventType.ENTITY_VIEW, 'edge-event.type-entity-view'],
  101 + [EdgeEventType.ALARM, 'edge-event.type-alarm'],
  102 + [EdgeEventType.RULE_CHAIN, 'edge-event.type-rule-chain'],
  103 + [EdgeEventType.RULE_CHAIN_METADATA, 'edge-event.type-rule-chain-metadata'],
  104 + [EdgeEventType.EDGE, 'edge-event.type-edge'],
  105 + [EdgeEventType.USER, 'edge-event.type-user'],
  106 + [EdgeEventType.CUSTOMER, 'edge-event.type-customer'],
  107 + [EdgeEventType.RELATION, 'edge-event.type-relation'],
  108 + [EdgeEventType.WIDGETS_BUNDLE, 'edge-event.type-widgets-bundle'],
  109 + [EdgeEventType.WIDGET_TYPE, 'edge-event.type-widgets-type'],
  110 + [EdgeEventType.ADMIN_SETTINGS, 'edge-event.type-admin-settings']
111 ] 111 ]
112 ); 112 );
113 113
114 export const edgeEventActionTypeTranslations = new Map<EdgeEventActionType, string>( 114 export const edgeEventActionTypeTranslations = new Map<EdgeEventActionType, string>(
115 [ 115 [
116 - [EdgeEventActionType.ADDED, 'edge.edge-event-action-type-added'],  
117 - [EdgeEventActionType.DELETED, 'edge.edge-event-action-type-deleted'],  
118 - [EdgeEventActionType.UPDATED, 'edge.edge-event-action-type-updated'],  
119 - [EdgeEventActionType.POST_ATTRIBUTES, 'edge.edge-event-action-type-post-attributes'],  
120 - [EdgeEventActionType.ATTRIBUTES_UPDATED, 'edge.edge-event-action-type-attributes-updated'],  
121 - [EdgeEventActionType.ATTRIBUTES_DELETED, 'edge.edge-event-action-type-attributes-deleted'],  
122 - [EdgeEventActionType.TIMESERIES_UPDATED, 'edge.edge-event-action-type-timeseries-updated'],  
123 - [EdgeEventActionType.CREDENTIALS_UPDATED, 'edge.edge-event-action-type-credentials-updated'],  
124 - [EdgeEventActionType.ASSIGNED_TO_CUSTOMER, 'edge.edge-event-action-type-assigned-to-customer'],  
125 - [EdgeEventActionType.UNASSIGNED_FROM_CUSTOMER, 'edge.edge-event-action-type-unassigned-from-customer'],  
126 - [EdgeEventActionType.RELATION_ADD_OR_UPDATE, 'edge.edge-event-action-type-relation-add-or-update'],  
127 - [EdgeEventActionType.RELATION_DELETED, 'edge.edge-event-action-type-relation-deleted'],  
128 - [EdgeEventActionType.RPC_CALL, 'edge.edge-event-action-type-rpc-call'],  
129 - [EdgeEventActionType.ALARM_ACK, 'edge.edge-event-action-type-alarm-ack'],  
130 - [EdgeEventActionType.ALARM_CLEAR, 'edge.edge-event-action-type-alarm-clear'],  
131 - [EdgeEventActionType.ASSIGNED_TO_EDGE, 'edge.edge-event-action-type-assigned-to-edge'],  
132 - [EdgeEventActionType.UNASSIGNED_FROM_EDGE, 'edge.edge-event-action-type-unassigned-from-edge'],  
133 - [EdgeEventActionType.CREDENTIALS_REQUEST, 'edge.edge-event-action-type-credentials-request'],  
134 - [EdgeEventActionType.ENTITY_MERGE_REQUEST, 'edge.edge-event-action-type-entity-merge-request'] 116 + [EdgeEventActionType.ADDED, 'edge-event.action-type-added'],
  117 + [EdgeEventActionType.DELETED, 'edge-event.action-type-deleted'],
  118 + [EdgeEventActionType.UPDATED, 'edge-event.action-type-updated'],
  119 + [EdgeEventActionType.POST_ATTRIBUTES, 'edge-event.action-type-post-attributes'],
  120 + [EdgeEventActionType.ATTRIBUTES_UPDATED, 'edge-event.action-type-attributes-updated'],
  121 + [EdgeEventActionType.ATTRIBUTES_DELETED, 'edge-event.action-type-attributes-deleted'],
  122 + [EdgeEventActionType.TIMESERIES_UPDATED, 'edge-event.action-type-timeseries-updated'],
  123 + [EdgeEventActionType.CREDENTIALS_UPDATED, 'edge-event.action-type-credentials-updated'],
  124 + [EdgeEventActionType.ASSIGNED_TO_CUSTOMER, 'edge-event.action-type-assigned-to-customer'],
  125 + [EdgeEventActionType.UNASSIGNED_FROM_CUSTOMER, 'edge-event.action-type-unassigned-from-customer'],
  126 + [EdgeEventActionType.RELATION_ADD_OR_UPDATE, 'edge-event.action-type-relation-add-or-update'],
  127 + [EdgeEventActionType.RELATION_DELETED, 'edge-event.action-type-relation-deleted'],
  128 + [EdgeEventActionType.RPC_CALL, 'edge-event.action-type-rpc-call'],
  129 + [EdgeEventActionType.ALARM_ACK, 'edge-event.action-type-alarm-ack'],
  130 + [EdgeEventActionType.ALARM_CLEAR, 'edge-event.action-type-alarm-clear'],
  131 + [EdgeEventActionType.ASSIGNED_TO_EDGE, 'edge-event.action-type-assigned-to-edge'],
  132 + [EdgeEventActionType.UNASSIGNED_FROM_EDGE, 'edge-event.action-type-unassigned-from-edge'],
  133 + [EdgeEventActionType.CREDENTIALS_REQUEST, 'edge-event.action-type-credentials-request'],
  134 + [EdgeEventActionType.ENTITY_MERGE_REQUEST, 'edge-event.action-type-entity-merge-request']
135 ] 135 ]
136 ); 136 );
137 137
@@ -1395,16 +1395,16 @@ @@ -1395,16 +1395,16 @@
1395 "unassign-rulechains-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Regelketten aufgehoben und sie sind für den Rand nicht mehr zugänglich.", 1395 "unassign-rulechains-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Regelketten aufgehoben und sie sind für den Rand nicht mehr zugänglich.",
1396 "assign-rulechain-to-edge-title": "Regelkette(n) dem Rand zuordnen", 1396 "assign-rulechain-to-edge-title": "Regelkette(n) dem Rand zuordnen",
1397 "assign-rulechain-to-edge-text": "Bitte wählen Sie die Regelketten aus, die Sie dem Rand zuordnen möchten", 1397 "assign-rulechain-to-edge-text": "Bitte wählen Sie die Regelketten aus, die Sie dem Rand zuordnen möchten",
1398 - "set-default-root-edge": "Machen Sie Randregelkette zur Wurzel Standard",  
1399 - "set-default-root-edge-rulechain-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' zur Wurzel machen Standard?",  
1400 - "set-default-root-edge-rulechain-text": "Nach der Bestätigung wird die Randregelkette zur Wurzel Standard und behandelt alle eingehenden Transportnachrichten.", 1398 + "set-edge-template-root-rulechain": "Erstellen Sie den Stamm der Regelkettenkantenvorlage",
  1399 + "set-edge-template-root-rulechain-title": "Möchten Sie die Kantenvorlage der Regelkette '{{ruleChainName}}' wirklich als Root festlegen?",
  1400 + "set-edge-template-root-rulechain-text": "Nach der Bestätigung wird die Regelkette zum Stamm der Kantenvorlage und zur Stammregelkette für neu erstellte Kanten.",
1401 "invalid-rulechain-type-error": "Regelkette konnte nicht importiert werden: Ungültige Regelkettentyp. Erwarteter Typ ist {{expectedRuleChainType}}.", 1401 "invalid-rulechain-type-error": "Regelkette konnte nicht importiert werden: Ungültige Regelkettentyp. Erwarteter Typ ist {{expectedRuleChainType}}.",
1402 - "set-auto-assign-to-edge": "Ordnen Sie die Regelkette bei der Erstellung automatisch den Kanten zu", 1402 + "set-auto-assign-to-edge": "Weisen Sie bei der Erstellung den Kanten die Regelkette zu",
1403 "set-auto-assign-to-edge-title": "Möchten Sie die Kantenregelkette '{{ruleChainName}}' bei der Erstellung automatisch den Kanten zuweisen?", 1403 "set-auto-assign-to-edge-title": "Möchten Sie die Kantenregelkette '{{ruleChainName}}' bei der Erstellung automatisch den Kanten zuweisen?",
1404 "set-auto-assign-to-edge-text": "Nach der Bestätigung wird die Kantenregelkette bei der Erstellung automatisch den Kanten zugewiesen.", 1404 "set-auto-assign-to-edge-text": "Nach der Bestätigung wird die Kantenregelkette bei der Erstellung automatisch den Kanten zugewiesen.",
1405 - "remove-default-edge": "Randregelkette Standard entfernen",  
1406 - "remove-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' aus der Standardliste entfernen?",  
1407 - "remove-default-edge-text": "Nach der Bestätigung wird die Randregelkette nicht für neu erstellte Rand vergeben." 1405 + "unset-auto-assign-to-edge": "Deaktiviert die Zuordnung der Regelkette zu Kanten bei der Erstellung",
  1406 + "unset-auto-assign-to-edge-title": "Möchten Sie die Kantenregelkette '{{ruleChainName}}' bei der Erstellung unbedingt den Kanten zuweisen?",
  1407 + "unset-auto-assign-to-edge-text": "Nach der Bestätigung wird die Kantenregelkette bei der Erstellung nicht mehr automatisch den Kanten zugewiesen."
1408 }, 1408 },
1409 "rulenode": { 1409 "rulenode": {
1410 "details": "Details", 1410 "details": "Details",
@@ -1117,6 +1117,8 @@ @@ -1117,6 +1117,8 @@
1117 "management": "Edge management", 1117 "management": "Edge management",
1118 "no-edges-matching": "No edges matching '{{entity}}' were found.", 1118 "no-edges-matching": "No edges matching '{{entity}}' were found.",
1119 "rulechain-templates": "Rule chain templates", 1119 "rulechain-templates": "Rule chain templates",
  1120 + "rulechains": "Rule chains",
  1121 + "edge-rulechains": "Edge Rule chains",
1120 "add": "Add Edge", 1122 "add": "Add Edge",
1121 "view": "View Edge", 1123 "view": "View Edge",
1122 "no-edges-text": "No edges found", 1124 "no-edges-text": "No edges found",
@@ -1133,8 +1135,10 @@ @@ -1133,8 +1135,10 @@
1133 "name-required": "Name is required.", 1135 "name-required": "Name is required.",
1134 "edge-license-key": "Edge License Key", 1136 "edge-license-key": "Edge License Key",
1135 "edge-license-key-required": "Edge License Key is required.", 1137 "edge-license-key-required": "Edge License Key is required.",
  1138 + "edge-license-key-hint": "To obtain your license please navigate to the <a href='https://thingsboard.io/pricing/?active=thingsboard-edge' target='_blank'>pricing page</a> and select the best license option for your case.",
1136 "cloud-endpoint": "Cloud Endpoint", 1139 "cloud-endpoint": "Cloud Endpoint",
1137 "cloud-endpoint-required": "Cloud Endpoint is required.", 1140 "cloud-endpoint-required": "Cloud Endpoint is required.",
  1141 + "cloud-endpoint-hint": "Edge requires HTTP(s) access to Cloud (ThingsBoard CE/PE) to verify the license key. Please specify Cloud URL that Edge is able to connect to.",
1138 "description": "Description", 1142 "description": "Description",
1139 "entity-info": "Entity info", 1143 "entity-info": "Entity info",
1140 "details": "Details", 1144 "details": "Details",
@@ -1206,42 +1210,44 @@ @@ -1206,42 +1210,44 @@
1206 "pending": "Pending", 1210 "pending": "Pending",
1207 "downlinks": "Downlinks", 1211 "downlinks": "Downlinks",
1208 "no-downlinks-prompt": "No downlinks found", 1212 "no-downlinks-prompt": "No downlinks found",
1209 - "edge-event-type-dashboard": "Dashboard",  
1210 - "edge-event-type-asset": "Asset",  
1211 - "edge-event-type-device": "Device",  
1212 - "edge-event-type-device-profile": "Device Profile",  
1213 - "edge-event-type-entity-view": "Entity View",  
1214 - "edge-event-type-alarm": "Alar",  
1215 - "edge-event-type-rule-chain": "Rule Chain",  
1216 - "edge-event-type-rule-chain-metadata": "Rule Chain Metadata",  
1217 - "edge-event-type-edge": "Edge",  
1218 - "edge-event-type-user": "User",  
1219 - "edge-event-type-customer": "Customer",  
1220 - "edge-event-type-relation": "Relation",  
1221 - "edge-event-type-widgets-bundle": "Widgets Bundle",  
1222 - "edge-event-type-widgets-type": "Widgets Type",  
1223 - "edge-event-type-admin-settings": "Admin Settings",  
1224 - "edge-event-action-type-added": "Added",  
1225 - "edge-event-action-type-deleted": "Deleted",  
1226 - "edge-event-action-type-updated": "Updated",  
1227 - "edge-event-action-type-post-attributes": "Post Attributes",  
1228 - "edge-event-action-type-attributes-updated": "Attributes Updated",  
1229 - "edge-event-action-type-attributes-deleted": "Attributes Deleted",  
1230 - "edge-event-action-type-timeseries-updated": "Timeseries Updated",  
1231 - "edge-event-action-type-credentials-updated": "Credentials Updated",  
1232 - "edge-event-action-type-assigned-to-customer": "Assigned to Customer",  
1233 - "edge-event-action-type-unassigned-from-customer": "Unassigned from Customer",  
1234 - "edge-event-action-type-relation-add-or-update": "Relation Add or Update",  
1235 - "edge-event-action-type-relation-deleted": "Relation Deleted",  
1236 - "edge-event-action-type-rpc-call": "RPC Call",  
1237 - "edge-event-action-type-alarm-ack": "Alarm Ack",  
1238 - "edge-event-action-type-alarm-clear": "Alarm Clear",  
1239 - "edge-event-action-type-assigned-to-edge": "Assigned to Edge",  
1240 - "edge-event-action-type-unassigned-from-edge": "Unassigned from Edge",  
1241 - "edge-event-action-type-credentials-request": "Credentials Request",  
1242 - "edge-event-action-type-entity-merge-request": "Entity Merge Request",  
1243 "sync-process-started-successfully": "Sync process started successfully!" 1213 "sync-process-started-successfully": "Sync process started successfully!"
1244 }, 1214 },
  1215 + "edge-event": {
  1216 + "type-dashboard": "Dashboard",
  1217 + "type-asset": "Asset",
  1218 + "type-device": "Device",
  1219 + "type-device-profile": "Device Profile",
  1220 + "type-entity-view": "Entity View",
  1221 + "type-alarm": "Alar",
  1222 + "type-rule-chain": "Rule Chain",
  1223 + "type-rule-chain-metadata": "Rule Chain Metadata",
  1224 + "type-edge": "Edge",
  1225 + "type-user": "User",
  1226 + "type-customer": "Customer",
  1227 + "type-relation": "Relation",
  1228 + "type-widgets-bundle": "Widgets Bundle",
  1229 + "type-widgets-type": "Widgets Type",
  1230 + "type-admin-settings": "Admin Settings",
  1231 + "action-type-added": "Added",
  1232 + "action-type-deleted": "Deleted",
  1233 + "action-type-updated": "Updated",
  1234 + "action-type-post-attributes": "Post Attributes",
  1235 + "action-type-attributes-updated": "Attributes Updated",
  1236 + "action-type-attributes-deleted": "Attributes Deleted",
  1237 + "action-type-timeseries-updated": "Timeseries Updated",
  1238 + "action-type-credentials-updated": "Credentials Updated",
  1239 + "action-type-assigned-to-customer": "Assigned to Customer",
  1240 + "action-type-unassigned-from-customer": "Unassigned from Customer",
  1241 + "action-type-relation-add-or-update": "Relation Add or Update",
  1242 + "action-type-relation-deleted": "Relation Deleted",
  1243 + "action-type-rpc-call": "RPC Call",
  1244 + "action-type-alarm-ack": "Alarm Ack",
  1245 + "action-type-alarm-clear": "Alarm Clear",
  1246 + "action-type-assigned-to-edge": "Assigned to Edge",
  1247 + "action-type-unassigned-from-edge": "Unassigned from Edge",
  1248 + "action-type-credentials-request": "Credentials Request",
  1249 + "action-type-entity-merge-request": "Entity Merge Request"
  1250 + },
1245 "error": { 1251 "error": {
1246 "unable-to-connect": "Unable to connect to the server! Please check your internet connection.", 1252 "unable-to-connect": "Unable to connect to the server! Please check your internet connection.",
1247 "unhandled-error-code": "Unhandled error code: {{errorCode}}", 1253 "unhandled-error-code": "Unhandled error code: {{errorCode}}",
@@ -2073,22 +2079,24 @@ @@ -2073,22 +2079,24 @@
2073 "selected-rulechains": "{ count, plural, 1 {1 rule chain} other {# rule chains} } selected", 2079 "selected-rulechains": "{ count, plural, 1 {1 rule chain} other {# rule chains} } selected",
2074 "open-rulechain": "Open rule chain", 2080 "open-rulechain": "Open rule chain",
2075 "assign-new-rulechain": "Assign new rulechain", 2081 "assign-new-rulechain": "Assign new rulechain",
  2082 + "edge-template-root": "Template Root",
  2083 + "assign-to-edge": "Assign to Edge",
2076 "edge-rulechain": "Edge Rule chain", 2084 "edge-rulechain": "Edge Rule chain",
2077 "unassign-rulechain-from-edge-text": "After the confirmation the rulechain will be unassigned and won't be accessible by the edge.", 2085 "unassign-rulechain-from-edge-text": "After the confirmation the rulechain will be unassigned and won't be accessible by the edge.",
2078 "unassign-rulechains-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 rulechain} other {# rulechains} }?", 2086 "unassign-rulechains-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 rulechain} other {# rulechains} }?",
2079 "unassign-rulechains-from-edge-text": "After the confirmation all selected rulechains will be unassigned and won't be accessible by the edge.", 2087 "unassign-rulechains-from-edge-text": "After the confirmation all selected rulechains will be unassigned and won't be accessible by the edge.",
2080 "assign-rulechain-to-edge-title": "Assign Rule Chain(s) To Edge", 2088 "assign-rulechain-to-edge-title": "Assign Rule Chain(s) To Edge",
2081 "assign-rulechain-to-edge-text": "Please select the rulechains to assign to the edge", 2089 "assign-rulechain-to-edge-text": "Please select the rulechains to assign to the edge",
2082 - "set-default-root-edge": "Make rule chain default root",  
2083 - "set-default-root-edge-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' default edge root?",  
2084 - "set-default-root-edge-rulechain-text": "After the confirmation the rule chain will become default edge root and will handle all incoming transport messages.", 2090 + "set-edge-template-root-rulechain": "Make rule chain edge template root",
  2091 + "set-edge-template-root-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' edge template root?",
  2092 + "set-edge-template-root-rulechain-text": "After the confirmation the rule chain will become edge template root and will be root rule chain for a newly created edges.",
2085 "invalid-rulechain-type-error": "Unable to import rule chain: Invalid rule chain type. Expected type is {{expectedRuleChainType}}.", 2093 "invalid-rulechain-type-error": "Unable to import rule chain: Invalid rule chain type. Expected type is {{expectedRuleChainType}}.",
2086 - "set-auto-assign-to-edge": "Auto-assign rule chain to edge(s) on creation",  
2087 - "set-auto-assign-to-edge-title": "Are you sure you want to auto-assign the edge rule chain '{{ruleChainName}}' to edge(s) on creation?", 2094 + "set-auto-assign-to-edge": "Assign rule chain to edge(s) on creation",
  2095 + "set-auto-assign-to-edge-title": "Are you sure you want to assign the edge rule chain '{{ruleChainName}}' to edge(s) on creation?",
2088 "set-auto-assign-to-edge-text": "After the confirmation the edge rule chain will be automatically assigned to edge(s) on creation.", 2096 "set-auto-assign-to-edge-text": "After the confirmation the edge rule chain will be automatically assigned to edge(s) on creation.",
2089 - "remove-default-edge": "Remove rule chain from defaults",  
2090 - "remove-default-edge-title": "Are you sure you want to remove the edge rule chain '{{ruleChainName}}' from default list?",  
2091 - "remove-default-edge-text": "After the confirmation the edge rule chain will not be assigned for a newly created edges.", 2097 + "unset-auto-assign-to-edge": "Unset assign rule chain to edge(s) on creation",
  2098 + "unset-auto-assign-to-edge-title": "Are you sure you want to unset assign the edge rule chain '{{ruleChainName}}' to edge(s) on creation?",
  2099 + "unset-auto-assign-to-edge-text": "After the confirmation the edge rule chain will no longer be automatically assigned to edge(s) on creation.",
2092 "unassign-rulechain-title": "Are you sure you want to unassign the rulechain '{{ruleChainName}}'?", 2100 "unassign-rulechain-title": "Are you sure you want to unassign the rulechain '{{ruleChainName}}'?",
2093 "unassign-rulechains": "Unassign rulechains" 2101 "unassign-rulechains": "Unassign rulechains"
2094 }, 2102 },
@@ -1566,16 +1566,16 @@ @@ -1566,16 +1566,16 @@
1566 "unassign-rulechains-from-edge-text": "Después de la confirmación, todas las cadenas de reglas seleccionadas quedarán sin asignar y el borde no podrá acceder a ellas", 1566 "unassign-rulechains-from-edge-text": "Después de la confirmación, todas las cadenas de reglas seleccionadas quedarán sin asignar y el borde no podrá acceder a ellas",
1567 "assign-rulechain-to-edge-title": "Asignar cadena (s) de reglas a borde", 1567 "assign-rulechain-to-edge-title": "Asignar cadena (s) de reglas a borde",
1568 "assign-rulechain-to-edge-text": "Seleccione las cadenas de reglas para asignar al borde", 1568 "assign-rulechain-to-edge-text": "Seleccione las cadenas de reglas para asignar al borde",
1569 - "set-default-root-edge": "Hacer que la cadena de reglas sea la raíz predeterminada",  
1570 - "set-default-root-edge-rulechain-title": "¿Está seguro de que desea hacer que la cadena de reglas '{{ruleChainName}}' sea la raíz de borde predeterminada?",  
1571 - "set-default-root-edge-rulechain-text": "Después de la confirmación, la cadena de reglas se convertirá en raíz raíz predeterminada y manejará todos los mensajes de transporte entrantes", 1569 + "set-edge-template-root-rulechain": "Hacer raíz de plantilla de borde de cadena de reglas",
  1570 + "set-edge-template-root-rulechain-title": "¿Está seguro de que desea que la cadena de reglas '{{ruleChainName}}' sea la raíz de la plantilla de borde?",
  1571 + "set-edge-template-root-rulechain-text": "Después de la confirmación, la cadena de reglas se convertirá en la raíz de la plantilla de borde y será la cadena de reglas raíz para los bordes recién creados.",
1572 "invalid-rulechain-type-error": "No se puede importar la cadena de reglas: Tipo de cadena de reglas no válido. El tipo esperado es {{expectedRuleChainType}}", 1572 "invalid-rulechain-type-error": "No se puede importar la cadena de reglas: Tipo de cadena de reglas no válido. El tipo esperado es {{expectedRuleChainType}}",
1573 - "set-auto-assign-to-edge": "Asignar automáticamente la cadena de reglas a los bordes en la creación", 1573 + "set-auto-assign-to-edge": "Asignar cadena de reglas a los bordes en la creación",
1574 "set-auto-assign-to-edge-title": "¿Está seguro de que desea asignar automáticamente la cadena de reglas de borde '{{ruleChainName}}' a los bordes en la creación?", 1574 "set-auto-assign-to-edge-title": "¿Está seguro de que desea asignar automáticamente la cadena de reglas de borde '{{ruleChainName}}' a los bordes en la creación?",
1575 "set-auto-assign-to-edge-text": "Después de la confirmación, la cadena de reglas de borde se asignará automáticamente a los bordes en la creación.", 1575 "set-auto-assign-to-edge-text": "Después de la confirmación, la cadena de reglas de borde se asignará automáticamente a los bordes en la creación.",
1576 - "remove-default-edge": "Eliminar la cadena de regla de borde de los valores predeterminados",  
1577 - "remove-default-edge-title": "¿Está seguro de que desea eliminar la cadena de reglas de borde '{{ruleChainName}}' de la lista predeterminada?",  
1578 - "remove-default-edge-text": "Después de la confirmación, la cadena de reglas de borde no se asignará a los bordes recién creados" 1576 + "unset-auto-assign-to-edge": "Desmarcar asignar cadena de reglas a los bordes en la creación",
  1577 + "unset-auto-assign-to-edge-title": "¿Está seguro de que desea anular la asignación de la cadena de reglas de borde '{{ruleChainName}}' a los bordes en la creación?",
  1578 + "unset-auto-assign-to-edge-text": "Después de la confirmación, la cadena de reglas de borde ya no se asignará automáticamente a los bordes en la creación."
1579 }, 1579 },
1580 "rulenode": { 1580 "rulenode": {
1581 "details": "Detalles", 1581 "details": "Detalles",
@@ -1440,16 +1440,16 @@ @@ -1440,16 +1440,16 @@
1440 "unassign-rulechains-from-edge-text": "Après la confirmation, tous les chaînes de règles sélectionnés ne seront pas attribués et ne seront pas accessibles a la bordure.", 1440 "unassign-rulechains-from-edge-text": "Après la confirmation, tous les chaînes de règles sélectionnés ne seront pas attribués et ne seront pas accessibles a la bordure.",
1441 "assign-rulechain-to-edge-title": "Attribuer les chaînes de règles a la bordure", 1441 "assign-rulechain-to-edge-title": "Attribuer les chaînes de règles a la bordure",
1442 "assign-rulechain-to-edge-text": "Veuillez sélectionner la bordure pour attribuer le ou les chaînes de règles", 1442 "assign-rulechain-to-edge-text": "Veuillez sélectionner la bordure pour attribuer le ou les chaînes de règles",
1443 - "set-default-root-edge": "Définir la racine par défaut de la chaîne de règles",  
1444 - "set-default-root-edge-rulechain-title": "AVoulez-vous vraiment créer de chaînes de règles par défaut '{{ruleChainName}}'?",  
1445 - "set-default-root-edge-rulechain-text": "Après la confirmation, la chaîne de règles deviendra la racine de la bordure par défaut et gérera tous les messages de transport entrants.", 1443 + "set-edge-template-root-rulechain": "Rendre le modèle de bord de chaîne de règles racine",
  1444 + "set-edge-template-root-rulechain-title": "Voulez-vous vraiment définir la racine du modèle d'arête de la chaîne de règles '{{ruleChainName}}'?",
  1445 + "set-edge-template-root-rulechain-text": "Après la confirmation, la chaîne de règles deviendra la racine du modèle d'arête et sera la chaîne de règles racine pour les arêtes nouvellement créées.",
1446 "invalid-rulechain-type-error": "Impossible d'importer la chaîne de règles: type de chaîne de règles non valide. Le type attendu est {{attenduRuleChainType}}.", 1446 "invalid-rulechain-type-error": "Impossible d'importer la chaîne de règles: type de chaîne de règles non valide. Le type attendu est {{attenduRuleChainType}}.",
1447 - "set-auto-assign-to-edge": "Assigner automatiquement la chaîne de règles aux arêtes lors de la création", 1447 + "set-auto-assign-to-edge": "Attribuer une chaîne de règles aux arêtes lors de la création",
1448 "set-auto-assign-to-edge-title": "Voulez-vous vraiment attribuer automatiquement la chaîne de règles d'arête '{{ruleChainName}}' à l'arête (s) lors de la création?", 1448 "set-auto-assign-to-edge-title": "Voulez-vous vraiment attribuer automatiquement la chaîne de règles d'arête '{{ruleChainName}}' à l'arête (s) lors de la création?",
1449 "set-auto-assign-to-edge-text": "Après la confirmation, la chaîne de règles d'arête sera automatiquement affectée à l'arête (s) lors de la création.", 1449 "set-auto-assign-to-edge-text": "Après la confirmation, la chaîne de règles d'arête sera automatiquement affectée à l'arête (s) lors de la création.",
1450 - "remove-default-edge": "Supprimer la chaîne de règles de la bordure des valeurs par défaut",  
1451 - "remove-default-edge-title": "Voulez-vous vraiment supprimer la chaîne de règles de la bordure '{{ruleChainName}}' de la liste par défaut",  
1452 - "remove-default-edge-text": "Après la confirmation, la chaîne de règles d'arête ne sera pas affectée aux arêtes nouvellement créées." 1450 + "unset-auto-assign-to-edge": "Non défini, attribuer une chaîne de règles aux arêtes lors de la création",
  1451 + "unset-auto-assign-to-edge-title": "Voulez-vous vraiment annuler l'attribution de la chaîne de règles d'arête \"{{ruleChainName}}\" aux arêtes lors de la création?",
  1452 + "unset-auto-assign-to-edge-text": "Après la confirmation, la chaîne de règles d'arêtes ne sera plus automatiquement affectée aux arêtes lors de la création."
1453 }, 1453 },
1454 "rulenode": { 1454 "rulenode": {
1455 "add": "Ajouter un noeud de règle", 1455 "add": "Ajouter un noeud de règle",