diff --git a/src/main/java/me/bearns/fias/service/Downloader.java b/src/main/java/me/bearns/fias/service/Downloader.java new file mode 100644 index 0000000..addaf77 --- /dev/null +++ b/src/main/java/me/bearns/fias/service/Downloader.java @@ -0,0 +1,9 @@ +package me.bearns.fias.service; + +import java.io.InputStream; +import java.util.concurrent.Future; + +public interface Downloader { + + public Future download(String url); +} diff --git a/src/main/java/me/bearns/fias/service/DownloaderImpl.java b/src/main/java/me/bearns/fias/service/DownloaderImpl.java new file mode 100644 index 0000000..cb204d3 --- /dev/null +++ b/src/main/java/me/bearns/fias/service/DownloaderImpl.java @@ -0,0 +1,28 @@ +package me.bearns.fias.service; + +import java.io.InputStream; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +public class DownloaderImpl implements Downloader { + + private static final ExecutorService pool = Executors.newCachedThreadPool(); + + @Override + public Future download(String url) { + + CompletableFuture completableFuture + = new CompletableFuture<>(); + + pool.submit(() -> { + InputStream is = null; + //todo + + completableFuture.complete(is); + }); + + return completableFuture; + } +} diff --git a/src/main/java/me/bearns/fias/service/FiasUpdater.java b/src/main/java/me/bearns/fias/service/FiasUpdater.java index 50a6742..3c7243d 100644 --- a/src/main/java/me/bearns/fias/service/FiasUpdater.java +++ b/src/main/java/me/bearns/fias/service/FiasUpdater.java @@ -5,7 +5,10 @@ import me.bearns.fias.repository.FiasVersionRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.io.InputStream; import java.util.List; +import java.util.concurrent.Future; +import java.util.stream.Stream; @Service public class FiasUpdater implements Updater { @@ -14,7 +17,9 @@ public class FiasUpdater implements Updater { FiasVersionRepository versions; @Autowired - OnlineVersion downloadService; + OnlineVersion clientStub; + @Autowired + Downloader downloader; @Override public void update() { @@ -26,12 +31,12 @@ public class FiasUpdater implements Updater { final Long dbVersion = dbVersionObj.getVersionId(); - final long lastOnlineVersion = downloadService.getLastVersionId(); + final long lastOnlineVersion = clientStub.getLastVersionId(); if(lastOnlineVersion > dbVersion) { //need update - final List updates = downloadService.getVersionsAfter(dbVersion); + final List updates = clientStub.getVersionsAfter(dbVersion); if(updates != null && !updates.isEmpty()) { processUpdates(updates, false); @@ -45,7 +50,7 @@ public class FiasUpdater implements Updater { @Override public void reload(Long... regions) { - final List lastVersion = downloadService.getLastVersion(); + final List lastVersion = clientStub.getLastVersion(); if(lastVersion != null) { processUpdates(lastVersion, true, regions); } @@ -57,14 +62,9 @@ public class FiasUpdater implements Updater { updates.sort((o1, o2) -> Math.toIntExact(o1.getVersionId() - o2.getVersionId())); - //pre-fetch files if update multiple version - - for (FiasVersion update : updates) { + //just for test + final Stream> stream = updates.stream().map(u -> downloader.download(reloadFlag ? u.getFiasCompleteXmlUrl() : u.getFiasDeltaXmlUrl())); - final String url = reloadFlag ? update.getFiasCompleteXmlUrl() : update.getFiasDeltaXmlUrl(); - - //run update here - } } } \ No newline at end of file