/** * Traverse a node and return the result * * <p>Note that this method shortcuts: it stops at the first node it cannot * traverse.</p> * * @param node the node to traverse * @return the resulting node, {@code null} if not found */ public final T get(final T node) { T ret = node; for (final TokenResolver<T> tokenResolver: tokenResolvers) { if (ret == null) break; ret = tokenResolver.get(ret); } return ret; }
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; }
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); }
/** * Traverse a node and return the result * * <p>Note that this method shortcuts: it stops at the first node it cannot * traverse.</p> * * @param node the node to traverse * @return the resulting node, {@code null} if not found */ public final T get(final T node) { T ret = node; for (final TokenResolver<T> tokenResolver: tokenResolvers) { if (ret == null) break; ret = tokenResolver.get(ret); } 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; }
/** * Calculate the next URI context from a starting reference and node * * @param startingRef the starting reference * @param ptr the JSON Pointer * @param startingNode the starting node * @return the calculated reference */ private static JsonRef nextRef(final JsonRef startingRef, final JsonPointer ptr, final JsonNode startingNode) { JsonRef ret = startingRef; JsonRef idRef; JsonNode node = startingNode; for (final TokenResolver<JsonNode> resolver: ptr) { node = resolver.get(node); if (node == null) break; idRef = idFromNode(node); if (idRef != null) ret = ret.resolve(idRef); } 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);
/** * Calculate the next URI context from a starting reference and node * * @param startingRef the starting reference * @param ptr the JSON Pointer * @param startingNode the starting node * @return the calculated reference */ private static JsonRef nextRef(final JsonRef startingRef, final JsonPointer ptr, final JsonNode startingNode) { JsonRef ret = startingRef; JsonRef idRef; JsonNode node = startingNode; for (final TokenResolver<JsonNode> resolver: ptr) { node = resolver.get(node); if (node == null) break; idRef = idFromNode(node); if (idRef != null) ret = ret.resolve(idRef); } return ret; }
/** * Calculate the next URI context from a starting reference and node * * @param startingRef the starting reference * @param ptr the JSON Pointer * @param startingNode the starting node * @return the calculated reference */ private static JsonRef nextRef(final JsonRef startingRef, final JsonPointer ptr, final JsonNode startingNode) { JsonRef ret = startingRef; JsonRef idRef; JsonNode node = startingNode; for (final TokenResolver<JsonNode> resolver: ptr) { node = resolver.get(node); if (node == null) break; idRef = idFromNode(node); if (idRef != null) ret = ret.resolve(idRef); } return ret; }