Edge Rule Chain CRUD: revert metadata validatino

This commit is contained in:
Volodymyr Babak 2025-02-27 13:20:59 +02:00
parent e372587926
commit b29b192efc
3 changed files with 13 additions and 23 deletions

View File

@ -24,6 +24,7 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.data.rule.RuleChainMetaData; import org.thingsboard.server.common.data.rule.RuleChainMetaData;
import org.thingsboard.server.common.data.rule.RuleChainType; import org.thingsboard.server.common.data.rule.RuleChainType;
import org.thingsboard.server.common.data.rule.RuleNode;
import org.thingsboard.server.dao.service.DataValidator; import org.thingsboard.server.dao.service.DataValidator;
import org.thingsboard.server.gen.edge.v1.RuleChainMetadataUpdateMsg; import org.thingsboard.server.gen.edge.v1.RuleChainMetadataUpdateMsg;
import org.thingsboard.server.gen.edge.v1.RuleChainUpdateMsg; import org.thingsboard.server.gen.edge.v1.RuleChainUpdateMsg;
@ -70,7 +71,12 @@ public class BaseRuleChainProcessor extends BaseEdgeProcessor {
throw new RuntimeException("[{" + tenantId + "}] ruleChainMetadataUpdateMsg {" + ruleChainMetadataUpdateMsg + "} cannot be converted to rule chain metadata"); throw new RuntimeException("[{" + tenantId + "}] ruleChainMetadataUpdateMsg {" + ruleChainMetadataUpdateMsg + "} cannot be converted to rule chain metadata");
} }
if (!ruleChainMetadata.getNodes().isEmpty()) { if (!ruleChainMetadata.getNodes().isEmpty()) {
edgeCtx.getRuleChainService().saveRuleChainMetaData(tenantId, ruleChainMetadata, Function.identity(), true, false); ruleChainMetadata.setVersion(null);
for (RuleNode ruleNode : ruleChainMetadata.getNodes()) {
ruleNode.setRuleChainId(null);
ruleNode.setId(null);
}
edgeCtx.getRuleChainService().saveRuleChainMetaData(tenantId, ruleChainMetadata, Function.identity(), true);
} }
} }
} }

View File

@ -54,8 +54,6 @@ public interface RuleChainService extends EntityDaoService {
RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function<RuleNode, RuleNode> ruleNodeUpdater, boolean publishSaveEvent); RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function<RuleNode, RuleNode> ruleNodeUpdater, boolean publishSaveEvent);
RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function<RuleNode, RuleNode> ruleNodeUpdater, boolean publishSaveEvent, boolean doValidate);
RuleChainMetaData loadRuleChainMetaData(TenantId tenantId, RuleChainId ruleChainId); RuleChainMetaData loadRuleChainMetaData(TenantId tenantId, RuleChainId ruleChainId);
RuleChain findRuleChainById(TenantId tenantId, RuleChainId ruleChainId); RuleChain findRuleChainById(TenantId tenantId, RuleChainId ruleChainId);

View File

@ -174,25 +174,18 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
@Override @Override
@Transactional @Transactional
public RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function<RuleNode, RuleNode> ruleNodeUpdater) { public RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function<RuleNode, RuleNode> ruleNodeUpdater) {
return saveRuleChainMetaData(tenantId, ruleChainMetaData, ruleNodeUpdater, true, true); return saveRuleChainMetaData(tenantId, ruleChainMetaData, ruleNodeUpdater, true);
} }
@Transactional @Transactional
@Override @Override
public RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function<RuleNode, RuleNode> ruleNodeUpdater, public RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function<RuleNode, RuleNode> ruleNodeUpdater,
boolean publishSaveEvent) { boolean publishSaveEvent) {
return saveRuleChainMetaData(tenantId, ruleChainMetaData, ruleNodeUpdater, publishSaveEvent, true);
}
@Transactional
@Override
public RuleChainUpdateResult saveRuleChainMetaData(TenantId tenantId, RuleChainMetaData ruleChainMetaData, Function<RuleNode, RuleNode> ruleNodeUpdater,
boolean publishSaveEvent, boolean doValidate) {
Validator.validateId(ruleChainMetaData.getRuleChainId(), "Incorrect rule chain id."); Validator.validateId(ruleChainMetaData.getRuleChainId(), "Incorrect rule chain id.");
RuleChain ruleChain = findRuleChainById(tenantId, ruleChainMetaData.getRuleChainId()); RuleChain ruleChain = findRuleChainById(tenantId, ruleChainMetaData.getRuleChainId());
if (ruleChain == null) { if (ruleChain == null) {
return RuleChainUpdateResult.failed(); return RuleChainUpdateResult.failed();
} else if (doValidate && ruleChainMetaData.getVersion() != null && !ruleChainMetaData.getVersion().equals(ruleChain.getVersion())) { } else if (ruleChainMetaData.getVersion() != null && !ruleChainMetaData.getVersion().equals(ruleChain.getVersion())) {
throw new EntityVersionMismatchException(EntityType.RULE_CHAIN, null); throw new EntityVersionMismatchException(EntityType.RULE_CHAIN, null);
} }
RuleChainDataValidator.validateMetaDataFieldsAndConnections(ruleChainMetaData); RuleChainDataValidator.validateMetaDataFieldsAndConnections(ruleChainMetaData);
@ -206,14 +199,9 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
if (nodes != null) { if (nodes != null) {
for (RuleNode node : nodes) { for (RuleNode node : nodes) {
setSingletonMode(node); setSingletonMode(node);
if (doValidate) { if (node.getId() != null) {
if (node.getId() != null) {
ruleNodeIndexMap.put(node.getId(), nodes.indexOf(node));
} else {
toAddOrUpdate.add(node);
}
} else {
ruleNodeIndexMap.put(node.getId(), nodes.indexOf(node)); ruleNodeIndexMap.put(node.getId(), nodes.indexOf(node));
} else {
toAddOrUpdate.add(node); toAddOrUpdate.add(node);
} }
} }
@ -226,10 +214,8 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
Integer index = ruleNodeIndexMap.get(existingNode.getId()); Integer index = ruleNodeIndexMap.get(existingNode.getId());
RuleNode newRuleNode = null; RuleNode newRuleNode = null;
if (index != null) { if (index != null) {
if (doValidate) { newRuleNode = ruleChainMetaData.getNodes().get(index);
newRuleNode = ruleChainMetaData.getNodes().get(index); toAddOrUpdate.add(newRuleNode);
toAddOrUpdate.add(newRuleNode);
}
} else { } else {
updatedRuleNodes.add(new RuleNodeUpdateResult(existingNode, null)); updatedRuleNodes.add(new RuleNodeUpdateResult(existingNode, null));
toDelete.add(existingNode); toDelete.add(existingNode);