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