Rename of the related rule chains when customer renames the output label
This commit is contained in:
parent
c3fa9b9f43
commit
9cf0ab6900
@ -1,3 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2021 The Thingsboard Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package org.thingsboard.server.service.rule;
|
package org.thingsboard.server.service.rule;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
@ -11,6 +26,7 @@ import org.thingsboard.rule.engine.flow.TbRuleChainOutputNode;
|
|||||||
import org.thingsboard.rule.engine.flow.TbRuleChainOutputNodeConfiguration;
|
import org.thingsboard.rule.engine.flow.TbRuleChainOutputNodeConfiguration;
|
||||||
import org.thingsboard.server.common.data.StringUtils;
|
import org.thingsboard.server.common.data.StringUtils;
|
||||||
import org.thingsboard.server.common.data.id.RuleChainId;
|
import org.thingsboard.server.common.data.id.RuleChainId;
|
||||||
|
import org.thingsboard.server.common.data.id.RuleNodeId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
import org.thingsboard.server.common.data.rule.RuleChain;
|
import org.thingsboard.server.common.data.rule.RuleChain;
|
||||||
@ -19,6 +35,7 @@ import org.thingsboard.server.common.data.rule.RuleChainOutputLabelsUsage;
|
|||||||
import org.thingsboard.server.common.data.rule.RuleChainUpdateResult;
|
import org.thingsboard.server.common.data.rule.RuleChainUpdateResult;
|
||||||
import org.thingsboard.server.common.data.rule.RuleNode;
|
import org.thingsboard.server.common.data.rule.RuleNode;
|
||||||
import org.thingsboard.server.common.data.rule.RuleNodeUpdateResult;
|
import org.thingsboard.server.common.data.rule.RuleNodeUpdateResult;
|
||||||
|
import org.thingsboard.server.dao.relation.RelationService;
|
||||||
import org.thingsboard.server.dao.rule.RuleChainService;
|
import org.thingsboard.server.dao.rule.RuleChainService;
|
||||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||||
import org.thingsboard.server.service.security.permission.Operation;
|
import org.thingsboard.server.service.security.permission.Operation;
|
||||||
@ -40,6 +57,7 @@ import java.util.stream.Collectors;
|
|||||||
public class DefaultTbRuleChainService implements TbRuleChainService {
|
public class DefaultTbRuleChainService implements TbRuleChainService {
|
||||||
|
|
||||||
private final RuleChainService ruleChainService;
|
private final RuleChainService ruleChainService;
|
||||||
|
private final RelationService relationService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getRuleChainOutputLabels(TenantId tenantId, RuleChainId ruleChainId) {
|
public Set<String> getRuleChainOutputLabels(TenantId tenantId, RuleChainId ruleChainId) {
|
||||||
@ -122,8 +140,9 @@ public class DefaultTbRuleChainService implements TbRuleChainService {
|
|||||||
if (!oldConf.getLabel().equals(newConf.getLabel())) {
|
if (!oldConf.getLabel().equals(newConf.getLabel())) {
|
||||||
String oldLabel = oldConf.getLabel();
|
String oldLabel = oldConf.getLabel();
|
||||||
String newLabel = newConf.getLabel();
|
String newLabel = newConf.getLabel();
|
||||||
if (updatedLabels.containsKey(oldLabel)) {
|
if (updatedLabels.containsKey(oldLabel) && !updatedLabels.get(oldLabel).equals(newLabel)) {
|
||||||
confusedLabels.add(oldLabel);
|
confusedLabels.add(oldLabel);
|
||||||
|
log.warn("[{}][{}] Can't automatically rename the label from [{}] to [{}] due to conflict [{}]", tenantId, ruleChainId, oldLabel, newLabel, updatedLabels.get(oldLabel));
|
||||||
} else {
|
} else {
|
||||||
updatedLabels.put(oldLabel, newLabel);
|
updatedLabels.put(oldLabel, newLabel);
|
||||||
}
|
}
|
||||||
@ -134,12 +153,34 @@ public class DefaultTbRuleChainService implements TbRuleChainService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Remove all labels that are renamed to two or more different labels, since we don't which new label to use;
|
// Remove all output labels that are renamed to two or more different labels, since we don't which new label to use;
|
||||||
confusedLabels.forEach(updatedLabels::remove);
|
confusedLabels.forEach(updatedLabels::remove);
|
||||||
// Remove all labels that are renamed to different new labels;
|
// Remove all output labels that are renamed but still present in the rule chain;
|
||||||
newLabels.forEach(updatedLabels::remove);
|
newLabels.forEach(updatedLabels::remove);
|
||||||
if (!oldLabels.equals(newLabels)) {
|
if (!oldLabels.equals(newLabels)) {
|
||||||
for (upda)
|
updateRelatedRuleChains(tenantId, ruleChainId, updatedLabels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateRelatedRuleChains(TenantId tenantId, RuleChainId ruleChainId, Map<String, String> labelsMap) {
|
||||||
|
List<RuleChainOutputLabelsUsage> usageList = getOutputLabelUsage(tenantId, ruleChainId);
|
||||||
|
for (RuleChainOutputLabelsUsage usage : usageList) {
|
||||||
|
labelsMap.forEach((oldLabel, newLabel) -> {
|
||||||
|
if (usage.getLabels().contains(oldLabel)) {
|
||||||
|
renameOutgoingLinks(tenantId, usage.getRuleNodeId(), oldLabel, newLabel);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void renameOutgoingLinks(TenantId tenantId, RuleNodeId ruleNodeId, String oldLabel, String newLabel) {
|
||||||
|
List<EntityRelation> relations = ruleChainService.getRuleNodeRelations(tenantId, ruleNodeId);
|
||||||
|
for (EntityRelation relation : relations) {
|
||||||
|
if (relation.getType().equals(oldLabel)) {
|
||||||
|
relationService.deleteRelation(tenantId, relation);
|
||||||
|
relation.setType(newLabel);
|
||||||
|
relationService.saveRelation(tenantId, relation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2021 The Thingsboard Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package org.thingsboard.server.service.rule;
|
package org.thingsboard.server.service.rule;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user