public RegionNode Copy(RegionNode node) { var result = new RegionNode(node.Name); var residents = node.GetResidents(); foreach (var resident in residents) { var copied = this.CopyOnceResolved(resident); result.RegisterResident(resident); } return(result); }
protected RegionNode ReadRegionNode(IElement element, BasketRepository basketRepository) { var name = element.ReadAttributeAsNotEmptyString("name"); var result = new RegionNode(name); var expectedElements = new String[] { RegionElementName, BasketCountryElementName, BasketRegionElementName }; var someElementOpt = element.TryMultiLockOn(expectedElements); while (someElementOpt != null) { IRegionNodeResident resident; switch (someElementOpt.Name) { case RegionElementName: { resident = this.ReadRegionNode(someElementOpt, basketRepository); break; } case BasketCountryElementName: { resident = this.ReadBasketCountryNode(someElementOpt, basketRepository); break; } case BasketRegionElementName: { resident = this.ReadBasketRegionNode(someElementOpt, basketRepository); break; } default: { throw new ApplicationException(); } } result.RegisterResident(resident); someElementOpt = someElementOpt.ReleaseAndTryMultiLockOnNext(someElementOpt.Name, expectedElements); } return(result); }