コード例 #1
0
        public override void ValidationCheck(List <string> _errors)
        {
            Action <string> addErrMsg = (itemName) =>
                                        _errors.Add(PlatformResources.GetGlobalResourceString("ErrorMessage", itemName));

            if (!string.IsNullOrEmpty(Recipient) &&
                (Recipient.Trim().Length < 2 || Recipient.Trim().Length > 40))
            {
                addErrMsg("InvalidRecipentName");
            }

            if (!string.IsNullOrEmpty(StreetAddress) &&
                (StreetAddress.Trim().Length < 1 || StreetAddress.Trim().Length > 40))
            {
                addErrMsg("InvalidStreetAddress");
            }

            if (!string.IsNullOrEmpty(PhoneNumber) &&
                !Regex.IsMatch(_shippingAddr.Phone, @"^(\d{8,12})$"))
            {
                addErrMsg("InvalidPhone");
            }

            if (!string.IsNullOrWhiteSpace(ZipCode) &&
                !Regex.IsMatch(ZipCode, @"\d{5}"))
            {
                addErrMsg("InvalidZipCode");
            }
        }
コード例 #2
0
        public double Distance(string a1, string a2)
        {
            Logger.Log("AddressDistance", String.Format("Comparing addresses:\r\n{0}\r\n{1}", a1, a2));

            StreetAddress c1 = Normalize(a1);
            StreetAddress c2 = Normalize(a2);

            Logger.Log("AddressDistance", String.Format("Parsed address: {0}", c1));
            Logger.Log("AddressDistance", String.Format("Parsed address: {0}", c2));

            if ((c1.SecondLevel == null && c2.SecondLevel == null) || !resolveSecondary)
            {
                return(MatchStreetName(c1, c2, 0.5, 0.5));
            }
            else
            {
                //1. Street name - 50 (name = 40, prefix = 10)
                //2. Street number - 30
                double score = MatchStreetName(c1, c2, 0.3, 0.5);

                //3. Second level - 20
                if (score != 0)
                {
                    score += MatchSecondLevelAddr(c1, c2, 0.2);
                }

                return(score);
            }
        }
コード例 #3
0
        public async void SearchCommandExecuted(object param)
        {
            _searchingDb = true;
            DatabaseSearchResults.Clear();

            if (String.IsNullOrEmpty(FirstName.Trim()))
            {
                FirstName = String.Empty;
            }
            if (String.IsNullOrEmpty(LastName.Trim()))
            {
                FirstName = String.Empty;
            }
            if (String.IsNullOrEmpty(StreetAddress.Trim()))
            {
                StreetAddress = String.Empty;
            }
            if (String.IsNullOrEmpty(City.Trim()))
            {
                City = String.Empty;
            }
            if (String.IsNullOrEmpty(ZipCode.Trim()))
            {
                ZipCode = String.Empty;
            }

            Parallel.ForEach((await DatabaseStuff.RunQuery(FirstName, LastName,
                                                           (UseDateOfBirth ? DateOfBirth : DateTime.MinValue), DobEqual, DobAfter, DobBefore, StreetAddress, City, ZipCode)), personModel =>
                             Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                                                                                   DatabaseSearchResults.Add(personModel)
                                                                                   ))
                             );
            _searchingDb = false;
        }
コード例 #4
0
 public void UpdateAddress(string address)
 {
     if (!StreetAddress.Equals(address) && !string.IsNullOrEmpty(address))
     {
         StreetAddress = address;
     }
 }
コード例 #5
0
        public override void ValidationCheck(List <string> _errors)
        {
            if (!string.IsNullOrEmpty(Recipient) && (Recipient.Trim().Length < 1 || Recipient.Trim().Length > 40))
            {
                _errors.Add(PlatformResources.GetGlobalResourceString("ErrorMessage", "InvalidRecipentName"));
            }

            if (!string.IsNullOrEmpty(StreetAddress) && (StreetAddress.Trim().Length < 1 || StreetAddress.Trim().Length > 40))
            {
                _errors.Add(PlatformResources.GetGlobalResourceString("ErrorMessage", "InvalidStreetAddress"));
            }

            if (!string.IsNullOrEmpty(City) && (City.Trim().Length < 1 || City.Trim().Length > 20))
            {
                _errors.Add(PlatformResources.GetGlobalResourceString("ErrorMessage", "InvalidCity"));
            }

            if (!string.IsNullOrEmpty(ZipCode))
            {
                if (!System.Text.RegularExpressions.Regex.IsMatch(ZipCode, @"^(\d{5})$"))
                {
                    _errors.Add(PlatformResources.GetGlobalResourceString("ErrorMessage", "InvalidZipCode"));
                }
            }

            if (!string.IsNullOrEmpty(PhoneNumber))
            {
                if (!System.Text.RegularExpressions.Regex.IsMatch(_shippingAddr.Phone, @"^(\d{10,12})$"))
                {
                    _errors.Add(PlatformResources.GetGlobalResourceString("ErrorMessage", "InvalidPhone"));
                }
            }
        }
コード例 #6
0
 public void Prepare(Cobuyer cobuyer)
 {
     Cobuyer = cobuyer;
     if (Cobuyer.CobuyerAddressNumber > 0)
     {
         FirstName           = Cobuyer.FirstName;
         LastName            = Cobuyer.LastName;
         MiddleName          = Cobuyer.MiddleName;
         NickName            = Cobuyer.NickName;
         StreetAddress       = Cobuyer.StreetAddress == null ? new StreetAddress() : Cobuyer.StreetAddress.ShallowCopy();
         MobilePhone         = Cobuyer.MobilePhoneNumber == null ? new PhoneNumber() : Cobuyer.MobilePhoneNumber.ShallowCopy();
         WorkPhone           = Cobuyer.WorkPhoneNumber == null ? new PhoneNumber() : Cobuyer.WorkPhoneNumber.ShallowCopy();
         HomePhone           = Cobuyer.HomePhoneNumber == null ? new PhoneNumber() : Cobuyer.HomePhoneNumber.ShallowCopy();
         Email               = Cobuyer.Email == null ? new Email() : Cobuyer.Email.ShallowCopy();
         _addressSameAsBuyer = Cobuyer.AddressSameAsBuyer;
     }
     else
     {
         StreetAddress = new StreetAddress();
         MobilePhone   = new PhoneNumber();
         WorkPhone     = new PhoneNumber();
         HomePhone     = new PhoneNumber();
         Email         = new Email();
     }
 }
コード例 #7
0
        public async Task <bool> Validate(StreetAddress streetAddress)
        {
            if (!String.IsNullOrEmpty(streetAddress.Country) && !streetAddress.Country.Equals("US"))
            {
                return(await ValidateForeignAddress(streetAddress));
            }
            else
            {
                var _url    = String.Format(_smartystrUri + "?auth-id={0}&auth-token={1}&street={2}&city={3}&state={4}&zipcode={5}", authId, authToken, streetAddress.AddressLine1, streetAddress.City, streetAddress.State, streetAddress.PostalCode);
                var results = await GetDataObjectFromAPI <StreetAddressValidationResult[]>(_url);

                if (results.Length > 0)
                {
                    streetAddress.AddressLine1          = results[0].delivery_line_1;
                    streetAddress.City                  = results[0].components.city_name;
                    streetAddress.State                 = results[0].components.state_abbreviation;
                    streetAddress.PostalCode            = results[0].components.zipcode + "-" + results[0].components.plus4_code;
                    streetAddress.County                = results[0].metadata.county_name;
                    streetAddress.StreetAddressVerified = true;
                }
                else
                {
                    streetAddress.StreetAddressVerified = false;
                }
                return(streetAddress.StreetAddressVerified);
            }
        }
コード例 #8
0
        public void NoStateNoAptToDbStringTest()
        {
            const string address = ";1894;beacon st;brookline;;usa;02445";

            var target = new StreetAddress(address);

            Assert.AreEqual(address, target.ToDbString(), true);
        }
コード例 #9
0
 private double MatchSecondLevelAddr(StreetAddress c1, StreetAddress c2, double weight)
 {
     if (c1.SecondLevel != null && c2.SecondLevel != null)
     {
         return(MatchSecondLevelAddr(c1.SecondLevel, c2.SecondLevel, weight));
     }
     return(0);
 }
コード例 #10
0
        public void StreetAddress_Equals_Non_StreetAddress_Returns_False()
        {
            var target = new StreetAddress("1;1894;beacon st;brookline;ma;usa;02445");

            // ReSharper disable SuspiciousTypeConversion.Global
            Assert.IsFalse(target.Equals(0));
            // ReSharper restore SuspiciousTypeConversion.Global
        }
コード例 #11
0
        public void DiffAptNoEqualsTest()
        {
            var target = new StreetAddress("1;1894;beacon st;brookline;ma;usa;02445");
            var obj    = new StreetAddress(";1894;beacon st;brookline;ma;usa;02445");

            Assert.IsFalse(target.Equals(obj));
            Assert.IsFalse(obj.Equals(target));
        }
コード例 #12
0
 public FranchiseRegistered(
     string name, string givenName, string surname, StreetAddress billingAddress)
 {
     this.Name           = name;
     this.GivenName      = givenName;
     this.Surname        = surname;
     this.BillingAddress = billingAddress;
 }
コード例 #13
0
        public void StreetAddress_Equals_Same_Ref_Returns_True()
        {
            var target = new StreetAddress("1;1894;beacon st;brookline;ma;usa;02445");
            var other  = target;

            Assert.IsTrue(target.Equals(other));
            Assert.IsTrue(other.Equals(target));
        }
コード例 #14
0
        public void ApartmentAndStateToStringTest()
        {
            var          target   = new StreetAddress("1;1894;beacon st;brookline;ma;usa;02445");
            const string expected = "1894 beacon st\tApartment #1\n" +
                                    "brookline MA USA\n02445";

            Assert.AreEqual(expected, target.ToString());
        }
コード例 #15
0
        public void NoStateOrApartmentToStringTest()
        {
            var          target   = new StreetAddress(";1894;beacon st;brookline;;usa;02445");
            const string expected = "1894 beacon st\n" +
                                    "brookline USA\n02445";

            Assert.AreEqual(expected, target.ToString());
        }
コード例 #16
0
        public bool IsValid() => new bool[]
        {
            !Country.None(),
            !State.None(),
            !City.None(),
            !StreetAddress.None(),
        }

        .And();
コード例 #17
0
 public string ToString(char separator)
 {
     return($"{StreetAddress?.ToString()}{separator}{OtherDesignation}{separator}{City}" +
            $"{separator}{StateOrProvince}{separator}{ZipOrPostalCode}" +
            $"{separator}{Country?.BestValue}{separator}{AddressType?.BestValue}{separator}{OtherGeographicDesignation}" +
            $"{separator}{CountyOrParishCode?.BestValue}{separator}{CensusTract?.BestValue}{separator}" +
            $"{AddressRepresentationCode?.BestValue}{separator}{AddressValidityRange?.ToString()}"
            .TrimEnd(separator));
 }
コード例 #18
0
 public static string AddressToString(StreetAddress addr)
 {
     return(addr.address_num.ToString() + " "
            + addr.street + " "
            + addr.street_type + ", "
            + addr.city + ", "
            + addr.province_short + ", "
            + addr.postal_code);
 }
コード例 #19
0
        public void AllSameEqualsTest()
        {
            const string address = "1;1894;beacon st;brookline;ma;usa;02445";

            var target = new StreetAddress(address);
            var obj    = new StreetAddress(address);

            Assert.IsTrue(target.Equals(obj));
            Assert.IsTrue(obj.Equals(target));
        }
コード例 #20
0
ファイル: SellFranchise.cs プロジェクト: JaxDUG/JaxDugSamples
 public SellFranchise(string franchiseId, DateTime sellingDate, string newCorporateName, string newOwnerGiveName,
                      string newOwnerSurname, StreetAddress newLocation)
 {
     this.FranchiseId      = franchiseId;
     this.SellingDate      = sellingDate;
     this.NewCorporateName = newCorporateName;
     this.NewOwnerGiveName = newOwnerGiveName;
     this.NewOwnerSurname  = newOwnerSurname;
     this.MovingToLocation = newLocation;
 }
コード例 #21
0
        public async Task StartAsync_ExceptionInChannelCallback_ShouldStopApplication()
        {
            // Arrange.
            using var stopped = new SemaphoreSlim(0);
            var @event = new StreetAddress();
            var ex     = new Exception();

            this.coordinator
            .Setup(c => c.IsEventSupportedAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ThrowsAsync(ex);

            this.host
            .Setup(h => h.StopApplication())
            .Callback(() => stopped.Release());

            // Act.
            bool result;

            await this.subject.StartAsync();

            try
            {
                this.PublishEvent(@event);

                result = await stopped.WaitAsync(1000 * 5);
            }
            finally
            {
                await this.subject.StopAsync();
            }

            // Assert.
            Assert.True(result);

            this.coordinator.Verify(
                c => c.RegisterSupportedEventAsync(StreetAddress.Descriptor.FullName, It.IsAny <CancellationToken>()),
                Times.Never());

            this.coordinator.Verify(
                c => c.IsEventSupportedAsync(StreetAddress.Descriptor.FullName, default),
                Times.Once());

            this.host.Verify(
                h => h.StopApplication(),
                Times.Once());

            this.logger.Verify(
                l => l.Log(
                    LogLevel.Critical,
                    0,
                    It.Is <It.IsAnyType>((v, t) => v.ToString() == "Unhandled exception occurred in the channel callback."),
                    ex,
                    It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)),
                Times.Once());
        }
コード例 #22
0
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            // Non-Edm Approach
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.EnableDependencyInjection();
                endpoints.Select().Filter().Expand().Count().MaxTop(10);
            });

            using (IServiceScope serviceScope = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>().CreateScope())
            {
                InMemoryDbContext db = serviceScope.ServiceProvider.GetRequiredService <InMemoryDbContext>();

                if (!db.Schools.Any())
                {
                    var shippingAddress = new StreetAddress {
                        Id = 1, Street = "Street 1", City = "City 1"
                    };
                    db.StreetAddresses.Add(shippingAddress);

                    var order = new Order {
                        Id = 1, Description = "Order 1 Description "
                    };
                    db.Orders.Add(order);

                    db.Schools.Add(new School {
                        Id = 1, Name = "School 1", ShippingAddress = shippingAddress, Order = order
                    });

                    db.SaveChanges();
                }

                if (!db.Users.Any())
                {
                    db.Users.AddRange(
                        new User {
                        Id = 1, Name = "John Doe", CreatedOn = new DateTimeOffset(DateTime.Parse("2020-06-24T15:57:44.3780001+03:00"))
                    },
                        new User {
                        Id = 2, Name = "Foo Bar", CreatedOn = new DateTimeOffset(DateTime.Now)
                    });

                    db.SaveChanges();
                }
            }
        }
コード例 #23
0
        public DBLocation GetOrCreateDBLocation(StreetAddress address)
        {
            DBLocation existing = SearchDBLocations(address, 2).FirstOrDefault();


            if (existing != null)
            {
                return(existing);
            }
            return(CreateDBLocation(address));
        }
コード例 #24
0
        public void StreetAddressExplicitConstructorTest()
        {
            var target = new StreetAddress("", "1894", "beacon st", "brookline", "MA", "USA", "02445");

            Assert.AreEqual("", target.ApartmentNumber);
            Assert.AreEqual("1894", target.House);
            Assert.AreEqual("beacon st", target.Street);
            Assert.AreEqual("brookline", target.City);
            Assert.AreEqual("MA", target.State);
            Assert.AreEqual("USA", target.Country);
            Assert.AreEqual("02445", target.Zipcode);
        }
コード例 #25
0
 public override int GetHashCode()
 {
     unchecked
     {
         int hashCode = base.GetHashCode();
         hashCode = (hashCode * 397) ^ (StreetAddress != null ? StreetAddress.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (City != null ? City.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (State != null ? State.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Zip != null ? Zip.GetHashCode() : 0);
         return(hashCode);
     }
 }
コード例 #26
0
ファイル: Address.cs プロジェクト: AqueGen/Prozorro
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = (StreetAddress != null ? StreetAddress.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Locality != null ? Locality.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Region != null ? Region.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (PostalCode != null ? PostalCode.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (CountryName != null ? CountryName.GetHashCode() : 0);
         return(hashCode);
     }
 }
コード例 #27
0
        /// <summary>
        /// Format patient-attributes as a header value
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            var sb        = new StringBuilder();
            var seperator = "; ";

            if (!GivenName.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientGivenName).Append("=").Append(GivenName).Append(seperator);
            }

            if (!SurName.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientSurName).Append("=").Append(SurName).Append(seperator);
            }

            if (!MiddleName.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientMiddleName).Append("=").Append(MiddleName).Append(seperator);
            }

            if (!DateOfBirth.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientDateOfBirth).Append("=").Append(DateOfBirth).Append(seperator);
            }

            if (!Gender.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientGender).Append("=").Append(Gender).Append(seperator);
            }

            if (!SocialSecurityNumber.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientSocialSecurityNumber).Append("=").Append(SocialSecurityNumber).Append(seperator);
            }

            if (!TelephoneNumber.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientTelephoneNumber).Append("=").Append(TelephoneNumber).Append(seperator);
            }

            if (!StreetAddress.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientStreetAddress).Append("=").Append(StreetAddress).Append(seperator);
            }

            if (!PostalCode.IsNullOrWhiteSpace())
            {
                sb.Append(ContextStandard.Patient.PatientPostalCode).Append("=").Append(PostalCode).Append(seperator);
            }

            return(sb.ToString().TrimEnd(';', ' '));
        }
コード例 #28
0
        public void StreetAddressConstructorTest()
        {
            const string address = ";1894;beacon st;brookline;ma;usa;02445";
            var          target  = new StreetAddress(address);

            Assert.AreEqual("", target.ApartmentNumber);
            Assert.AreEqual("1894", target.House);
            Assert.AreEqual("beacon st", target.Street);
            Assert.AreEqual("brookline", target.City);
            Assert.AreEqual("MA", target.State);
            Assert.AreEqual("USA", target.Country);
            Assert.AreEqual("02445", target.Zipcode);
        }
コード例 #29
0
        public void ToDelimitedString_WithAllProperties_ReturnsCorrectlySequencedFields()
        {
            IType hl7Type = new StreetAddress
            {
                StreetOrMailingAddress = "1",
                StreetName             = "2",
                DwellingNumber         = "3"
            };

            string expected = "1^2^3";
            string actual   = hl7Type.ToDelimitedString();

            Assert.Equal(expected, actual);
        }
コード例 #30
0
 /// <summary>
 /// Create model object for street address from street object from data access layer.
 /// We need to define and create this to meet the unique format requirements for results that WebAPI will
 /// send to the client.Also future request of changes in format of accepetance wont affect the business and data access layer
 /// </summary>
 /// <param name="address"></param>
 /// <returns></returns>
 public Address Create(StreetAddress address)
 {
     if (address != null)
     {
         return(new Address
         {
             Id = address.Id,
             Street = address.Street,
             City = address.City,
             State = address.State,
             Zip = address.Zip
         });
     }
     return(null);
 }
コード例 #31
0
		private static void TruncateAddress(StreetAddress info)
		{
			if ((!string.IsNullOrEmpty(info.HouseNumber)) && (info.HouseNumber.Length > TxtHouseLength))
				info.HouseNumber = info.HouseNumber.Substring(0, TxtHouseLength);
			if ((!string.IsNullOrEmpty(info.Postfix)) && (info.Postfix.Length > TxtPostfixLength))
				info.Postfix = info.Postfix.Substring(0, TxtPostfixLength);
			if ((!string.IsNullOrEmpty(info.Prefix)) && (info.Prefix.Length > TxtPrefixLength))
				info.Prefix = info.Prefix.Substring(0, TxtPrefixLength);
			if ((!string.IsNullOrEmpty(info.SecondaryUnitDesignator)) && (info.SecondaryUnitDesignator.Length > TxtSecUDLength))
				info.SecondaryUnitDesignator = info.SecondaryUnitDesignator.Substring(0, TxtSecUDLength);
			if ((!string.IsNullOrEmpty(info.StreetName)) && (info.StreetName.Length > TxtStreetNLength))
				info.StreetName = info.StreetName.Substring(0, TxtStreetNLength);
			if ((!string.IsNullOrEmpty(info.StreetType)) && (info.StreetType.Length > TxtTypeLength))
				info.StreetType = info.StreetType.Substring(0, TxtTypeLength);
			if ((!string.IsNullOrEmpty(info.Suffix)) && (info.Suffix.Length > TxtSuffixLength))
				info.Suffix = info.Suffix.Substring(0, TxtSuffixLength);
		}
コード例 #32
0
		/// <summary>
		/// Parses input raw address
		/// </summary>
		/// <param name="rawAddress">Raw address</param>
		/// <returns>Parsed address object.</returns>
		public static StreetAddress Parse(string rawAddress)
		{
			StreetAddress address = new StreetAddress();
			address.FullRawStreetAddress = rawAddress;

			if (string.IsNullOrEmpty(rawAddress))
			{
				//no parse is required
				return address;
			}

			//remove the following
			//. \r\n @ , & ; ~ ` $ % ^ * ( ) _ + = | \ { } [ ] : ; " < > ? ! [ ]
			rawAddress = Regex.Replace(rawAddress, StreetAddressConstants.CharactersToRemoveRegex, "");

			//split and trim spaces..
			string[] addressParts = rawAddress.Split(new[] { StreetAddressConstants.AddressSeparator }, StringSplitOptions.RemoveEmptyEntries);
			for (int i = 0; i < addressParts.Length; i++)
			{
				addressParts[i] = addressParts[i].Trim().ToUpper();
			}

			if (addressParts.Length == 0)
				return address;

			//find streetnumber/predirectional
			int houseNumberIndex = -1;
			int preDirectIndex = -1;

			if (Regex.Match(addressParts[0], StreetAddressConstants.StreetNumberRegex).Success)
			{
				//logic for HW here
				houseNumberIndex = 0;
				address.HouseNumber = addressParts[0];

				if (addressParts.Length > 1)
				{
					string predir = GeographicDirectional.GetValue(addressParts[1]);
					if (predir != null)
					{
						preDirectIndex = 1;
						address.Prefix = predir;
					}
				}
			}
			else
			{
				string predir = GeographicDirectional.GetValue(addressParts[0]);
				if (predir != null)
				{
					preDirectIndex = 0;
					address.Prefix = predir;
				}
				if (addressParts.Length > 1)
				{
					if (Regex.Match(addressParts[1], StreetAddressConstants.StreetNumberRegex).Success)
					{
						houseNumberIndex = 1;
						address.HouseNumber = addressParts[1];
					}
				}
			}
			//start search from the following position
			int streetNameSearchIndex = Math.Max(houseNumberIndex, preDirectIndex) + 1;
			if (streetNameSearchIndex == -1)
				streetNameSearchIndex = 0;

			//search for streettype/postdirectional/SecUnitDesignator/UnitNumber
			int streetTypeIndex = -1;
			int postDirectIndex = -1;
			int secUnitDesigIndex = -1;
			int unitNumberIndex = -1;

			Dictionary<int, string> notUsedParts = new Dictionary<int, string>();

			for (int i = addressParts.Length - 1; i >= streetNameSearchIndex; i--)
			{
				string currentPart = addressParts[i];

				//postdirect search
				if (unitNumberIndex == -1)
				{
					//start search unit number from streetNameSearchIndex+1 position because of address like '27th street'
					if (i > streetNameSearchIndex)
					{
						if (Regex.Match(currentPart, StreetAddressConstants.UnitNumberRegex).Success)
						{
							address.Suffix = currentPart;
							unitNumberIndex = i;
							continue;
						}
					}
				}

				//postdirect search
				if (secUnitDesigIndex == -1)
				{
					string secUnitDesig = SecondaryUnitDesignator.GetValue(currentPart);
					if (secUnitDesig != null)
					{
						address.SecondaryUnitDesignator = secUnitDesig;
						secUnitDesigIndex = i;
						continue;
					}
				}

				//postdirect search
				if (postDirectIndex == -1)
				{
					string postDir = GeographicDirectional.GetValue(currentPart);
					if (postDir != null)
					{
						address.Postfix = postDir;
						postDirectIndex = i;
						continue;
					}
				}

				//streettype search
				if (streetTypeIndex == -1)
				{
					string streetType = StreetSuffix.GetValue(currentPart);
					if (streetType != null)
					{
						address.StreetType = streetType;
						streetTypeIndex = i;
						continue;
					}
				}

				notUsedParts[i] = currentPart;
			}

			//end index = index of first found address part - 1
			int streetNumberEndIndex = (new[] { streetTypeIndex, postDirectIndex, secUnitDesigIndex, unitNumberIndex, addressParts.Length }).Where(i => i != -1).Min();

			//fill street name from start to end index
			if (streetNameSearchIndex < streetNumberEndIndex)
			{
				address.StreetName = string.Join(StreetAddressConstants.AddressSeparator, addressParts, streetNameSearchIndex, streetNumberEndIndex - streetNameSearchIndex);
			}
			else
			{
				//concat street name from start search position to all not used parts up to street type, sec unit desig or unit number

				int missedPartsEndSearchIndex = (new[] { streetTypeIndex, secUnitDesigIndex, unitNumberIndex, addressParts.Length }).Where(i => i != -1).Min();
				if (missedPartsEndSearchIndex > 0)
				{
					if (streetNameSearchIndex < missedPartsEndSearchIndex)
					{
						List<int> streetNameNotUsedPartsIndexes = notUsedParts.Keys.Where(i => i >= streetNameSearchIndex && i < missedPartsEndSearchIndex).ToList();

						if (streetNameNotUsedPartsIndexes.Count > 0)
						{
							List<string> notUsedPartsList = new List<string>(streetNameNotUsedPartsIndexes.Count);
							foreach (int index in streetNameNotUsedPartsIndexes)
							{
								notUsedPartsList.Add(notUsedParts[index]);
							}

							address.StreetName = string.Join(StreetAddressConstants.AddressSeparator, notUsedPartsList.ToArray());
						}
					}
				}
			}

			return address;
		}
コード例 #33
0
ファイル: Form1.cs プロジェクト: rupeshkumar399/seemapcell
        private Address BuildAddress()
        {
            StreetAddress streetAddress = null;
              // country is required
              string country = tbCountry.Text.ToUpper();
              Address result = new Address(country);
              if (tbStreet.Text != null && !tbStreet.Text.Equals(string.Empty)) {
              Street street = new Street(tbStreet.Text);
            if (tbPlace.Text != null && !tbPlace.Text.Equals(string.Empty))  {
              Building building = new Building();
              building.BuildingName = tbPlace.Text;
              streetAddress = new StreetAddress(street, building);
            } else {
              streetAddress = new StreetAddress(street);
            }
            result.StreetAddress = streetAddress;
              }

              int numPlaces = 0;
              if (tbCity.Text != null && !tbCity.Text.Equals(string.Empty)) numPlaces++;
            if (tbState.Text != null && !tbState.Text.Equals(string.Empty)) numPlaces++;
              if (numPlaces > 0) {
            int iPlace = 0;
              Place[] cityState = new Place[numPlaces];
              if (tbCity.Text != null && !tbCity.Text.Equals(string.Empty)) {
                cityState[iPlace] = new Place(tbCity.Text, NamedPlaceClassification.Municipality);
              iPlace++;
            }
              if (tbState.Text != null && !tbState.Text.Equals(string.Empty)) {
                cityState[iPlace] = new Place(tbState.Text, NamedPlaceClassification.CountrySubdivision);
            }
              result.PlaceList = cityState;
              }
              if (tbPostalCode.Text != null && !tbPostalCode.Text.Equals(string.Empty)) {
              result.PrimaryPostalCode = tbPostalCode.Text;
              }
            return result;
        }