/// <summary> /// Resolve references. /// </summary> /// <param name="beans"> /// The beans. /// </param> /// <param name="numberLevelsDeep"> /// The number levels deep. /// </param> /// <param name="retrievalManager"> /// The retrieval manager. /// </param> /// <param name="missingReferences"> /// The missing references. /// </param> /// <returns> /// The <see cref="MaintainableDictionary{IMaintainableMutableObject}"/>. /// </returns> private MaintainableDictionary <IMaintainableMutableObject> ResolveReferencesInternal( IMutableObjects beans, int numberLevelsDeep, Func <IStructureReference, IMaintainableMutableObject> retrievalManager, IDictionaryOfSets <IMaintainableMutableObject, IStructureReference> missingReferences) { var returnMap = new MaintainableDictionary <IMaintainableMutableObject>(); var outerLevel = new Queue <IMaintainableMutableObject>(); foreach (IMaintainableMutableObject artefact in beans.AllMaintainables) { outerLevel.Enqueue(artefact); } int count = 0; do { var innerLevel = new Queue <IMaintainableMutableObject>(); while (outerLevel.Count > 0) { IMaintainableMutableObject parent = outerLevel.Dequeue(); var structureReferences = GetChildStructureReferences(retrievalManager, parent); foreach (IStructureReference structureReference in structureReferences) { if (structureReference == null) { string message = string.Format(CultureInfo.InvariantCulture, "Null reference for parent artefact : {0}+{1}+{2}", parent.AgencyId, parent.Id, parent.Version); _log.Error(message); throw new MappingStoreException(message); } if (this._structureTypeSet.HasStructure(structureReference.MaintainableStructureEnumType)) { IMaintainableMutableObject resolved = this.GetMutableObject(retrievalManager, structureReference); if (resolved != null) { returnMap.AddToSet(parent, resolved); if (numberLevelsDeep == 0 || numberLevelsDeep > count) { innerLevel.Enqueue(resolved); } } else if (missingReferences != null) { missingReferences.AddToSet(parent, structureReference); } } } } count++; outerLevel = innerLevel; }while (count < numberLevelsDeep); return(returnMap); }
/// <summary> /// Resolve references. /// </summary> /// <param name="beans"> /// The beans. /// </param> /// <param name="numberLevelsDeep"> /// The number levels deep. /// </param> /// <param name="retrievalManager"> /// The retrieval manager. /// </param> /// <param name="missingReferences"> /// The missing references. /// </param> /// <returns> /// The <see cref="MaintainableDictionary{IMaintainableMutableObject}"/>. /// </returns> private MaintainableDictionary<IMaintainableMutableObject> ResolveReferencesInternal( IMutableObjects beans, int numberLevelsDeep, Func<IStructureReference, IMaintainableMutableObject> retrievalManager, IDictionaryOfSets<IMaintainableMutableObject, IStructureReference> missingReferences) { var returnMap = new MaintainableDictionary<IMaintainableMutableObject>(); var outerLevel = new Queue<IMaintainableMutableObject>(); foreach (IMaintainableMutableObject artefact in beans.AllMaintainables) { outerLevel.Enqueue(artefact); } int count = 0; do { var innerLevel = new Queue<IMaintainableMutableObject>(); while (outerLevel.Count > 0) { IMaintainableMutableObject parent = outerLevel.Dequeue(); var structureReferences = GetChildStructureReferences(retrievalManager, parent); foreach (IStructureReference structureReference in structureReferences) { if (structureReference == null) { string message = string.Format(CultureInfo.InvariantCulture, "Null reference for parent artefact : {0}+{1}+{2}", parent.AgencyId, parent.Id, parent.Version); _log.Error(message); throw new MappingStoreException(message); } if (this._structureTypeSet.HasStructure(structureReference.MaintainableStructureEnumType)) { IMaintainableMutableObject resolved = this.GetMutableObject(retrievalManager, structureReference); if (resolved != null) { returnMap.AddToSet(parent, resolved); if (numberLevelsDeep == 0 || numberLevelsDeep > count) { innerLevel.Enqueue(resolved); } } else if (missingReferences != null) { missingReferences.AddToSet(parent, structureReference); } } } } count++; outerLevel = innerLevel; } while (count < numberLevelsDeep); return returnMap; }