|
|
@ -91,17 +91,19 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh |
|
|
public void start(ActorContext context) { |
|
|
public void start(ActorContext context) { |
|
|
if (!started) { |
|
|
if (!started) { |
|
|
RuleChain ruleChain = service.findRuleChainById(tenantId, entityId); |
|
|
RuleChain ruleChain = service.findRuleChainById(tenantId, entityId); |
|
|
ruleChainName = ruleChain.getName(); |
|
|
if (ruleChain != null) { |
|
|
List<RuleNode> ruleNodeList = service.getRuleChainNodes(tenantId, entityId); |
|
|
ruleChainName = ruleChain.getName(); |
|
|
log.trace("[{}][{}] Starting rule chain with {} nodes", tenantId, entityId, ruleNodeList.size()); |
|
|
List<RuleNode> ruleNodeList = service.getRuleChainNodes(tenantId, entityId); |
|
|
// Creating and starting the actors;
|
|
|
log.trace("[{}][{}] Starting rule chain with {} nodes", tenantId, entityId, ruleNodeList.size()); |
|
|
for (RuleNode ruleNode : ruleNodeList) { |
|
|
// Creating and starting the actors;
|
|
|
log.trace("[{}][{}] Creating rule node [{}]: {}", entityId, ruleNode.getId(), ruleNode.getName(), ruleNode); |
|
|
for (RuleNode ruleNode : ruleNodeList) { |
|
|
ActorRef ruleNodeActor = createRuleNodeActor(context, ruleNode); |
|
|
log.trace("[{}][{}] Creating rule node [{}]: {}", entityId, ruleNode.getId(), ruleNode.getName(), ruleNode); |
|
|
nodeActors.put(ruleNode.getId(), new RuleNodeCtx(tenantId, self, ruleNodeActor, ruleNode)); |
|
|
ActorRef ruleNodeActor = createRuleNodeActor(context, ruleNode); |
|
|
|
|
|
nodeActors.put(ruleNode.getId(), new RuleNodeCtx(tenantId, self, ruleNodeActor, ruleNode)); |
|
|
|
|
|
} |
|
|
|
|
|
initRoutes(ruleChain, ruleNodeList); |
|
|
|
|
|
started = true; |
|
|
} |
|
|
} |
|
|
initRoutes(ruleChain, ruleNodeList); |
|
|
|
|
|
started = true; |
|
|
|
|
|
} else { |
|
|
} else { |
|
|
onUpdate(context); |
|
|
onUpdate(context); |
|
|
} |
|
|
} |
|
|
@ -110,31 +112,33 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh |
|
|
@Override |
|
|
@Override |
|
|
public void onUpdate(ActorContext context) { |
|
|
public void onUpdate(ActorContext context) { |
|
|
RuleChain ruleChain = service.findRuleChainById(tenantId, entityId); |
|
|
RuleChain ruleChain = service.findRuleChainById(tenantId, entityId); |
|
|
ruleChainName = ruleChain.getName(); |
|
|
if (ruleChain != null) { |
|
|
List<RuleNode> ruleNodeList = service.getRuleChainNodes(tenantId, entityId); |
|
|
ruleChainName = ruleChain.getName(); |
|
|
log.trace("[{}][{}] Updating rule chain with {} nodes", tenantId, entityId, ruleNodeList.size()); |
|
|
List<RuleNode> ruleNodeList = service.getRuleChainNodes(tenantId, entityId); |
|
|
for (RuleNode ruleNode : ruleNodeList) { |
|
|
log.trace("[{}][{}] Updating rule chain with {} nodes", tenantId, entityId, ruleNodeList.size()); |
|
|
RuleNodeCtx existing = nodeActors.get(ruleNode.getId()); |
|
|
for (RuleNode ruleNode : ruleNodeList) { |
|
|
if (existing == null) { |
|
|
RuleNodeCtx existing = nodeActors.get(ruleNode.getId()); |
|
|
log.trace("[{}][{}] Creating rule node [{}]: {}", entityId, ruleNode.getId(), ruleNode.getName(), ruleNode); |
|
|
if (existing == null) { |
|
|
ActorRef ruleNodeActor = createRuleNodeActor(context, ruleNode); |
|
|
log.trace("[{}][{}] Creating rule node [{}]: {}", entityId, ruleNode.getId(), ruleNode.getName(), ruleNode); |
|
|
nodeActors.put(ruleNode.getId(), new RuleNodeCtx(tenantId, self, ruleNodeActor, ruleNode)); |
|
|
ActorRef ruleNodeActor = createRuleNodeActor(context, ruleNode); |
|
|
} else { |
|
|
nodeActors.put(ruleNode.getId(), new RuleNodeCtx(tenantId, self, ruleNodeActor, ruleNode)); |
|
|
log.trace("[{}][{}] Updating rule node [{}]: {}", entityId, ruleNode.getId(), ruleNode.getName(), ruleNode); |
|
|
} else { |
|
|
existing.setSelf(ruleNode); |
|
|
log.trace("[{}][{}] Updating rule node [{}]: {}", entityId, ruleNode.getId(), ruleNode.getName(), ruleNode); |
|
|
existing.getSelfActor().tell(new ComponentLifecycleMsg(tenantId, existing.getSelf().getId(), ComponentLifecycleEvent.UPDATED), self); |
|
|
existing.setSelf(ruleNode); |
|
|
|
|
|
existing.getSelfActor().tell(new ComponentLifecycleMsg(tenantId, existing.getSelf().getId(), ComponentLifecycleEvent.UPDATED), self); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Set<RuleNodeId> existingNodes = ruleNodeList.stream().map(RuleNode::getId).collect(Collectors.toSet()); |
|
|
Set<RuleNodeId> existingNodes = ruleNodeList.stream().map(RuleNode::getId).collect(Collectors.toSet()); |
|
|
List<RuleNodeId> removedRules = nodeActors.keySet().stream().filter(node -> !existingNodes.contains(node)).collect(Collectors.toList()); |
|
|
List<RuleNodeId> removedRules = nodeActors.keySet().stream().filter(node -> !existingNodes.contains(node)).collect(Collectors.toList()); |
|
|
removedRules.forEach(ruleNodeId -> { |
|
|
removedRules.forEach(ruleNodeId -> { |
|
|
log.trace("[{}][{}] Removing rule node [{}]", tenantId, entityId, ruleNodeId); |
|
|
log.trace("[{}][{}] Removing rule node [{}]", tenantId, entityId, ruleNodeId); |
|
|
RuleNodeCtx removed = nodeActors.remove(ruleNodeId); |
|
|
RuleNodeCtx removed = nodeActors.remove(ruleNodeId); |
|
|
removed.getSelfActor().tell(new ComponentLifecycleMsg(tenantId, removed.getSelf().getId(), ComponentLifecycleEvent.DELETED), self); |
|
|
removed.getSelfActor().tell(new ComponentLifecycleMsg(tenantId, removed.getSelf().getId(), ComponentLifecycleEvent.DELETED), self); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
initRoutes(ruleChain, ruleNodeList); |
|
|
initRoutes(ruleChain, ruleNodeList); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
|