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(); } }
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(); } }