diff --git a/src/main/java/fr/birdia/tile19/endpoint/rest/controller/TileExtenderController.java b/src/main/java/fr/birdia/tile19/endpoint/rest/controller/TileExtenderController.java index 6364176..fa62dc5 100644 --- a/src/main/java/fr/birdia/tile19/endpoint/rest/controller/TileExtenderController.java +++ b/src/main/java/fr/birdia/tile19/endpoint/rest/controller/TileExtenderController.java @@ -54,11 +54,19 @@ public ResponseEntity extendImage(@RequestBody TileExtenderRequestBody b isOpaque); double[] offsets = imageExtenderService.computeXYOffsets(lat, lon, x, y, z, server); + HttpHeaders headers = new HttpHeaders(); headers.add("x_offset", String.valueOf(offsets[0])); headers.add("y_offset", String.valueOf(offsets[1])); headers.add("pointer_x", String.valueOf(offsets[2])); headers.add("pointer_y", String.valueOf(offsets[3])); + if (server.equals("airbus")) { + String lastUpdatedAt = + imageExtenderService.getLastUpdatedAtAirbus() != null + ? imageExtenderService.getLastUpdatedAtAirbus() + : ""; + headers.add("airbusLastUpdatedAt", lastUpdatedAt); + } return ResponseEntity.ok().contentType(TEXT_PLAIN).headers(headers).body(base64Encoded); } diff --git a/src/main/java/fr/birdia/tile19/model/airbus/AirbusProperties.java b/src/main/java/fr/birdia/tile19/model/airbus/AirbusProperties.java index d99a000..34b147d 100644 --- a/src/main/java/fr/birdia/tile19/model/airbus/AirbusProperties.java +++ b/src/main/java/fr/birdia/tile19/model/airbus/AirbusProperties.java @@ -8,4 +8,5 @@ public class AirbusProperties { private String wmtsUrl; private String bearer; + private String updatedAt; } diff --git a/src/main/java/fr/birdia/tile19/service/ImageExtenderService.java b/src/main/java/fr/birdia/tile19/service/ImageExtenderService.java index ecd8181..691c306 100644 --- a/src/main/java/fr/birdia/tile19/service/ImageExtenderService.java +++ b/src/main/java/fr/birdia/tile19/service/ImageExtenderService.java @@ -39,6 +39,7 @@ public class ImageExtenderService { private Workers workers; private ImageDegraderService imageDegraderService; private AirbusPNEOService airbusPNEOService; + private AirbusProperties airbusProperties; public ImageExtenderService( TilesDownloaderService downloader, @@ -53,6 +54,10 @@ public ImageExtenderService( this.airbusPNEOService = airbusPNEOService; } + public String getLastUpdatedAtAirbus() { + return this.airbusProperties.getUpdatedAt(); + } + public double[] computeXYOffsets(double lat, double lon, int x, int y, int z, String server) { double[] pixelCoords = convertCoordinatesToPixel(lat, lon, x, y, z); return server.equals("geoserver_ign") || server.equals("airbus") @@ -146,8 +151,8 @@ public byte[] downloadTilesBytes( BufferedImage[][] results = new BufferedImage[y2 - y1][x2 - x1]; List> callables = new ArrayList<>(); final boolean isAirbusServer = AIRBUS_SERVER.equals(server); - final AirbusProperties airbusProperties = - isAirbusServer ? airbusPNEOService.retrieveAirbusWmtsLink(lat, lon) : null; + this.airbusProperties = + isAirbusServer ? airbusPNEOService.retrieveAirbusProperties(lat, lon) : null; for (int dy = y1; dy < y2; dy++) { for (int dx = x1; dx < x2; dx++) { diff --git a/src/main/java/fr/birdia/tile19/service/airbus/AirbusPNEOService.java b/src/main/java/fr/birdia/tile19/service/airbus/AirbusPNEOService.java index bed1d32..da1d263 100644 --- a/src/main/java/fr/birdia/tile19/service/airbus/AirbusPNEOService.java +++ b/src/main/java/fr/birdia/tile19/service/airbus/AirbusPNEOService.java @@ -68,7 +68,7 @@ public String authenticateAirbus() { throw new IllegalArgumentException("Unable to retrieve Airbus Access Token"); } - public AirbusProperties retrieveAirbusWmtsLink(double lat, double lon) { + public AirbusProperties retrieveAirbusProperties(double lat, double lon) { String bearerToken = authenticateAirbus(); Geometry geometry = convertLatLonToGeometry(lat, lon); AirbusRequestBody requestBody = @@ -95,7 +95,11 @@ public AirbusProperties retrieveAirbusWmtsLink(double lat, double lon) { String wmtsUrl = String.format( "%s/tiles/1.0.0/default/rgb/EPSG3857/", feature.getLinks().getWmts().getHref()); - return AirbusProperties.builder().wmtsUrl(wmtsUrl).bearer(bearerToken).build(); + return AirbusProperties.builder() + .wmtsUrl(wmtsUrl) + .updatedAt(feature.getProperties().getLastUpdateDate()) + .bearer(bearerToken) + .build(); } public Geometry convertLatLonToGeometry(double lat, double lon) { diff --git a/src/test/java/fr/birdia/tile19/ImageExtenderIT.java b/src/test/java/fr/birdia/tile19/ImageExtenderIT.java index fc6d76c..55606b5 100644 --- a/src/test/java/fr/birdia/tile19/ImageExtenderIT.java +++ b/src/test/java/fr/birdia/tile19/ImageExtenderIT.java @@ -23,7 +23,7 @@ public class ImageExtenderIT extends FacadeIT { @Autowired TileExtenderController tileExtenderController; - public TileExtenderRequestBody degraded_body() { + public TileExtenderRequestBody opaque_body() { return TileExtenderRequestBody.builder() .x(538969) .y(367435) @@ -168,7 +168,7 @@ public void extend_airbus_images_ok() throws Exception { @Test public void extend_not_full_HD_image_ok() throws Exception { - ResponseEntity response = tileExtenderController.extendImage(degraded_body()); + ResponseEntity response = tileExtenderController.extendImage(opaque_body()); HttpHeaders headers = response.getHeaders(); double xOffset = Double.parseDouble(headers.getFirst("x_offset")); double yOffset = Double.parseDouble(headers.getFirst("y_offset")); diff --git a/src/test/java/fr/birdia/tile19/unit/TilesDownloaderTest.java b/src/test/java/fr/birdia/tile19/unit/TilesDownloaderTest.java index 6bd1cfc..819e1a0 100644 --- a/src/test/java/fr/birdia/tile19/unit/TilesDownloaderTest.java +++ b/src/test/java/fr/birdia/tile19/unit/TilesDownloaderTest.java @@ -9,7 +9,6 @@ import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; - import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.web.client.RestTemplate;