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 258 }
259 259
260 260 private boolean deleteConvertConfig(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData) {
261   - boolean needDelete = true;
  261 +
262 262 // refactoring RuleChainMetaData
263 263 AtomicInteger matchNode = new AtomicInteger(0);
264 264 nodes.forEach(
265 265 deleteRuleNode -> {
266 266 int deleteIndex = 0;
267   -
268   - List<RuleNode> freshedNode = new ArrayList<>();
269   - List<NodeConnectionInfo> freshedConnectionInfos = new ArrayList<>();
270   -
  267 + boolean needDelete = false;
271 268 for (RuleNode ruleNode : ruleChainMetaData.getNodes()) {
272 269 /**被删除节点右侧节点的下标左偏移1个量*/
273 270 if (deleteRuleNode.getName().equals(ruleNode.getName())
274 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 273 matchNode.getAndIncrement();
292   - } else {
293   - freshedNode.add(ruleNode);
  274 + break;
294 275 }
295 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 285 if (matchNode.get() == 0) {
302   - needDelete = false;
  286 + return false;
303 287 } else {
304 288 needDeleteOriginatorFieldsAndScript(ruleChainMetaData);
305 289 }
306   - return needDelete;
  290 + return true;
307 291 }
308 292
309 293 private boolean deleteScene(RuleNode node, RuleChainMetaData ruleChainMetaData) {
... ... @@ -318,31 +302,51 @@ public class ConvertConfigServiceImpl
318 302 }
319 303 if (needDelete) {
320 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 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 350 private void addConvertConfigRuleNode(List<RuleNode> nodes, RuleChainMetaData ruleChainMetaData) {
347 351 // 1. GET SAVE TIMESERIES‘S NODE INDEX
348 352 int seriesIndex = 0;
... ... @@ -422,10 +426,12 @@ public class ConvertConfigServiceImpl
422 426 }
423 427 }
424 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 435 private void deleteOriginatorFieldsAndScript(
430 436 int deleteOriginatorIndex, int deleteScriptIndex, RuleChainMetaData ruleChainMetaData) {
431 437 ruleChainMetaData.getNodes().remove(deleteScriptIndex);
... ...