diff --git a/src/main/java/gov/nysenate/sage/dao/provider/DistrictShapefileDao.java b/src/main/java/gov/nysenate/sage/dao/provider/DistrictShapefileDao.java index 8129c1ec2..576d437a3 100644 --- a/src/main/java/gov/nysenate/sage/dao/provider/DistrictShapefileDao.java +++ b/src/main/java/gov/nysenate/sage/dao/provider/DistrictShapefileDao.java @@ -29,8 +29,7 @@ */ public class DistrictShapefileDao extends BaseDao { - private static final String SCHEMA = "districts"; // Move to app.properties - private static final String SRID = "4326"; + private static final String SCHEMA = "districts"; private final Logger logger = Logger.getLogger(DistrictShapefileDao.class); private QueryRunner run = getQueryRunner(); diff --git a/src/main/java/gov/nysenate/sage/dao/provider/GeoCacheDao.java b/src/main/java/gov/nysenate/sage/dao/provider/GeoCacheDao.java index 57a79ab1b..87f7ced94 100644 --- a/src/main/java/gov/nysenate/sage/dao/provider/GeoCacheDao.java +++ b/src/main/java/gov/nysenate/sage/dao/provider/GeoCacheDao.java @@ -55,7 +55,7 @@ public GeoCacheDao() { private final static String SQLFRAG_WHERE_CITY_ZIP_MATCH = "WHERE gc.street = '' \n" + "AND ((gc.zip5 = ? AND gc.zip5 != '') " + - " OR (? = '' AND gc.location = ? AND gc.location != '' AND gc.state = ?))"; + " OR (? = '' AND gc.zip5 = '' AND gc.location = ? AND gc.location != '' AND gc.state = ?))"; private final static String SQL_CACHE_HIT_BUILDING = String.format("%s%s", SQLFRAG_SELECT, SQLFRAG_WHERE_BUILDING_MATCH); private final static String SQL_CACHE_HIT_CITY_ZIP = String.format("%s%s", SQLFRAG_SELECT, SQLFRAG_WHERE_CITY_ZIP_MATCH); diff --git a/src/main/java/gov/nysenate/sage/dao/provider/StreetFileDao.java b/src/main/java/gov/nysenate/sage/dao/provider/StreetFileDao.java index daea7e3a9..676d53fb2 100644 --- a/src/main/java/gov/nysenate/sage/dao/provider/StreetFileDao.java +++ b/src/main/java/gov/nysenate/sage/dao/provider/StreetFileDao.java @@ -149,13 +149,17 @@ public List getDistrictStreetRangesByZip(String zip5) */ public List getDistrictStreetRanges(String street, List zip5List) { + /** Format the street name to aid in street file match */ + street = (street != null) ? getFormattedStreet(street, false) : ""; + + /** Short circuit the request under conditions where lots of data would be retrieved. */ if (zip5List == null || zip5List.isEmpty()) { return null; } - if (street == null) street = ""; - if (!street.isEmpty()) { - street = getFormattedStreet(street, false); + else if (zip5List.size() > 1 && street.isEmpty()) { + return null; } + String sql = "SELECT * " + "FROM streetfile " + @@ -212,7 +216,9 @@ public Map> getAllStandardDistrictMatches(List */ public Map> getAllStandardDistrictMatches(List streetList, List zip5List) { - if ((zip5List == null || zip5List.isEmpty()) && (streetList == null || streetList.isEmpty())) return null; // Short circuit on missing input + /** Short circuit on missing input */ + if ((zip5List == null || zip5List.isEmpty()) && (streetList == null || streetList.isEmpty())) return null; + String sqlTmpl = "SELECT DISTINCT %s::character varying AS code, '%s' AS type\n" + "FROM streetfile\n" + "WHERE (%s) AND (%s)"; diff --git a/src/main/java/gov/nysenate/sage/provider/DistrictShapefile.java b/src/main/java/gov/nysenate/sage/provider/DistrictShapefile.java index 56124cdb2..3ec0cc7a3 100644 --- a/src/main/java/gov/nysenate/sage/provider/DistrictShapefile.java +++ b/src/main/java/gov/nysenate/sage/provider/DistrictShapefile.java @@ -218,10 +218,9 @@ public DistrictResult getMultiMatchResult(GeocodedAddress geocodedAddress, Boole Address address = geocodedAddress.getAddress(); GeocodeQuality geocodeQuality = geocodedAddress.getGeocode().getQuality(); - Map> matches = new HashMap<>(); + Map> matches; List zip5List = new ArrayList<>(); List streetList = new ArrayList<>(); - String streetLineJson = null; logger.debug("Zip Provided: " + zipProvided); @@ -252,7 +251,7 @@ else if (!address.getCity().isEmpty()) { if (matches != null && !matches.isEmpty()) { /** Retrieve source map for city and zip match levels */ if (matchLevel.compareTo(DistrictMatchLevel.STREET) < 0) { - DistrictMap sourceMap = districtShapefileDao.getOverlapReferenceBoundary(DistrictType.ZIP, new HashSet(zip5List)); + DistrictMap sourceMap = districtShapefileDao.getOverlapReferenceBoundary(DistrictType.ZIP, new HashSet<>(zip5List)); districtInfo.setReferenceMap(sourceMap); } @@ -281,7 +280,7 @@ else if (matchType.equals(DistrictType.SENATE) && overlap != null && overlap.get resultStatus = ResultStatus.SUCCESS; districtedAddress.setDistrictInfo(districtInfo); districtedAddress.setDistrictMatchLevel(matchLevel); - logger.info("Resulting match level: " + matchLevel); + logger.info("District match level: " + matchLevel); } } } diff --git a/src/main/java/gov/nysenate/sage/service/district/DistrictServiceProvider.java b/src/main/java/gov/nysenate/sage/service/district/DistrictServiceProvider.java index 14b8de825..4195b9186 100644 --- a/src/main/java/gov/nysenate/sage/service/district/DistrictServiceProvider.java +++ b/src/main/java/gov/nysenate/sage/service/district/DistrictServiceProvider.java @@ -366,9 +366,11 @@ public List assignDistricts(final List geocoded public DistrictResult assignMultiMatchDistricts(GeocodedAddress geocodedAddress, Boolean zipProvided) { + Timestamp startTime = TimeUtil.currentTimestamp(); DistrictShapefile districtShapeFile = (DistrictShapefile) this.getInstance("shapefile"); DistrictResult districtResult = districtShapeFile.getMultiMatchResult(geocodedAddress, zipProvided); districtResult.setResultTime(new Timestamp(new Date().getTime())); + logger.info(String.format("Multi-match district assign in %d ms.", TimeUtil.getElapsedMs(startTime))); return districtResult; }