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();
         }