/// <summary> /// Unbundles each loop from a <see cref="HierarchicalLoopContainer"/> /// </summary> /// <param name="list">Collection of loops being unbundled</param> /// <param name="container">Container with loops to be unbundled</param> /// <param name="loopId">Loop identifier</param> public void UnbundleHLoops(List <string> list, HierarchicalLoopContainer container, string loopId) { this.UnbundleLoops(list, container, loopId); foreach (HierarchicalLoop hloop in container.HLoops) { if (hloop.Specification.LoopId == loopId) { list.Add(this.ExtractLoop(hloop, loopId)); } else { this.UnbundleHLoops(list, hloop, loopId); } } }
private T SaveLoopAndChildren(HierarchicalLoopContainer loop, ref int positionInInterchange, T interchangeId, T functionalGroupId, T transactionSetId, string transactionSetCode, T?parentId) { T?loopId = null; if (loop is HierarchicalLoop) { loopId = SaveHierarchicalLoop((HierarchicalLoop)loop, interchangeId, transactionSetId, transactionSetCode, parentId); } else if (loop is Loop) { loopId = SaveLoop((Loop)loop, interchangeId, transactionSetId, transactionSetCode, parentId); } if (loopId.HasValue) { SaveSegment(null, loop, positionInInterchange, interchangeId, functionalGroupId, transactionSetId, parentId, loopId); foreach (var seg in loop.Segments) { if (seg is HierarchicalLoopContainer) { positionInInterchange++; SaveLoopAndChildren((HierarchicalLoopContainer)seg, ref positionInInterchange, interchangeId, functionalGroupId, transactionSetId, transactionSetCode, loopId); } else { SaveSegment(null, seg, ++positionInInterchange, interchangeId, functionalGroupId, transactionSetId, loopId); } } foreach (var hl in loop.HLoops) { positionInInterchange++; SaveLoopAndChildren(hl, ref positionInInterchange, interchangeId, functionalGroupId, transactionSetId, transactionSetCode, loopId); } return(loopId.Value); } else { throw new InvalidOperationException(string.Format("Loop could not be created for interchange {0} position {1}.", interchangeId, positionInInterchange)); } }
private object SaveLoopAndChildren( HierarchicalLoopContainer loop, ref int positionInInterchange, object interchangeId, object functionalGroupId, object transactionSetId, string transactionSetCode, object parentId) { object loopId = null; if (loop is HierarchicalLoop hLoop) { loopId = this.SaveHierarchicalLoop( hLoop, interchangeId, transactionSetId, transactionSetCode, parentId); } else if (loop is Loop loopContainer) { loopId = this.SaveLoop(loopContainer, interchangeId, transactionSetId, transactionSetCode, parentId); } if (loopId == null || loopId == this.DefaultIdentityTypeValue) { throw new InvalidOperationException( string.Format(Resources.LoopCreationError, interchangeId, positionInInterchange)); } this.SaveSegment( null, loop, positionInInterchange, interchangeId, functionalGroupId, transactionSetId, parentId, loopId); foreach (var seg in loop.Segments) { if (seg is HierarchicalLoopContainer hierarchicalLoopContainer) { positionInInterchange++; this.SaveLoopAndChildren( hierarchicalLoopContainer, ref positionInInterchange, interchangeId, functionalGroupId, transactionSetId, transactionSetCode, loopId); } else { this.SaveSegment( null, seg, ++positionInInterchange, interchangeId, functionalGroupId, transactionSetId, loopId); } } foreach (var hl in loop.HLoops) { positionInInterchange++; this.SaveLoopAndChildren( hl, ref positionInInterchange, interchangeId, functionalGroupId, transactionSetId, transactionSetCode, loopId); } return(loopId); }