package me.osm.gazetter.addresses.sorters; import java.util.HashMap; import java.util.Map; import me.osm.gazetter.addresses.AddrLevelsComparator; import me.osm.gazetter.addresses.AddressesLevelsMatcher; import me.osm.gazetter.addresses.Constants; import org.apache.commons.lang3.ObjectUtils; import org.json.JSONObject; /** * Sorts addresses parts in order: Street, House, City, Country. * */ public class StreetHNCityComparator implements AddrLevelsComparator { @Override public int compare(JSONObject o1, JSONObject o2) { Integer i1 = order.get(o1.getString(AddressesLevelsMatcher.ADDR_LVL)); Integer i2 = order.get(o2.getString(AddressesLevelsMatcher.ADDR_LVL)); return ObjectUtils.compare(i1, i2); } private static final Map<String, Integer> order = new HashMap<>(); private static final Map<String, Integer> type2size = Constants.defaultType2size; static { int i = 1; order.put("postcode", i++); order.put("street", i++); order.put("hn", i++); order.put("letter", i++); order.put("place:quarter", i++); order.put("place:neighbourhood", i++); order.put("place:suburb", i++); order.put("boundary:10", i++); order.put("place:allotments", i++); order.put("place:locality", i); order.put("place:isolated_dwelling", i); order.put("place:village", i); order.put("place:hamlet", i); order.put("place:town", i); order.put("place:city", i); i++; order.put("boundary:8", i++); order.put("boundary:7", i++); order.put("boundary:6", i++); order.put("boundary:5", i++); order.put("boundary:4", i++); order.put("boundary:3", i++); order.put("boundary:2", i++); } @Override public int getLVLSize(String lelvel) { return type2size.get(lelvel); } @Override public boolean supports(String lelvel) { return order.containsKey(lelvel); } }