diff --git a/pom.xml b/pom.xml
index b97fc4f..5037c4f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.boot
spring-boot-starter-parent
- 2.2.2.RELEASE
+ 2.2.6.RELEASE
me.bearns
diff --git a/src/main/java/me/bearns/fias/config/ApplicationConfig.java b/src/main/java/me/bearns/fias/config/ApplicationConfig.java
index 66f6bd0..5a07903 100644
--- a/src/main/java/me/bearns/fias/config/ApplicationConfig.java
+++ b/src/main/java/me/bearns/fias/config/ApplicationConfig.java
@@ -60,5 +60,4 @@ class ApplicationConfig {
return txManager;
}
-
}
\ No newline at end of file
diff --git a/src/main/java/me/bearns/fias/service/FiasUpdater.java b/src/main/java/me/bearns/fias/service/FiasUpdater.java
index 7018dfe..50a6742 100644
--- a/src/main/java/me/bearns/fias/service/FiasUpdater.java
+++ b/src/main/java/me/bearns/fias/service/FiasUpdater.java
@@ -3,9 +3,10 @@ package me.bearns.fias.service;
import me.bearns.fias.domain.FiasVersion;
import me.bearns.fias.repository.FiasVersionRepository;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
+import java.util.List;
+
@Service
public class FiasUpdater implements Updater {
@@ -18,11 +19,52 @@ public class FiasUpdater implements Updater {
@Override
public void update() {
- long lastVersion = downloadService.getLastVersionId();
-
//Max value
- FiasVersion dbVersion = versions.findTopByOrderByVersionIdDesc();
+ FiasVersion dbVersionObj = versions.findTopByOrderByVersionIdDesc();
+
+ if(dbVersionObj != null) {
+
+ final Long dbVersion = dbVersionObj.getVersionId();
+
+ final long lastOnlineVersion = downloadService.getLastVersionId();
+
+ if(lastOnlineVersion > dbVersion) {
+ //need update
+
+ final List updates = downloadService.getVersionsAfter(dbVersion);
+
+ if(updates != null && !updates.isEmpty()) {
+ processUpdates(updates, false);
+ }
+ }
+ }
+
+ System.out.println("update() Ok");
+ }
+
+ @Override
+ public void reload(Long... regions) {
+
+ final List lastVersion = downloadService.getLastVersion();
+ if(lastVersion != null) {
+ processUpdates(lastVersion, true, regions);
+ }
+
+ }
+
+ //transaction from here
+ private void processUpdates(List updates, boolean reloadFlag, Long ... regions) {
+
+ updates.sort((o1, o2) -> Math.toIntExact(o1.getVersionId() - o2.getVersionId()));
+
+ //pre-fetch files if update multiple version
+
+ for (FiasVersion update : updates) {
+
+ final String url = reloadFlag ? update.getFiasCompleteXmlUrl() : update.getFiasDeltaXmlUrl();
+
+ //run update here
+ }
- System.out.println("get Ok");
}
}
\ No newline at end of file
diff --git a/src/main/java/me/bearns/fias/service/OnlineVersion.java b/src/main/java/me/bearns/fias/service/OnlineVersion.java
index 9fee14f..0944475 100644
--- a/src/main/java/me/bearns/fias/service/OnlineVersion.java
+++ b/src/main/java/me/bearns/fias/service/OnlineVersion.java
@@ -1,6 +1,14 @@
package me.bearns.fias.service;
+import me.bearns.fias.domain.FiasVersion;
+
+import java.util.List;
+
public interface OnlineVersion {
long getLastVersionId();
+
+ List getVersionsAfter(long version);
+
+ List getLastVersion();
}
diff --git a/src/main/java/me/bearns/fias/service/SOAPClient.java b/src/main/java/me/bearns/fias/service/SOAPClient.java
index e2858a0..41c43e6 100644
--- a/src/main/java/me/bearns/fias/service/SOAPClient.java
+++ b/src/main/java/me/bearns/fias/service/SOAPClient.java
@@ -1,6 +1,8 @@
package me.bearns.fias.service;
+import me.bearns.fias.domain.FiasVersion;
import org.springframework.stereotype.Component;
+import ru.nalog.fias.ArrayOfDownloadFileInfo;
import ru.nalog.fias.DownloadFileInfo;
import ru.nalog.fias.IDownloadService;
import ru.nalog.fias.IDownloadService_Service;
@@ -13,7 +15,10 @@ import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import static javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY;
@@ -52,11 +57,60 @@ public class SOAPClient implements OnlineVersion {
@Override
public long getLastVersionId() {
+ FiasVersion last = getLast();
+ if(last != null) return last.getVersionId();
+
+ return 0;
+ }
+
+ @Override
+ public List getVersionsAfter(long version) {
+
+ final ArrayOfDownloadFileInfo allDownloadFileInfo = downloadService.getAllDownloadFileInfo();
+
+ if(allDownloadFileInfo != null) {
+
+ final List fileInfos = allDownloadFileInfo.getDownloadFileInfo();
+
+ if(fileInfos != null) {
+ return fileInfos.stream()
+ .filter(f -> f.getVersionId() > version)
+ .map(f -> new FiasVersion(f.getVersionId(),f.getTextVersion(),f.getFiasCompleteXmlUrl(),f.getFiasDeltaXmlUrl()))
+ .collect(Collectors.toList());
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public List getLastVersion() {
+
+ final FiasVersion last = getLast();
+
+ if(last != null) {
+
+ final ArrayList list = new ArrayList<>(1);
+ list.add(last);
+
+ return list;
+ }
+
+ return null;
+ }
+
+ private FiasVersion getLast() {
+
DownloadFileInfo fileInfo = downloadService.getLastDownloadFileInfo();
- if(fileInfo != null) return fileInfo.getVersionId();
+ if(fileInfo !=null) {
- return 0;
+ //TODO check null in getVersionId()
+
+ return new FiasVersion(fileInfo.getVersionId(), fileInfo.getTextVersion(), fileInfo.getFiasCompleteXmlUrl(), fileInfo.getFiasDeltaXmlUrl());
+ }
+
+ return null;
}
private static void setRedirect(final Object bindingProvider) {
diff --git a/src/main/java/me/bearns/fias/service/Updater.java b/src/main/java/me/bearns/fias/service/Updater.java
index 85c7697..44ed4a0 100644
--- a/src/main/java/me/bearns/fias/service/Updater.java
+++ b/src/main/java/me/bearns/fias/service/Updater.java
@@ -7,4 +7,10 @@ public interface Updater {
* Run online update for fias database
*/
public void update();
+
+ /**
+ * Load or reload database for selected regions
+ * @param regions
+ */
+ public void reload(Long ... regions);
}
diff --git a/src/test/java/me/bearns/fias/VersionRepositoryTests.java b/src/test/java/me/bearns/fias/VersionRepositoryTests.java
index 0080cd2..dd99ca8 100644
--- a/src/test/java/me/bearns/fias/VersionRepositoryTests.java
+++ b/src/test/java/me/bearns/fias/VersionRepositoryTests.java
@@ -36,7 +36,7 @@ public class VersionRepositoryTests {
private FiasVersionRepository repository;
@Test
- public void testFindById() {
+ public void testPersist() {
FiasVersion fiasVersion = new FiasVersion(1L, "last", "c", "d");
entityManager.persist(fiasVersion);
@@ -48,14 +48,15 @@ public class VersionRepositoryTests {
}
@Test
- public void testSve() {
+ public void testSave() {
FiasVersion fiasVersion = new FiasVersion(1L, "last", "c", "d");
repository.save(fiasVersion);
+ repository.flush();
Optional byId = repository.findById(fiasVersion.getVersionId());
FiasVersion version = byId.get();
- assertThat(version).extracting(FiasVersion::getVersionId).isEqualTo(fiasVersion.getVersionId());
+ assertThat(version).extracting(FiasVersion::getFiasDeltaXmlUrl).isEqualTo(fiasVersion.getFiasDeltaXmlUrl());
}
}