/// <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));
            }
        }
Exemple #3
0
        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);
        }