This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a commit to branch sonar
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git


The following commit(s) were added to refs/heads/sonar by this push:
     new 5224dde0 Better use of Optional
5224dde0 is described below

commit 5224dde0795a3df28597176c8b90d7552ba62cda
Author: Bertil Chapuis <[email protected]>
AuthorDate: Thu Jun 13 10:59:34 2024 +0200

    Better use of Optional
---
 .../baremaps/maplibre/expression/Expressions.java  |  3 +-
 .../baremaps/openstreetmap/state/StateReader.java  | 64 ++++++++++++++--------
 2 files changed, 43 insertions(+), 24 deletions(-)

diff --git 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/expression/Expressions.java
 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/expression/Expressions.java
index 72eae357..a3ce8b4c 100644
--- 
a/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/expression/Expressions.java
+++ 
b/baremaps-maplibre/src/main/java/org/apache/baremaps/maplibre/expression/Expressions.java
@@ -19,7 +19,6 @@ package org.apache.baremaps.maplibre.expression;
 
 
 
-import com.fasterxml.jackson.core.JacksonException;
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.Version;
@@ -452,7 +451,7 @@ public interface Expressions {
 
     @Override
     public Expression deserialize(JsonParser jsonParser,
-        DeserializationContext deserializationContext) throws IOException, 
JacksonException {
+        DeserializationContext deserializationContext) throws IOException {
       JsonNode node = jsonParser.getCodec().readTree(jsonParser);
       return deserializeJsonNode(node);
     }
diff --git 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/state/StateReader.java
 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/state/StateReader.java
index abc13f86..85ab571a 100644
--- 
a/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/state/StateReader.java
+++ 
b/baremaps-openstreetmap/src/main/java/org/apache/baremaps/openstreetmap/state/StateReader.java
@@ -111,7 +111,7 @@ public class StateReader implements Reader<State> {
    */
   @SuppressWarnings({"squid:S3776", "squid:S6541"})
   public Optional<State> getStateFromTimestamp(LocalDateTime timestamp) {
-    var upper = getState(Optional.empty());
+    var upper = getLatestState();
     if (upper.isEmpty()) {
       return Optional.empty();
     }
@@ -119,9 +119,9 @@ public class StateReader implements Reader<State> {
       return upper;
     }
     var lower = Optional.<State>empty();
-    var lowerId = Optional.of(0L);
+    var lowerId = 0L;
     while (lower.isEmpty()) {
-      lower = getState(lowerId);
+      lower = getLatestState(lowerId);
       if (lower.isPresent() && lower.get().timestamp().isAfter(timestamp)) {
         if (lower.get().sequenceNumber() == 0
             || lower.get().sequenceNumber() + 1 >= 
upper.get().sequenceNumber()) {
@@ -129,14 +129,14 @@ public class StateReader implements Reader<State> {
         }
         upper = lower;
         lower = Optional.empty();
-        lowerId = Optional.of(0L);
+        lowerId = 0L;
       }
       if (lower.isEmpty()) {
-        var newId = (lowerId.get() + upper.get().sequenceNumber()) / 2;
-        if (newId <= lowerId.get()) {
+        var newId = (lowerId + upper.get().sequenceNumber()) / 2;
+        if (newId <= lowerId) {
           return upper;
         }
-        lowerId = Optional.of(newId);
+        lowerId = newId;
       }
     }
     long baseSplitId;
@@ -154,18 +154,18 @@ public class StateReader implements Reader<State> {
           baseSplitId = upper.get().sequenceNumber() - 1;
         }
       }
-      var split = getState(Optional.of(baseSplitId));
+      var split = getLatestState(baseSplitId);
       if (split.isEmpty()) {
         var splitId = baseSplitId - 1;
         while (split.isEmpty() && splitId > lower.get().sequenceNumber()) {
-          split = getState(Optional.of(splitId));
+          split = getLatestState(splitId);
           splitId--;
         }
       }
       if (split.isEmpty()) {
         var splitId = baseSplitId + 1;
         while (split.isEmpty() && splitId < upper.get().sequenceNumber()) {
-          split = getState(Optional.of(splitId));
+          split = getLatestState(splitId);
           splitId++;
         }
       }
@@ -189,7 +189,7 @@ public class StateReader implements Reader<State> {
    * @param sequenceNumber the sequence number
    * @return the state
    */
-  public Optional<State> getState(Optional<Long> sequenceNumber) {
+  public Optional<State> getLatestState(long sequenceNumber) {
     for (int i = 0; i < retries + 1; i++) {
       try (var inputStream = getStateUrl(sequenceNumber).openStream()) {
         var state = new StateReader().read(inputStream);
@@ -201,6 +201,21 @@ public class StateReader implements Reader<State> {
     return Optional.empty();
   }
 
+  /**
+   * Get the latest state.
+   *
+   * @return the state
+   */
+  public Optional<State> getLatestState() {
+    try (var inputStream = getStateUrl().openStream()) {
+      var state = new StateReader().read(inputStream);
+      return Optional.of(state);
+    } catch (Exception e) {
+      logger.error("Error while reading state file", e);
+    }
+    return Optional.empty();
+  }
+
   /**
    * Get the URL of the state file corresponding to the given sequence number.
    *
@@ -208,17 +223,22 @@ public class StateReader implements Reader<State> {
    * @return the URL
    * @throws MalformedURLException if the URL is malformed
    */
-  public URL getStateUrl(Optional<Long> sequenceNumber) throws 
MalformedURLException {
-    if (sequenceNumber.isPresent()) {
-
-      var s = String.format("%09d", sequenceNumber.get());
-      var uri =
-          String.format("%s/%s/%s/%s.%s", replicationUrl, s.substring(0, 3), 
s.substring(3, 6),
-              s.substring(6, 9), "state.txt");
-      return URI.create(uri).toURL();
-    } else {
-      return new URL(replicationUrl + "/state.txt");
-    }
+  public URL getStateUrl(long sequenceNumber) throws MalformedURLException {
+    var s = String.format("%09d", sequenceNumber);
+    var uri =
+        String.format("%s/%s/%s/%s.%s", replicationUrl, s.substring(0, 3), 
s.substring(3, 6),
+            s.substring(6, 9), "state.txt");
+    return URI.create(uri).toURL();
+  }
+
+  /**
+   * Get the URL of the latest state file.
+   *
+   * @return the URL
+   * @throws MalformedURLException if the URL is malformed
+   */
+  public URL getStateUrl() throws MalformedURLException {
+    return new URL(replicationUrl + "/state.txt");
   }
 
   /**

Reply via email to