diff --git a/verkeersdrukte/src/main/java/nl/bertriksikken/verkeersdrukte/ndw/NdwClient.java b/verkeersdrukte/src/main/java/nl/bertriksikken/verkeersdrukte/ndw/NdwClient.java index cb709b3..085a871 100644 --- a/verkeersdrukte/src/main/java/nl/bertriksikken/verkeersdrukte/ndw/NdwClient.java +++ b/verkeersdrukte/src/main/java/nl/bertriksikken/verkeersdrukte/ndw/NdwClient.java @@ -16,14 +16,16 @@ import java.util.Map; import java.util.Objects; -public final class NdwClient { +public final class NdwClient implements AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(NdwClient.class); private static final String USER_AGENT = "github.com/bertrik/verkeersdrukte"; + private final OkHttpClient httpClient; private final INdwApi restApi; - NdwClient(INdwApi restApi) { + NdwClient(OkHttpClient httpClient, INdwApi restApi) { + this.httpClient = Objects.requireNonNull(httpClient); this.restApi = Objects.requireNonNull(restApi); } @@ -34,7 +36,13 @@ public static NdwClient create(NdwConfig config) { Retrofit retrofit = new Retrofit.Builder().baseUrl(config.getUrl()) .addConverterFactory(ScalarsConverterFactory.create()).client(client).build(); INdwApi restApi = retrofit.create(INdwApi.class); - return new NdwClient(restApi); + return new NdwClient(client, restApi); + } + + @Override + public void close() { + httpClient.dispatcher().executorService().shutdown(); + httpClient.connectionPool().evictAll(); } private static okhttp3.Response addUserAgent(Interceptor.Chain chain) throws IOException { diff --git a/verkeersdrukte/src/main/java/nl/bertriksikken/verkeersdrukte/traffic/TrafficHandler.java b/verkeersdrukte/src/main/java/nl/bertriksikken/verkeersdrukte/traffic/TrafficHandler.java index fa917f3..b4fa9e4 100644 --- a/verkeersdrukte/src/main/java/nl/bertriksikken/verkeersdrukte/traffic/TrafficHandler.java +++ b/verkeersdrukte/src/main/java/nl/bertriksikken/verkeersdrukte/traffic/TrafficHandler.java @@ -72,6 +72,7 @@ private void schedule(Runnable action, Duration delay) { @Override public void stop() { + ndwClient.close(); executor.shutdownNow(); } diff --git a/verkeersdrukte/src/test/java/nl/bertriksikken/verkeersdrukte/ndw/RunNdwClient.java b/verkeersdrukte/src/test/java/nl/bertriksikken/verkeersdrukte/ndw/RunNdwClient.java index 2f1332c..1c2ff2a 100644 --- a/verkeersdrukte/src/test/java/nl/bertriksikken/verkeersdrukte/ndw/RunNdwClient.java +++ b/verkeersdrukte/src/test/java/nl/bertriksikken/verkeersdrukte/ndw/RunNdwClient.java @@ -19,16 +19,17 @@ public final class RunNdwClient { */ public static void main(String[] args) throws IOException { NdwConfig config = new NdwConfig(); - NdwClient client = NdwClient.create(config); - FileResponse response = client.getShapeFile(""); - byte[] contents = response.getContents(); - String etag = response.getEtag(); - LOG.info("Got file, {} bytes, etag: {}", contents.length, etag); - File file = new File(INdwApi.TRAFFIC_SPEED_SHAPEFILE); - Files.write(file.toPath(), contents); + try (NdwClient client = NdwClient.create(config)) { + FileResponse response = client.getShapeFile(""); + byte[] contents = response.getContents(); + String etag = response.getEtag(); + LOG.info("Got file, {} bytes, etag: {}", contents.length, etag); + File file = new File(INdwApi.TRAFFIC_SPEED_SHAPEFILE); + Files.write(file.toPath(), contents); - // get again, expect HTTP code xxx - FileResponse nextResponse = client.getShapeFile(etag); - LOG.info("Next response: {}", nextResponse); + // get again, expect HTTP code xxx + FileResponse nextResponse = client.getShapeFile(etag); + LOG.info("Next response: {}", nextResponse); + } } } diff --git a/verkeersdrukte/src/test/java/nl/bertriksikken/verkeersdrukte/traffic/RunShapeFileDownloader.java b/verkeersdrukte/src/test/java/nl/bertriksikken/verkeersdrukte/traffic/RunShapeFileDownloader.java index c785ff8..205e693 100644 --- a/verkeersdrukte/src/test/java/nl/bertriksikken/verkeersdrukte/traffic/RunShapeFileDownloader.java +++ b/verkeersdrukte/src/test/java/nl/bertriksikken/verkeersdrukte/traffic/RunShapeFileDownloader.java @@ -13,15 +13,16 @@ public final class RunShapeFileDownloader { public static void main(String[] args) throws IOException { NdwConfig ndwConfig = new NdwConfig(); - NdwClient ndwClient = NdwClient.create(ndwConfig); - File folder = new File("shapefile"); - folder.mkdir(); - ShapeFileDownloader downloader = new ShapeFileDownloader(folder, ndwClient); - if (downloader.download()) { - FeatureCollection featureCollection = downloader.getFeatureCollection(); - try (FileOutputStream fos = new FileOutputStream("shapefile.json")) { - ObjectMapper mapper = new ObjectMapper(); - mapper.writerWithDefaultPrettyPrinter().writeValue(fos, featureCollection); + try (NdwClient ndwClient = NdwClient.create(ndwConfig)) { + File folder = new File("shapefile"); + folder.mkdir(); + ShapeFileDownloader downloader = new ShapeFileDownloader(folder, ndwClient); + if (downloader.download()) { + FeatureCollection featureCollection = downloader.getFeatureCollection(); + try (FileOutputStream fos = new FileOutputStream("shapefile.json")) { + ObjectMapper mapper = new ObjectMapper(); + mapper.writerWithDefaultPrettyPrinter().writeValue(fos, featureCollection); + } } } }