From 1e40707633ae84bd0f308e84d27cf75453b99479 Mon Sep 17 00:00:00 2001 From: Terekhin Alexander Date: Mon, 17 Aug 2020 13:35:06 +0300 Subject: [PATCH] Filter by region codes --- .../me/bearns/fias/service/FiasUpdater.java | 5 ++- .../me/bearns/fias/util/RegionFilter.java | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/bearns/fias/util/RegionFilter.java diff --git a/src/main/java/me/bearns/fias/service/FiasUpdater.java b/src/main/java/me/bearns/fias/service/FiasUpdater.java index 10ffe99..cc0ee89 100644 --- a/src/main/java/me/bearns/fias/service/FiasUpdater.java +++ b/src/main/java/me/bearns/fias/service/FiasUpdater.java @@ -6,6 +6,7 @@ import me.bearns.fias.exceptions.DownloadException; import me.bearns.fias.exceptions.UnzipException; import me.bearns.fias.repository.FiasVersionRepository; import me.bearns.fias.util.Catalog; +import me.bearns.fias.util.RegionFilter; import me.bearns.fias.util.UnmarshallerParameters; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -122,11 +123,13 @@ public class FiasUpdater implements Updater { final ZipEntry entry = entries.nextElement(); + final RegionFilter filter = regions != null ? new RegionFilter(regions) : null; + final UnmarshallerParameters config = catalog.getByPrefix(entry.getName()); if(config!=null) { //todo try (InputStream is = zipFile.getInputStream(entry)) { - unmarshaller.process(is, config, null); + unmarshaller.process(is, config, filter); } } } diff --git a/src/main/java/me/bearns/fias/util/RegionFilter.java b/src/main/java/me/bearns/fias/util/RegionFilter.java new file mode 100644 index 0000000..16fe279 --- /dev/null +++ b/src/main/java/me/bearns/fias/util/RegionFilter.java @@ -0,0 +1,38 @@ +package me.bearns.fias.util; + +import me.bearns.fias.domain.Addrobj; +import me.bearns.fias.domain.House; + +import java.util.HashSet; +import java.util.Set; +import java.util.function.Predicate; + +public class RegionFilter implements Predicate { + + private final Set set = new HashSet<>(); + + public RegionFilter(Long[] codes) { + for (Long code : codes){ + if(code>0L && code<100L) { + set.add(String.format("%1$02d", code)); + } else { + //todo + //log.warn("Element out of range: {}", code); + } + } + } + + @Override + public boolean test(Object o) { + + String regioncode = null; + + if(o instanceof Addrobj){ + regioncode = ((Addrobj) o).regioncode; + } else if(o instanceof House){ + regioncode = ((House) o).regioncode; + } + + return regioncode != null && set.contains(regioncode); + } +}