You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2018/07/30 13:27:42 UTC
[3/5] johnzon git commit: Updated the logic based on comments
Updated the logic based on comments
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/9630ab7f
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/9630ab7f
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/9630ab7f
Branch: refs/heads/master
Commit: 9630ab7f6e5a77f4a0d531aef382e21ba23e1f70
Parents: 0989717
Author: Ravisankar Challa <ra...@qantas.com.au>
Authored: Mon Jul 30 22:47:33 2018 +1000
Committer: Ravisankar Challa <ra...@qantas.com.au>
Committed: Mon Jul 30 22:47:33 2018 +1000
----------------------------------------------------------------------
.../apache/johnzon/core/JsonPointerImpl.java | 21 ++++++++++----------
1 file changed, 10 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/johnzon/blob/9630ab7f/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
index f9aab6f..f73435c 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
@@ -31,6 +31,7 @@ import javax.json.spi.JsonProvider;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.regex.Pattern;
public class JsonPointerImpl implements JsonPointer {
@@ -39,6 +40,7 @@ public class JsonPointerImpl implements JsonPointer {
private final String jsonPointer;
private final List<String> referenceTokens = new ArrayList<>();
private final String lastReferenceToken;
+ private static final Pattern IS_NUMBER = Pattern.compile("\\d+");
/**
* Constructs and initializes a JsonPointer.
@@ -283,7 +285,7 @@ public class JsonPointerImpl implements JsonPointer {
public JsonObject remove(JsonObject target) {
validateRemove(target);
- return (JsonObject) remove(target, 1, referenceTokens.size() - 1, referenceTokens);
+ return (JsonObject) remove(target, 1, referenceTokens.size() - 1);
}
/**
@@ -299,7 +301,7 @@ public class JsonPointerImpl implements JsonPointer {
public JsonArray remove(JsonArray target) {
validateRemove(target);
- return (JsonArray) remove(target, 1, referenceTokens.size() - 1, referenceTokens);
+ return (JsonArray) remove(target, 1, referenceTokens.size() - 1);
}
String getJsonPointer() {
@@ -409,7 +411,7 @@ public class JsonPointerImpl implements JsonPointer {
currentPath.get(currentPath.size() - 1).equals(referenceTokens.get(referenceTokens.size() - 2));
}
- private JsonValue remove(JsonValue jsonValue, int currentPosition, int referencePosition, List<String> referenceTokens) {
+ private JsonValue remove(JsonValue jsonValue, int currentPosition, int referencePosition) {
if (jsonValue instanceof JsonObject) {
JsonObject jsonObject = (JsonObject) jsonValue;
JsonObjectBuilder objectBuilder = provider.createObjectBuilder();
@@ -419,7 +421,7 @@ public class JsonPointerImpl implements JsonPointer {
&& lastReferenceToken.equals(entry.getKey())) {
continue;
}
- objectBuilder.add(entry.getKey(), remove(entry.getValue(), currentPosition + 1, referencePosition, referenceTokens));
+ objectBuilder.add(entry.getKey(), remove(entry.getValue(), currentPosition + 1, referencePosition));
}
return objectBuilder.build();
} else if (jsonValue instanceof JsonArray) {
@@ -427,19 +429,16 @@ public class JsonPointerImpl implements JsonPointer {
JsonArrayBuilder arrayBuilder = provider.createArrayBuilder();
int arrayIndex = -1;
- if (referenceTokens.size() > currentPosition && referenceTokens.get(currentPosition).matches("\\d+")) {
- arrayIndex = getArrayIndex(referenceTokens.get(currentPosition), jsonArray, false);
+ if (currentPosition == referencePosition && IS_NUMBER.matcher(lastReferenceToken).matches()) {
+ arrayIndex = getArrayIndex(lastReferenceToken, jsonArray, false);
}
int jsonArraySize = jsonArray.size();
for (int i = 0; i < jsonArraySize; i++) {
if (i == arrayIndex) {
- if (currentPosition != referencePosition) {
- arrayBuilder.add(remove(jsonArray.get(i), currentPosition + 1, referencePosition, referenceTokens));
- }
- } else {
- arrayBuilder.add(jsonArray.get(i));
+ continue;
}
+ arrayBuilder.add(remove(jsonArray.get(i), currentPosition + 1, referencePosition));
}
return arrayBuilder.build();
}