Showing
1 changed file
with
55 additions
and
49 deletions
@@ -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); |