internal void GetCodes(PopulationDataEntry geocodeSource) { List <PopulationDataEntry> missedEntities = new List <PopulationDataEntry>(); if (geocodeSource != null) { // this == geocodeSource => copy directly from source if (((Name == geocodeSource.Name) | (geocodeSource.OldNames.Contains(Name))) & (EntityTypeHelper.IsCompatibleEntityType(Type, geocodeSource.Type))) { CopyStaticDataFrom(geocodeSource); } foreach (PopulationDataEntry subEntity in SubEntities) { // find number of sub entities with same name and type Int32 position = 0; if (subEntity.Type != EntityType.Muban) { foreach (PopulationDataEntry find in SubEntities) { if (find == subEntity) { break; } if (find.SameNameAndType(subEntity.Name, subEntity.Type)) { position++; } } } PopulationDataEntry sourceEntity = null; if (subEntity.Type == EntityType.Muban) { sourceEntity = geocodeSource.FindByCode(subEntity.Geocode); } else { sourceEntity = geocodeSource.FindByNameAndType(subEntity.Name, subEntity.Type, false, position); if (sourceEntity == null) { sourceEntity = geocodeSource.FindByNameAndType(subEntity.Name, subEntity.Type, true, position); } } if (sourceEntity != null) { subEntity.GetCodes(sourceEntity); } else { // Problem! } if (EntityTypeHelper.Thesaban.Contains(subEntity.Type) | (EntityTypeHelper.Sakha.Contains(subEntity.Type))) { foreach (Int32 parentCode in subEntity.GeocodeParent) { PopulationDataEntry parentEntity = geocodeSource.FindByCode(parentCode); if (parentEntity != null) { subEntity.GetCodes(parentEntity); PopulationDataEntry sourceValue = this.FindByCode(parentCode); if (sourceValue == null) { PopulationDataEntry newEntry = (PopulationDataEntry)parentEntity.Clone(); newEntry.SubEntities.Clear(); Boolean found = false; foreach (PopulationDataEntry compare in missedEntities) { found = found | (compare.Geocode == newEntry.Geocode); } if (!found) { missedEntities.Add(newEntry); } } } } } } } foreach (PopulationDataEntry newEntry in missedEntities) { PopulationDataEntry parent = this.FindByCode(newEntry.Geocode / 100); if (parent != null) { parent.SubEntities.Add(newEntry); } parent.SortSubEntitiesByGeocode(); } }