From faea7eae1b83db332ea41d28682cd0a40f14b2cd Mon Sep 17 00:00:00 2001
From: Robert Scott <code@humanleg.org.uk>
Date: Sat, 11 Nov 2017 21:23:44 +0000
Subject: [PATCH 4/6] TileLoader: add hasOutstandingTasks() method to interface

supplying a default implementation to make the transition easier for
project-external implementations to adopt - there should be no hard,
immediate requirement to add an implementation for this method.
---
 src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java        |  5 +++++
 .../openstreetmap/gui/jmapviewer/interfaces/TileLoader.java    | 10 ++++++++++
 2 files changed, 15 insertions(+)

diff --git a/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java b/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
index 3942dd647..b1dd1b64a 100644
--- a/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
+++ b/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
@@ -177,6 +177,11 @@ public class OsmTileLoader implements TileLoader {
     }
 
     @Override
+    public boolean hasOutstandingTasks() {
+        return jobDispatcher.getTaskCount() > jobDispatcher.getCompletedTaskCount();
+    }
+
+    @Override
     public void cancelOutstandingTasks() {
         jobDispatcher.getQueue().clear();
     }
diff --git a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileLoader.java b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileLoader.java
index dcae01773..bc7f4d57e 100644
--- a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileLoader.java
+++ b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileLoader.java
@@ -26,4 +26,14 @@ public interface TileLoader {
      * to loading = false / loaded = false
      */
     void cancelOutstandingTasks();
+
+    /**
+     * @return whether this {@link TileLoader} has tasks which have not completed. This answer may well be
+     * "approximate" given that many implementations will be using mechanisms where a queue's state can change
+     * during the computation.
+     */
+    default boolean hasOutstandingTasks() {
+        // default implementation supplied just to make transition easier for external implementors
+        throw new UnsupportedOperationException("Not implemented");
+    }
 }
-- 
2.11.0

