package com.gisgraphy.street; import static com.gisgraphy.street.HouseNumberDeserializer.HOUSENUMBER_AND_LOCATION_SEPARATOR; import static com.gisgraphy.street.HouseNumberDeserializer.HOUSE_NUMBERS_SEPARATOR; import static com.gisgraphy.street.HouseNumberDeserializer.LAT_LON_SEPARATOR; import java.util.List; import java.util.Locale; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.gisgraphy.domain.geoloc.entity.HouseNumber; import edu.emory.mathcs.backport.java.util.Collections; public class HouseNumberSerializer { private Pattern clean_pattern = Pattern.compile(HouseNumberDeserializer.HOUSENUMBER_AND_LOCATION_SEPARATOR); private HouseNumberComparator comparator = new HouseNumberComparator(); /** * The logger */ protected static final Logger logger = LoggerFactory .getLogger(HouseNumberSerializer.class); public String serializeList(List<HouseNumber> houseNumberList){ if (houseNumberList==null || houseNumberList.size()==0){ return null; } Collections.sort(houseNumberList,comparator); StringBuffer sb = new StringBuffer(); for (HouseNumber houseNumber:houseNumberList){ if (houseNumber==null || houseNumber.getNumber()==null || houseNumber.getLocation()==null){ continue; } String serialized = serialize(houseNumber); if (serialized!=null){ sb.append(serialized) .append(HOUSE_NUMBERS_SEPARATOR); } } return sb.toString().trim(); } public String serialize(HouseNumber houseNumber){ if (houseNumber==null ){ return null; } StringBuffer sb = new StringBuffer(); if (houseNumber==null || houseNumber.getNumber()==null || houseNumber.getLocation()==null){ return null; } String cleaned = clean_pattern.matcher(houseNumber.getNumber()).replaceAll(""); sb.append(cleaned) .append(HOUSENUMBER_AND_LOCATION_SEPARATOR) .append(String.format(Locale.US, "%s", houseNumber.getLongitude().doubleValue())) .append(LAT_LON_SEPARATOR) .append(String.format(Locale.US, "%s", houseNumber.getLatitude().doubleValue())); return sb.toString().trim(); } }