diff --git a/src/main/java/com/smartystreets/api/international_autocomplete/Client.java b/src/main/java/com/smartystreets/api/international_autocomplete/Client.java index ffd7602..5ab8df1 100644 --- a/src/main/java/com/smartystreets/api/international_autocomplete/Client.java +++ b/src/main/java/com/smartystreets/api/international_autocomplete/Client.java @@ -51,6 +51,9 @@ private Request buildRequest(Lookup lookup) { } request.putParameter("include_only_locality", lookup.getLocality()); request.putParameter("include_only_postal_code", lookup.getPostalCode()); + if (lookup.getLanguage() != null) { + request.putParameter("language", lookup.getLanguage().getName()); + } return request; } diff --git a/src/main/java/com/smartystreets/api/international_autocomplete/LanguageMode.java b/src/main/java/com/smartystreets/api/international_autocomplete/LanguageMode.java new file mode 100644 index 0000000..b1a2b7d --- /dev/null +++ b/src/main/java/com/smartystreets/api/international_autocomplete/LanguageMode.java @@ -0,0 +1,21 @@ +package com.smartystreets.api.international_autocomplete; + +/** + * When not set, the output language will match the default for the country. When set to NATIVE the
+ * results will always be in the language of the output country whenever possible. When set to LATIN
+ * the results will always be provided using the Latin character set, with accents and other diacritics removed. + *

Note: For French diacritics in Canada, you must specify NATIVE.

+ */ +public enum LanguageMode { + NATIVE("native"), LATIN("latin"); + + private final String name; + + LanguageMode(String name){ + this.name = name; + } + + public String getName(){ + return name; + } +} diff --git a/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java b/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java index 182dbd0..66bfe81 100644 --- a/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java +++ b/src/main/java/com/smartystreets/api/international_autocomplete/Lookup.java @@ -1,5 +1,6 @@ package com.smartystreets.api.international_autocomplete; + /** * In addition to holding all of the input data for this lookup, this class also
* will contain the result of the lookup after it comes back from the API. @@ -22,6 +23,7 @@ public class Lookup { private boolean geolocation; private String locality; private String postalCode; + private LanguageMode language; //endregion @@ -87,6 +89,10 @@ public String getPostalCode() { return this.postalCode; } + public LanguageMode getLanguage() { + return this.language; + } + //endregion //region [ Setters ] @@ -126,5 +132,9 @@ public void setPostalCode(String postalCode) { this.postalCode = postalCode; } + public void setLanguage(LanguageMode language) { + this.language = language; + } + //endregion } diff --git a/src/main/java/examples/InternationalAutocompleteExample.java b/src/main/java/examples/InternationalAutocompleteExample.java index 85ed4f7..23a3e96 100644 --- a/src/main/java/examples/InternationalAutocompleteExample.java +++ b/src/main/java/examples/InternationalAutocompleteExample.java @@ -6,6 +6,7 @@ import com.smartystreets.api.international_autocomplete.Client; import com.smartystreets.api.international_autocomplete.Lookup; import com.smartystreets.api.international_autocomplete.Candidate; +import com.smartystreets.api.international_autocomplete.LanguageMode; import java.io.IOException; @@ -26,6 +27,7 @@ public static void main(String[] args) { lookup.setLocality("Paris"); lookup.setMaxGroupResults(50); lookup.setGeolocation(true); + lookup.setLanguage(LanguageMode.NATIVE); client.send(lookup); diff --git a/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java b/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java index 52a1027..d38cebc 100644 --- a/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java +++ b/src/test/java/com/smartystreets/api/international_autocomplete/ClientTest.java @@ -52,13 +52,14 @@ public void testSendingSingleFullyPopulatedLookup() throws Exception { URLPrefixSender sender = new URLPrefixSender("http://localhost/", capturingSender); FakeSerializer serializer = new FakeSerializer(new Result()); Client client = new Client(sender, serializer); - String expectedURL = "http://localhost/?country=1&search=2&max_results=10&max_group_results=100&include_only_locality=4&include_only_postal_code=5"; + String expectedURL = "http://localhost/?country=1&search=2&max_results=10&max_group_results=100&include_only_locality=4&include_only_postal_code=5&language=native"; Lookup lookup = new Lookup(); lookup.setCountry("1"); lookup.setSearch("2"); lookup.setMaxResults(10); lookup.setLocality("4"); lookup.setPostalCode("5"); + lookup.setLanguage(LanguageMode.NATIVE); client.send(lookup); @@ -93,6 +94,47 @@ public void testSendingLookupWithCustomMaxGroupResults() throws Exception { assertTrue(capturingSender.getRequest().getUrl().contains("max_group_results=50")); } + @Test + public void testSendingLookupWithNativeLanguage() throws Exception { + RequestCapturingSender capturingSender = new RequestCapturingSender(); + URLPrefixSender sender = new URLPrefixSender("http://localhost/", capturingSender); + FakeSerializer serializer = new FakeSerializer(new Result()); + Client client = new Client(sender, serializer); + Lookup lookup = new Lookup("1"); + lookup.setLanguage(LanguageMode.NATIVE); + + client.send(lookup); + + assertTrue(capturingSender.getRequest().getUrl().contains("language=native")); + } + + @Test + public void testSendingLookupWithLatinLanguage() throws Exception { + RequestCapturingSender capturingSender = new RequestCapturingSender(); + URLPrefixSender sender = new URLPrefixSender("http://localhost/", capturingSender); + FakeSerializer serializer = new FakeSerializer(new Result()); + Client client = new Client(sender, serializer); + Lookup lookup = new Lookup("1"); + lookup.setLanguage(LanguageMode.LATIN); + + client.send(lookup); + + assertTrue(capturingSender.getRequest().getUrl().contains("language=latin")); + } + + @Test + public void testSendingLookupWithUnsetLanguageOmitsParameter() throws Exception { + RequestCapturingSender capturingSender = new RequestCapturingSender(); + URLPrefixSender sender = new URLPrefixSender("http://localhost/", capturingSender); + FakeSerializer serializer = new FakeSerializer(new Result()); + Client client = new Client(sender, serializer); + Lookup lookup = new Lookup("1"); + + client.send(lookup); + + assertFalse(capturingSender.getRequest().getUrl().contains("language")); + } + @Test public void testDefaultValues() { Lookup lookup = new Lookup();