예제 #1
0
        /// <summary>
        /// Convert address set
        /// </summary>
        internal List <Address> ConvertAddressSet(AddressSet addr)
        {
            List <Address> retVal = new List <Address>();

            foreach (var use in Enum.GetValues(typeof(AddressSet.AddressSetUse)))
            {
                if (((int)use == 0 && addr.Use == 0) ^ ((int)use != 0 && addr.Use.HasFlag((AddressSet.AddressSetUse)use)))
                {
                    Address adEntry = new Address();
                    // An address can have multiple uses
                    if ((AddressSet.AddressSetUse)use != AddressSet.AddressSetUse.Search)
                    {
                        adEntry.Use = new PrimitiveCode <string>(HackishCodeMapping.ReverseLookup(HackishCodeMapping.ADDRESS_USE, (AddressSet.AddressSetUse)use));
                        if (adEntry.Use == null || adEntry.Use.Value == null)
                        {
                            adEntry.Use = new PrimitiveCode <string>();
                            adEntry.Use.Extension.Add(ExtensionUtil.CreateADUseExtension((AddressSet.AddressSetUse)use));
                        }
                    }

                    foreach (var pt in addr.Parts)
                    {
                        switch (pt.PartType)
                        {
                        case AddressPart.AddressPartType.AddressLine:
                        case AddressPart.AddressPartType.StreetAddressLine:
                            adEntry.Line.Add(pt.AddressValue);
                            break;

                        case AddressPart.AddressPartType.City:
                            adEntry.City = pt.AddressValue;
                            break;

                        case AddressPart.AddressPartType.Country:
                            adEntry.Country = pt.AddressValue;
                            break;

                        case AddressPart.AddressPartType.PostalCode:
                            adEntry.Zip = pt.AddressValue;
                            break;

                        case AddressPart.AddressPartType.State:
                            adEntry.State = pt.AddressValue;
                            break;

                        default:     // Can't find a place to put it and don't want to lose data ... so stuff it into an extension
                            adEntry.Extension.Add(ExtensionUtil.CreateADExtension(pt));
                            break;
                        }
                    }
                    retVal.Add(adEntry);
                }
            }
            return(retVal);
        }