private JsonNode addToObject(final JsonPointer path, final JsonNode node) { final JsonNode ret = node.deepCopy(); final ObjectNode target = (ObjectNode) path.parent().get(ret); target.put(Iterables.getLast(path).getToken().getRaw(), value); return ret; } }
/** * Apply a migrator to the node at the current pointer * * <p>It is assumed here that the current node is a JSON Object.</p> * * @param migrator the migrator to apply * @throws SwaggerMigrationException current node is not an object, or the * migrator failed to apply */ public void applyMigrator(final SwaggerMigrator migrator) throws SwaggerMigrationException { final JsonPointer parent = currentPointer.parent(); if (!parent.get(baseNode).isObject()) { throw new SwaggerMigrationException(); } final ObjectNode parentNode = (ObjectNode) parent.get(baseNode); final JsonNode patched = migrator.migrate(currentNode); if (currentPointer.isEmpty()) { baseNode = currentNode = patched; return; } final String memberName = Iterables.getLast(currentPointer) .getToken().getRaw(); parentNode.put(memberName, patched); }
private JsonNode addToArray(final JsonPointer path, final JsonNode node) throws JsonPatchException { final JsonNode ret = node.deepCopy(); final ArrayNode target = (ArrayNode) path.parent().get(ret); final TokenResolver<JsonNode> token = Iterables.getLast(path); if (token.getToken().equals(LAST_ARRAY_ELEMENT)) { target.add(value); return ret; } final int size = target.size(); final int index; try { index = Integer.parseInt(token.toString()); } catch (NumberFormatException ignored) { throw new JsonPatchException(BUNDLE.getMessage( "jsonPatch.notAnIndex")); } if (index < 0 || index > size) throw new JsonPatchException(BUNDLE.getMessage( "jsonPatch.noSuchIndex")); target.insert(index, value); return ret; }
@Override public JsonNode apply(final JsonNode node) throws JsonPatchException { if (path.isEmpty()) return MissingNode.getInstance(); if (path.path(node).isMissingNode()) throw new JsonPatchException(BUNDLE.getMessage( "jsonPatch.noSuchPath")); final JsonNode ret = node.deepCopy(); final JsonNode parentNode = path.parent().get(ret); final String raw = Iterables.getLast(path).getToken().getRaw(); if (parentNode.isObject()) ((ObjectNode) parentNode).remove(raw); else ((ArrayNode) parentNode).remove(Integer.parseInt(raw)); return ret; }
final JsonNode ret = node.deepCopy(); final JsonNode parent = path.parent().get(ret); final String rawToken = Iterables.getLast(path).getToken().getRaw(); if (parent.isObject()) ((ObjectNode) parent).put(rawToken, replacement);