Exemple #1
0
        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();
            }
        }