blob: 775e0481651e7116d6e8c5bb7c32f88c25c8d340 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.json;
/**
* TODO this is a final class in the spec, but that makes no sense.
* This class can be used to easily create {@link JsonPatch}es.
* To get an instance use {@link Json#createPatchBuilder()} or {@link Json#createPatchBuilder(JsonArray)}
* The order of the operations corresponds to the order they are builded.
* <p>
* NOTICE: A JsonPatchBuilder contains state and therefore is NOT threadsafe and should not be used concurrently.
* <p>
* The following {@link JsonPatch}
* <pre>
* "[
* {
* "op": "add",
* "path": "/add/object",
* "value": {
* "foo": "bar"
* }
* },
* {
* "op": "remove",
* "path": "/remove/it"
* },
* {
* "op": "move",
* "path": "move/to",
* "from": "move/from"
* }
* ]"
* </pre>
* can be build with the JsonPatchBuilder
* <pre>
*
* JsonPatch patch = Json.createJsonPatchBuilder()
* .add("/add/object", Json.createObjectBuilder()
* .add("foo", "bar")
* .build())
* .remove("/remove/it")
* .move("/move/to", "move/from")
* .build();
*
* </pre>
* <p>
* An instance of a JsonPatchBuilder can be reused for another {@link JsonPatch} after
* the {@link #build()}-Method was called.
*/
public interface JsonPatchBuilder {
/**
* Adds an 'add'-operation to the {@link JsonPatch}
*
* @param path as {@link JsonPointer} where the value should be added
* @param value the value to add
*
* @return the builder instance for chained method calls
*
* @throws NullPointerException if the given {@code path} is {@code null}
*/
JsonPatchBuilder add(String path, JsonValue value);
/**
* @see #add(String, JsonValue)
*/
JsonPatchBuilder add(String path, String value);
/**
* @see #add(String, JsonValue)
*/
JsonPatchBuilder add(String path, int value);
/**
* @see #add(String, JsonValue)
*/
JsonPatchBuilder add(String path, boolean value);
/**
* Adds a 'remove'-operation to the {@link JsonPatch}
*
* @param path as {@link JsonPointer} of the value which should get removed
*
* @return the builder instance for chained method calls
*
* @throws NullPointerException if the given {@code path} is {@code null}
*/
JsonPatchBuilder remove(String path);
/**
* Adds a 'replace'-operation to the {@link JsonPatch}
*
* @param path as {@link JsonPointer} to the value which should get replaced
* @param value the new value
*
* @return the builder instance for chained method calls
*
* @throws NullPointerException if the given {@code path} is {@code null}
*/
JsonPatchBuilder replace(String path, JsonValue value);
/**
* @see #replace(String, JsonValue)
*/
JsonPatchBuilder replace(String path, String value);
/**
* @see #replace(String, JsonValue)
*/
JsonPatchBuilder replace(String path, int value);
/**
* @see #replace(String, JsonValue)
*/
JsonPatchBuilder replace(String path, boolean value);
/**
* Adds a 'move'-operation to the {@link JsonPatch}
*
* @param path where the value should get inserted as {@link JsonPointer}
* @param from where the value should be taken from as {@link JsonPointer}
*
* @return the builder instance for chained method calls
*
* @throws NullPointerException if the given {@code path} is {@code null}
* if the given {@code from} is {@code null}
*/
JsonPatchBuilder move(String path, String from);
/**
* Adds a 'copy'-operation to the {@link JsonPatch}
*
* @param path where the copied value should get inserted as {@link JsonPointer}
* @param from value to copy as {@link JsonPointer}
*
* @return the builder instance for chained method calls
*
* @throws NullPointerException if the given {@code path} is {@code null}
* if the given {@code from} is {@code null}
*/
JsonPatchBuilder copy(String path, String from);
/**
* Adds a 'test'-operation to the {@link JsonPointer}
*
* @param path as {@link JsonPointer} to the value to test
* @param value value to test
* @return the builder instance for chained method calls
* @throws NullPointerException if the given {@code path} is {@code null}
*/
JsonPatchBuilder test(String path, JsonValue value);
/**
* @see #test(String, JsonValue)
*/
JsonPatchBuilder test(String path, String value);
/**
* @see #test(String, JsonValue)
*/
JsonPatchBuilder test(String path, int value);
/**
* @see #test(String, JsonValue)
*/
JsonPatchBuilder test(String path, boolean value);
JsonPatch build();
}