Compare commits

..

No commits in common. '7afbe9ef92c0bee6fc69651ed5ae506f6075dc22' and '74b62aa4de7052eb3282cf01b6437eda9bc730bb' have entirely different histories.

  1. 24
      src/main/java/me/bearns/fias/domain/FiasVersion.java
  2. 30
      src/main/java/me/bearns/fias/service/FiasUpdater.java
  3. 35
      src/main/java/me/bearns/fias/util/RegionFilter.java
  4. 3
      src/main/resources/db/changelog/000_initial_schema.yaml

@ -32,9 +32,6 @@ public class FiasVersion {
@Column(name = "delta_xml_url")
protected String fiasDeltaXmlUrl;
@Column(name = "regions")
protected String regions;
public Long getVersionId() {
return versionId;
}
@ -50,25 +47,4 @@ public class FiasVersion {
public String getFiasDeltaXmlUrl() {
return fiasDeltaXmlUrl;
}
public String getRegions() {
return regions;
}
public void setRegions(Long ... regions) {
StringBuilder sb = new StringBuilder();
for(Long region : regions) {
if((region != null) && (region > 0) && (region < 100)){
if(sb.length() > 0) sb.append(",");
sb.append(String.format("%1$02d", region));
}
}
this.regions = sb.length() > 0 ? sb.toString() : null;
}
public void setRegions(String regions){
this.regions = regions;
}
}

@ -6,7 +6,6 @@ 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;
@ -15,7 +14,6 @@ import java.io.*;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.function.Predicate;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
@ -47,7 +45,6 @@ public class FiasUpdater implements Updater {
if(dbVersionObj != null) {
final Long dbVersion = dbVersionObj.getVersionId();
final String regions = dbVersionObj.getRegions();
final long lastOnlineVersion = clientStub.getLastVersionId();
@ -56,9 +53,6 @@ public class FiasUpdater implements Updater {
final List<FiasVersion> updates = clientStub.getVersionsAfter(dbVersion);
//set region filters for updates
if(regions != null) updates.forEach(u -> u.setRegions(regions));
if(updates != null && !updates.isEmpty()) {
processUpdates(updates, false);
}
@ -72,19 +66,14 @@ public class FiasUpdater implements Updater {
public void reload(Long... regions) throws CommonException {
final List<FiasVersion> lastVersion = clientStub.getLastVersion();
//exist and only one
if(lastVersion != null && lastVersion.size() == 1) {
//set region filter
lastVersion.get(0).setRegions(regions);
processUpdates(lastVersion, true);
if(lastVersion != null) {
processUpdates(lastVersion, true, regions);
}
}
//transaction from here
private void processUpdates(List<FiasVersion> updates, boolean reloadFlag) throws CommonException {
private void processUpdates(List<FiasVersion> updates, boolean reloadFlag, Long ... regions) throws CommonException {
if(reloadFlag) {
//todo reload flag impl
@ -101,20 +90,13 @@ public class FiasUpdater implements Updater {
//strict order
for (FiasVersion item : updates) {
//set region filter
final String regions = item.getRegions();
RegionFilter filter = null;
if(regions != null) {
filter = new RegionFilter(regions);
}
final File file;
try {
//wait for downloading
file = map.get(item).get();
//process update
processArchive(file, filter);
processArchive(file, regions);
//apply this version
versions.save(item);
@ -130,7 +112,7 @@ public class FiasUpdater implements Updater {
}
}
private void processArchive(File file, Predicate filter) throws CommonException {
private void processArchive(File file, Long ... regions) throws CommonException {
try(final ZipFile zipFile = new ZipFile(file)){
@ -144,7 +126,7 @@ public class FiasUpdater implements Updater {
if(config!=null) { //todo
try (InputStream is = zipFile.getInputStream(entry)) {
unmarshaller.process(is, config, filter);
unmarshaller.process(is, config, null);
}
}
}

@ -1,35 +0,0 @@
package me.bearns.fias.util;
import me.bearns.fias.domain.Addrobj;
import me.bearns.fias.domain.House;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;
public class RegionFilter implements Predicate {
private final Set<String> set = new HashSet<>();
public RegionFilter(String codes) {
if(codes!=null){
Arrays.stream(codes.split(",")).filter(Objects::nonNull).filter(s -> s.matches("^\\d{2}$")).forEach(set::add);
}
}
@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);
}
}

@ -21,6 +21,3 @@ databaseChangeLog:
- column:
name: delta_xml_url
type: varchar
- column:
name: regions
type: varchar
Loading…
Cancel
Save