Commit 424df706f9b254fa4279238908bcde67ad87ee82

Authored by xp.Huang
2 parents 6e7e9d3c 9c03d548

Merge branch '20220705' into 'upgraded_version'

refactor: 规则链元数据管理抽取

See merge request huang/thingsboard3.3.2!116
@@ -258,52 +258,36 @@ public class ConvertConfigServiceImpl @@ -258,52 +258,36 @@ public class ConvertConfigServiceImpl
258 } 258 }
259 259
260 private boolean deleteConvertConfig(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData) { 260 private boolean deleteConvertConfig(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData) {
261 - boolean needDelete = true; 261 +
262 // refactoring RuleChainMetaData 262 // refactoring RuleChainMetaData
263 AtomicInteger matchNode = new AtomicInteger(0); 263 AtomicInteger matchNode = new AtomicInteger(0);
264 nodes.forEach( 264 nodes.forEach(
265 deleteRuleNode -> { 265 deleteRuleNode -> {
266 int deleteIndex = 0; 266 int deleteIndex = 0;
267 -  
268 - List<RuleNode> freshedNode = new ArrayList<>();  
269 - List<NodeConnectionInfo> freshedConnectionInfos = new ArrayList<>();  
270 - 267 + boolean needDelete = false;
271 for (RuleNode ruleNode : ruleChainMetaData.getNodes()) { 268 for (RuleNode ruleNode : ruleChainMetaData.getNodes()) {
272 /**被删除节点右侧节点的下标左偏移1个量*/ 269 /**被删除节点右侧节点的下标左偏移1个量*/
273 if (deleteRuleNode.getName().equals(ruleNode.getName()) 270 if (deleteRuleNode.getName().equals(ruleNode.getName())
274 && deleteRuleNode.getType().equals(ruleNode.getType())) { 271 && deleteRuleNode.getType().equals(ruleNode.getType())) {
275 - int firestIndex = ruleChainMetaData.getFirstNodeIndex();  
276 - ruleChainMetaData.setFirstNodeIndex(  
277 - Math.max(firestIndex< deleteIndex?firestIndex:firestIndex-1, 0));  
278 -  
279 - for (NodeConnectionInfo nodeConnectionInfo : ruleChainMetaData.getConnections()) {  
280 - int fromIndex = nodeConnectionInfo.getFromIndex();  
281 - int toIndex = nodeConnectionInfo.getToIndex();  
282 - if (fromIndex != deleteIndex && toIndex != deleteIndex) {  
283 - nodeConnectionInfo.setFromIndex(  
284 - Math.max(fromIndex > deleteIndex ? fromIndex - 1 : fromIndex, 0));  
285 - nodeConnectionInfo.setToIndex(  
286 - Math.max(toIndex > deleteIndex ? toIndex - 1 : toIndex, 0));  
287 - freshedConnectionInfos.add(nodeConnectionInfo);  
288 - }  
289 - }  
290 - 272 + needDelete = true;
291 matchNode.getAndIncrement(); 273 matchNode.getAndIncrement();
292 - } else {  
293 - freshedNode.add(ruleNode); 274 + break;
294 } 275 }
295 deleteIndex++; 276 deleteIndex++;
296 } 277 }
297 - ruleChainMetaData.setConnections(freshedConnectionInfos);  
298 - ruleChainMetaData.setNodes(freshedNode); 278 +
  279 + if (needDelete) {
  280 + // Delete Rule Node
  281 + freshRuleChainMetaData(ruleChainMetaData,deleteIndex);
  282 + }
299 }); 283 });
300 284
301 if (matchNode.get() == 0) { 285 if (matchNode.get() == 0) {
302 - needDelete = false; 286 + return false;
303 } else { 287 } else {
304 needDeleteOriginatorFieldsAndScript(ruleChainMetaData); 288 needDeleteOriginatorFieldsAndScript(ruleChainMetaData);
305 } 289 }
306 - return needDelete; 290 + return true;
307 } 291 }
308 292
309 private boolean deleteScene(RuleNode node, RuleChainMetaData ruleChainMetaData) { 293 private boolean deleteScene(RuleNode node, RuleChainMetaData ruleChainMetaData) {
@@ -318,31 +302,51 @@ public class ConvertConfigServiceImpl @@ -318,31 +302,51 @@ public class ConvertConfigServiceImpl
318 } 302 }
319 if (needDelete) { 303 if (needDelete) {
320 // Delete Rule Node 304 // Delete Rule Node
321 - ruleChainMetaData.getNodes().remove(deleteIndex);  
322 - List<NodeConnectionInfo> newConnections = new ArrayList<>();  
323 - int finalDeleteIndex = deleteIndex;  
324 - // refactor connection  
325 - ruleChainMetaData  
326 - .getConnections()  
327 - .forEach(  
328 - nodeConnectionInfo -> {  
329 - int fromIndex = nodeConnectionInfo.getFromIndex();  
330 - int toIndex = nodeConnectionInfo.getToIndex();  
331 - if (finalDeleteIndex != nodeConnectionInfo.getToIndex()  
332 - && nodeConnectionInfo.getFromIndex() != finalDeleteIndex) {  
333 - nodeConnectionInfo.setFromIndex(  
334 - Math.max(fromIndex > finalDeleteIndex ? fromIndex - 1 : fromIndex, 0));  
335 - nodeConnectionInfo.setToIndex(  
336 - Math.max(toIndex > finalDeleteIndex ? toIndex - 1 : toIndex, 0));  
337 - newConnections.add(nodeConnectionInfo);  
338 - }  
339 - });  
340 - ruleChainMetaData.setConnections(newConnections);  
341 - ruleChainMetaData.setFirstNodeIndex(ruleChainMetaData.getFirstNodeIndex() - 1); 305 + freshRuleChainMetaData(ruleChainMetaData,deleteIndex);
342 } 306 }
343 return needDelete; 307 return needDelete;
344 } 308 }
345 309
  310 + /**
  311 + * 刷新规则链的元数据
  312 + * @param ruleChainMetaData 规则链元数据
  313 + * @param removeNodeIndex 被删除的节点下标
  314 + */
  315 + private void freshRuleChainMetaData(RuleChainMetaData ruleChainMetaData,int removeNodeIndex){
  316 + ruleChainMetaData.getNodes().remove(removeNodeIndex);
  317 +
  318 + int firestIndex = ruleChainMetaData.getFirstNodeIndex();
  319 + ruleChainMetaData.setFirstNodeIndex(Math.max(firestIndex< removeNodeIndex?firestIndex:firestIndex-1, 0));
  320 +
  321 + ruleChainMetaData.setConnections(freshRelation(ruleChainMetaData.getConnections(),removeNodeIndex));
  322 + }
  323 +
  324 + /**
  325 + * 刷新规则连中节点间的关联关系
  326 + * @param connections 节点关联关系
  327 + * @param removeNodeIndex 被删除的节点下标
  328 + * @return
  329 + */
  330 + private List<NodeConnectionInfo> freshRelation(List<NodeConnectionInfo> connections,int removeNodeIndex){
  331 + List<NodeConnectionInfo> newConnections = new ArrayList<>();
  332 +
  333 + connections.forEach(
  334 + oldRelation -> {
  335 + int fromIndex = oldRelation.getFromIndex();
  336 + int toIndex = oldRelation.getToIndex();
  337 + if (removeNodeIndex != fromIndex
  338 + && removeNodeIndex != toIndex) {
  339 + oldRelation.setFromIndex(
  340 + Math.max(fromIndex > removeNodeIndex ? fromIndex - 1 : fromIndex, 0));
  341 + oldRelation.setToIndex(
  342 + Math.max(toIndex > removeNodeIndex ? toIndex - 1 : toIndex, 0));
  343 + newConnections.add(oldRelation);
  344 + }
  345 + });
  346 +
  347 + return newConnections;
  348 + }
  349 +
346 private void addConvertConfigRuleNode(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData) { 350 private void addConvertConfigRuleNode(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData) {
347 // 1. GET SAVE TIMESERIES‘S NODE INDEX 351 // 1. GET SAVE TIMESERIES‘S NODE INDEX
348 int seriesIndex = 0; 352 int seriesIndex = 0;
@@ -422,10 +426,12 @@ public class ConvertConfigServiceImpl @@ -422,10 +426,12 @@ public class ConvertConfigServiceImpl
422 } 426 }
423 } 427 }
424 if (findSons == 0) { 428 if (findSons == 0) {
425 - deleteOriginatorFieldsAndScript(findOriginatorIndex, findScriptIndex, ruleChainMetaData); 429 + freshRuleChainMetaData(ruleChainMetaData,findOriginatorIndex > findScriptIndex?findOriginatorIndex:findScriptIndex);
  430 + freshRuleChainMetaData(ruleChainMetaData,findOriginatorIndex > findScriptIndex?findScriptIndex:findOriginatorIndex);
426 } 431 }
427 } 432 }
428 433
  434 + @Deprecated
429 private void deleteOriginatorFieldsAndScript( 435 private void deleteOriginatorFieldsAndScript(
430 int deleteOriginatorIndex, int deleteScriptIndex, RuleChainMetaData ruleChainMetaData) { 436 int deleteOriginatorIndex, int deleteScriptIndex, RuleChainMetaData ruleChainMetaData) {
431 ruleChainMetaData.getNodes().remove(deleteScriptIndex); 437 ruleChainMetaData.getNodes().remove(deleteScriptIndex);