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");
}
/**