Browse Source

Update Referencing RuleChains when RuleChain is deleted.

pull/1463/head
Igor Kulikov 8 years ago
parent
commit
67293b5fa4
  1. 12
      application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
  2. 18
      dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java
  3. 2
      dao/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java

12
application/src/main/java/org/thingsboard/server/controller/RuleChainController.java

@ -47,6 +47,7 @@ import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.data.rule.RuleChainMetaData;
import org.thingsboard.server.common.data.rule.RuleNode;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.TbMsgMetaData;
import org.thingsboard.server.dao.event.EventService;
@ -55,9 +56,11 @@ import org.thingsboard.server.service.script.RuleNodeJsScriptEngine;
import org.thingsboard.server.service.security.permission.Operation;
import org.thingsboard.server.service.security.permission.Resource;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
@RestController
@ -224,8 +227,17 @@ public class RuleChainController extends BaseController {
RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId));
RuleChain ruleChain = checkRuleChain(ruleChainId, Operation.DELETE);
List<RuleNode> referencingRuleNodes = ruleChainService.getReferencingRuleChainNodes(getTenantId(), ruleChainId);
Set<RuleChainId> referencingRuleChainIds = referencingRuleNodes.stream().map(RuleNode::getRuleChainId).collect(Collectors.toSet());
ruleChainService.deleteRuleChainById(getTenantId(), ruleChainId);
referencingRuleChainIds.remove(ruleChain.getId());
referencingRuleChainIds.forEach(referencingRuleChainId ->
actorService.onEntityStateChange(ruleChain.getTenantId(), referencingRuleChainId, ComponentLifecycleEvent.UPDATED));
actorService.onEntityStateChange(ruleChain.getTenantId(), ruleChain.getId(), ComponentLifecycleEvent.DELETED);
logEntityAction(ruleChainId, ruleChain,

18
dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java

@ -287,6 +287,20 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
return ruleNodes;
}
@Override
public List<RuleNode> getReferencingRuleChainNodes(TenantId tenantId, RuleChainId ruleChainId) {
Validator.validateId(ruleChainId, "Incorrect rule chain id for search request.");
List<EntityRelation> relations = getNodeToRuleChainRelations(tenantId, ruleChainId);
List<RuleNode> ruleNodes = new ArrayList<>();
for (EntityRelation relation : relations) {
RuleNode ruleNode = ruleNodeDao.findById(tenantId, relation.getFrom().getId());
if (ruleNode != null) {
ruleNodes.add(ruleNode);
}
}
return ruleNodes;
}
@Override
public List<EntityRelation> getRuleNodeRelations(TenantId tenantId, RuleNodeId ruleNodeId) {
Validator.validateId(ruleNodeId, "Incorrect rule node id for search request.");
@ -351,6 +365,10 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
return relationService.findByFrom(tenantId, ruleChainId, RelationTypeGroup.RULE_CHAIN);
}
private List<EntityRelation> getNodeToRuleChainRelations(TenantId tenantId, RuleChainId ruleChainId) {
return relationService.findByTo(tenantId, ruleChainId, RelationTypeGroup.RULE_NODE);
}
private void deleteRuleNode(TenantId tenantId, EntityId entityId) {
deleteEntityRelations(tenantId, entityId);
ruleNodeDao.removeById(tenantId, entityId.getId());

2
dao/src/main/java/org/thingsboard/server/dao/rule/RuleChainService.java

@ -54,6 +54,8 @@ public interface RuleChainService {
List<RuleNode> getRuleChainNodes(TenantId tenantId, RuleChainId ruleChainId);
List<RuleNode> getReferencingRuleChainNodes(TenantId tenantId, RuleChainId ruleChainId);
List<EntityRelation> getRuleNodeRelations(TenantId tenantId, RuleNodeId ruleNodeId);
TextPageData<RuleChain> findTenantRuleChains(TenantId tenantId, TextPageLink pageLink);

Loading…
Cancel
Save