Skip to content

Commit

Permalink
Implement address formatter
Browse files Browse the repository at this point in the history
  • Loading branch information
tananaev committed May 7, 2015
1 parent 6fd8c11 commit 6a07fc4
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 0 deletions.
48 changes: 48 additions & 0 deletions src/org/traccar/geocode/Address.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright 2015 Anton Tananaev ([email protected])
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.geocode;

public class Address {

private String postcode;
public String getPostcode() { return postcode; }
public void setPostcode(String postcode) { this.postcode = postcode; }

private String country;
public String getCountry() { return country; }
public void setCountry(String country) { this.country = country; }

private String state;
public String getState() { return state; }
public void setState(String state) { this.state = state; }

private String district;
public String getDistrict() { return district; }
public void setDistrict(String district) { this.district = district; }

private String settlement;
public String getSettlement() { return settlement; }
public void setSettlement(String settlement) { this.settlement = settlement; }

private String street;
public String getStreet() { return street; }
public void setStreet(String street) { this.street = street; }

private String house;
public String getHouse() { return house; }
public void setHouse(String house) { this.house = house; }

}
74 changes: 74 additions & 0 deletions src/org/traccar/geocode/AddressFormat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* Copyright 2015 Anton Tananaev ([email protected])
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.traccar.geocode;

import java.text.FieldPosition;
import java.text.Format;
import java.text.ParsePosition;

/**
* Available parameters:
*
* %p - postcode
* %c - country
* %s - state
* %d - district
* %t - settlement (town)
* %r - street (road)
* %h - house
*
*/
public class AddressFormat extends Format {

private final String format;

public AddressFormat(String format) {
this.format = format;
}

private static String replace(String s, String key, String value) {
if (value != null) {
s = s.replace(key, value);
} else {
s = s.replaceAll("[, ]*" + key, "");
}
return s;
}

@Override
public StringBuffer format(Object o, StringBuffer stringBuffer, FieldPosition fieldPosition) {
Address address = (Address) o;
String result = format;

result = replace(result, "%p", address.getPostcode());
result = replace(result, "%c", address.getCountry());
result = replace(result, "%s", address.getState());
result = replace(result, "%d", address.getDistrict());
result = replace(result, "%t", address.getSettlement());
result = replace(result, "%r", address.getStreet());
result = replace(result, "%h", address.getHouse());

result = result.replaceAll("^[, ]*", "");

return stringBuffer.append(result);
}

@Override
public Address parseObject(String s, ParsePosition parsePosition) {
throw new UnsupportedOperationException();
}

}
32 changes: 32 additions & 0 deletions test/org/traccar/geocode/AddressFormatTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.traccar.geocode;

import org.junit.Assert;
import org.junit.Test;

public class AddressFormatTest {

private void test(Address address, String format, String expected) {
Assert.assertEquals(expected, new AddressFormat(format).format(address));
}

@Test
public void testFormat() {

Address address = new Address();
address.setCountry("NZ");
address.setSettlement("Auckland");
address.setStreet("Queen St");
address.setHouse("1A");

test(address, "%h %r %t %d %s %c %p", "1A Queen St Auckland NZ");
test(address, "%h %r %t", "1A Queen St Auckland");
test(address, "%h %r, %t", "1A Queen St, Auckland");
test(address, "%h %r, %t %p", "1A Queen St, Auckland");
test(address, "%t %d %c", "Auckland NZ");
test(address, "%t, %d, %c", "Auckland, NZ");
test(address, "%d %c", "NZ");
test(address, "%d, %c", "NZ");
test(address, "%p", "");
}

}

0 comments on commit 6a07fc4

Please sign in to comment.