Skip to content

Commit 792836f

Browse files
committed
fix time:now placeholder truncation
* an exception was thrown regarding special regex char "[" used in "split" * also fixed that fallback DittoJsonException for unknown exceptions could not be deserialized
1 parent 0d04168 commit 792836f

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

base/model/src/main/java/org/eclipse/ditto/base/model/signals/GlobalErrorRegistry.java

+12-4
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@
1818
import javax.annotation.Nullable;
1919
import javax.annotation.concurrent.Immutable;
2020

21+
import org.eclipse.ditto.base.model.exceptions.DittoJsonException;
22+
import org.eclipse.ditto.base.model.exceptions.DittoRuntimeException;
23+
import org.eclipse.ditto.base.model.headers.DittoHeaders;
24+
import org.eclipse.ditto.base.model.json.JsonParsableException;
2125
import org.eclipse.ditto.json.JsonFieldSelectorInvalidException;
2226
import org.eclipse.ditto.json.JsonKeyInvalidException;
2327
import org.eclipse.ditto.json.JsonMissingFieldException;
2428
import org.eclipse.ditto.json.JsonObject;
2529
import org.eclipse.ditto.json.JsonParseException;
2630
import org.eclipse.ditto.json.JsonPointerInvalidException;
27-
import org.eclipse.ditto.base.model.exceptions.DittoJsonException;
28-
import org.eclipse.ditto.base.model.exceptions.DittoRuntimeException;
29-
import org.eclipse.ditto.base.model.headers.DittoHeaders;
30-
import org.eclipse.ditto.base.model.json.JsonParsableException;
31+
import org.eclipse.ditto.json.JsonRuntimeException;
3132

3233
/**
3334
* Contains all strategies to deserialize subclasses of {@link org.eclipse.ditto.base.model.exceptions.DittoRuntimeException} from a combination of
@@ -103,6 +104,13 @@ private static final class DittoJsonExceptionRegistry {
103104
private final Map<String, JsonParsable<DittoRuntimeException>> dittoJsonParseRegistries = new HashMap<>();
104105

105106
private DittoJsonExceptionRegistry() {
107+
dittoJsonParseRegistries.put(DittoJsonException.FALLBACK_ERROR_CODE,
108+
(jsonObject, dittoHeaders) -> new DittoJsonException(
109+
JsonRuntimeException.newBuilder(DittoJsonException.FALLBACK_ERROR_CODE)
110+
.message(getMessage(jsonObject))
111+
.description(getDescription(jsonObject))
112+
.build(), dittoHeaders));
113+
106114
dittoJsonParseRegistries.put(JsonParseException.ERROR_CODE,
107115
(jsonObject, dittoHeaders) -> new DittoJsonException(
108116
JsonParseException.newBuilder()

placeholders/src/main/java/org/eclipse/ditto/placeholders/ImmutableTimePlaceholder.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,9 @@ private boolean isValidTimeRange(final String timeRangeSuffix) {
118118
final String durationWithTruncate = timeRangeSuffix.substring(1);
119119
final String durationString;
120120
if (durationWithTruncate.contains(TRUNCATE_START) && durationWithTruncate.contains(TRUNCATE_END)) {
121-
final String[] durationStringAndTruncateString = durationWithTruncate.split(TRUNCATE_START, 2);
122-
durationString = durationStringAndTruncateString[0];
123-
final String truncateString = durationStringAndTruncateString[1];
124-
if (!isValidTruncateStatement(truncateString.substring(0, truncateString.lastIndexOf(TRUNCATE_END)))) {
121+
durationString = durationWithTruncate
122+
.substring(0, durationWithTruncate.indexOf(TRUNCATE_START));
123+
if (!isValidTruncation(durationWithTruncate)) {
125124
return false;
126125
}
127126
} else {
@@ -133,11 +132,19 @@ private boolean isValidTimeRange(final String timeRangeSuffix) {
133132
} catch (final Exception e) {
134133
return false;
135134
}
135+
} else if (timeRangeSuffix.contains(TRUNCATE_START) && timeRangeSuffix.contains(TRUNCATE_END)) {
136+
return isValidTruncation(timeRangeSuffix);
136137
} else {
137138
return false;
138139
}
139140
}
140141

142+
private boolean isValidTruncation(final String durationWithTruncate) {
143+
final String truncateString = durationWithTruncate
144+
.substring(durationWithTruncate.indexOf(TRUNCATE_START) + 1);
145+
return isValidTruncateStatement(truncateString.substring(0, truncateString.lastIndexOf(TRUNCATE_END)));
146+
}
147+
141148
private boolean isValidTruncateStatement(final String truncateString) {
142149
return DittoDuration.DittoTimeUnit.forSuffix(truncateString).isPresent();
143150
}

0 commit comments

Comments
 (0)